WAF(Web Application Firewall, 웹 애플리케이션 방화벽)은 💡 웹 애플리케이션을 대상으로 한 공격을 탐지하고 차단하는 보안 장비 또는 소프트웨어입니다.
✅ 핵심 개념 요약
항목 | 설명 |
🎯 목적 | 웹 애플리케이션 공격 차단 (예: SQL Injection, XSS 등) |
🔍 작동 방식 | HTTP/HTTPS 트래픽을 검사하여 악의적인 요청 탐지 |
🛡️ 보호 대상 | 웹 서버, 웹 애플리케이션 |
📦 구성 형태 | 하드웨어, 소프트웨어, 클라우드 형태로 제공 |
📌 주요 기능
- OWASP Top 10 공격 차단
(SQL Injection, XSS, CSRF 등 웹 취약점 대응) - 정책 기반 필터링
- 요청 헤더, URI, 본문 등에 대해 정밀 필터링 설정 가능
- 로그/모니터링 기능
- 공격 탐지, 차단 로그 기록 및 시각화 기능 제공
- 보안 룰셋 적용 (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 필터를 통해 디코딩 후 탐지 가능
룰추가
해제 완료
커스텀 차단
룰추가
차단 완료