푸르미르

[ModSecurity]1장 애플리케이션 요새화 본문

SECURITY/VaccineServerSecurity

[ModSecurity]1장 애플리케이션 요새화

((•_•)) 2021. 2. 19. 20:04

1장 애플리케이션 요새화

 프로덕션 환경의 네트워크 전쟁터에서 웹애플리케이션을 준비하는 절차에 대한 내용이다.

2가지 절차만 소개하겠다.

 

실시간 애플리케이션 프로파일링

ModSecurity를 사용하여 루아API를 이용해 HTTP트랜잭션을 분석하는 방법

입력값 검증 화이트리스트 또는 보안 모델을 동적으로 생성하는 방법

이 보안 모델을 생성 후 외부의 보안 계층을 통해 애플리케이션의 중요한 요소에 대한 규칙을 적용하고 정첵을 위반하는 비정상적인 요청을 식별할 수 있게 한다.

 

영구 저장소를 생성하여 ModSecurity의 트랜잭션 후킹을 수행한다.

 

예시

클라이언트가 블로그에 댓글을 달 수 있는 워드프레스 애플리케이션

사용자가 댓글을 쓰고 Submit Comment 버튼을 클릭하면 웹 어플리케이션이 받은 http요청에서 중요한 것만 살펴보자.

 

이 http요청은 방식이 post이며 여섯개의 매개변수를 확인할 수 있다.

author은 댓글을 남긴 사람의 이름이며 사용자별로 다른 값을 가져야 한다.

email은 이메일 주소이며, url은 댓글을 남긴 사람과 관련된 웹사이트 주소이다.

comment는 사용자가 남긴 실제 댓글을 포함하는 텍스트 묶음이며, submit은 정적인 페이로드로 모든 사용자가 같아야한다. comment_post_ID는 고유한 값을 가진 숫자 필드이며 댓글별로 고유해야한다.

 

이와 같은 요청은 루아 스크립트가 요청의 특성을 프로파일링해 해당 정보를 자원 영구 수집 파일에 저장하도록 한다. 트랜잭션 수가 신뢰 카운터 임계값에 도달하게 되면 스크립트는 실행 변수를 추가한다. 그 결과 루아 스크립트는 해당 특정 자원에 대해 프로파일링을 중지하게 되고 이후의 인바운드 요청에 대해 다양한 집행검사를 한다. 

 

 

암호화 해시 토큰을 이용해 데이터 조작 방지

데이터 조작 공격을 방지하기 위해 ModSecurity를 이용한다.

먼저 기본적인 해시 방어를 구현하기 위한 몇개의 예시 ModSecurity 지시자를 알아보자.

 

 

SecDisableBackendCompression: 리버스 프락시 설정일 경우에만 필요. 웹어플리케이션이 응답 데이터를 gzip포맷으로 압축할 경우만 사용되며 우리가 응답 html 데이터를 파싱하고 수정하는 데 필요하다.

SecContentInjection, SecStreamOutBodyInspection: 이 두개의 지시자들은 동시에 사용되며 원래의 버퍼링된 응답 본문이 수정되고 새롭게 교체될 수 있게 한다.

SecEncryptionEngine...: SecEncryption지시자들의 기본적인 설정을 구성.

SecRule: 해시 토큰의 유효성을 검증하고 규칙을 집행.

 

1. 해시 토큰 불일치

공격자가 매개변수 데이터를 변경하려고 시도하면 ModSecurity는 경고를 발생시킨다.

예를 들어 공격자가 SQL injection공격 테스트하기 위해 홑따옴표을 추가한다면 경고가 발생한다.

 

경고

2. 해시 토큰 누락

공격자가 단순히 rv_token을 제거한다면 경고를 발생시킨다. 

 

경고2

 

 

 

 

 

[출처]ModSecurity를 활용한 웹 애플리케이션 방어www.yes24.com/Product/Goods/33350329