Tổng lượt truy cập

Wednesday, March 26, 2014

Đánh giá hiệu năng hệ thống website chịu đựng 1 cuộc tấn công

Một giải pháp tôi thường sử dụng, xin share cho các bạn tham khảo nhé.

. 5

. 18

Mô hình:
=> Phần 1, 2 đơn giản dành cho các bạn tự xây dựng nhé :) 


-   Khi chưa kích hoạt snort_inline:
-              Thông số máy chủ web server

Figure : Thông số cấu hình webserver


Figure : Băng thông hệ thống webserver
-          Qua Figure : Chúng ta thấy băng thông hệ thống webserver là 258Mbits/sec, và trong 10 sec chúng ta có thể gửi được tối đa 308 Mbytes tới webserver.
-          Để tính khả năng chịu đựng tối đa webserver trước một cuộc xâm nhập, chúng ta có thể dựa vào lỗ hổng slowhttp để xâm nhập vào hệ thống webserver:
Lỗ hổng slowhttp (bản chất là một tấn công DoS dựa vào quá trình bắt tay của giao thức TCP): hacker sẽ thực hiện mở các kết nối liên tiếp tới webserver và cố giắng giữ mỗi kết nối càng lâu càng tốt. Để làm được điều đó hacker sẽ thực hiện bằng cách gửi các yêu cầu (request) tới webserver nhưng không hoàn chỉnh, lúc này webserver luôn gi các nguồn tài nguyên bận rộn để chờ đợi để xử lý tiếp các phần còn lại của yêu cầu. Vì vậy hacker lợi dụng gửi liên tiếp các yêu cầu không bao giờ đưa yêu cầu kết thúc, dẫn đến webserver giữ quá nhiều tài nguyên bận rộn với nhiều yêu cầu (kết nối) hacker gửi đến. Điều đó đã tạo ra một tấn công từ chối dịch vụ. Đến một ngưỡng nào đó webserver không còn tài nguyên đẻ xử lý các yêu cầu khác, làm cho những truy cập hợp lệ từ người dùng hợp lệ không thể truy cập được webserver nữa.  Lợi dụng lỗ hổng này chúng ta có thể thực hiện tấn công để đo hiệu năng và khả năng chịu tải của webserver

-          Câu lệnh thực hiện tấn công slowhttp vào webserver.


Figure : Cho thấy webserver cho phép tối đa được 343 kết nối đến webserver và lúc này service available No (trong khoảng thời gian 10 giây: tức lúc này tương đương với 64 byte dữ liệu được gửi kèm theo, sau đó thử truy cập webserver và kết quả không truy cập được webserver nữa 


Đo băng thông hệ thống  cho thấy băng thông hệ thống khi có 343 kết nối tới khoảng 0.7 Mbits/sec và một kết nối chỉ gửi được khoảng 0.8 Mbytes trong 10 sec
Giải pháp xử lý :
-          Cấu hình giới hạn kết nối tới trong cùng thời điểm (có thể thực hiện firewall hoặc apache, recommend thực hiện firewall , vì firewall sẽ chặn kết nối vượt quá sự cho phép trước khi vào webserver sẽ không ảnh hưởng đến hiệu năng webserver)
o   Hạn chế: Đối với các webserver có lượng truy cập lớn, thì việc giới hạn kết nối không phải giải pháp hay và nếu thực hiện theo giải pháp này chúng ta phải định lượng được số người truy cập một cách chính xác.
-          Hardening apache.
o   Cách này chỉ hạn chế chứ không giải quyết triệt để cuộc xâm nhập
-          Sử dụng firewall app (modsecurity)
o   Không nằm trong giới hạn của bài nghiên cứu này. 
-          Phân tích và dự đoán dấu hiện xâm nhập viết rules chặn xâm nhập (Xử lý trên snort_inline)
Giải pháp hoàn chỉnh chặn toàn bộ xâm nhập mà không phải chặn kết nối
              
 Giải pháp snort_inline: (đây là giải pháp xử lý tối ưu nhất)
-          Thực hiện xâm nhập và sử dụng công cụ tcpdum để bắt gói tin, ta thu được nội dung như sau:
52, bad cksum 0 (->376d)!)
    10.36.10.115.57010 > 10.39.11.55.http: Flags [.], cksum 0x8449 (incorrect -> 0x7a07), ack 1, win 65328, options 
[nop,nop,TS val 317572454 ecr 317572454], length 0
        0x0000:  4500 0034 7f34 4000 4006 0000 c0a8 0169  E..4.4@.@......i
        0x0010:  c0a8 0169 deb2 0050 6a91 b7b5 5fc3 67ad  ...i...Pj..._.g.
        0x0020:  8010 ff30 8449 0000 0101 080a 12ed c566  ...0.I.........f
        0x0030:  12ed c566                                ...f
