Mẫu dữ liệu thử nghiệm và các phương án thử nghiệm

Một phần của tài liệu Xây dựng giải pháp chống tấn công từ chối dịch vụ trên tầng ứng dụng cho websites (Trang 45)

internet.

Để quá trình thử nghiệm đơn giản ta dùng công cụ GoldenEye có nhiều options phù hợp để thử nghiệm với đường dẫn như sau:

https://github.com/jseidl/GoldenEye . Với công cụ này ta có thể thử nhiều

kiểu tấn công cũng như qua mặt các công cụ bảo vệ chống tấn công từ chối dịch vụ như thay đổi useragent, dùng các method khác nhau. Công cụ dùng để theo dõi tải của server là netdata có thẻ tải từ đường dẫn https://github.com/firehol/netdata. Hệ thống thử nghiệm sẽ là server cài web mã nguồn mở rất phổ biến là wordpress với cấu hình như sau:

Cpu: 2 cores – 2.5Ghz Ram: 2 GB

Web service: apache2

Test 1: Dùng công cụ tấn công trực tiếp vào hệ thống website với lệnh như sau python goldeneye.py http://192.168.100.117

Hình 7. Tấn công trực tiếp vào website.

Test 2: tấn công vào website khi web được bảo vệ qua nginx với module

https://github.com/yuri-gushin/Roboo. Code này cấu hình whitelist useragent là

googlebot để cho bot tìm kiếm có thể vào được website. Khả năng tấn công tương tự với trường hợp test 1 người tấn công chỉ cần thay đổi useragent thành googlebot là có thể hoàn toàn qua mặt được hệ thống bảo vệ. Thử nghiệm với câu lệnh

python goldeneye.py http://192.168.106.189:8080/ --useragent google.txt

Hình 8. Tấn công thông qua hệ thống nginx cấu hình bảo vệ với roboo.

Test 3: Tấn công vào website khi đã được bảo vệ bằng hệ thống chống tấn công. Thực hiện bằng câu lệnh

python goldeneye.py http://192.168.106.189:8080/

Hình 9. Tấn công vào website khi đã được bảo vệ bởi hệ thống chống tấn công từ chối dịch vụ.

3.2.2. Thử nghiệm với công cụ tấn công dùng mô phòng browser để qua

mặt được cookie xác thực.

Code để tấn công xử dụng module selenium của python để lấy cookie xác thực lần đầu tiên sau đó dùng cookie này để tiến hành tấn công vào server website đã được hệ thống chống tấn công từ chối dịch vụ bảo vệ. Mã này dùng để thử nghiệm hoạt động của module giới hạn số requet của người dùng. Nếu request vượt quá số cho phép thì người dùng sẽ buộc phải xác thực lại bằng captcha để tiếp tục truy cập vào được website.

Hình 10. Tấn công vào website với mã tự viết.

3.3. Phân tích đánh giá kết quả thử nghiệm.

Qua thử nghiệm cho thấy hệ thống có khả năng cản lọc và phân biệt các request hợp lệ với request tấn công rất tốt. Trường hợp dùng các công cụ phổ biến trên internet hệ thống có khả năng cản lọc tất cả các request tấn công không cho các request đó vào trong làm quá tải hệ thống bên trong. Cùng vào đó khi chạy hệ thống không đòi hỏi quá nhiều tài nguyên xử lý cũng như bộ nhớ ram để chạy do đó khi triển khai trong thực tế có thể cài đặt hệ thống trên máy chủ có cấu hình thấp hơn để bảo vệ hệ thống chính. Do không đòi hỏi phần cứng lớn nên chi phí khi triển khai thêm hệ thống khi bảo vệ là không lớn và chấp nhận được đối với các trang thương mại điện tử cỡ vừa và nhỏ. Kết quả thử nghiệm cho thấy việc áp dụng nhiều mức độ bảo vệ khác nhau đạt hiệu quả rất tốt khi chặn tấn công từ chối dịch vụ ngay với cả nhưng mã tấn công được viết riêng kỹ nhất. Phương pháp xác thực bằng captcha là rào cản gần như không thể vượt qua đối với người tấn công từ chối dịch vụ khi muốn tấn côngvào website. Hệ thống xác thực bot đạt hiệu quả tốt và làm cho hệ thống khác biệt với các mã nguồn được phổ biến rộng rãi trên internet. So sánh mức độ xử dụng tài nghiên so với công cụ roboo với các tính năng khá mạnh cho nginx hệ thống cho thấy mình tốn ít tài nguyên hơn tuy với nhiều logic cần xử lý hơn.

