Awesome WAF 
웹 애플리케이션 방화벽(WAF)에 대한 모든 것을 보안 관점에서 다룹니다. 🔥
서문: 이것은 원래 WAF에 대한 개인 컬렉션이었습니다. 이제 펜테스터와 연구자들에게 유용할 수 있기를 바라며 오픈소스로 공개합니다. 흔히 말하듯, "커뮤니티는 서로 배웁니다."

간결한 정의: 방화벽은 웹 애플리케이션과 클라이언트 엔드포인트 사이에 위치한 보안 정책 시행 지점입니다. 이 기능은 소프트웨어나 하드웨어로 구현될 수 있으며, 어플라이언스 장치나 일반 운영 체제를 실행하는 일반 서버에서 실행될 수 있습니다. 독립형 장치이거나 다른 네트워크 구성 요소에 통합될 수 있습니다. (출처: PCI DSS IS 6.6)
웹 애플리케이션 방화벽은 사용자와 웹앱 사이에 위치하며, 악의적인 활동이 웹앱에 도달하는 것을 방지하는 역할을 합니다. WAF는 요청의 악의적인 부분을 필터링하거나 단순히 차단합니다.
기여해 주세요.
목차:
소개:
WAF 작동 방식:
- 규칙 집합을 사용하여 정상 요청과 악성 요청을 구분합니다.
- 때로는 학습 모드를 사용하여 사용자 행동을 학습함으로써 자동으로 규칙을 추가합니다.
작동 모드:
- 부정 모델(블랙리스트 기반) - 블랙리스트 모델은 미리 설정된 시그니처를 사용하여 명백히 악성인 요청을 차단합니다. 부정 모델로 작동하는 WAF의 시그니처는 특정 웹 애플리케이션 취약점을 악용하는 공격을 방지하기 위해 특별히 제작됩니다. 블랙리스트 모델 웹 애플리케이션 방화벽은 공용 인터넷에 노출된 웹 애플리케이션에 적합하며, 주요 취약점에 대해 매우 효과적입니다. 예: 모든
<script>*</script> 입력을 차단하는 규칙은 기본적인 크로스 사이트 스크립팅 공격을 방지합니다.
- 긍정 모델(화이트리스트 기반) - 화이트리스트 모델은 특별히 구성된 기준에 따라서만 웹 트래픽을 허용합니다. 예를 들어, 특정 IP 주소의 HTTP GET 요청만 허용하도록 구성할 수 있습니다. 이 모델은 잠재적인 대규모 공격을 차단하는 데 매우 효과적일 수 있지만, 합법적인 트래픽도 많이 차단합니다. 화이트리스트 모델 방화벽은 직원과 같은 제한된 사용자 그룹만 사용하도록 설계된 내부 네트워크의 웹 애플리케이션에 가장 적합할 수 있습니다.
- 혼합/하이브리드 모델(포괄적 모델) - 하이브리드 보안 모델은 화이트리스트와 블랙리스트를 모두 결합합니다. 다양한 구성 사양에 따라 하이브리드 방화벽은 내부 네트워크의 웹 애플리케이션과 공용 인터넷의 웹 애플리케이션 모두에 가장 적합한 선택이 될 수 있습니다. 좋은 시나리오는 웹 애플리케이션이 공용 인터넷에 노출되어 있는 경우(블랙리스트 사용) 관리자 패널은 일부 사용자만 접근해야 하는 경우(화이트리스트 사용)입니다.
테스트 방법론:
찾아볼 곳:
- WAF가 노출되는 일반적인 포트, 즉
80, 443, 8000, 8080, 8888 포트를 항상 확인하세요. 그러나 WAF는 HTTP 서비스가 실행되는 모든 포트에 쉽게 배포될 수 있다는 점을 유의해야 합니다. 먼저 HTTP 서비스 포트를 열거한 후 WAF를 찾는 것이 좋습니다.
- 일부 WAF는 요청에 자체 쿠키를 설정합니다(예: Citrix Netscaler, Yunsuo WAF).
- 일부는 별도의 헤더와 연결됩니다(예: Anquanbao WAF, Amazon AWS WAF).
- 일부는 헤더를 변조하고 문자를 뒤섞어 공격자를 혼란스럽게 합니다(예: Netscaler, Big-IP).
- 일부는
Server 헤더에 자신을 노출합니다(예: Approach, WTS WAF).
- 일부 WAF는 응답 콘텐츠에 자신을 노출합니다(예: DotDefender, Armor, Sitelock).
- 다른 WAF는 악성 요청에 대해 비정상적인 응답 코드로 응답합니다(예: WebKnight, 360 WAF).
탐지 기술:
WAF를 식별하려면 (모의로) 자극해야 합니다.
- 브라우저에서 정상 GET 요청을 보내고, 가로채어 응답 헤더(특히 쿠키)를 기록합니다.
- 명령줄(예: cURL)에서 요청을 보내고, 응답 콘텐츠와 헤더를 테스트합니다(사용자 에이전트 미포함).
- 임의의 열린 포트에 GET 요청을 보내고 WAF의 정체를 드러낼 수 있는 배너를 획득합니다.
- 로그인 페이지에서
" or 1 = 1 --과 같은 일반적인 (쉽게 탐지되는) 페이로드를 주입합니다.
- 검색창, 문의 양식 및 기타 입력 필드에
<script>alert()</script>와 같은 시끄러운 페이로드를 주입합니다.
- URL 끝에 있는 임의의 매개변수에 더미
../../../etc/passwd를 첨부합니다.
- URL 끝에 있는 임의의 매개변수에
' OR SLEEP(5) OR '와 같은 눈에 띄는 키워드를 추가합니다.
HTTP/0.9와 같은 구식 프로토콜로 GET 요청을 보냅니다(HTTP/0.9는 POST 유형 쿼리를 지원하지 않습니다).
- 종종 WAF는 다양한 유형의 상호작용에 따라
Server 헤더를 변경합니다.
- 드롭 액션 기술 - 서버에 원시 조작된 FIN/RST 패킷을 보내고 응답을 식별합니다.
팁: 이 방법은 HPing3 또는 Scapy와 같은 도구를 사용하여 쉽게 달성할 수 있습니다.
- 부채널 공격 - 요청 및 응답 콘텐츠의 타이밍 동작을 검사합니다.
팁: 자세한 내용은 여기 블로그 게시물에서 확인할 수 있습니다.