Một giải pháp tôi thường sử dụng, xin share cho các bạn tham khảo nhé.
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 mà 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% us và RAM 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é.