You are on page 1of 15

BÀI THỰC HÀNH

TẤN CÔNG TỪ CHỐI DỊCH VỤ (ĐỘI PHÒNG THỦ)

Mục tiêu: Cung cấp học viên khái niệm cơ bản về tấn công từ chối dịch vụ/từ chối
dịch vụ phân tán, các kỹ thuật thực hiện tấn công, phương pháp phát hiện và đề
xuất phương án ngăn chặn tấn công từ chối dịch vụ.
Nội dung thực hành: Mô phỏng tấn công và xây dựng giải pháp phòng chống.
Những dạng tấn công được đề cập trong nội dung bài thực hành gồm:
- Tấn công quét cổng
- Tấn công SYN Flood
- Tấn công Ping of Death
- Tấn công Slowloris
Theo thống kê của IMPERVA, SYN Flood là hình thức tấn công từ chối dịch vụ
phổ biến nhất, chiếm 94,6% các cuộc tấn công DDoS trong năm 2020. Tiếp theo
đó là Ping of Death và Slowloris. Tuy nhiên, học viên được khuyến khích thử
nghiệm cũng như đề xuất giải pháp phòng chống một số dạng tấn công từ chối dịch
vụ khác như NTP Amplification, HTTP Flood, DNS Amplification.
Mạng WAN Phân vùng DMZ

10.0.1.x/24 10.0.2.1

Remote Desktop 10.0.1.1 10.0.2.2 Remote Desktop

Kali Linux (Attacker) pfSense Web service

10.0.1.1:8080 → 10.0.2.2:80

Hình 1. Mô hình triển khai hệ thống (Bài thực hành tấn công từ chối dịch vụ)
I. Mô hình triển khai hệ thống và tổ chức thực hành
Môi hình bài thực hành trong hệ thống được thiết lập gồm 03 máy ảo như minh
họa tại Hình 1. Máy tấn công cài đặt hệ điều hành Kali Linux với đầy đủ công cụ
như quét cổng, hping3 và tấn công slowloris. Máy thứ 2 được đặt trong phân vùng
mạng DMZ, đóng vai trò là máy chủ cung cấp dịch vụ. Ngoài ra còn một máy
pfSense, có nhiệm vụ thu thập, phát hiện, cảnh báo và ngăn chặn tấn công từ bên
ngoài. Mỗi nội dung thực hành được thực hiện bởi 06 học viên, chia thành 02
nhóm:
- Red team: Thực hiện tấn công DoS vào máy chủ dịch vụ.
- Blue team: Đảm bảo dịch vụ luôn hoạt động và tài nguyên hệ thống không
bị chiếm dụng.
II. Nội dung thực hành
Chuẩn bị, khảo sát và tìm hiểu hệ thống bài thực hành
Các công cụ cần tìm hiểu để thực hiện bài thực hành gồm hping3, Saddam (DDoS
Amplification Tools), top và iftop.
1.1. Kết nối tới máy thực hành
Các kịch bản được xây dựng trên hệ thống ảo hóa của phòng thí nghiệm. Học viên
cần thực hiện truy cập từ xa vào các máy ảo để tiến hành các thao tác:
- Bước 1: Nhận địa chỉ IP của máy thực hành từ hướng dẫn.
- Bước 2: Đặt IP tĩnh cho máy đang dùng cùng mạng với máy thực hành.
- Bước 3: Mở tiện ích Remote Desktop Connection. Điền địa chỉ IP của máy
cần truy cập từ xa và nhấn Connect. Nếu xuất hiện thông báo cảnh báo, chọn
Yes để bỏ qua.

- Bước 4: Điền thông tin tài khoản truy cập máy ảo và chọn OK.

1.2. Tìm hiểu về hệ thống và dịch vụ triển khai


Học viên tìm hiểu về hệ thống, dịch vụ đã triển khai trong bài thực hành và cung
cấp một số thông tin cụ thể sau:
Thông số cấu hình máy tấn công (Sử dụng lệnh htop):

Thông tin về giao diện mạng mạng (Sử dụng lệnh ip a):

1.3. Giám sát gói tin vào/ra tường lửa pfSense với Wireshark
- Yêu cầu: Máy tính dùng để thu thập lưu lượng cài đặt hệ điều hành Linux và
phần mềm Wireshark.
- Bước 1: Bật dịch vụ SSH trên tường lửa pfSense bằng cách chọn mục 14 trên
giao diện pfSense như minh họa tại Hình 2.

Hình 2. Cấu hình dịch vụ SSH trên tường lửa pfSense


- Bước 2: Cấu hình luật trong tường lửa pfSense để hỗ trợ SSH (Hình 3).
▪ Tạo khóa: $ ssh-keygen -t rsa
▪ Gửi khóa: $ ssh-copy-id root@<IP nội bộ của tường lửa>
▪ Nhập mật khẩu của tài khoản root trong pfSense để gửi khóa qua SSH
- Bước 3: Khởi chạy Wireshark để giám sát gói tin đi qua tường lửa pfSense
thông qua SSH
$ wireshark -k -i <(ssh root@<IP_tường_lửa> tcpdump -i <cổng mạng muốn
giám sát> -U -w - not tcp port 22)

