1. DDoS 공격
DDoS 공격의 목적은 사용자가 웹 사이트나 애플리케이션을 이용할 수 없도록 만드는 것
대표적으로 네트워크나 다른 자원들을 고갈시켜서 사용자의 정당한 요청을 처리할 수 없게끔 만듬
DDoS 공격은 OSI 7 Layer에서 3,4,6,7 계층에서 흔하게 발생함
이번 글에서 OSI 3(네트워크 계층)과 4(전송 계층)의 공격은 인프라 계층 공격이라고 부르기로 함
6(표현 계층), 7(응용 계층)의 공격은 응용 계층 공격으로 부르기로 함
No. | 계층 | 유닛 | 설명 | 대표적인 공격 벡터 |
7 | 응용 | 데이터 | 애플리케이션에 대한 네트워크 프로세스 | HTTP floods, DNS query floods |
6 | 표현 | 데이터 | 데이터 표현과 암호화 | SSL abuse |
4 | 전송 | 세그먼트 | 종단 간 연결 및 신뢰성 | SYN floods |
3 | 네트워크 | 패킷 | 경로 결정과 논리적인 어드레싱 | UDP reflection attacks |
2. 인프라 계층 방어
1) EC2 auto scaling
- 요건 변화에 따라 빠르게 확장 또는 축소 가능
2) ELB(Elastic Load Balancing)
- DDoS 공격이 단일 EC2 인스턴스 범위 상회할 수 있음
- 이를 완화하기 위해 ELB로 부하 분산 시킬 수 있음
- ELB는 정상적인 TCP 연결만을 허용함. 이에 따라 SYN flood나 UDP reflection 공격을 막을 수 있음
- 다만, 로드 밸런싱만으로는 DDoS 막기 어려움
3) CloudFront
- 컨텐츠 딜리버리 네트워크(CDN)
- SYN flood, UDP reflection 공격 방어하기 위해 정상적인 연결만을 허용
- CloudFront에는 기본적으로 AWS Shleid 기능 활성화됨
3. 응용 계층 방어
1) WAF
- 애플리케이션 상의 취약점을 통한 공격을 방어하는 용도로 사용(SQL 인젝션, XSS 등)
- 차단하길 원하는 소스 IP 알고 있는 경우, ACL 규칙 생성하여 차단 가능
- URI, HTTP 메소드 등을 규칙에 포함 가능
2) CloudFront
- Slowloris 등 공격을 방지하기 위해 자동으로 연결 닫을 수 있음
- 지리적 위치 기반 제한 기능을 사용하여 접근하는 사용자의 지리적 위치를 조건으로 제한 가능
- CloudFront에는 기본적으로 AWS Shleid 기능 활성화됨
3) ELB
- 공격 흡수할 확장성 제공
- 다만, 로드 밸런싱만으로는 DDoS 막기 어려움
4. 공격 지점 줄이기
AWS 리소스 감추기
- VPC 내부 SecurityGroup과 Network ACL을 설정하여 논리적으로 분리된 영역 제공
5. 운영 기법
비정상적인 행동에 대한 가시성 확보
- CloudWatch를 통해 AWS 상에서 운영되는 애플리케이션 모니터링 가능
- CloudWatch 항목들을 취합, 추적, 모니터링, 경보 설정을 통하여 리소스 변화 생겼을 때 대응할 수 있도록 도와줌
토픽 | 항목 | 설명 |
Auto Scaling | GroupMaxSize | Auto Scaling 그룹의 최대 규모 |
Amazon CloudFront | Request | HTTP/S 요청의 개수 |
Amazon CloudFront | TotalErrorRate | 모든 요청들 중 HTTP 상태 코드 4xx 또는 5xx 인 경우의 비율 |
Amazon EC2 | CPUUtilization | 현재 사용중인 EC2의 CPU 사용률 |
Amazon EC2 | NetworkIn | 인스턴스에 붙은 네트워크 인터페이스가 전달받은 바이트 수 |
ELB | SurgeQueueLength | 백엔드 인스턴스와 연결되길 기다리는, 로그밸런서에 의해 큐에 들어간 요청 개수 |
ELB | UnHealthyHostCount | 각 가용영역 내 비정상 인스턴스 개수 |
ELB | RequestCount | 백엔드 인스턴스로 잘 전달시킨 요청 개수 |
ELB | Latency | 요청이 로드밸런서를 떠난 이후 응답을 받을 때까지 걸린 시간(초) |
ELB | HTTPCode_ELB_4xx (5xx) | 로그밸런서가 발생시킨 HTTP 4xx 또는 5xx 에러코드 개수 |
ELB | BackendConnectionErrors | 성공하지 못한 커넥션 개수 |
ELB | SpilloverCount | 큐가 꽉차서 거부된 요청 개수 |
Amazon Route 53 | HealthCheckStatus | 헬스 체크 엔드포인트 상태 |