웹 서버를 운영하다 보면 매일같이 쏟아지는 자동화 공격을 마주하게 된다. 특히 2026년 들어서는 GraphQL, Spring Boot Actuator, Next.js 등 모던 웹 기술 스택을 노리는 공격이 급증했다. 이 글에서는 WAF 허니팟을 확장해 최신 공격 패턴을 포착한 과정을 공유한다.
WAF 허니팟이란?
**허니팟(Honeypot)**은 공격자를 유인하기 위한 미끼 시스템이다. 실제 서비스에는 존재하지 않지만 공격자가 자주 노리는 경로(예: /.env, /wp-admin, /phpmyadmin)를 설정해두고, 이 경로로 접근하는 요청을 기록한다.
WAF(Web Application Firewall) 허니팟은 정상 요청과 공격 요청을 구분하고, 공격 패턴을 학습해 방어 정책을 개선하는 데 활용된다.
왜 확장했는가?
기존에는 전통적인 공격 경로 30개 정도만 등록되어 있었다:
- WordPress 관련 경로 (
/wp-admin,/xmlrpc.php) - 데이터베이스 관리 도구 (
/phpmyadmin,/adminer.php) - 설정 파일 (
/.env,/config.php)
하지만 2026년 웹 공격 트렌드를 조사한 결과, 다음과 같은 변화가 눈에 띄었다:
- GraphQL API 공격 증가 - 유연한 쿼리 구조를 악용한 데이터 유출 시도
- Spring Boot Actuator 노출 -
/actuator/heapdump에서 메모리 덤프 탈취 - CI/CD 파이프라인 공격 -
.gitlab-ci.yml,.github/workflows탈취 시도 - 모던 프레임워크 메타데이터 - Next.js, Nuxt.js 설정 파일 노출 공격
이에 따라 37개의 새로운 경로를 추가하기로 결정했다.
추가한 허니팟 경로 (37개)
1. Spring Boot / Java (8개)
Spring Boot의 Actuator 엔드포인트는 운영 환경에서 매우 민감한 정보를 노출할 수 있다.
/actuator/gateway/routes # API Gateway 라우팅 정보
/actuator/metrics # 애플리케이션 메트릭
/actuator/httptrace # HTTP 요청 이력 (토큰 포함 가능)
/actuator/jolokia # JMX 원격 제어
/swagger-ui.html # Swagger UI (API 문서)
/v2/api-docs # Swagger JSON
공격 시나리오:
/actuator/heapdump를 통해 메모리 덤프 다운로드 → 비밀번호, API 키 추출/swagger-ui.html에서 API 엔드포인트 목록 확보 → 인증 우회 시도
2. GraphQL (7개)
GraphQL은 유연한 쿼리가 가능한 만큼, 잘못 구현되면 데이터 전체를 노출할 수 있다.
/graphql/v1
/graphiql # GraphQL 인터랙티브 IDE
/graphql/console
/graphql-explorer
공격 시나리오:
- Introspection 쿼리로 전체 스키마 조회
- Batch Query로 Rate Limiting 우회
- 깊은 중첩 쿼리로 서버 DoS
3. Laravel / PHP 프레임워크 (8개)
Laravel, Symfony 등 PHP 프레임워크는 디버그 모드가 켜져 있으면 위험하다.
/storage/logs/laravel.log # 로그 파일 (민감 정보 포함)
/.env.backup # 백업된 환경 변수
/telescope/requests # Laravel Telescope (요청 이력)
/horizon/api/stats # Laravel Horizon (큐 통계)
/_profiler # Symfony Profiler
공격 시나리오:
/telescope/requests에서 사용자 요청 이력 열람 → 세션 하이재킹/.env.backup에서 DB 비밀번호 탈취
4. CI/CD & DevOps (8개)
CI/CD 파이프라인 설정 파일은 인프라 전체의 구성을 노출한다.
/.gitlab-ci.yml
/.github/workflows
/jenkins/script
/.circleci/config.yml
/azure-pipelines.yml
공격 시나리오:
- CI/CD 파일에서 배포 스크립트 확인 → SSH 키, Docker 레지스트리 정보 탈취
- Jenkins
/script콘솔로 Groovy 스크립트 실행 → RCE
5. 클라우드 메타데이터 (3개)
AWS, GCP 등 클라우드 인스턴스의 메타데이터 서비스를 노리는 SSRF 공격이 증가했다.
/latest/meta-data # AWS EC2 메타데이터
/metadata/v1 # GCP 메타데이터
/compute/v1/instance # GCP Compute
공격 시나리오:
- SSRF 취약점을 통해
http://169.254.169.254/latest/meta-data접근 - IAM Role 임시 자격증명 탈취 → 클라우드 리소스 탈취
6. API 키 노출 (7개)
개발자가 실수로 레포지토리에 커밋한 설정 파일들이다.
/.npmrc # npm 레지스트리 인증 토큰
/.pypirc # PyPI 인증 정보
/.gem/credentials # RubyGems API 키
/.boto # AWS 자격증명
/.s3cfg # S3 설정
/credentials.json # Google Cloud 서비스 계정
공격 시나리오:
/.npmrc에서 npm 토큰 탈취 → 악성 패키지 배포/credentials.json에서 GCP 서비스 계정 키 탈취 → 프로젝트 전체 장악
7. 모던 프레임워크 (7개)
Next.js, Nuxt.js 등 모던 프레임워크의 빌드 산출물과 설정 파일을 노린다.
/.next/* # Next.js 빌드 캐시
/next.config.js # Next.js 설정
/.nuxt/* # Nuxt.js 빌드 캐시
/_next/static # Next.js 정적 파일
/node_modules/* # 의존성 패키지
공격 시나리오:
/next.config.js에서 API 엔드포인트, 환경 변수 추출/node_modules/에서 오래된 취약점 패키지 확인 → 타겟팅 공격
8. 데이터베이스 백업 (6개)
백업 파일이 공개 디렉토리에 노출되는 사고가 여전히 발생한다.
/database/backup
/db_backup.sql # SQL 덤프
/mongodb_backup # MongoDB 백업
/redis.rdb # Redis 스냅샷
/dump.rdb # 일반적인 덤프 파일
공격 시나리오:
/db_backup.sql다운로드 → 사용자 비밀번호 해시, 개인정보 탈취
실제 적용 과정
1. Caddyfile 구조 개선
기존에는 각 도메인마다 허니팟 경로를 복사-붙여넣기 했다. 이를 **스니펫(snippet)**으로 통합해 유지보수성을 높였다.
| |
2. 허니팟 트리거 API
허니팟 경로로 접근한 요청은 대시보드 서버로 라우팅되어 기록된다.
| |
3. 배포 및 검증
| |
기대 효과
공격자 프로파일링
- 어떤 경로를 가장 많이 시도하는가?
- 특정 IP에서 여러 경로를 순차적으로 시도하는가? (자동화 봇)
Zero-Day 대응
- 새로운 프레임워크의 취약점이 공개되기 전, 공격 시도를 조기 감지
방어 정책 강화
- 허니팟에서 수집한 IP를 자동으로 차단 리스트에 추가
- WAF 규칙 개선 (예: Actuator 경로 전체 차단)
위협 인텔리전스 구축
- 자체 공격 데이터베이스 구축
- 공격 트렌드 분석 → 선제적 방어
마치며
웹 보안은 끝이 없는 싸움이다. 공격자는 매일 새로운 기법을 시도하고, 방어자는 한 발 앞서 대응해야 한다. 허니팟은 공격자의 의도를 읽을 수 있는 귀중한 도구다.
2026년 현재, GraphQL과 Spring Boot Actuator가 주요 타겟이 되었다. 내년에는 또 어떤 기술이 공격의 표적이 될까? 허니팟이 그 답을 알려줄 것이다.
핵심 교훈:
- 공격 트렌드는 계속 변한다 → 허니팟도 지속적으로 업데이트해야 한다
- 방어는 사후 대응이 아니라 선제적 모니터링이다
- 로그는 데이터일 뿐, 분석하고 행동해야 의미가 있다
참고:
- OWASP Top 10 (2025)
- 자체 WAF 로그 분석 결과