Như minh họa tại Hình 4, phần mềm Wireshark bắt được gói tin địa chỉ 10.0.2.1
và thực hiện giám sát cổng em0 (ứng với mạng WAN)
Hình 3. Tạo và gửi khóa từ máy thu thập đến tường lửa pfSense

Hình 4. Minh họa giám sát lưu lượng từ pfSense với Wireshark

Hình 5. Cấu hình cài đặt Snort trong pfSense


1.4. Cài đặt Snort trong pfSense
- Bước 1: Trên giao diện pfSense, chọn System → Update (Yêu cầu: Tường
lửa pfSense phải có kết nối mạng).
- Bước 2: Chọn System → Package Manager → Available Packages
- Bước 3: Thực hiện tìm kiếm từ khóa “Snort” trong mục “Search term”. Cài
đặt gói phần mềm tìm được.
- Bước 4: Chọn “Confirm” để xác nhận việc cài đặt.

Hình 6. Cấu hình kích hoạt và thêm luật trong Snort


1.5. Thêm luật vào Snort trên pfSense
- Bước 1: Trên giao diện pfSense, chọn Service → Snort
- Bước 2: Thiết lập cổng mạng (Trường hợp cổng mạng không có trong danh
sách hiển thị):
▪ Bước 2.1: Chọn “Add”
▪ Bước 2.2: Tích chọn “Enable interface”, chọn giao diện mạng, cung
cấp thông tin mô tả và nhấp chuột vào “Save” để lưu cấu hình.
- Bước 3: Chọn “Snort Interface”, cổng mạng và ấn “Play” để kích hoạt Snort.
- Bước 4: Để vào giao diện thêm luật, chọn biểu tượng cái bút (Edit this Snort
interface mapping) tại phần “Action”.

Hình 7. Cấu hình cài đặt Snort trong pfSense


- Bước 5: Chọn mục “Rules” (thường bao gồm tên mạng như là “WAN
Rules”), trong Category chọn “custom.rules”.
- Bước 6: Thêm luật vào ô điền Defined Custom Rules và ấn “Save”.
- Bước 7: Chọn Snort Interfaces-> WAN Logs để hiển thị log. Thực hiện lọc
các cảnh báo bằng cách tìm kiếm theo từ khóa “alert”.

Hình 8. Giao diện hiển thị các cảnh báo


1.6. Tùy chỉnh chặn IP
- Bước 1: Chọn Services → Snort → Snort Interfaces → Edit this Snort
interface mapping → Block Settings (minh họa tại Hình 9).
- Bước 2: Tích chọn Block Offenders, chọn IPS Mode là Legacy Mode.
- Bước 3: Tại mục Which IP to Block, chọn SRC để chặn địa chỉ IP nguồn.
- Bước 4: Chọn Services → Snort → Global Settings → General Settings
(minh họa tại Hình 9).

Hình 9. Chức năng Block Settings


Tấn công quét cổng
2.1. Nhận diện tấn công
Sử dụng Wireshark để bắt gói tin đi qua tường lửa (Xem mục 1). Trên giao diện
của Wireshark, ta thấy máy tấn công (10.0.0.1) gửi nhiều gói tin TCP có cờ SYN
đến các cổng của tường lửa.

2.2. Ngăn chặn tấn công


- Bước 1: Cấu hình module Preprocess trong Snort: Chọn Service -> Snort
chọn biểu tượng bút tương ứng với giao diện mạng cần cấu hình.

- Bước 2: Chọn Preprocs như minh họa.

- Bước 3: Kéo xuống chọn “Portscan Detection”, chọn “Enable”.


- Bước 4: Ấn “Save” để lưu cấu hình và kiểm tra lại mục Log để xem lại nếu
có tấn công quét cổng:

2.3. Bài tập hiệu chỉnh


Hiệu chỉnh các tham số: Sensitivity, Memory cap, Ignore Scanner (Cho phép các
thiết bị nội bộ có thể quét mạng), v.v… tại mục “Portscan Detection” để tăng hiệu
quả và giảm thiểu phát hiện sai.
Tấn công SYN flood
3.1. Nhận diện tấn công
Sử dụng Wireshark để bắt gói tin đi qua tường lửa (Xem mục 1) và quan sát kết
quả như minh họa tại Hình 10.

Hình 10. Sử dụng Wireshark để phát hiện tấn công SYN flood

3.2. Ngăn chặn tấn công


a) Thiết lập SYN Cookie
- Bước 1: Kích hoạt tính năng SYN Cookies để phòng chống tấn công TCP
SYN Flood.

sysctl -w net.ipv4.tcp_syncookies=1
- Bước 2: Kiểm tra log để thấy cảnh báo tấn công SYN Flood đã xảy ra

tail -f /var/log/messages

b) Sử dụng Proxy
Chỉ chuyển tiếp các kết nối TCP đã được thiết lập tới máy mục tiêu.
Tấn công Ping of Death
4.1. Nhận diện tấn công
Trên tường lửa thấy lưu lượng mạng tăng bất thường từ các địa chỉ ngẫu nhiên.

