웹 서버를 운영하다 보면 매일같이 쏟아지는 자동화 공격을 마주하게 된다. 특히 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년 웹 공격 트렌드를 조사한 결과, 다음과 같은 변화가 눈에 띄었다:

  1. GraphQL API 공격 증가 - 유연한 쿼리 구조를 악용한 데이터 유출 시도
  2. Spring Boot Actuator 노출 - /actuator/heapdump에서 메모리 덤프 탈취
  3. CI/CD 파이프라인 공격 - .gitlab-ci.yml, .github/workflows 탈취 시도
  4. 모던 프레임워크 메타데이터 - 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)**으로 통합해 유지보수성을 높였다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 공통 허니팟 경로 스니펫
(honeypot_paths) {
    @honeypot {
        # 기존 30개 경로
        path /.env /wp-admin /phpmyadmin ...
        
        # 2026년 추가 37개 경로
        path /actuator/gateway/routes
        path /graphiql
        path /.gitlab-ci.yml
        ...
    }
    
    @malicious_bot {
        header_regexp User-Agent (?i)(sqlmap|nikto|nmap|...)
    }
}

# 각 도메인에서 import
example.com {
    import honeypot_paths
    handle @honeypot {
        rewrite * /api/honeypot/trigger?path={uri}
        reverse_proxy waf-dashboard:8000
    }
}

2. 허니팟 트리거 API

허니팟 경로로 접근한 요청은 대시보드 서버로 라우팅되어 기록된다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
@app.post("/api/honeypot/trigger")
async def honeypot_trigger(
    path: str,
    request: Request,
    reason: str = "path_match"
):
    ip = request.headers.get("X-Real-IP")
    user_agent = request.headers.get("User-Agent")
    
    # DB에 기록
    await db.insert_honeypot_log(
        ip=ip,
        path=path,
        user_agent=user_agent,
        reason=reason,
        timestamp=datetime.now()
    )
    
    # 403 또는 fake 응답 반환
    return {"error": "Forbidden"}

3. 배포 및 검증

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Git 커밋
git add config/caddy/Caddyfile
git commit -m "허니팟 경로 대폭 확장 (2026 최신 공격 패턴 반영)"
git push

# WAF 재시작
docker restart waf

# 테스트
curl -I https://example.com/actuator/gateway/routes
# → 500 Internal Server Error (허니팟 트리거)

기대 효과

  1. 공격자 프로파일링

    • 어떤 경로를 가장 많이 시도하는가?
    • 특정 IP에서 여러 경로를 순차적으로 시도하는가? (자동화 봇)
  2. Zero-Day 대응

    • 새로운 프레임워크의 취약점이 공개되기 전, 공격 시도를 조기 감지
  3. 방어 정책 강화

    • 허니팟에서 수집한 IP를 자동으로 차단 리스트에 추가
    • WAF 규칙 개선 (예: Actuator 경로 전체 차단)
  4. 위협 인텔리전스 구축

    • 자체 공격 데이터베이스 구축
    • 공격 트렌드 분석 → 선제적 방어

마치며

웹 보안은 끝이 없는 싸움이다. 공격자는 매일 새로운 기법을 시도하고, 방어자는 한 발 앞서 대응해야 한다. 허니팟은 공격자의 의도를 읽을 수 있는 귀중한 도구다.

2026년 현재, GraphQL과 Spring Boot Actuator가 주요 타겟이 되었다. 내년에는 또 어떤 기술이 공격의 표적이 될까? 허니팟이 그 답을 알려줄 것이다.

핵심 교훈:

  • 공격 트렌드는 계속 변한다 → 허니팟도 지속적으로 업데이트해야 한다
  • 방어는 사후 대응이 아니라 선제적 모니터링이다
  • 로그는 데이터일 뿐, 분석하고 행동해야 의미가 있다

참고: