본문 바로가기
IT

[AWS] 웹 공격에 캡차 추가하기

by 뽀리님 2024. 11. 24.

AWS 클라우드 환경에서 Webapp에서 공격이 가끔 들어와서 캡차기능을 검토하기 위해 정리하는 블로깅

 

보통 AWS WAF(Web Application Firewall)와 CloudFront를 활용하는 방식이 효과적이다.

 

 

✅ 적용흐름

Client → CloudFront → AWS WAF → ALB → Spring Boot

 

 

 

1. 공격 패턴 감지

  • AWS WAF의 WebACL 또는 CloudWatch Logs에서 특정 공격 패턴(예: IP 주소, User-Agent, 요청 속도 등)을 감지.

 

2. WAF 에서 캡챠 활성화

  • 특정 조건(공격 패턴에 부합)에 해당하는 요청에 대해 WAF에서 캡차를 활성화.

 

3. 사용자 요청인증

  • 사용자가 캡차를 통과하면 정상적으로 요청 처리.

 

4. CloudFront 캐싱으로 효율성 유지

  • 정상 요청은 CloudFront에서 캐싱하여 성능 최적화.

 

✅  구현 단계

CloudFront와 WAF 구성

 

1. CloudFront 배포에 WAF 연결

  • AWS CloudFront에서 WAF WebACL을 설정하여 모든 요청이 WAF를 통해 필터링

 

2. WAF WebACL 규칙 생성

  • 공격 패턴(예: IP, User-Agent, URL 경로, 요청 속도 등)에 따라 차단 규칙 추가.
  • 캡차 활성화 규칙 설정

✅  캡차 활성화 규칙

AWS WAF에서 CAPTCHA를 활성화하려면 WebACL에 조건을 설정한다.

 

 

1. IP 기반 공격 감지

  • 동일한 IP에서 짧은 시간 동안 과도한 요청 발생 시 캡차 적용.
  • WAF 규칙 예제
    • ex) 조건: 1분 내 동일 IP에서 100개 이상의 요청 발생. -> 캡차 활성화.

2. URL 경로 기반 탐지

  • 특정 경로(예: /login)에서 비정상적인 요청 패턴 감지.
  • WAF 규칙 예제:
    • ex) 조건: /login URL에 대해 반복적인 요청 발생. -> 캡차 활성화.

3. User-Agent 기반 탐지

  • 봇이나 공격 도구에서 생성된 User-Agent를 탐지.
  • WAF 규칙 예제
    • ex) 조건: User-Agent에 "curl" 또는 "bot" 포함.-> 캡차 활성화.
 

✅  CloudWatch와 Lambda 연동(옵션)

  1. CloudWatch에서 추가 패턴 감지(동적으로 설정가능)
    • CloudFront 또는 ALB 로그를 CloudWatch Logs에 전송.
    • 특정 공격 패턴(예: 반복된 5xx 에러, 공격적인 User-Agent) 감지.
  2. Lambda로 WAF 규칙 업데이트:
    • CloudWatch Alarm 발생 시 Lambda를 트리거.
    • Lambda가 WAF의 IPSet 또는 WebACL에 새로운 규칙 추가(캡차 적용).

✅  web 에서의 추가 처리

1. Spring Boot 애플리케이션에서 상태 확인

  • WAF에서 캡차를 통과한 요청만 web으로 전달.
  • 애플리케이션은 이미 인증된 요청만 처리.

2. 비정상 요청 로깅

  • Spring Boot에서 WAF를 우회한 요청을 로깅하여 추가 분석: 

✅  장애 탐지 및 캡차 활성화 흐름

1. 클라이언트 요청 발생 
↓ 
2. CloudFront → WAF로 요청 전달 
↓ 
3. WAF 규칙에서 비정상 패턴 탐지 - 반복적인 요청(IP, URL, User-Agent 기반). - WAF CAPTCHA 활성화. 
↓ 
4. 사용자 캡차 통과 시 요청 허용 
↓ 
5. 정상 요청은 web(Spring Boot)으로 전달
 

✅  추가 보안 및 확장

  1. WAF와 Bot Control 통합
    • AWS WAF에서 Bot Control 기능 활성화  → 캡차 적용 외에도 비정상적인 봇 활동을 차단.
  2. CloudFront 캐싱 최적화
    • 정상 요청은 CloudFront에서 캐싱하여 WAF 부하 감소.
  3. 사용자 정의 캡차
    • Spring Boot에서 사용자 정의 캡차 로직 추가(필요한 경우) → WAF 캡차를 보완하여 추가 인증.

비용 및 고려사항

  1. CloudFront 및 WAF 비용:
    • CloudFront 요청 수와 데이터 전송량에 따라 비용 발생.
    • WAF는 요청 수와 규칙 수에 따라 과금.
  2. Lambda 비용:
    • 요청 수에 따라 미미한 비용 발생.
  3. 정확한 탐지 조건 설정:
    • 잘못된 탐지(오탐)가 발생하지 않도록 패턴 정의를 명확히.

결론

web에서 공격 탐지 후 캡차를 적용하려면:

  1. AWS WAF를 활용하여 WebACL에 조건을 설정후 → 비정상 패턴 탐지 하여 캡차 활성화.
  2. (옵션) CloudWatch Logs + Lambda를 통해 동적인 WAF 규칙 업데이트.
  3. 정상 요청은 web으로 전달하여 성능 저하 없이 보안을 강화.