1. Vụ tấn công từ chối dịch vụ (DDOS) lớn nhất lịch sử
Ngày 19 tháng 8 năm 2022, Google Cloud đăng tải một bài viết với tiêu đề "How Google Cloud blocked the largest Layer 7 DDoS attack at 46 million rps" - Google Cloud đã ngăn chặn cuộc tấn công DDOS với 46 triệu request/giây như thế nào ? . Chi tiết bài viết mọi người có thể đọc tại đây .
Sơ lược cuộc tấn công diễn ra như sau :
- Bắt đầu từ khoảng 9:45 phút sáng (theo giờ Thái Bình Dương) vào ngày 1 tháng 6 năm 2022, một cuộc tấn công gồm hơn 10.000 request/giây bắt đầu nhắm mục tiêu vào HTTP/S Load Balancer của một khách hàng sử dụng Google Cloud.
- Tám phút sau, cuộc tấn công đã tăng lên đến 100.000 request/giây.
- Google Cloud Armor phát hiện cuộc tấn công và bắt đầu tiến hành phân tích lưu lượng.
- Google Cloud Armor đưa ra một loạt các đề xuất để tiến hành ngăn chặn cuộc tấn công này trước khi nó lên đến đỉnh điểm.
- Nhóm bảo mật của khách hàng áp dụng các quy tắc mà Google Cloud đưa ra.
- Trong hai phút sau đó, cuộc tấn công bắt đầu tăng tốc, tăng từ 100.000 request/giây lên mức cao nhất là 46 triệu request/giây tuy nhiên hệ thống của của khách hàng vẫn hoạt động bình thường.
- Trong vài phút tiếp theo, cuộc tấn công bắt đầu giảm mức độ, cuối cùng kết thúc 69 phút sau đó lúc 10:54 sáng
Có 5.256 IP từ 132 quốc gia góp phần tạo lên một kỷ lục chưa từng có về lưu lượng tấn công từ trước tới nay. Giống như việc ta hứng chịu toàn bộ lưu lượng truy cập vào Wikipedia (một trang cũng rất khủng bố) một ngày trong thời gian 10 giây...
Xuyên suốt quá trình tấn công, từ khóa đáng lưu tâm nhất là "Google Cloud Armor" . Vậy Google Cloud Armor là gì mà nó lại mạnh mẽ như thế ? Chúng ta sẽ cùng nhau tìm hiểu ở nội dung dưới đây
2. Về Google Cloud Armor
2.1. Tổng quan
Google Cloud Armor là dịch vụ phòng chống DDOS vào load balancers ở Layer 3 và Layer 4 trong môi trường Google Cloud Platform (Nghĩa là nếu doanh nghiệp của bạn đang sử dụng AWS hay Azure sẽ không thể tích hợp tiện ích này). Nó đồng thời đóng vai trò như một Web Application Firewall (WAF) bảo vệ trang web khỏi các rủi ro phổ biến như SQL Injection, Cross-site scripting , Local File Inclusion ...
Ngoài các rules sẵn có, Google Cloud Armor cung cấp cho người dùng khả năng tùy biến ở mức độ rất cao phù hợp với các yêu cầu phức tạp như (cấu hình theo vị trí địa lý, địa chỉ IP, hay tham số cookie ...)
2.2. Chi phí vận hành
Khi sử dụng các dịch vụ Public Cloud, ngoài việc quan tâm tới hiệu quả mang lại, chúng ta cần quan tâm thêm tới chi phí vận hành. Theo đó ta có thể theo dõi thông qua bảng dưới đây
Google Cloud Armor cung cấp 2 gói để người dùng có thể lựa chọn là Standard Tier và Plus Tier. Sự khác nhau rõ ràng nhất ở 2 phiên bản này thông qua cách tiếp cận dịch vụ. Một cái là trọn gói, một cái là dùng bao nhiêu trả tiền bấy nhiêu. Ngoài ra chỉ có bản Plus Tier mới được tích hợp chức năng bảo mật lừng danh - Adaptive Protection. Qua đó bản Standard Tier có vẻ phù hợp hơn với doanh nghiệp vừa và nhỏ, yêu cầu khả năng tùy biến thấp , bản Plus Tier phù hợp cho doanh nghiệp lớn, yêu cầu cao về cấu hình bảo mật.
Ngoài ra Google cũng tính thêm "phụ phí" network, nhìn chung không đáng kể với người sử dụng thông thường
2.3. Mô hình triển khai
Google Cloud Armor là một sản phẩm tích hợp chặt chẽ với các dịch vụ khác của Google Cloud , do đó ta có thể đính kèm ở vô số các chỗ khác nhau. Chúng ta có thể triển khai theo đa dạng các cách như sau :
- Google Cloud Armor với VPC firewall rules
- Google Cloud Armor vào HTTP(S) Load Balancing and IAP
- Cloud Armor vào hybrid deployments
- Google Cloud Armor vào Google Kubernetes Engine (GKE) Ingress
- Google Cloud Armor vào Cloud CDN
- Google Cloud Armor vào serverless apps
Trong khuôn khổ bài viết, ta tiến hành triển khai Google Cloud Armor với VPC Firewall rules
3. Triển khai Google Cloud Armor
3.1. Xây dựng môi trường
Step 1. Giao tiếp với Google Cloud Console thông qua dòng lệnh
Đăng nhập vào tài khoản GCP , Click vào Active Cloud Shell trên trình duyệt (Ngoài ra chúng ta có thể sử dụng gcloud CLI để thay thế)
Step 2. Tạo và cài đặt Project
gcloud config list project
gcloud config set project dazzling-trail-360104
Step 3. Chấp nhận APIs (bao gồm computer, logging , monitoring)
gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com
Step 4. Tạo VPC network
gcloud compute networks create vuln-lab-vpc --subnet-mode custom
gcloud compute networks subnets create vuln-lab-subnet --network vuln-lab-vpc --range 10.0.0.0/24 --region us-central1
Step 5. Tạo VPC Firewall & cấu hình Google health-checks
gcloud compute firewall-rules create allow-js-site --allow tcp:8080 --network vuln-lab-vpc
gcloud compute firewall-rules create allow-health-check --network=vuln-lab-vpc --action=allow --direction=ingress --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags=allow-healthcheck --rules=tcp
3.2. Xây dựng ứng dụng chứa lỗ hổng
Để cung cấp cái nhìn trực quan nhất, ta tiến hành xây dựng môi trường chứa lỗ hổng tiềm tàng mà qua đó Hacker có thể lợi dụng xâm nhập vào hệ thống. Trong khuôn khổ bài viết này, mình sử dụng OWASP Juice làm ví dụ
Step 1. Cài đặt OWASP Juice Application
gcloud compute instances create-with-container owasp-juice-shop-app --container-image bkimminich/juice-shop --network vuln-lab-vpc --subnet vuln-lab-subnet --private-network-ip=10.0.0.3 --machine-type n1-standard-2 --zone us-central1-c --tags allow-healthcheck
Step 2. Setup Cloud load balancer
gcloud compute instance-groups unmanaged create group-labs --zone=us-central1-c
Add the instance trên vào instance group
gcloud compute instance-groups unmanaged add-instances group-labs --zone=us-central1-c --instances=owasp-juice-shop-app
Step 3. Cấu hình cho OWASP Juice Application
- Cấu hình Port
gcloud compute instance-groups unmanaged set-named-ports juice-shop-group --named-ports=http:3000 --zone=us-central1-c
- Cài đặt health-check
gcloud compute health-checks create tcp tcp-port-3000 --port 3000
- Tạo một backend service và thêm instance group đã thiết lập ở bước trên
gcloud compute backend-services create dvwa-backend --protocol HTTP --port-name http --health-checks tcp-port-3000 --enable-logging --global
gcloud compute backend-services add-backend dvwa-backend \ --instance-group=group-labs \ --instance-group-zone=us-central1-c \ --global
- Tạo URL map & Target Proxy để gửi tới backend
gcloud compute url-maps create dvwa-shop-loadbalancer --default-service dvwa-backend
gcloud compute target-http-proxies create dvwa-shop-proxy --url-map dvwa-shop-loadbalancer
- Tạo forwarding rule cho Load Balancer
gcloud compute forwarding-rules create dvwa-rule --global --target-http-proxy=dvwa-shop-proxy --ports=80
Step 4. Kiểm tra xem các lỗ hổng bảo mật đã "hoạt động chưa"
- Test Cross Site Scripting (XSS)
- Test Remote Code Execution
curl -Ii http://35.188.107.32:8000/ftp?doc=/bin/ls
- Scan application
curl -Ii http://35.188.107.32:8000 -H "User-Agent: blackwindow"
3.3. Triển khai Cloud Armor WAF
Step 1 . Xem danh sách các rules được thiết lập sẵn từ Google
gcloud compute security-policies list-preconfigured-expression-sets
Step 2 Tạo Cloud Armor security policy
gcloud compute security-policies create sun_security --description "Block with OWASP ModSecurity CRS"
Bước này bạn cần liên hệ với Google để mở Quota
Step 3. Bật tính năng WAF cho Cloud Armor
- Update security policy để block LFI
gcloud compute security-policies rules create 9000 --security-policy sun_security --description "block local file inclusion" --expression "evaluatePreconfiguredExpr('lfi-stable')" --action deny-403
- Update security policy để block RCE
gcloud compute security-policies rules create 9001 --security-policy sun_security --description "block rce attacks" --expression "evaluatePreconfiguredExpr('rce-stable')" --action deny-403
- Update security policy để block session fixation
gcloud compute security-policies rules create 9004 --security-policy sun_security --description "block session fixation attacks" --expression "evaluatePreconfiguredExpr('sessionfixation-stable')" --action deny-403
- Update security policy để protocol attacks
gcloud compute security-policies rules create 9003 --security-policy sun_security --description "block protocol attacks" --expression "evaluatePreconfiguredExpr('protocolattack-stable')" --action deny-403
Step 4. Tấn công lại OWASP Juice Application sau khi đã thiết lập các chính sách bảo mật
- Test Cross Site Scripting (XSS) : Không thành công, hành động bị ghi vào log
- Test Remote Code Execution : Không thành công, hành động bị ghi vào log
- Test Scanner : Không thành công, hành động bị ghi vào log
4. Tùy biến rules Cloud Armor
Google Cloud Armor cho phép người dùng viết các rule tự định nghĩa để nâng cao mức độ cá nhân hóa trong bảo mật ứng dụng .
Các rule được định nghĩa thông qua 2 phương pháp cơ bản :
- Basic match condition : Câu lệnh điều kiện chứa IP hoặc một dải IP
- Advanced match condition : Chứa một “expression” để so sánh thuộc tính của một request.
“Expression” của Advanced match condition là một thành phần mở rộng của CEL ( Ngôn ngữ biểu thức chung của Google)
Một expression bao gồm 2 thành phần::
- Operations
- Attributes
Ta có một số rules cơ bản như sau được định nghĩa như sau :
- Cho phép hoặc từ chối truy cập dựa trên dải IP
inIpRange(origin.ip, '9.9.9.0/24')
inIpRange(origin.ip, '2001:db8::/32')
- Cho phép từ chối truy cập bằng một Cookie cụ thể
has(request.headers['cookie']) && request.headers['cookie'].contains('80=BLAH')
- Cho phép yêu cầu hoặc từ chối request có referer non-empty
has(request.headers['referer']) && request.headers['referer'] != ""
Cho phép hay từ chối IP một quốc gia:
origin.region_code == 'AU'
5. Chế độ Adaptive Protection
Adaptive Protection được xây dựng trên mô hình machine-learning , tự động hóa những công việc sau :
- Phát hiện và cảnh báo về hoạt động bất thường
- Tạo chữ ký mô tả cuộc tấn công tiềm năng
- Tạo rules ngăn chặn cuộc tấn công (Người dùng quyết định sẽ áp dụng hay không)
Chính sự hiệu quả của Adaptive Protection cùng với cấu hình chính xác từ Cloud Armor đã chặn đừng 46 triệu request mỗi giây, để người dùng vẫn có thể làm việc bình thường trong "cơn bão" DDOS lớn nhất trong lịch sử mà không ảnh hưởng gì.