Post

웹 보안 이론 6

ModSecurity (WAF)

개념

  • 오픈소스 웹 애플리케이션 방화벽 엔진.
  • 웹 서버와 웹 애플리케이션 사이에 위치하여 악의적인 HTTP 요청을 필터링.
  • 웹 애플리케이션을 공격으로부터 보호.
  • Apache, Nginx, IIS 등 다양한 웹 서버와 호환 가능.

주요 기능

  1. HTTP 트래픽 검사
    • HTTP 요청 및 응답을 실시간 분석하여 악성 패턴 탐지.
  2. 규칙 기반 필터링
    • 사전 정의된 규칙 세트 또는 사용자 지정 규칙을 사용해 악성 요청 차단.
  3. 가상 패치
    • 애플리케이션 취약점을 수정하지 않고 ModSecurity 규칙을 통해 방어.
  4. 로깅 및 감사
    • 모든 HTTP 트래픽 및 차단된 요청에 대한 상세 로그 기록.
  5. DoS/DDoS 방어
    • 특정 IP 주소 또는 요청 패턴을 제한하여 공격 방어.
  6. 실시간 알림
    • 공격 탐지 시 이메일, SMS 등을 통한 알림 전송.

CRS(Core Rule Set) 규칙

  • 일반적인 웹 공격 방어를 위한 규칙 세트.
  • 사용자 정의 및 환경에 맞춘 수정 가능.

요청 단계 분석

  1. Phase 1: 요청 헤더 분석 (URI, User-Agent, Referer 등).
  2. Phase 2: 요청 본문 분석 (POST 데이터, 파일 업로드 등).
  3. Phase 3: 응답 헤더 분석.
  4. Phase 4: 응답 본문 분석.
  5. Phase 5: 로깅 및 감사.

ModSecurity

구성

  1. SecRuleEngine
    • ModSecurity 엔진 활성화 상태 설정:
      • On: 활성화.
      • Off: 비활성화.
      • DetectionOnly: 탐지 전용.
  2. SecRequestBodyAccess
    • 요청 본문 검사 활성화/비활성화 설정.
  3. SecRule
    • 커스텀 규칙 정의.
  4. SecAction
    • 규칙에 따른 동작 설정 (차단, 로깅, 리디렉션 등).

활용

  • 웹 애플리케이션 보호
  • 침입 탐지 및 방어
  • 보안 감사

Rule 작성

  • 변수
    1. ARGS
      • HTTP 요청의 모든 파라미터 값 검사.
      • 예: ARGS:usernameusername 파라미터만 검사.
    2. REQUEST_HEADERS
      • 요청 헤더 검사.
      • 예: REQUEST_HEADERS:User_AgentUser_Agent 헤더만 검사.
    3. REQUEST_BODY
      • 요청 본문 데이터 검사 (주로 POST 데이터).
  • 연산자
    1. @contains
      • 특정 문자열 포함 여부 검사.
      • 예: @contains <script><script> 태그 탐지.
    2. @eq
      • 특정 값과 동일 여부 검사.
      • 예: @eq 1234 → 값이 1234인지 확인.
    3. @rx
      • 정규 표현식을 사용한 패턴 검사.
      • 예: @rx \b(UNION\b) → SQL Injection 패턴 탐지.
  • 동작
    • Block: 요청 차단.
    • Allow: 요청 허용.
    • Deny: 접근 거부.
    • Redirect: 특정 URL로 리디렉션.

예시

초급 (기본 룰)
  1. /login 페이지에 대한 접근을 차단하는 룰
    • SecRule REQUEST_URI “@rx ^/login$” “phase:1,id:101,deny,msg:’access denied to /login’”
  2. User-Agent 헤더에 “BadBot” 문자열이 포함된 요청을 차단하는 룰
    • SecRule REQUEST_HEADERS:User-Agent “@contains BadBot” “phase:2,id:102,deny,msg:’BadBot deny’”
  3. password 파라미터 값에 “password” 문자열이 포함된 경우 차단하는 룰
    • ARGS:password “@contains password”
  4. id 파라미터 값에 숫자가 아닌 경우 차단하는 룰
    • ARGS:is ‘!@rx ^/d+$”
  5. REQUEST_BODY에
    • REQUEST_BODY “@rx
  6. Referer 헤더가 없는 요청이 유입되는 경우 차단하는 룰
    • REQUEST_HEADERS:Referer “@eq ‘’”
  7. filename 파라미터 값에 .php확장자가 포함된 경우 차단하는 룰
    • ARGS:filename “@rx .php$”
중급
  1. 특정 ip주소 (192.168.1.100)에서의 접근을 차단하는 룰
    • REMOTE_ADDR “^192.168.1.100$”
  2. /SECRET 경로로 시작하는 모든 url에 대한 접근을 차단하는 룰
    • REQUEST_URI “@beginwith /SECRET”
  3. 쿠키 값에 SQL인젝션 공격 패턴이 존재하는 경우 차단하는 룰
    • REQUEST_HEADERS:Cookie “@rx ‘ or 1=1 –”
  4. 특정 파일 확장자를 가진 파일 업로드를 차단하는 룰
    • FIELS_EXTENSIONS “@rx .(exebatsh)$”
  5. 특정 URL에 대한 접근을 특정 시간에만 허용하는 룰
    • SecRule REQUEST_URI “@eq /login” “phase:1,id:110,t:hour,t:between 9-18,allow,msg:”access allow’”