Thứ Ba, 30 tháng 7, 2013

Chống tấn công syn flood giả mạo ip

Thông tin về cuộc tấn công ddos

Đầu năm 2013 một loạt websites bạn mình bị tấn công ddos rất lớn. Hàng loại bị bên cung cấp dịch vụ báo là băng thông dùng cho server đã vượt quá đường truyền mà họ cung cấp. Kiểu tấn công ở đây là kiểu syn flood và giả mạo địa chỉ ip. Do giả mạo địa chỉ ip nên việc block ip không thể khả thi được. Bạn mình đã dùng nhiều cách tìm được trên các diễn đàn như chỉ cho số lượng nhất định các syn packets vào trong 1 thời gian như 3/giây hay 10/phút nhưng không có tác dụng. Do không chạn được các gói syn do đó server khi nhận được gói syn gửi trả lại gói syn+ack làm băng thông của server hết dẫn đến người dùng không thể truy cập dịch vụ được.

Vì vậy bạn mình đã thử nhờ đến mình xem có cách chặn triệt để không.

Phân tích và xử lý cuộc tấn công

phân tích gói tin

Sau một hồi phân tích các gói tin được dump lại khi đang tấn công vào hệ thống mình có một phát hiện rất thú vị. Thông thường các gói syn bình thường luôn luôn được đánh dấu “don’t fragment”. Thông tin về fragment trong tcp tham khảo tcp fragment. Đây là điểm rất đáng thú vị, nên mình đã tham khảo một vài code dùng để tấn công syn flood giả mạo ip như syn flood xgroup và thấy trong code có
iph->frag_off = 0; 
mình cũng có xem rất nhiều code và tất cả đều có lỗi tương tự, kể cả một số bài viết về tấn công bằng hping và scapy. Vì cuộc tấn công được thực hiện chưa thật hoàn hảo nên mình biết có thể chặn được cuộc tấn công đó :D.

Chặn cuộc tấn công

Mình tham khảo iptables và trong tài liệu của iptables có ghi về việc chặn các gói tin bị phân mảnh ( theo mình hiểu là gói tin không có cờ “don’t fragment” bằng option “-f”, mình thử chặn ở máy của mình với cuộc tấn công thử mình bằng hping3, mình chặn bằng rule:
iptables -A INPUT -p tcp --syn -f -j DROP
theo mình thấy thì có thể chặn được nhưng kết quả lại hoàn toàn khác, các gói tin tấn công đều vào thoải mái mà không gặp phải sự phản kháng nào từ iptables.

Vấn đề với iptables

Do không thể chặn được gói tin tấn công nên mình đã xem iptables. Iptables chặn gói tin fragment không như mình nghĩ nó không kiểm tra cờ “don’t fragment” có không được set hay không mà lại kiểm tra cờ “more fragment” có được set hay không? => Chẳng nhẽ để chặn phải sửa lại và biên dịch lại iptables?

Giải quyết vấn đề phát sinh

Mình thử tìm hiểm trên mạng và thấy một module của iptables có thể giúp mình giải quyết vấn đề của mình đó là kiểm tra “don’t fragment” có được set là 1 không. module u32 iptables. Để chặn mình thử một rule của iptables
iptables -A INPUT -p tcp --syn -m u32 --u32 "3&0x40>>6=0" -j DROP #drop hping3 flood
thử tấn công bằng hping3 và check iptables mình thấy gói tin tấn công đã bị block triệt để, thật là vui quá đi :D.

Kết luận

Các cuộc tấn công đều có thể không hoàn hảo đến mức không thể chặn được. Hãy tìm hiểu thật kỹ ta có thể chặn rất dễ dàng

Không có nhận xét nào:

Đăng nhận xét