퍼징 공격 2026: 20,000개 Nginx 로그 라인에서 분석한 12가지 공격 벡터
자동화된 퍼징 스캐너가 Nginx를 실행하는 서버를 5분 동안 20,000개 이상의 요청으로 공격했습니다. 동일한 서브넷의 두 IP(185.x.x.52, 185.x.x.38)가 User-Agent curl/8.7.1을 사용했습니다. 가능한 도구: Nuclei 사용자 정의 템플릿 또는 GitHub 워드리스트를 사용한 ffuf/gobuster입니다. 공격은 포물선 패턴을 따랐습니다: 초당 100개 요청으로 시작하여 한계를 밀어붙이고, 두 번째 IP로 확대되며, 쓰레기 경로로 점차 줄어들었습니다.
스캐너는 .env 파일로 시작하여 디버그 스크립트, LFI/RCE, CI/CD 설정, POST 플러드로 이동했습니다. 모든 요청은 기본 Nginx 설정(속도 제한, 메서드 라우팅, SPA용 캐치올)에 의해 차단되었습니다.
상위 12 스캐닝 벡터
로그 분석은 특징적인 패턴을 드러냈습니다. 실제 요청과 함께 주요 예시입니다:
- .env 파일 탐색:
/.env.staging,/.env.local,/api/.env. 목표 — 데이터베이스 키, AWS 토큰.
{"time_local":"16/Mar/2026:17:19:51 +0000","remote_addr":"185.x.x.52","request_method":"GET","request_uri":"/.env.staging","status":"404","body_bytes_sent":"53","http_user_agent":"curl/8.7.1"}
- 서버 디버깅:
/admin/admin_phpinfo.php4,phpinfo.php. LFI를 위한 버전 및 경로 정찰.
- Yii2/Laravel 디버그:
/debug/default/view?panel=config— 비밀번호가 포함된 설정 유출 시도.
- GitHub 튜토리얼:
/07-accessing-data/begin/vue-heroes/.env— 강좌에서 복사-붙여넣기된 코드 검색.
- NPM 픽스처:
/babel-plugin-dotenv/test/fixtures/dev-env/.env— 벤더 디렉토리 내 테스트.
- Grafana LFI:
/login?redirectTo=%2Fpms%3Fmodule%3Dlogging%26file_name%3D..%2F..%2F..%2F..%2F..%2F..%2F~%2F.aws%2Fcredentials(상태 429).
- RCE 주입:
/admin/config?cmd=cat%20/root/.aws/credentials.
- SSH 키:
/.ssh/id_rsa.
- CI/CD:
/.gitlab-ci.yml,sendgrid.env.
- Next.js 아티팩트:
/_next/static/chunks/app/error.js소스 맵용.
- POST 플러드:
/api/files/upload(상태 405).
- 쓰레기:
/config.json.bak.1.
Nginx 수준 방어 메커니즘
엄격한 설정 덕분에 서버는 부하를 견뎌냈습니다. 효과적인 관행 분석:
- 속도 제한: 로그인 폼 및 API에서
limit_req zone=grafana_login_ip burst=5 nodelay;. LFI 요청은 429를 반환하여 CPU를 절약했습니다.
- 메서드 제한: 지원되지 않는 엔드포인트에서 POST 차단 — 405 Method Not Allowed. 요청은 앱 서버에 도달하지 않습니다.
- 캐치올 라우팅:
try_files $uri $uri/ /index.html;는 404 대신 200으로 SPA 페이지를 제공합니다. 봇은 설정 대신 40KB 이상의 HTML을 다운로드했습니다.
- SNI 검증: 잘못된 Host로 HTTP/2에서 421 Misdirected Request — 멀티플렉싱 스캐너를 느리게 합니다.
공격 역학 분석
{"time_local":"16/Mar/2026:17:19:51 +0000","remote_addr":"185.x.x.52","request_method":"GET","request_uri":"/config.php","status":"200","body_bytes_sent":"40414","http_user_agent":"curl/8.7.1"}
봇은 200을 성공으로 해석했지만 쓰레기를 받았습니다. 이러한 트릭은 워드리스트 생성기 파서를 혼란스럽게 합니다.
퍼징은 진화 중입니다: 워드리스트는 GitHub, NPM, 튜토리얼에서 변이합니다. 스캐너는 제한에 적응하지만, 기본 위생(.git 없음, 테스트 없음) + Nginx 필터가 방어를 유지합니다.
핵심 요약:
- 2026년 퍼징은 .env, LFI/RCE, CI/CD, GitHub 복사-붙여넣기에 초점을 맞춥니다.
- 20k 요청/5분은 Nuclei/ffuf에 정상적입니다; 속도 제한 burst=5가 차단합니다.
- 캐치올과 200 OK + 큰 페이로드는 봇을 혼란시킵니다.
- 메서드 라우팅(405) 및 SNI(421)는 백엔드 부하를 최소화합니다.
- 정기적인 로그 감사는 새로운 워드리스트 패턴을 발견합니다.
— Editorial Team
아직 댓글이 없습니다.