Phân tích đánh giá kết quả 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 48 - 60)

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 ---

if ngx.re.match(useragent, "googlebot", "i") then -- ngx.say("googlebot")

local socket = require('socket')

google_hostname = socket.dns.tohostname(ngx.var.remote_addr) -- test --

-- google_hostname = socket.dns.tohostname("66.249.66.1") -- ngx.say(google_hostname)

-- test --

if (not google_hostname or not ngx.re.match(google_hostname, "googlebot.com")) then ngx.exit(ngx.HTTP_FORBIDDEN) -- captcha authen end return end --- -- bing's bot authentication --

-- https://udger.com/resources/ua-list/bot-detail?bot=bingbot ---

if ngx.re.match(useragent, "http://www.bing.com/bingbot.htm") then local socket = require("socket")

---

-- https://www.bing.com/webmaster/help/which-crawlers-does-bing-use- 8c184ec0

---

bing_hostname = socket.dns.tohostname(ngx.var.remote_addr)

if (not bing_hostname or not ngx.re.match(bing_hostname, "search.msn.com")) then ngx.exit(ngx.HTTP_FORBIDDEN) end return end ---

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 48 - 60)

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

(60 trang)