Ở phần I mình đã hướng dẫn các bạn sử dụng
Phần II: Cài đặt CDDoS Layer4 Mapping – Hỗ trợ CDDoS Proxy Protection chặn tấn công từ Layer 3-4
Xin chào các bạn, trong phần hướng dẫn tiếp theo này mình sẽ sử dụng 2 máy chủ: một máy giả lập thành kẻ tấn công từ chối dịch vụ (attacker) và một máy làm mục tiêu bị tấn công (victim).
Trên máy làm mục tiêu tấn công, mình có 4 trường hợp về việc chạy website như sau: (4 domain cùng trỏ vào 1 hosting LAMP chạy source web Joomla CMS)
1. http://cloudflare-vddos-web.i-com.cf:80 (Traffic proxy đi thông qua Cloudflare's CDN & CDDoS Proxy) 2. http://cloudflare-web.i-com.cf:8080 (Traffic proxy đi thông qua Cloudflare's CDN) 3. http://vddos-web.i-com.cf:8081 (Traffic proxy đi thông qua CDDoS Proxy) 4. http://direct-web.i-com.cf:8082 (Kết nối trực tiếp vào Web Server Apache)
[root@www ]# netstat -lntup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 864/httpd tcp 0 0 0.0.0.0:8082 0.0.0.0:* LISTEN 864/httpd tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5747/nginx: master tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 5747/nginx: master
OK, Ở bước 1: tại máy của kẻ tấn công attacker sẽ dò tìm xem mục tiêu cần tấn công có những thông tin gì bằng công cụ curl:
4. http://direct-web.i-com.cf:8082 (Kết nối trực tiếp vào Web Server Apache)
[root@attacker ~ ]# curl -L http://direct-web.i-com.cf:8082 <!DOCTYPE html> <html lang="en-gb" dir="ltr"> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta charset="utf-8" /> <base href="http://direct-web.i-com.cf:8082/" /> <meta name="generator" content="Joomla! - Open Source Content Management" /> <title>Home</title> <link href="/index.php?format=feed&type=rss" rel="alternate" type="application/rss+xml" title="RSS 2.0" /> <link href="/index.php?format=feed&type=atom" rel="alternate" type="application/atom+xml" title="Atom 1.0" /> <link href="/templates/protostar/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" /> <link href="http://direct-web.i-com.cf:8082/index.php/component/search/?Itemid=435&format=opensearch" rel="search" title="Search joomla" type="application/opensearchdescription+xml" /> <link href="/templates/protostar/css/template.css?b07c885111c1b29246c60f35646efe84" rel="stylesheet" /> <link href="//fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet" /> <style> </head>
=> Bạn có thể thấy rõ mã HTML của website bằng công cụ curl get về bởi vì nó không hề bị một sự thách thức hoặc kiểm tra nào bởi CDDoS Proxy
2. http://cloudflare-web.i-com.cf:8080 (Traffic proxy đi thông qua Cloudflare’s CDN)
[root@attacker ~ ]# curl -L http://cloudflare-web.i-com.cf:8080 <!DOCTYPE html> <html lang="en-gb" dir="ltr"> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta charset="utf-8" /> <base href="http://cloudflare-web.i-com.cf:8080/" /> <meta name="generator" content="Joomla! - Open Source Content Management" /> <title>Home</title> <link href="/index.php?format=feed&type=rss" rel="alternate" type="application/rss+xml" title="RSS 2.0" /> <link href="/index.php?format=feed&type=atom" rel="alternate" type="application/atom+xml" title="Atom 1.0" /> <link href="/templates/protostar/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" /> <link href="http://cloudflare-web.i-com.cf:8080/index.php/component/search/?Itemid=435&format=opensearch" rel="search" title="Search joomla" type="application/opensearchdescription+xml" /> <link href="/templates/protostar/css/template.css?b07c885111c1b29246c60f35646efe84" rel="stylesheet" /> <link href="//fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet" /> <style> </head>
=> Cloudflare mặc định thì không thử thách công cụ của bạn khi công cụ ấy tiếp xúc với website cộng với việc CDDoS Proxy cũng không có mặt để đưa ra thách thức kiểm tra thế nên bạn cũng vẫn có thể thấy source HTML của trang web bằng công cụ curl mặc dầu nó đi xuyên qua CDN của CloudFlare.
1. http://cloudflare-vddos-web.i-com.cf:80 (Traffic proxy đi thông qua Cloudflare’s CDN & CDDoS Proxy)
[root@attacker ~ ]# curl -L http://cloudflare-vddos-web.i-com.cf:80 <html><body><script type="text/javascript" src="/aes.min.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f9c5842006d8c3552b5dba4d25c2c8b2"),b=toNumbers("ad396baa8934584ef179ae25af75b6b2"),c=toNumbers("4d5571fddc3d46ce22abf0636806b0aa");document.cookie="vDDoS="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/";location.href="http://cloudflare-vddos-web.i-com.cf/?d=1";</script></body></html>
=> Có thể thấy trong trường hợp này bạn đã không thể vượt qua sự kiểm tra của CDDoS Proxy bởi vì curl không phải là một trình duyệt đầy đủ để mà có thể xử lý được mã javascript mà CDDoS Proxy đưa ra trong bài test: “browser hay tool?”
3. http://vddos-web.i-com.cf:8081 (Traffic proxy đi thông qua CDDoS Proxy)
[root@attacker ~ ]# curl -L http://vddos-web.i-com.cf:8081 <html><body><script type="text/javascript" src="/aes.min.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("7187a67c06c01ec70fa705e69c985366"),b=toNumbers("d5ae1b31d36068285e139d0823c8f490"),c=toNumbers("2849732479830475c796dd532ebee31e");document.cookie="vDDoS="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/";location.href="http://vddos-web.i-com.cf:8081/?d=1";</script></body></html>
=> Cũng tương tự kết quả ở trên bạn đã không thể vượt qua sự kiểm tra của CDDoS Proxy bởi vì curl không phải là một trình duyệt đầy đủ như đã đề cập.
Kết thúc bước 1.
Bước 2: chúng ta sẽ cố gắn dùng một công cụ để truy vấn liên hồi giả lập một ý định tấn công từ chối dịch vụ vào 4 website mục tiêu trên (dùng một số tools nào đó có khả năng làm việc này như HTTP benchmark hoặc DOS, SYN, HTTP flood… mà bạn vẫn thường hay sử dụng để DOS site người khác ấy ^^).
Mình sẽ tiến hành tấn công ở mỗi trường hợp như sau và đưa ra kết quả tương ứng có tấn công được và được gì hay không:
4. http://direct-web.i-com.cf:8082 (Kết nối trực tiếp vào Web Server Apache)
[root@attacker ~ ]# Attack ->->->-> http://direct-web.i-com.cf:8082
=> Bạn sẽ thấy ngay tình trạng High load trên các tài nguyên cpu + ram + bw … bởi vì không có một sự giảm thiểu kiểm tra hay thách thức nào từ Web Server Apache:
2. http://cloudflare-web.i-com.cf:8080 (Traffic proxy đi thông qua Cloudflare’s CDN)
[root@attacker ~ ]# Attack ->->->-> http://cloudflare-web.i-com.cf:8080
=> Đối với các công cụ tấn công SYN vào Layer 3-4 cũng không có gì xảy ra, vì bạn chỉ đang tấn công vào IP của Cloudflare, tuy nhiên khi dùng công cụ tấn công Layer 7 thì tình trạng tương tự bên trên sẽ diễn ra trên trang web mục tiêu: high load trên các tài nguyên cpu + ram + bw …
3. http://vddos-web.i-com.cf:8081 (Traffic proxy đi thông qua CDDoS Proxy)
[root@attacker ~ ]# Attack ->->->-> http://vddos-web.i-com.cf:8081
=> Công cụ tấn công không vượt qua được sự kiểm tra của CDDoS Proxy -> Apache httpd daemon không bị high load:
1. http://cloudflare-vddos-web.i-com.cf:80 (Traffic proxy đi thông qua Cloudflare’s CDN & CDDoS Proxy)
[root@attacker ~ ]# Attack ->->->-> http://cloudflare-vddos-web.i-com.cf:80
=> Tương tự bên trên công cụ tấn công không vượt qua được sự kiểm tra của CDDoS Proxy -> Apache httpd daemon không bị high load:
Nếu bạn không có công cụ nào để tấn công mình đề nghị có thể dùng ab rất đơn giản (là một tools HTTP benchmark) để test thử:
ab -n100000 -c500 http://direct-web.i-com.cf:8082/ # High load ab -n100000 -c500 http://cloudflare-web.i-com.cf:8080/ # High load ab -n100000 -c500 http://vddos-web.i-com.cf:8081/ # Bình thường ab -n100000 -c500 http://cloudflare-vddos-web.i-com.cf:80/ # Bình thường
Bước 3: Tất nhiên là những gì diễn ra bên trên nãy giờ chỉ là một bài test với trường hợp 1 Attacker Server đấu với 1 Target Server. Chuyện gì sẽ xảy ra nếu hơn >1000 Attacker Server đấu với 1 Target Server?
Theo như nguyên lý hoạt động mình đã mô tả về CDDoS Proxy tất nhiên nó cũng sẽ không cho hơn >1000 Bots đó vượt qua bài test chỉ vì chúng quá đông, không bao giờ (trừ phi số bots đó xử lý được javascript), nhưng nếu quá nhiều bots tấn công đồng loạt vào server của bạn -> máy chủ của bạn vẫn sẽ bị high load lý do là vì dành tốn thời gian để đưa ra bài test cho cái bọn hơn >1000 con bots đó. Bởi do đó, bạn nên gửi danh sách hơn >1000 Bots (IP Address/Dãy IP Range của tụi nó) tới các công cụ ở Layer 3-4 để cho nó BLOCK/DROP nó luôn (đó có thể là Hardware Firewall, Iptables, CloudFlare Firewall… vâng vâng) tùy theo mô hình mà bạn đang muốn xây dựng.
Làm sao có thể làm được điều trên?
Câu trả lời là sau khi cài xong CDDoS Proxy Protection có thể cài thêm CDDoS Layer4 Mapping: https://github.com/duy13/vDDoS-Layer4-Mapping
Công cụ này sẽ giúp cho Layer 3-4 của bạn có một danh sách IP cụ thể để DROP/CAPTCHA nó từ xa ở Layer 3-4 trước khi gói tin đó được chuyển lên các tầng trên trong mô hình OSI nữa để xử lý.
Install CDDoS Layer4 Mapping:
[root@attacker ~ ]# curl -L https://github.com/duy13/vDDoS-Layer4-Mapping/raw/master/vddos-layer4-mapping -o /usr/bin/vddos-layer4 chmod 700 /usr/bin/vddos-layer4 /usr/bin/vddos-layer4
Nếu bạn đang ý định dùng CloudFlare:
Đăng nhập vào CloudFlare.com > Add Your Website > Overview > Zone ID (Lấy Zone ID của bạn) Email > My Setting > API Key > Global API Key > View API Key (Lấy API Key của bạn)
Nếu bạn dùng kết nối trực tiếp, chặn IP bằng CSF & Iptables:
Homepage: https://configserver.com/cp/csf.html
Cài CSF như sau:
cd /usr/src/ wget 'https://download.configserver.com/csf.tgz' tar -xvf csf.tgz cd csf sh install.sh chkconfig --levels 235 csf on chkconfig --levels 235 lfd on
Cấu hình CSF (tùy theo cách cấu hình mà bạn vẫn hay dùng với CSF):
cd /etc/csf/ sed -i 's/TESTING = "1"/TESTING = "0"/g' /etc/csf/csf.conf
Restart CSF:
csf -r && csf -q && service lfd restart
Để sử dụng vDDoS-Layer4-Mapping bạn gõ:
/usr/bin/vddos-layer4
(Chọn tùy chọn 2 hoặc 5 tùy vào ý định của bạn)
OK bây giờ, Ở bước 4: chúng ta sẽ lặp lại bước 2 một lần nữa, đó là cố gắn dùng công cụ tấn công tẩn vào các mục tiêu website xem chuyện gì sẽ xảy ra khi mà có mặt CDDoS-Layer4-Mapping đang chạy và scan:
3. http://vddos-web.i-com.cf:8081 (Traffic proxy đi thông qua CDDoS Proxy)
[root@attacker ~ ]# Attack ->->->-> http://vddos-web.i-com.cf:8081
=> Cũng vẫn như cũ: không thể vượt qua bài kiểm tra của CDDoS Proxy -> Apache httpd daemon vẫn không high load. Tuy nhiên khi kiểm tra file /etc/csf/csf.deny bạn sẽ thấy Ip của Attacker đã bị CSF khóa mất:
[root@www ] cat /etc/csf/csf.deny 54.164.194.1
1. http://cloudflare-vddos-web.i-com.cf:80 (Traffic proxy đi thông qua Cloudflare’s CDN & CDDoS Proxy)
[root@attacker ~ ]# Attack ->->->-> http://cloudflare-vddos-web.i-com.cf:80
=> Cũng vẫn như cũ: không thể vượt qua bài kiểm tra của CDDoS Proxy -> Apache httpd daemon vẫn không high load. Tuy nhiên khi kiểm tra qua trang Cloudflare Firewall bạn sẽ thấy IP Address của Attacker Server đã bị CDDoS-Layer4-Mapping gửi cho CloudFlare khóa lại buộc nhập CAPTCHA mới cho qua:
Cuối cùng bước 5: Nếu như không may, bạn đang phải nằm dưới một trận tấn công không thể tin nổi với số lượng IP tham gia tấn công lên tới vài trăm ngàn và chúng đều có thể vượt qua bài test Javascript của CDDoS Proxy => bạn có thể thử bật chức năng Captcha-All-Country Mode của CDDoS Layer4 Mapping. Nó sẽ khiến CloudFlare bật CAPTCHA cho 251 quốc gia trên toàn thế giới => việc này tuy sẽ gây một chút bất tiện cho người dùng khi vào web phải qua CAPTCHA tuy nhiên nó sẽ giúp giữ sự sống còn cho trang bạn. (Nhớ thêm Whitelist cho các botsearch).
Chúc bạn may mắn!