네트워크에서 WAF가 일반적으로 배치되는 위치를 파악하는 것은 공격자가 핑거프린팅을 시작하기 전에 매우 유용합니다.
침투 테스터는 공격 결과에 영향을 줄 수 있으므로 웹 애플리케이션 테스트 시작 전에 WAF 존재 여부를 알아야 합니다.
하지만, 그 전에 먼저 WAF가 무엇인지 알아봅시다.
WAF란 무엇일까요?
WAF(웹 애플리케이션 방화벽)는 웹사이트 보안에 있어 핵심적인 역할을 담당하며, 웹 트래픽을 필터링하고 모니터링하는 기능을 제공합니다. WAF는 주요 보안 취약점으로부터 웹 애플리케이션을 보호하는 중요한 방어 수단입니다. 많은 조직들이 인프라를 현대화하면서 WAF를 도입하고 있습니다. 그러나 윤리적 해킹 전문가들은 WAF 자체만으로는 보안 문제를 해결할 수 없다고 지적합니다. 외부 위협을 효과적으로 감지하고 차단하기 위해서는 WAF의 적절한 구성이 필수적입니다.
WAF는 기존 방화벽과는 다르게 특정 웹 애플리케이션의 콘텐츠를 필터링할 수 있습니다. 기존 방화벽은 주로 서버 간의 보안 경계 역할을 수행합니다.
HTTP 상호 작용에는 일련의 규칙이 적용됩니다. 이러한 규칙은 주로 교차 사이트 스크립팅(XSS) 및 SQL 삽입과 같은 일반적인 취약점을 해결하기 위해 설계되었습니다.
인터넷에는 웹 애플리케이션 뒤에 숨겨진 방화벽을 탐지할 수 있는 다양한 무료 오픈 소스 도구가 있습니다.
이 글에서는 WAF를 탐지하는 데 사용할 수 있는 다양한 접근 방식과 도구들을 자세히 살펴보겠습니다.
참고: 본 튜토리얼에서는 세부적인 설명을 위해 제 개인 웹사이트를 사용했습니다. 웹사이트 소유자의 사전 동의 없이 스캔이나 기타 해킹 시도를 하지 않도록 주의하시기 바랍니다.
수동 탐색 방법
텔넷(TELNET)을 이용한 감지
텔넷(Telnet)은 네트워크 관리자와 침투 테스터들이 주로 사용하는 유틸리티입니다. 텔넷을 이용하면 지정된 포트를 통해 원격 호스트에 접속할 수 있습니다.
- HTTP 매개변수는 WAF에 의해 응답 헤더에 추가되거나 변경될 수 있습니다.
- 텔넷을 사용하여 서버 정보, 쿠키 등 기본적인 핑거프린팅 정보를 수집할 수 있습니다.
- 다음과 같은 명령어를 실행합니다: `telnet targetwebsite.com 80`
[사용자@호스트]: # telnet targetwebsite.com 80 Trying 18.166.248.208... Connected to targetwebsite.com. Escape character is '^]'.
위 명령어를 실행한 후 `HEAD / HTTP / 1.1`을 입력하고 엔터 키를 누릅니다.
[사용자@호스트]: # telnet 18.166.248.208 80 Trying 18.166.248.208... Connected to 18.166.248.208. Escape character is '^]'. HEAD / HTTP/1.1 Host: 18.166.248.208 HTTP/1.1 200 OK Date: SUN, 10 Oct 2021 05:08:03 IST Server: Apache X-Powered-By: PHP/5.3.5 ZendServer/5.0 Set-Cookie: SESSIONID VULN SITE=t25put8gliicvqf62u3ctgjm21; path=/ Expires: Thu, 19 Nov 1981 08:52:00 IST Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache X-Varnish: 4723782781 Age: 0 Via: 1.1 varnish Connection: close Content-Type: text/html Connection closed by foreign host.
위 결과는 웹사이트가 호스팅되는 서버와 대상 포트 80에서 텔넷을 사용했을 때 반환된 백엔드 언어를 보여줍니다.
일부 WAF 시스템은 헤더 수정을 허용하여 웹 서버가 표준과 다른 HTTP 응답을 보내도록 할 수 있습니다.
위의 예에서 웹 서버는 요청에 응답하면서 방화벽/에지 게이트웨이가 Varnish라는 것을 드러냈습니다.
자동 탐색 방법
#1. Nmap을 사용한 감지
Nmap은 WAF를 식별할 수 있는 스크립트를 제공하며, 이 스크립트를 사용하여 WAF 탐지를 수행할 수 있습니다.
- Nmap은 많은 침투 테스터와 네트워크 관리자들이 널리 사용하는 보안 평가 도구입니다.
- Nmap은 대상 시스템에 대한 정보를 수집하는 데 사용됩니다.
- 이전과 동일한 웹페이지에 대해 스크립트를 실행해 보겠습니다.
- 다음 명령어를 실행합니다: `nmap –script=http-waf-fingerprint targetweb.com`
[사용자@호스트]:# nmap --script=http-waf-fingerprint targetwebsite.com Starting Nmap 7.90 (https://nmap.org) at 2021-10-10 07:58 IST Nmap scan report for targetsite.com (18.166.248.208) Host is up (0.24s latency). Not shown: 982filtered ports PORT STATE SERVICE 53/tcp open domain 80/tcp open http | http-waf-fingerprint: | Detected WAF | Citrix Netscaler 443/tcp open https 5432/tcp closed postgresql 8080/tcp closed http-proxy Nmap done: 1 IP address (1 host up) scanned in 25.46 seconds
위의 Nmap 명령어를 실행한 결과, Citrix Netscaler 방화벽이 감지되었습니다.
#2. WhatWaf를 사용한 감지
WhatWaf는 웹 애플리케이션의 핑거프린팅을 수행하고 WAF의 존재 여부를 감지하는 데 사용되는 보안 도구입니다. 이 도구는 보안 평가 과정에서 웹 애플리케이션이 WAF에 의해 보호되고 있는지 확인하는 데 유용합니다.
이 정보를 통해 침투 테스터는 우회 및 회피 전략을 사용하여 온라인 애플리케이션에 대한 추가 테스트나 공격을 수행할 수 있습니다.
WhatWaf는 방화벽 우회, 애플리케이션 감지, 애플리케이션 핑거프린팅 및 소프트웨어 식별과 같은 기능을 제공합니다. 네트워크 침투 테스터와 보안 전문가가 주로 사용하는 도구입니다.
WhatWaf 설치 방법
Kali Linux에 설치하는 방법은 다음과 같습니다.
sudo apt install python3-pip git clone https://github.com/ekultek/whatwaf cd whatwaf sudo pip3 install -r requirements.txt
실행 시 Python 버전을 지정하지 않고 실행 파일을 직접 실행할 수 있습니다.
./whatwaf --help
하지만 Python 2 종속성이 설치되어 있지 않으므로, Python 버전을 명시적으로 지정하는 것이 좋습니다.
python3 ./whatwaf --help
WhatWaf 사용 방법
WhatWaf 방화벽 탐지 도구는 사용하기 매우 쉽습니다. 다음 명령어를 실행하기만 하면 됩니다.
./whatwaf -u https://www.targetsite.com
아래 결과에서 볼 수 있듯이, WhatWaf는 제공된 웹사이트 URL에 대한 방화벽을 성공적으로 감지했습니다.
알림! 이 스캔에는 제 개인 웹사이트를 사용했습니다.
┌──(root💀kali)-[/home/writer/WhatWaf]
└─# ./whatwaf -u https://www.renjith.org
,------.
' .--. '
,--. .--. ,--. .--.| | | |
| | | | | | | |'--' | |
| | | | | | | | __. |
| |.'.| | | |.'.| | | .'
| | | | |___|
| ,'. |hat| ,'. |af .---.
'--' '--' '--' '--' '---'
<script>alert("WhatWaf?<|>v2.0.3($dev)");</script>%00
[11:12:34][ERROR] you must install psutil first `pip install psutil` to start mining XMR
[11:12:34][INFO] checking for updates
[11:12:34][WARN] it is highly advised to use a proxy when using WhatWaf. do so by passing the proxy flag (IE `--proxy http://127.0.0.1:9050`) or by passing the Tor flag (IE `--tor`)
[11:12:34][INFO] using User-Agent 'whatwaf/2.0.3 (Language=2.7.18; Platform=Linux)'
[11:12:34][INFO] using default payloads
[11:12:34][INFO] testing connection to target URL before starting attack
[11:12:35][SUCCESS] connection succeeded, continuing
[11:12:35][INFO] running single web application 'https://www.renjith.org'
[11:12:35][WARN] URL does not appear to have a query (parameter), this may interfere with the detection results
[11:12:35][INFO] request type: GET
[11:12:35][INFO] gathering HTTP responses
[11:12:42][INFO] gathering normal response to compare against
[11:12:42][INFO] loading firewall detection scripts
[11:12:42][INFO] running firewall detection checks
[11:12:44][FIREWALL] detected website protection identified as 'Apache Generic'
[11:12:44][INFO] starting bypass analysis
[11:12:44][INFO] loading payload tampering scripts
[11:12:45][INFO] running tampering bypass checks
[11:19:09][SUCCESS] apparent working tampers for target:
------------------------------
(#1) description: tamper payload by changing characters into a wildcard
example: '/bin/cat /et?/?asswd'
load path: content.tampers.randomwildcard
------------------------------
위의 결과에서 보듯이, 웹 서버는 요청에 응답하여 방화벽이 Apache임을 알려주었습니다. Tor 서비스를 사용하여 WAF를 스캔할 수도 있지만, 이 경우 지연 시간이 증가할 수 있습니다.
./whatwaf -u https://www.targetsite.com --tor
WhatWaf 도구의 주요 장점은 탐지된 방화벽을 우회하기 위한 페이로드를 자동으로 제공하려고 시도한다는 점입니다.
#3. Wafw00f를 사용한 감지
웹 애플리케이션 방화벽을 탐지하는 데 널리 사용되는 도구 중 하나는 Wafw00f입니다. Wafw00f는 HTTP 요청을 웹 애플리케이션 방화벽으로 전송하여 해당 방화벽을 식별합니다. HTTP 요청 전송에 실패하면 Wafw00f는 악의적인 HTTP 요청을 보냅니다. 악의적인 HTTP 요청이 실패하는 경우, Wafw00f는 이전 HTTP 요청을 검사하고 간단한 알고리즘을 사용하여 WAF가 공격에 어떻게 반응하는지를 확인합니다.
Wafw00f는 Kali Linux 배포판에 기본적으로 설치되어 있지 않습니다.
Wafw00f 설치 방법
zip 패키지는 공식 GitHub 소스에서 다운로드할 수 있습니다.
Wafw00f 도구를 다운로드합니다. git 클라이언트를 사용하여 저장소를 복제할 수도 있습니다. 패키지를 가져오려면 다음 명령어를 실행합니다.
$ git clone https://github.com/EnableSecurity/wafw00f.git
시스템에 wafw00f 도구를 다운로드하려면, wafw00f 폴더 또는 디렉터리로 이동하여 다음 명령어를 실행합니다.
$ python setup.py install
설정 파일이 처리되고 시스템에 wafw00f가 설치됩니다.
Wafw00f 사용 방법
이 도구를 사용하려면 다음 명령어를 실행합니다.
$ wafw00f <url>
알림: 테스트가 허용된 웹사이트만 스캔하십시오.
┌──(root💀kali)-[/home/writer/wafw00f]
└─# wafw00f https://webhashes.com
______
/
( Woof! )
____/ )
,, ) (_
.-. - _______ ( |__|
()``; |==|_______) .)|__|
/ (' /| ( |__|
( / ) / | . |__|
(_)_)) / | |__|
~ WAFW00F : v2.1.0 ~
The Web Application Firewall Fingerprinting Toolkit
[*] Checking https://whatismyip.com
[+] The site https://whatismyip.com is behind Cloudflare (Cloudflare Inc.) WAF.
[~] Number of requests : 2
방화벽이 감지되었습니다!
이번에는 다른 웹사이트를 테스트해 보겠습니다.
┌──(root💀kali)-[/home/writer/wafw00f]
└─# wafw00f https://renjith.org
______
/
( Woof! )
____/ )
,, ) (_
.-. - _______ ( |__|
()``; |==|_______) .)|__|
/ (' /| ( |__|
( / ) / | . |__|
(_)_)) / | |__|
~ WAFW00F : v2.1.0 ~
The Web Application Firewall Fingerprinting Toolkit
[*] Checking https://renjith.org
[+] Generic Detection results:
[-] No WAF detected by the generic detection
[~] Number of requests: 7
이번에는 방화벽이 감지되지 않았습니다.
자세한 정보가 필요하면 verbose 모드로 실행해 보세요.
wafw00f <url> -v
다음 명령어를 실행하면 Wafw00f의 다양한 기능을 확인할 수 있습니다.
wafw00f <url> --help
마무리
이 글에서는 웹 애플리케이션 방화벽을 탐지하기 위한 다양한 전략과 도구들을 살펴보았습니다. 이는 모든 웹 애플리케이션 침투 테스트에서 정보 수집 단계에서 반드시 수행해야 하는 중요한 활동입니다.
WAF가 존재한다는 사실을 알게 되면, 침투 테스터는 다양한 접근 방식을 시도하여 방어를 우회하고 온라인 애플리케이션의 취약점을 악용할 수 있습니다.
윤리적 해킹 연구자들에 따르면, 웹 애플리케이션 방화벽(WAF)의 필요성은 점점 더 커지고 있습니다. 백엔드 웹 애플리케이션 서버에서 발생하는 새로운 공격을 탐지하기 위해서는 웹 애플리케이션 로그 분석이 필수적입니다. 이를 통해 웹 애플리케이션 방화벽의 규칙을 사용자 정의하여 최고 수준의 보안을 제공할 수 있습니다.
또한, Nikto 스캐너를 사용한 취약점 분석에 대한 추가 정보도 참고하시기 바랍니다.