11:56:06.872906 IP (tos 0x0, ttl 64, id 1603, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 0 (->b05e)!)     
10.36.10.115.57011 > 10.39.11.55.http: Flags [.], cksum 0x8449 (incorrect -> 0xe6a1), ack 1, win 65328, options
 [nop,nop,TS val 317572454 ecr 317572454], length 0
        0x0000:  4500 0034 0643 4000 4006 0000 c0a8 0169  E..4.C@.@......i
        0x0010:  c0a8 0169 deb3 0050 e79e 5105 5b14 e963  ...i...P..Q.[..c
        0x0020:  8010 ff30 8449 0000 0101 080a 12ed c566  ...0.I.........f
        0x0030:  12ed c566                                ...f
11:56:06.877862 IP (tos 0x0, ttl 64, id 42608, offset 0, flags [DF], proto TCP (6), length 64, bad cksum 0 (->1025)!)
    10.36.10.115.57012 > 10.39.11.55.http: Flags [S], cksum 0x8455 (incorrect -> 0x4db9), seq 1017984763, win 1,
 options [mss 16322,nop,wscale 0,nop,nop,TS val 317572454 ecr 0,sackOK,eol], length 0
        0x0000:  4500 0040 a670 4000 4006 0000 c0a8 0169  E..@.p@.@......i
        0x0010:  c0a8 0169 deb4 0050 3cad 36fb 0000 0000  ...i...P<.6.....
        0x0020:  b002 0001 8455 0000 0204 3fd8 0103 0300  .....U....?.....
        0x0030:  0101 080a 12ed c566 0000 0000 0402 0000  .......f........
ð Như vậy hacker thực hiện tấn công đến webserver đến khi webserver không còn tài nguyên để xử lý kết nối, lúc này kết nối đến webserver là 343 kết nối. Nội dung thu được như đoạn nội dung bôi màu vàng trên,  ý nghĩa của đoạn nội dung bôi màu vàng là hacker liên tục đến webserver đến khi webserver nhận yêu cầu seq=1017984763 thì webserver không còn tài nguyên để xử lý các kết nối khác nữa, các yêu cầu gửi đi mang nội dung mss 16322,nop,wscale 0,nop,nop,TS val 317572454 ecr 0,sackOK,eol], length 0, . Hacker đã sử dụng lệnh nop để gửi các yêu cầu liên tục và lặp lại, mỗi request đều đính kèm gói tin dung lượng 32 bye=val 317572454  và đây là massege thứ 16322
-          Log apache:
10.36.10.115 - - [12/Nov/2013:10:20:56 +0700] "GET / HTTP/1.1" 200 34 "http://code.google.com/p/slowhttptest/"
 "Opera/9.80 (Macintosh; Intel Mac OS X 10.7.0; U; Edition MacAppStore; en) Presto/2.9.168 Version/11.50"
10.36.10.115 - - [12/Nov/2013:10:20:56 +0700] "GET / HTTP/1.1" 200 34 "http://code.google.com/p/slowhttptest/"
 "Opera/9.80 (Macintosh; Intel Mac OS X 10.7.0; U; Edition MacAppStore; en) Presto/2.9.168 Version/11.50"
10.36.10.115 - - [12/Nov/2013:10:20:56 +0700] "GET / HTTP/1.1" 200 34 "http://code.google.com/p/slowhttptest/" 
"Opera/9.80 (Macintosh; Intel Mac OS X 10.7.0; U; Edition MacAppStore; en) Presto/2.9.168 Version/11.50"
10.36.10.115 - - [12/Nov/2013:10:20:56 +0700] "GET / HTTP/1.1" 200 34 "http://code.google.com/p/slowhttptest/"
 "Opera/9.80 (Macintosh; Intel Mac OS X 10.7.0; U; Edition MacAppStore; en) Presto/2.9.168 Version/11.50"
10.36.10.115 - - [12/Nov/2013:10:20:56 +0700] "GET / HTTP/1.1" 200 34 "http://code.google.com/p/slowhttptest/"
 "Opera/9.80 (Macintosh; Intel Mac OS X 10.7.0; U; Edition MacAppStore; en) Presto/2.9.168 Version/11.50"
10.36.10.115 - - [12/Nov/2013:10:20:56 +0700] "GET / HTTP/1.1" 200 34 "http://code.google.com/p/slowhttptest/"
 "Opera/9.80 (Macintosh; Intel Mac OS X 10.7.0; U; Edition MacAppStore; en) Presto/2.9.168 Version/11.50"
10.36.10.115 - - [12/Nov/2013:10:20:56 +0700] "GET / HTTP/1.1" 200 34 "http://code.google.com/p/slowhttptest/" 
"Opera/9.80 (Macintosh; Intel Mac OS X 10.7.0; U; Edition MacAppStore; en) Presto/2.9.168 Version/11.50"
ð Qua thông tin log tcpdump trên chúng ta thấy hacker đang thực hiện cuộc tấn công DoS bằng cách gửi yêu cầu liên tục, webserver đều trả về mã 200, chứng tỏ webserver vẫn chấp nhận kết nối, qua log apache chúng ta thấy hack đã sử dụng tool slowhttp với code được lấy từ link http://code.google.com/p/slowhttptest
-          Qua phân tích trên chúng ta thực hiện viết rule cho snort_inline
o   Drop tcp any any -> any 80 (content: " mss 16322,nop,wscale 0,nop,nop,TS val 317572342 ecr 0,sackOK,eol "; msg: “http://code.google.com/p/slowhttptest "; )
-          Ý nghĩa rule: Snort sẽ ra lệnh cho firewall drop tất cả kết nối tới webserver qua port 80 mà sử dụng giao thức tcp và có đính kèm nội dung sau  16322,nop,wscale 0,nop,nop,TS val 564374408 ecr 0,sackOK,eol” và mang msg: http://code.google.com/p/slowhttptest  sẽ bị chặn.
-          Apply vào hệ thống snort và thử xâm nhập lại 

 
Hiệu năng của CPU chiếm 2,5% usRAM 935596k  used, chúng ta thấy process snort đang chạy và chiếm 3.1 % hệ thống khi  thì lúc này webserver vẫn hoạt động bình thường

He he, ngon rồi, bạn nào cần tìm hiểu sâu hơn contact với mình nhé.