GCP의 Cloud armor는 L3 및 L4부터 L7 계열 ddos 공격으로부터 인프라 및 서비스를 보호해주는 WAF(Web application firewall) 서비스입니다.
본래 Cloud armor의 본질은 WAF 서비스이기 때문에 L7 계열 트래픽의 필터링 및 정책 설정이 주된 목적이지만, 볼륨 및 프로토콜 기반의 DDoS 공격에 대한 방어 기능도 제공하고 있습니다.
이번 포스팅에서는 Cloud armor의 기능 중 DDoS 방어에 대한 기능을 사용해보고, 얼마나 효과적으로 방어할 수 있는지 검증해보겠습니다.
1. Cloud armor ddos protection 세팅
Cloud armor는 크게 2종류의 ddos 공격 유형에 대한 방어 기능을 제공합니다.
첫째로는 L3,L4 계열의 DDos 공격, 둘째로는 L7 계열의 DDoS 공격.
일반적으로 첫번째 유형의 낮은 계층 ddos 공격은 차단(deny)을 통해 공격을 방어하는 반면,
두번째 유형인 L7 ddos 공격은 완화(mitigation)를 통해 충격을 줄이는 방법으로 방어하게 됩니다.
그렇기 때문에 공격 유형에 따라 방어(Protection) 기능을 활성화하기 위한 세팅이 각각 다릅니다.
1-1. L3,L4 계층 ddos 공격 방어 세팅
낮은 계층의 DDoS 방어는 별다른 설정 없이 필요 없습니다.
이미 GFE(Google Frontend)를 비롯한 구글 인프라에서 방어 기능을 제공하기 때문에 지원하는 로드 밸런서를 생성하는 것만으로 DDoS를 방어 기능을 제공받을 수 있습니다.
현재(2021-10-07) 기준으로 DDoS공격 방어 기능을 지원하는 로드 밸런서는 다음과 같습니다.
- HTTP(S) 로드 밸런서
- TCP/SSL 프록시 로드 밸런서
DDoS 방어 기능을 검증하기 위해 방어 기능이 지원되는 로드 밸런서인 TCP 프록시 로드 밸런서를 생성합니다.
로드 밸런서를 생성하는 것만으로 백엔드 서비스가 Cloud armor의 Managed protection 기능에서 "Protected resources"로 등록이 된 것을 확인할 수 있습니다.
이렇게 Managed protection에 등록된 백엔드 서비스만이 L3,L4 ddos 방어 기능을 지원받을 수 있습니다. 다른 설정 필요없이 L3,L4 계층 DDoS 방어 세팅은 여기서 끝입니다.
1-2. L7 계층 DDoS 공격 방어 세팅
L7 계층의 DDoS 공격으로부터 방어하기 위해서는 보호하고자 하는 서비스, 혹은 VM을 HTTP(S) 로드 밸런서 뒷단에 배치해야 합니다.
검증을 위해 HTTP 로드 밸런서를 생성합니다.
L7 계층 DDoS 공격의 방어를 위해서는 이전의 L3,L4 계층 DDoS 방어와 달리 "보안 정책"에 HTTP(S) 로드 밸런서를 등록하는 과정이 필요합니다.
보안 정책(Security policy)은 IP 기반, 혹은 헤더 기반의 트래픽 필터링 정책을 제공하는 기능입니다. 기존의 WAF 서비스에 가까운 기능이지만 L7 DDoS에 대한 방어 기능을 제공해주는 "Adaptive protection"을 활성화하기 위해서 보안 정책을 등록해야 합니다.
Cloud armor의 "Security policy" 탭에서 보안 정책을 생성할 수 있습니다.
정책 생성 시 다양한 기능을 이용할 수 있지만 이번 포스팅의 목적인 DDoS 방어와 관련되어 있는 Adaptive Protection 기능만 Enable한 채로 정책을 생성합니다.
Cloud armor Adaptive Protection 탭에서 L7 DDoS에 대한 방어 기능을 지원하는 Adaptive Protection 기능이 정상적으로 활성화된 것입니다.
+) Adaptive Protection이란?
Cloud armor의 Adaptive protection은 L7 계층의 DDoS 방어 기능을 제공하는 서비스입니다.
Adaptive protection은 네트워크에 진입하는 트래픽을 기반으로 머신 러닝 모델을 빌드합니다.
빌드한 머신 러닝 모델은 HTTP 트래픽의 이상 징후를 판별함으로써 잠재적인 공격을 사전에 감지해 알림을 발신합니다.
알림에는 보안 정책에 바로 적용할 수 있는 공격 서명(Signature)을 포함합니다. 보안 관리자는 이 서명을 정책에 적용함으로써 DDoS 공격으로 판별된 트래픽을 차단할 수 있습니다.
2. DDoS 공격 테스트
이제 3가지 공격 유형을 바탕으로 GCP 인프라에 DDoS 공격을 시도해보겠습니다.
공격 유형 | 계층 | 방어 기능 |
SYN flooding | L4 | Managed Protection |
ICMP flooding | L3 | Managed Protection |
HTTP flooding | L7 | Adaptive Protection |
2-1. SYN flooding 공격
SYN flooding은 SYN 패킷을 대량으로 발송해 공격 대상으로 하여금 네트워크 버퍼를 초과하게 만드는 L4 계층의 DDoS 공격입니다.
DDoS로부터 보호받지 않는 VM에 SYN flooding 공격을 시도하면 대량의 SYN recieve로 다른 패킷을 받을 수 없는 상태가 됩니다.
이제 Cloud armor로부터 보호받는 TCP 프록시 로드 밸런서로 동일한 공격을 시도해보겠습니다.
공격을 시도한 결과 SYN recieve는 거의 검출되지 않았습니다. Recieved PPS도 기존과 동일해 공격을 받기 전과 거의 동일한 상태를 유지하고 있습니다.
방어 기능이 없었던 일반 VM의 접속 성공률은 56%였지만 Cloud armor의 보호를 받았을 시 100% 접속 성공률을 보였습니다.
SYN 패킷이 백엔드에서 검출되지 않았다는 점, Recieved PPS가 거의 올라가지 않았다는 점, 서버로의 접속이 원활했던 점으로 봤을때 SYN flooding 공격을 Cloud armor가 성공적으로 방어했다는 것을 알 수 있습니다.
2-2. ICMP flooding 공격
ICMP flooding은 ICMP 프로토콜의 패킷을 대량으로 발송해 타겟의 네트워트 기능을 마비시키는 공격입니다.
L3 계층의 DDoS 공격에 해당하며 SYN flooding과 마찬가지로 Cloud armor의 보호 가능 대상에 포함되는 공격 유형입니다.
ICMP flooding 공격을 받게 될 시 대량의 ICMP 패킷을 확인할 수 있으며 서버 접속에 장애가 발생합니다.
Cloud armor의 보호를 받는 TCP 프록시 로드밸런서로 ICMP flooding 공격을 시도해보겠습니다.
대량의 ICMP 패킷이 검출되지 않았습니다. 서버도 접속이 원활하며 PPS도 정상수치를 기록했습니다.
ICMP flooding도 Cloud armor가 성공적으로 방어했음을 확인할 수 있었습니다.
이렇게 Cloud armor는 L3,L4 계층의 DDoS 공격을 방어할 수 있음을 확인했습니다.
SYN,ICMP flooding과 같은 낮은 계층의 공격은 아예 차단해버리기 때문에 실제 백엔드 서버까지 영향을 전혀 미치지 않았습니다.
2-3. HTTP flooding 공격
HTTP flooding 공격은 위의 두 공격과 다른 점이 몇 가지 있습니다.
우선 공격에 많은 대역폭(Bandwidth)이 필요하지 않기 때문에 rate-base의 탐지에 잘 걸리지 않는다는 것.
두번째는 HTTP 공격에 사용되는 트래픽 자체는 정상적인 트래픽과 거의 구별할 수 없다는 것입니다.
이러한 점 때문에 L7 계층의 DDoS 공격은 탐지가 굉장히 어렵습니다.
그렇기 때문에 별다른 설정 없이 공격을 완전히 차단할 수 있는 L3,L4 계층 DDoS 방어와 달리, L7 계층 DDoS 공격의 탐지에는 traffic profiling같은 기술이 사용되고 머신러닝을 이용한 학습이 필요합니다.
그래서 Cloud armor의 Adaptive Protection은 HTTP DDoS 공격을 탐지한 뒤 사용자(User)에게 차단 정책과 정책의 신뢰도(Confidence)를 제안하는 방식으로 공격을 완화할 수 있는 기능을 제공합니다.
이제 HTTP 프록시에 HTTP flooding 공격을 시도해보겠습니다.
공격 시도 후 Cloud armor의 Adaptive protection 탭에서 Potential attacks이 추가된 것을 볼 수 있습니다.
Potential attacks에는 잠재된 DDoS 공격으로 감지된 트래픽 패턴이 추가됩니다.
VIEW SIGNATURE & RECOMMENDED RULE 버튼을 클릭하면 공격의 서명(Signature)과 공격을 막기 위한 정책 규칙을 볼 수 있습니다.
해당 항목은 공격이 감지된 시간과 신뢰도(Confidence), 들어온 request 등 사용자가 공격 여부를 판단할 수 있는 정보를 제공합니다.
사용자는 제공받은 정보를 바탕으로 해당 유형의 트래픽을 DDoS로 판단하고 차단 정책을 적용할 것인지, 아니면 정상 트래픽으로 간주하고 적용하지 않을 것인지 선택할 수 있습니다.
원래라면 APPLY RULE이 활성화되어야 하지만 학습 시간 부족으로 Rule 생성까진 되지 않은 모습입니다.
APPLY RULE을 클릭하면 해당 유형의 트래픽을 차단하는 보안 정책을 생성해 앞으로 들어오는 같은 유형의 트래픽을 차단하게 됩니다.
마치며
이렇게 Cloud armor의 공격 유형 별 DDoS 탐지 및 방어 기능에 대해서 검증해봤습니다.
Cloud armor는 L3,L4,L7의 SYN, ICMP, HTTP flooding에 대해서 차단 및 탐지할 수 있었으며 효과는 개인적으로 봤을때 아주 탁월했습니다.
다만 로드 밸런서를 앞단에 세워야만 방어가 된다는 것, 그럼에도 모든 로드 밸런서 유형이 DDoS 보호 기능을 지원받지 못한다는 한계가 존재했습니다.
앞으로도 GCP의 WAF 서비스인 Cloud amor에 더 많은 발전이 있길 바랍니다.
또 이 포스팅을 보는 분들이 Cloud armor의 DDoS 공격에 대한 방어 능력에 대해 도움이 되었으면 합니다.
'GCP' 카테고리의 다른 글
Prometheus+Grafana로 Apache Hadoop 및 Hive모니터링 하기(with GCP Dataproc) (0) | 2021.11.23 |
---|---|
Google Cloud의 Cloud Deploy로 자동화된 CI/CD Pipeline 구성하기 (0) | 2021.11.05 |
Function Framework를 이용해 local 환경에서 Cloud function을 사용해보자 (0) | 2021.07.24 |
GCP DNS Forwarding으로 원격지 DNS 서버에 질의하기(+DNS Peering) (0) | 2021.07.14 |
GKE CNI Performance benchmark(2021-06-10) (0) | 2021.06.10 |