Hình 11. Chạy thử để đánh giá tải của hệ thống so sánh với hệ thống dùng module roboo.

Hình 12. Cpu xử dụng khi website được bảo vệ với module roboo và nginx.

Hình 13. Cpu xử dụng khi website được bảo vệ bằng hệ thống chống tấn công tự xây dựng.

Hình 14. Tải của hệ thống khi dùng module roboo.

Hình 15. Tải của hệ thống chống tấn công tự xây dựng.

Trong thời gian đồ án hoàn thành hệ thống đã được dùng để bảo vệ website thực tế trước tấn công từ chối dịch vụ với cường độ lớn với cấu hình là:

Cpu: 2 CPU x 2.0 GHZ Ram: 2GB

Hdd: 40GB

Hệ điều hành: Freebsd

Hệ thống chịu tải được với mức độ tấn công là 40000 requests/giây

Hình 16. Tải của hệ thống khi đang bị tấn công từ chối dịch vụ

KẾT LUẬN

Qua quá trình thử nghiệm cho thấy hệ thống có những kết quả khá tốt đạt được các yêu cầu đặt ra như: tính trong suốt với người dùng bình thường, khả năng chịu tải, xác thực được bot của các trang tìm kiếm, có nhiều mức xác thực khác nhau để phù hợp với các trường hợp. Tuy vậy do thời gian thực hiện đồ án có hạn nên cũng còn rất nhiều thành phần module cần thiết cần được phát triển để hệ thống có thể chạy được và có giá trị trong thực tế như:

- Cần có giao diện quản lý cho người xử dụng.

- Tích hợp thêm phần bảo vệ tấn công từ chối dịch vụ ở layer 3&4.

- Module cho phép người dùng cấu hình thêm các mức bảo vệ của hệ thống ứng với từng đường dẫn trên website.

Thêm vào đó để phát triển thành một hệ thống tường lửa web thì các công việc sẽ phải làm tiếp theo trong tương lai là:

- Tích hợp bộ rules chống tấn công website như: xss, sqli, lfi... vào hệ thống bằng cách chuyển toàn bộ rules của modsecurity sang dùng luajit. - Xây dựng module cache để giảm tải cho phía website của người dùng. - Tích hợp hệ thống thành một giải pháp đi cùng các hệ thống CDN. - Phát triển các module xác thực với request ajax và websocket.

- Module quản lý xác thực thay vì dùng shmem cần chuyển sang dùng database dạng key-value để có thể mở rộng hệ thống.

TÀI LIỆU THAM KHẢO

[1] Matthieu Tourne, Pushing Nginx to its limit with Lua

https://blog.cloudflare.com/pushing-nginx-to-its-limit-with-lua/

[2] Google, Verifying Googlebot

https://support.google.com/webmasters/answer/80553?hl=en

[3] Facebook, The Facebook Crawler

https://developers.facebook.com/docs/sharing/webmasters/crawler

[4] Microsoft, Verify Bingbot

http://www.bing.com/toolbox/verify-bingbot

[5] Stavros Korokithakis, Writing an nginx authentication module in Lua

https://www.stavros.io/posts/writing-an-nginx-authentication-module-in-lua/

[6] Rick Nelson, Mitigating DDoS Attacks with NGINX and NGINX Plus https://www.nginx.com/blog/mitigating-ddos-attacks-with-nginx-and-nginx-plus/ [7] Smartman, Install Roboo to Ubuntu for DDOS protection.

http://marguspala.com/install-roboo-to-ubuntu-for-ddos-protection/ [8] Yaoweibin, support google's reCAPTCHA with Nginx

https://github.com/yaoweibin/nginx_http_recaptcha_module

[9] Gergely Nemeth, Web Authentication Methods Explained

https://blog.risingstack.com/web-authentication-methods-explained/

[10] Incapsula, Distributed Denial of Service Attack (DDoS) Definition

https://www.incapsula.com/ddos/ddos-attacks/

[11] Incapsula, HTTP Flood

https://www.incapsula.com/ddos/attack-glossary/http-flood.html

[12] Incapsula, Slowloris

https://www.incapsula.com/ddos/attack-glossary/slowloris.html

[13] Incapsula, DDoS Attack Scripts

https://www.incapsula.com/ddos/ddos-attack-scripts.html

