웹 보안 이론 6
ModSecurity (WAF)
개념
- 오픈소스 웹 애플리케이션 방화벽 엔진.
- 웹 서버와 웹 애플리케이션 사이에 위치하여 악의적인 HTTP 요청을 필터링.
- 웹 애플리케이션을 공격으로부터 보호.
- Apache, Nginx, IIS 등 다양한 웹 서버와 호환 가능.
주요 기능
- HTTP 트래픽 검사
- HTTP 요청 및 응답을 실시간 분석하여 악성 패턴 탐지.
- 규칙 기반 필터링
- 사전 정의된 규칙 세트 또는 사용자 지정 규칙을 사용해 악성 요청 차단.
- 가상 패치
- 애플리케이션 취약점을 수정하지 않고 ModSecurity 규칙을 통해 방어.
- 로깅 및 감사
- 모든 HTTP 트래픽 및 차단된 요청에 대한 상세 로그 기록.
- DoS/DDoS 방어
- 특정 IP 주소 또는 요청 패턴을 제한하여 공격 방어.
- 실시간 알림
- 공격 탐지 시 이메일, SMS 등을 통한 알림 전송.
CRS(Core Rule Set) 규칙
- 일반적인 웹 공격 방어를 위한 규칙 세트.
- 사용자 정의 및 환경에 맞춘 수정 가능.
요청 단계 분석
- Phase 1: 요청 헤더 분석 (URI, User-Agent, Referer 등).
- Phase 2: 요청 본문 분석 (POST 데이터, 파일 업로드 등).
- Phase 3: 응답 헤더 분석.
- Phase 4: 응답 본문 분석.
- Phase 5: 로깅 및 감사.
ModSecurity
구성
- SecRuleEngine
- ModSecurity 엔진 활성화 상태 설정:
On
: 활성화.Off
: 비활성화.DetectionOnly
: 탐지 전용.
- ModSecurity 엔진 활성화 상태 설정:
- SecRequestBodyAccess
- 요청 본문 검사 활성화/비활성화 설정.
- SecRule
- 커스텀 규칙 정의.
- SecAction
- 규칙에 따른 동작 설정 (차단, 로깅, 리디렉션 등).
활용
- 웹 애플리케이션 보호
- 침입 탐지 및 방어
- 보안 감사
Rule 작성
- 변수
- ARGS
- HTTP 요청의 모든 파라미터 값 검사.
- 예:
ARGS:username
→username
파라미터만 검사.
- REQUEST_HEADERS
- 요청 헤더 검사.
- 예:
REQUEST_HEADERS:User_Agent
→User_Agent
헤더만 검사.
- REQUEST_BODY
- 요청 본문 데이터 검사 (주로 POST 데이터).
- ARGS
- 연산자
- @contains
- 특정 문자열 포함 여부 검사.
- 예:
@contains <script>
→<script>
태그 탐지.
- @eq
- 특정 값과 동일 여부 검사.
- 예:
@eq 1234
→ 값이 1234인지 확인.
- @rx
- 정규 표현식을 사용한 패턴 검사.
- 예:
@rx \b(UNION\b)
→ SQL Injection 패턴 탐지.
- @contains
- 동작
- Block: 요청 차단.
- Allow: 요청 허용.
- Deny: 접근 거부.
- Redirect: 특정 URL로 리디렉션.
예시
초급 (기본 룰)
- /login 페이지에 대한 접근을 차단하는 룰
- SecRule REQUEST_URI “@rx ^/login$” “phase:1,id:101,deny,msg:’access denied to /login’”
- User-Agent 헤더에 “BadBot” 문자열이 포함된 요청을 차단하는 룰
- SecRule REQUEST_HEADERS:User-Agent “@contains BadBot” “phase:2,id:102,deny,msg:’BadBot deny’”
- password 파라미터 값에 “password” 문자열이 포함된 경우 차단하는 룰
- ARGS:password “@contains password”
- id 파라미터 값에 숫자가 아닌 경우 차단하는 룰
- ARGS:is ‘!@rx ^/d+$”
- REQUEST_BODY에
- REQUEST_BODY “@rx
- Referer 헤더가 없는 요청이 유입되는 경우 차단하는 룰
- REQUEST_HEADERS:Referer “@eq ‘’”
- filename 파라미터 값에 .php확장자가 포함된 경우 차단하는 룰
- ARGS:filename “@rx .php$”
중급
- 특정 ip주소 (192.168.1.100)에서의 접근을 차단하는 룰
- REMOTE_ADDR “^192.168.1.100$”
- /SECRET 경로로 시작하는 모든 url에 대한 접근을 차단하는 룰
- REQUEST_URI “@beginwith /SECRET”
- 쿠키 값에 SQL인젝션 공격 패턴이 존재하는 경우 차단하는 룰
- REQUEST_HEADERS:Cookie “@rx ‘ or 1=1 –”
- 특정 파일 확장자를 가진 파일 업로드를 차단하는 룰
FIELS_EXTENSIONS “@rx .(exe bat sh)$”
- 특정 URL에 대한 접근을 특정 시간에만 허용하는 룰
- SecRule REQUEST_URI “@eq /login” “phase:1,id:110,t:hour,t:between 9-18,allow,msg:”access allow’”