Có thể tải tệp tin lưu lượng pcap của tường lửa xuống để phân tích.
- Nhận xét: Nhiều gói tin ICMP phân mảnh từ một gói tin ICMP có kích thước
lớn, nội dung gói tin gồm là các ký tự vô nghĩa.
4.2. Ngăn chặn tấn công
Cấu hình tường lửa chặn ICMP. Sử dụng Snort chặn ICMP bị phân mảnh có kích
thước lớn.
alert icmp any any -> any any (msg:"Ping of Death Detected"; dsize:>1000;
itype:8; icode:0; detection_filter:track by_src, count 30, seconds 1;
sid:2000004; classtype:denial-of-service; rev:3;)

Giải thích tham số trong luật:


- icmp any any -> any any: Mọi gói tin ICMP đi qua thiết bị.
- msg:"Ping of Death Detected": Thông báo khi ghi vào log.
- dsize: Kích thước gói tin.
- itype: Chỉ kiểu của gói tin ICMP. itype: 8 tức là một gói tin ICMP có kiểu
echo request.
- icode: Từ khóa icode được sử dụng để kiểm tra giá trị trong trường Code của
ICMP Header. Trường này cũng có độ dài là 8 bit.
Tấn công Slowloris
5.1. Nhận diện tấn công
Trong trường hợp dịch vụ vẫn còn, nhưng tài nguyên RAM, CPU bất thường, ta
kiểm tra xem số lượng kết nối đồng thời của mỗi địa chỉ IP tới dịch vụ bằng câu
lệnh.
netstat -ntu -4 -6 | awk '/^tcp/{ print $5 }' | sed -r 's/:[0-9]+$//' | sort | uniq -c |
sort -n

Có thể thấy thấy địa chỉ 192.168.31.128 có số lượng connection cao bất thường
(>300). Trường hợp dịch vụ bị sập, kiểm tra tệp tin /var/log/apache2/error.log.

Trong trường hợp này, error.log có thông báo tiến trình xử lý vượt ngưỡng
MaxRequestWorkers.
5.2. Ngăn chặn tấn công
a) Sử dụng mod_antiloris
- Bước 1: Tải về têp tin mod_antiloris.so và cài đặt.
▪ Bước 1.1: Sao chép mod_antiloris.so tới thư mục Apache modules
(/usr/lib64/apache2/modules/).
▪ Bước 1.2: Thêm dòng vào tệp tin cấu hình Apache (httpd.conf hoặc kiểu
Included like /etc/apache2/conf.modules.d/mod_antiloris.conf):
LoadModule antiloris_module modules/mod_antiloris.so
- Bước 2: Cấu hình mod_antiloris
Tham số Mặc Mô tả Phiên
định bản

IPTotalLimit 30 Số kết nối đồng thời (bất kỳ trạng thái nào) >=
mỗi địa chỉ IP tối đa. Nếu đặt bằng 0 giới 0.7
hạn này không được áp dụng. Giới hạn này
được ưu tiên hơn các giới hạn còn lại.

IPOtherLimit 10 Số kết nối đồng thời (ở trạng thái idle) mỗi >=
địa chỉ IP tối đa. Nếu đặt bằng 0 giới hạn 0.6
này không được áp dụng.

IPReadLimit 10 Số kết nối đồng thời (ở trạng thái READ) >=


mỗi địa chỉ IP tối đa. Nếu đặt bằng 0 giới 0.6
hạn này không được áp dụng.

IPWriteLimit 10 Số kết nối đồng thời (ở trạng thái WRITE) >=


mỗi địa chỉ IP tối đa. Nếu đặt bằng 0 giới 0.6
hạn này không được áp dụng.

WhitelistIPs none Danh sách địa chỉ, dải mạng IPv4, IPv6 >=
(ngăn cách bởi dấu phẩy) không bị giới 0.7
hạn.

Minh họa cấu hình antiloris_module:

LoadModule reqtimeout_module modules/mod_reqtimeout.so


<IfModule mod_reqtimeout>
RequestReadTimeout header=20-40,MinRate=500 body=20-40,MinRate=500
</IfModule>

LoadModule antiloris_module modules/mod_antiloris.so


<IfModule antiloris_module>
IPTotalLimit 16
LocalIPs 127.0.0.1 ::1
</IfModule>

b) Sử dụng IPtables
Trên tường lửa (pfsense hay iptables của máy chủ dịch vụ web), cấu hình ngưỡng
số kết nối (rate-limit) cho từng địa chỉ IP. VD:
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 --
connlimit-mask 20 -j DROP

--connlimit-above 50 cho phép tối đa 50 kết nối.


--connlimit-mask 20 là nhóm địa chỉ có độ dài mặt nạ mạng tương ứng. Mỗi IP từ
cùng giải /20 bị giới hạn tối đa 50 kết nối.

Học viên hãy điều chỉnh 2 tham số cho phù hợp cấu hình và nhu cầu hệ thống.

You might also like