[14] Debra L. Cook, William G. Morein, Angelos D. Keromytis, Vishal Misra and Daniel Rubenstein, Department of Computer Science, WebSOS: Protecting Web Servers From DDoS Attacks

PHỤ LỤC init.lua

--- -- load default libs

--- resty_sha256 = require "resty.sha256"

str = require "resty.string" --- -- config --- key = "thisisverysecretstuff" cookie_windows = 300 recaptcha_secret = "6LeMdSgTAAAAALzP4B1U-LkqqSwnpUsEwve3qx1O" ecofair_cookie_name = "ecofair" recaptcha_auth_threhold = 5 --- -- read all templates

---

recaptcha_check_html = io.open('/ecofair/web/captcha.html', 'r'):read('*all') ---

access_list = ngx.shared.ecofair_accesslist https = require 'ssl.https'

cjson = require 'cjson'

--- -- facebook's bot authen function

--- local iputils = require("resty.iputils")

iputils.enable_lrucache() local facebook_ips = { "103.4.96.0/22", "129.134.0.0/16", "157.240.0.0/16", "173.252.64.0/18", "173.252.64.0/19", "173.252.70.0/24", "173.252.96.0/19", "179.60.192.0/22", "179.60.192.0/24", "179.60.193.0/24", "179.60.194.0/24", "179.60.195.0/24", 45

"185.60.216.0/22", "185.60.216.0/24", "185.60.217.0/24", "185.60.218.0/24", "185.60.219.0/24", "204.15.20.0/22", "31.13.24.0/21", "31.13.64.0/18", "31.13.64.0/19", "31.13.64.0/24", "31.13.65.0/24", "31.13.66.0/24", "31.13.67.0/24", "31.13.68.0/24", "31.13.69.0/24", "31.13.70.0/24", "31.13.71.0/24", "31.13.72.0/24", "31.13.73.0/24", "31.13.74.0/24", "31.13.75.0/24", "31.13.76.0/24", "31.13.77.0/24", "31.13.78.0/24", "31.13.79.0/24", "31.13.80.0/24", "31.13.81.0/24", "31.13.82.0/24", "31.13.83.0/24", "31.13.84.0/24", "31.13.85.0/24", "31.13.86.0/24", "31.13.87.0/24", "31.13.88.0/24", "31.13.89.0/24", "31.13.90.0/24", "31.13.91.0/24", "31.13.92.0/24", "31.13.93.0/24", "31.13.94.0/24", "31.13.95.0/24", "31.13.96.0/19", "45.64.40.0/22", 46

"66.220.144.0/20", "66.220.144.0/21", "66.220.152.0/21", "66.220.159.0/24", "69.171.224.0/19", "69.171.224.0/20", "69.171.239.0/24", "69.171.240.0/20", "69.171.253.0/24", "69.171.255.0/24", "69.63.176.0/20", "69.63.176.0/21", "69.63.176.0/24", "69.63.178.0/24", "69.63.184.0/21", "69.63.186.0/24", "74.119.76.0/22", } facebook_whitelist = iputils.parse_cidrs(facebook_ips) --- -- recaptcha authen function

--- function verify_captcha(g_recaptcha_response)

--- -- https://www.google.com/recaptcha/api/siteverify

-- secret Required. The shared key between your site and ReCAPTCHA.

-- response Required. The user response token provided by the reCAPTCHA to the user and provided to your site on.

-- remoteip Optional. The user's IP address.

--- local recaptcha_url = "https://www.google.com/recaptcha/api/siteverify" local body, code, headers, status = https.request(recaptcha_url, "secret=" .. recaptcha_secret .. "&response=" .. g_recaptcha_response)

local data = cjson.decode(body)

--- -- {

-- "success": true|false,

-- "challenge_ts": timestamp, // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)

-- "hostname": string, // the hostname of the site where the reCAPTCHA was solved

-- "error-codes": [...] // optional

-- } --- if (data['success']) then return true end return false end ecofair.lua --- -- search's bot authentication--

--- local useragent = ngx.var.http_user_agent

if useragent == nil then useragent = ""

end

--- -- google's bot authentication

-- https://support.google.com/webmasters/answer/80553?hl=en ---

Một phần của tài liệu Xây dựng giải pháp chống tấn công từ chối dịch vụ trên tầng ứng dụng cho websites (Trang 45)

Tải bản đầy đủ (PDF)

(60 trang)