본문 바로가기
보안

WAF

by Mostlove 2025. 6. 27.
728x90
반응형

WAF(Web Application Firewall, 웹 애플리케이션 방화벽)은 💡 웹 애플리케이션을 대상으로 한 공격을 탐지하고 차단하는 보안 장비 또는 소프트웨어입니다.


✅ 핵심 개념 요약

항목 설명
🎯 목적 웹 애플리케이션 공격 차단 (예: SQL Injection, XSS 등)
🔍 작동 방식 HTTP/HTTPS 트래픽을 검사하여 악의적인 요청 탐지
🛡️ 보호 대상 웹 서버, 웹 애플리케이션
📦 구성 형태 하드웨어, 소프트웨어, 클라우드 형태로 제공

📌 주요 기능

  1. OWASP Top 10 공격 차단
    (SQL Injection, XSS, CSRF 등 웹 취약점 대응)
  2. 정책 기반 필터링
    • 요청 헤더, URI, 본문 등에 대해 정밀 필터링 설정 가능
  3. 로그/모니터링 기능
    • 공격 탐지, 차단 로그 기록 및 시각화 기능 제공
  4. 보안 룰셋 적용 (ex. ModSecurity + OWASP CRS)
    • 룰셋을 통해 자동 탐지 및 대응

🛠️ 예시

  • ModSecurity + Apache/Nginx: 오픈소스 기반 웹 방화벽 설정 가능
  • 클라우드 WAF: AWS WAF, Cloudflare WAF, Azure WAF 등

📣 참고

  • 일반 방화벽(Firewall)은 IP, 포트 기반 필터링
  • WAF는 HTTP/S 계층의 콘텐츠 기반 필터링
    → 웹 서버 앞단에 위치하여 웹 공격 방어 전문화됨

WAF 환경설정

  • 아파치 설치

  • OWASP Core Rule Set 적용

  • ModSecurity

  • Apache 재시작

  • SecRuleEngine On

  • /etc/apache2/mods-enabled/security2.conf 내용추가

SQLinjection

SQLinjection 차단된 것을 확인

LFI

LFI 차단

XSS 해제 룰 추가

XSS 해제룰 추가된 모습

해제 완료

우회 차단

🧪 1번 시도: 일반적인 XSS 공격 (기본형)
curl 'http://localhost/?search=%3C!--%3Cscript%3E--%3Ealert(1)'

✅ 분석:
%3C = <, %3E = >, <!-- -->는 HTML 주석
실질적으로는 <script>alert(1)</script> 형태로 작동
기본적인 XSS 패턴
ModSecurity 또는 OWASP CRS에서 signature 기반 탐지로 차단됨

🔒 결과:
403 Forbidden → 기본 룰셋 정상 탐지
🧪 2번 시도: 대소문자 변형 (케이스 우회 기법)
curl "http://localhost/?search=%3CScRiPt%20%3Ealert(1)%3C/ScRiPt%20%3E"

✅ 분석:
<ScRiPt> → 대소문자 혼합으로 필터 우회 시도
%20은 공백 문자로 <script > 구조 만듦
OWASP CRS는 t:lowercase 등 변환 필터(transformation)를 적용하므로 탐지 가능

🔒 결과:
403 Forbidden → 케이스 우회도 탐지됨

🧪 3번 시도: 이중 URL 인코딩 (Double Encoding 기법)
curl "http://localhost/?search=%253Cscript%253Ealert(1)%253C%252Fscript%253E"

분석:
%25 = %, 즉 %253C → 실제로는 %3C → <가 되도록 의도
웹 애플리케이션이 URL 디코딩을 두 번 수행할 경우 <script>가 생성됨
이는 흔한 우회 기법 중 하나
CRS에서는 t:normalizePath, t:urlDecode, t:urlDecodeUni 등의 필터로 방어

🔒 결과:
403 Forbidden → 이중 인코딩도 탐지됨

User-Agent에 악성 스크립트

user-Agent에 악성스크립스 삽입 및 차단된 모습

✅ 1번째 시도: 일반 User-Agent에 스크립트 삽입
curl -H "User-Agent: <script>alert(1)</script>" http://localhost/
공격 벡터: <script>alert(1)</script>
→ 자바스크립트 실행을 유도하는 전형적인 XSS 페이로드
위치: User-Agent HTTP 헤더에 삽입
탐지 방식: OWASP CRS는 ARGS, HEADERS, REQUEST_HEADERS, REQUEST_LINE 등 다양한 입력 위치에 대해 필터링함

🧠 추가 정보:
CRS에서 헤더 검사용 룰이 활성화되어 있다면 REQUEST_HEADERS:User-Agent 필드에 대한 XSS 탐지 규칙이 작동
탐지 시 403 Forbidden 또는 Audit Log 기록

✅ 2번째 시도: URL 인코딩된 XSS (우회 시도)
curl -H "User-Agent: %3Cscript%3Ealert(1)%3C%2Fscript%3E" http://localhost/
공격 벡터: <script>alert(1)</script>의 URL 인코딩 버전
→ %3C = <, %3E = >, %2F = /
우회 목적: 일부 필터가 URL 디코딩을 수행하지 않는 경우를 노림
ModSecurity 대응: t:urlDecodeUni, t:urlDecode 필터를 통해 디코딩 후 탐지 가능

룰추가 

해제 완료

커스텀 차단

룰추가

차단 완료

 

반응형