
CloudWatch, S3 및 샘플링 API에서 AWS WAF v2 로그를 탐색하고 재생하기 위한 터미널 UI로, YAML 필터링, 인증 탐지, curl/브라우저 재생 기능을 제공합니다.
대화형 TUI를 갖춘 AWS WAF v2 로그 브라우저 및 리플레이어. CloudWatch, S3, WAF 샘플링 API(SQLite 캐싱 포함)에서 로그를 가져와 인증 감지 및 YAML 기반 필터링 기능을 갖춘 분할 창 터미널 UI에 표시하고, 헤더/쿠키/본문을 완전한 충실도로 유지하여 Firefox, Chrome 또는 curl을 통해 요청을 리플레이합니다. curl, JSON, HAR로의 일괄 내보내기를 지원합니다.
uv pip install waf-fu
pipx install waf-fu
uv pip install git+https://gitrdun.trustedsec.net/cloud/aws/waf-fu.git
pipx install git+https://gitrdun.trustedsec.net/cloud/aws/waf-fu.git
git clone https://gitrdun.trustedsec.net/cloud/aws/waf-fu.git
cd waf-fu
uv pip install .
pipx install .
포함된 uv.toml은 uv pip가 가상 환경을 생성하는 대신 시스템 Python에 설치하도록 구성합니다. pipx와 uv tool install은 항상 자체 격리된 환경을 사용합니다.
Python >= 3.12
AWS 자격 증명은 프로필, 환경 변수 또는 인스턴스 역할을 통해 구성됩니다. 소스별 요구 사항은 IAM 권한을 참조하세요.
| 패키지 | 최소 버전 | 필요한 용도 |
|---|---|---|
| boto3 | any | AWS 로그 가져오기 |
| selenium | 4.26 | Chrome 및 Firefox 리플레이 |
| trio | any | Chrome CDP 리플레이 내부 |
boto3와 selenium은 pyproject.toml에 선언되어 있으며 자동으로 설치됩니다. trio는 Chrome 백엔드의 전이적 의존성입니다.
브라우저 리플레이는 선택 사항입니다. Curl 리플레이는 추가 의존성 없이 작동합니다.
Firefox (헤더 충실도에 권장):
| 구성 요소 | 최소 버전 | 설치 |
|---|---|---|
| Firefox | 120 | sudo dnf install firefox / sudo apt install firefox |
| geckodriver | 0.35.0 | sudo dnf install geckodriver / sudo apt install firefox-geckodriver 또는 github.com/mozilla/geckodriver/releases (>= 0.35.0) |
| selenium | 4.26 | uv pip install 'selenium>=4.26' |
Firefox 리플레이는 WebDriver BiDi 네트워크 가로채기를 사용하여 원본 요청의 메서드, 헤더, 쿠키 및 본문을 주입합니다. BiDi 네트워크 지원에는 geckodriver >= 0.35 및 selenium >= 4.26이 필요합니다. 이전 버전은 사용자 정의 헤더를 주입할 수 없는 XHR 기반 접근 방식으로 대체됩니다.
Chrome / Chromium:
| 구성 요소 | 최소 버전 | 설치 |
|---|---|---|
| Chrome | 118 | sudo dnf install google-chrome-stable / sudo apt install google-chrome-stable 또는 Chromium |
| chromedriver | 118 | sudo dnf install chromedriver / sudo apt install chromium-driver 또는 googlechromelabs.github.io/chrome-for-testing |
| selenium | 4.26 | uv pip install 'selenium>=4.26' |
Chrome 리플레이는 CDP(Chrome DevTools Protocol) Fetch 도메인을 사용하여 요청을 가로채고 수정합니다. 메서드, 헤더, 본문 및 쿠키는 모두 CDP를 통해 주입됩니다.
자동 감지가 올바른 바이너리를 찾지 못하는 경우 --chromedriver PATH 및 --geckodriver PATH로 드라이버 경로를 재정의할 수 있습니다.
# 대화형 TUI -- 탐색 및 리플레이
waf-fu --log-group "aws-waf-logs-my-acl"
# 로그 그룹 없음 -- 검색된 그룹에서 대화형으로 선택
waf-fu --profile myprofile --region us-east-1
# CloudWatch 대신 S3 WAF 로그
waf-fu --s3-bucket aws-waf-logs-my-bucket
# 모든 리전의 모든 로그 소스를 검색하고 가져오기
waf-fu --inventory
# TUI가 열리기 전에 사전 필터링
waf-fu --start 4h --action BLOCK
# 오프라인 모드 -- 캐시된 레코드만, AWS 호출 없음
waf-fu --db-only
# 프록시를 통한 리플레이 (Burp, mitmproxy 등)
waf-fu --log-group "aws-waf-logs-my-acl" --proxy 127.0.0.1:8080
# 비대화형 일괄 내보내기
waf-fu --log-group "aws-waf-logs-my-acl" --mode batch-curl -o replay.sh
# 캐시된 레코드를 JSON으로 내보내기
waf-fu --export logs.json
# 디버그 모드 -- 리플레이 세부 정보를 파일에 기록 (클라이언트 데이터 삭제됨)
waf-fu --log-group "aws-waf-logs-my-acl" --debug
waf-fu는 세 가지 소스에서 WAF 로그를 가져와 요청별로 병합합니다:
| 소스 | CLI 플래그 | 데이터 |
|---|---|---|
| CloudWatch | --log-group (기본값) | 전체 WAF 로그 JSON (헤더, URI, 쿼리, 작업) |
| S3 | --s3-bucket | CloudWatch와 동일, S3 전송에서 |
| WAF API | --log-location waf | 삭제되지 않은 필드가 있는 샘플링된 요청 |
--log-location cwl|s3|waf를 사용하여 단일 소스로 제한하거나, --inventory를 사용하여 모든 리전의 모든 소스를 자동으로 검색하고 가져옵니다.
다른 소스의 레코드는 상관 키로 병합되어 요청당 단일 통합 뷰를 볼 수 있으며, 각 소스에서 가장 풍부한 데이터를 제공합니다.
각 소스는 이를 트리거하는 CLI 플래그에 범위가 지정된 자체 IAM 권한이 필요합니다.
필요한 경우: 기본 작업, --log-location cwl
logs:FilterLogEvents -- CloudWatch에서 로그 레코드 가져오기logs:DescribeLogGroups -- aws-waf-logs-*와 일치하는 로그 그룹 검색필요한 경우: --s3-bucket, --log-location s3, --inventory
s3:ListAllMyBuckets -- 이름 접두사로 WAF 로그 버킷 검색s3:ListBucket -- WAF 로그 버킷의 로그 객체 나열s3:GetObject -- gzip 압축된 로그 파일 다운로드필요한 경우: --log-location waf, --inventory, 자동 보강
wafv2:ListWebACLs -- 웹 ACL 검색wafv2:GetWebACL -- 샘플링된 요청 쿼리를 위한 규칙 열거wafv2:GetLoggingConfiguration -- ACL이 사용하는 로그 대상(CWL, S3) 검색wafv2:GetSampledRequests -- 삭제되지 않은 요청 샘플 검색 (RedactedFields 우회)최소 요구 사항: CloudWatch Logs 권한만 필요합니다. S3 및 WAFv2 권한은 선택 사항이며 추가 데이터 소스를 활성화합니다. 권한이 없으면 도구는 정상적으로 대체됩니다.