Friday, September 29, 2017

DDoS – Một số kỹ thuật tấn công và phương pháp phòng chống - Phần 2


Một số công cụ tấn công DDoS
Công cụ DDoS dạng Agent – Handler
TrinOO: là một trong các công cụ DDoS đầu tiên được phát tán rộng rãi. TrinOO có kiến trúc Agent – Handler, là công cụ DDoS kiểu Bandwidth Depletion Attack, sử dụng kỹ thuật UDP flood. Các version đầu tiên của TrinOO không hỗ trợ giả mạo địa chỉ IP. TrinOO Agent được cài đặt lợi dụng lỗi remote buffer overrun. Hoạt động trên hệ điều hành Solaris 2.5.1 à Red Hat Linux 6.0. Attack – network giao tiếp dùng TCP (attacker client và handler) và UDP (Handler và Agent). Mã hóa giao tiếp dùng phương pháp mã hóa đối xứng giữa Client, handler và Agent.
Tribe Flood Network (TFN): Kiểu  kiến trúc Agent – Handler, công cụ DDoS hoễ trợ kiểu Bandwidth Deleption Attack và Resourse Deleption Attack. Sử dụng kỹ thuật UDP flood, ICMP Flood, TCP SYN và Smurf Attack. Các version đầu tiên không hỗ trợ giả mạo địa chỉ IP, TFN Agent được cài đặt lợi dụng lỗi buffer overflow. Hoạt động trên hệ điều hành Solaris 2.x và Red Hat Linux 6.0. Attack – Network giao tiếp dùng ICMP ECHO REPLY packet (TFN2K hỗ trợ thêm TCP/UDP với tính năng chọn protocol tùy ý), không mã hóa giao tiếp (TFN2K hỗ trợ mã hóa)
Stacheldraht: là biến thể của TFN có thêm khả năng updat Agent tự động. Giao tiếp telnet mã hóa đối xứng giữa Attacker và Handler.
Shaft: là biến thể của TrinOO, giao tiếp Handler – Agent trên UDP, Attacker – Hendle trên Internet. Tấn công dùng kỹ thuật UDP, ICMP và TCP flood. Có thể tấn công phối hợp nhiều kiểu cùng lúc. Thống kê chi tiết cho phép attacker biết tình trạng tổn thất của nạn nhân, mức độ quy mô của cuộc tấn công để điều chỉnh số lượng Agent.

Công cụ DDoS dạng IRC – Based
Công cụ DDoS dạng IRC-based được phát triển sau các công cụ dạng Agent – Handler. Tuy nhiên, công cụ DDoS dạng IRC phức tạp hơn rất nhiều, do tích hợp rất nhiều đặc tính của các công cụ DDoS dạng Agent – Handler.
Trinity: là một điển hình của công cụ dạng này. Trinity có hầu hết các kỹ thuật tấn công bao gồm: UDP, TCP SYS, TCP ACK, TCP fragment, TCP NULL, TCP RST, TCP random flag, TCP ESTABLISHED packet flood. Nó có sẵn khả năng ngẫu nhiên hóa địa chỉ bên gởi. Trinity cũng hỗ trợ TCP flood packet với khả năng ngẫu nhân tập CONTROL FLAG. Trinity có thể nói là một trong các công cụ DDoS nguy hiểm nhất.
Ngoài ra có thể nhắc thêm về một số công cụ DDoS khác như Knight, được thiết kế chạy trên Windows, sử dụng kỹ thuật cài đặt của troijan back Orifice. Knight dùng các kỹ thuật tấn công như SYV, UDP Flood và Urgent Pointer Flooder.
Sau cùng là Kaiten, là biến thể của Knight, hỗ trợ rất nhiều kỹ thuật tấn công như: UDP, TCP flood, SYN, PUSH + ACK attack. Kaiten cũng thừa hưởng khả năng ngẫu nhiên hóa địa chỉ giả mạo của Trinity.

Phòng chống DDoS
Anti DDoS Guardian
Anti DDoS Guardian là một phần mềm chống DDos cho Server, VPS, host chạy hệ điều hành Windows cực kì mạnh mẽ, hiệu quả. Nó một ứng dụng đa năng mạnh mẽ được thiết kế để bảo vệ một loạt các máy chủ Windows chống lại các mối đe dọa của các cuộc tấn công từ chối dịch vụ máy chủ. Tùy biến cao, tính năng phong phú và hiệu quả.
Hình 4.1 Giao diện Anti DDoS Guardian
·         Lưu lượng mạng và quản lý kết nối TCP: Giới hạn số luồng trên mạng, băng thông của khách hàng, khách hàng đồng thời số lượng kết nối TCP và tỷ lệ kết nối TCP.
·         TCP nửa mở điều khiển kết nối.
·         UDP kiểm soát dòng chảy: Giới hạn băng thông UDP, tỷ lệ kết nối UDP và tốc độ gói UDP.G
·         Chặn địa chỉ IP của quốc gia bất kì
·         Chặn các địa chỉ IP hoặc dãy địa chỉ.
·         Tường lửa bảo vệ. Các quy tắc tường lửa được dựa trên địa chỉ IP từ xa, cổng, giao thức, và các yếu tố TCP / IP khác.
·         IP danh sách đen và danh sách trắng: Giám hộ kiểm soát của người sử dụng truy cập Internet trong các lĩnh vực cụ thể bằng cách thiết lập danh sách đen hoặc danh sách trắng.
·         Hỗ trợ nhiều định dạng danh sách IP, như htaccess của Apache.
·         IP danh sách cập nhật tự động.
·         Quy tắc đặc biệt.
·         Real-Time hoạt động mạng lưới giám sát. Chống DDoS The Guardian màn hình mỗi gói vào và ra trong Real-Time. Nó hiển thị các địa chỉ địa phương, địa chỉ từ xa, và các thông tin khác của từng phiên mạng.
·         Nhìn lên địa chỉ IP. Chống DDoS giám hộ trông lên các địa chỉ IP và quyền sở hữu thông tin từ xa.
·         Đăng nhập tập tin. Chống DDoS The Guardian ghi mỗi địa chỉ IP bị chặn và được cho phép.
·         Chạy chống DDoS giám hộ như một dịch vụ Windows.
·         Hỗ trợ 64-bit Windows hệ điều hành, chẳng hạn như 64-bit Windows 2008, 64-bit Windows Vista, 64-bit Windows 7, 64-bit Windows 8 và 64-bit Windows 2012
Có rất nhiều tính năng và sự linh hoạt trong sử dụng phần mềm này, trong khuôn khổ bài viết chỉ đề cập chính là chức năng Anti DDoS. Click biểu tượng khóa màu vàng trên menu để mở ra giao diện thiếp lật cài đặt:
·         TCP connection: Số lượng kết nối tối đa giao thức TCP được phép mở trong số giây đối với mỗi IP. (10/1s là phù hợp)
·         Bandwidth: Kích thước tối đa gói tin với mỗi IP (kb/s). Một kết nối TCP hợp lệ thường có kích thước 576~1500. Bạn nên tính toán cho phù hợp nếu mở nhiều kết nối TCP lẫn UDP với máy chủ. (Có thể tăng lên nhưng không nên tăng lên nhiều 2048~6144)
·         UDP connection: Số lượng gói tin UDP được phép mở kết nối với mỗi giây (Giao thức này ít khi sử dụng chủ yếu dịch vụ DNS nên hạ thấp xuống 10~50 để chống UDP FLOOD)
·         UDP packet rate: Số lượng gói tin ICMP được phép mở kết nối với mỗi giây (Giao thức dùng để ping kiểm tra máy chủ nên các bạn có thể hạ thấp xuống 5~10 để chống ICMP FLOOD)
Hình 4.2: Cấu hình Anti DDoS Guardian
·         TCP half-open: Số lượng kết nối (1/2) TCP tối đa được mở. (Nên hạ thấp xuống để chống SYN FLOOD, HTTP FLOOD) Nhưng nếu hạ thấp, nhiều kết nối hợp lệ đến sẽ gặp khó khăn (nên từ 30~100)
·         UDP bandwith: lưu lượng kết nối UDP tối đa được kết nối (1000~5000).
·         Client count: Giá trị thời gian IP kết nối thất bại sẽ bị ngắt. (60~120) Số lượng kết nối tối đa giao thức TCP được giữ với mỗi IP (20 là hơi nhiều với mỗi IP có thể giảm xuống)

WatchGuard
Tường lửa (firewall) là một thiết bị mạng truyển thống trong việc bảo vệ hệ thống mạng. Với những thiết bị tường lửa đời đầu chủ yếu hoạt động theo kiểu Packet Filtering, các chính sách được thiết lập để cho phép hoặc ngăn chặn một gói tin ra/vào các vùng mạng do tường lửa phân tách. Nhưng trước cơ an ninh mạng ngày càng nhiều, tường lửa UTM được ra đời nhằm giải quyết các bài toán này.
Với những thiết bị/ứng dụng tường lửa truyền thống như Iptable, pfsense...hoạt động theo cơ chế Packet Filtering, chỉ lọc một số thông tin chính trên gói tin như địa chỉ nguồn, đích, port...Chứ không quan tâm nhiều đến nội dung gói tin. Cơ chế hoạt động đơn giản cho phép các thiết bị/ứng dụng tường lửa hoạt động nhanh, nhẹ nhưng lại không thể bảo vệ hệ thống một cách hoàn hảo. Trên Internet hiện nay tồn tại nhiều nguy hiểm đến từ:
·         Virus, spyware, malware...đã làm điêu đứng bao nhiêu người dùng, hệ thống nhờ cơ chế lây lan, lan truyền đơn giản.
·         Email spam gây ra sự khó chịu cho người dùng
·         Malsite là những website có chứa mã độc
·         Tấn công mạng dựa vào các lỗ hổng trên máy chủ, thiết bị mạng...
·         Tấn công DDoS/DOS làm tê liệt hệ thống, gây nghẽn mạng làm người dùng không truy cập được các dịch vụ
·         Ứng dụng nguy hiểm là các ứng dụng được cài đặt ngầm vào hệ thống, gây chậm máy, đánh cắp dữ liệu...
·         ....và con nhiều nguy hiểm nữa.
Thế thì với firewall hoạt động dựa theo cơ chế Packet Filtering có thể giúp người dùng bảo vệ hệ thống trước những nguy cơ trên không? Câu trả lời là không và tường lửa UTM (firewall Unified Threat Management) ra đời. Ngay từ tên gọi đã cho thấy firewall UTM có thể quản lý tập trung các mối nguy hiểm. Tường lửa UTM bao gồm các module như Antivirus, Antispam, IPS, Application Control, WebBlocker, DDoS Defense...giúp bảo vệ hệ thống.
Với hệ thống WatchGuard, ta có thể cấu hình trên Firebox để chống tấn công DDOS như sau:
Giới hạn số lượng kết nối tới máy chủ (Per Server Quota): giới hạn lượng kết nối mỗi giây từ ngoài qua Firewall vào tới máy chủ. Hạn chế này bao gồm cả các kết nối tới máy chủ nội bộ được cho phép bởi các Policy static NAT. Giới hạn số lượng kết nối tới các máy chủ dựa trên số lượng yêu cầu kết nối tới một IP đích. Khi đạt tới giới hạn, Firebox sẽ tự động giảm số lượng kết nối tới máy chủ. Ví dụ: Nếu giới hạn trên máy chủ là 100 thì Firebox sẽ tự động drop yêu cầu kết nối thứ 101 trong cùng thời điểm vào hệ thống từ cùng một địa chỉ IP bên ngoài vào. IP nguồn này không bị đưa vào danh sách bị chặn. Giới hạn lượng yêu cầu từ máy client (Per Client Quota): giới hạn lượng kết nối ra ngoài mỗi giây từ trong hệ thống nội bộ được bảo vệ bởi Firebox. Giới hạn này dựa trên số lượng yêu cầu kết nối ra ngoài của bất kỳ IP nội bộ nào và bất kỳ IP bên ngoài nào. Trong giao diện Web quản trị Firebox, ta tiếp tục tiến hành như sau:
·         Chọn menu Firewall à Default Packet Handling.
Hình 4.3 Giới hạn số lượng kết nối máy chủ
·         Chọn Per Server Quota và Per Client Quota
·         Đặt các giá trị giới hạn của Per Server Quota và  Per Client Quota
Nếu dùng Policy Manager, ta thiết lập như sau:
·         Chọn menu Setup à Default Threat Protection à Default Packet Handling.
Hình 4.4 Quản lý chính cách trong WatchGuard
·         Chọn Per Server Quota và Per Client Quota
·         Đặt các giá trị giới hạn của Per Server Quota và  Per Client Quota.

ConfigServer Security & Firewall
ConfigServer Security & Firewall (hay CSF) là một firewall rất phổ biến và hiệu quả được sử dụng trên các server Linux hiện nay. Bên cạnh những tính năng cơ bản như một firewall, CSF còn có những chức năng bảo mật nâng cao khác như ngăn chặn flood login, port scans, SYN floods…Sau khi cài đặt chúng ta sẽ cấu hình như sau để phòng chống DoS, DDoS.
Số lượng kết nối tối đa cho phép từ một IP, bạn có thể đặt giá trị này theo yêu cầu máy chủ.
[CT_LIMIT =100]
Đặt khoảng thời gian theo dõi kết nối. Các lần scan để kiểm tra cách nhau 30s.
[CT_INTERVAL = "30"]
Gửi email thông báo nếu một IP bị block.
[CT_EMAIL_ALERT = "1"]
Thời gian block một IP nếu như vi phạm.
[CT_BLOCK_TIME = "1800"]
Phát hiện tấn công brute force từ mạng botnet. Nếu như một account bị login sai quá giới hạn cho phép từ nhiều IP khác nhau thì sẽ block toàn bộ IP đã login sai.
[LF_DISTATTACK = "1"]
Số lượng IP tối thiểu để nhận biết đây là tấn công phân tán (DDOS)
[LF_DISTATTACK_UNIQ = "3"]
Bật chức năng synflood protection : Nếu 1 IP gửi 30 cú SYN trong vòng 1s và số lượng SYN connection tồn tại trên server đạt trên 40 thì block IP đó (block tạm thời)
[SYNFLOOD = "1"]
[SYNFLOOD_RATE = "30/s"]
[SYNFLOOD_BURST = "40"]
Giới hạn số lượng new concurrent connection đến server trên mỗi IP. Ví dụ mỗi IP được phép mở 20 concurrent new connection đến port 80 trên server.
[CONNLIMIT = "80;20"]
Giới hạn số lượng connection đến một port cụ thể trong một khoảng thời gian nhất định. Ví dụ như trên có nghĩa : nếu nhiều hơn 20 kết nối tcp đến port 80 trong vòng 5s thì block IP đó tối thiểu 5s tính từ packet cuối cùng của IP đó. Sau 5s IP đó sẽ tự động được unlock và truy cập bình thường.
[PORTFLOOD = "80;tcp;20;5"]

Chống DDoS Website
Tấn công DDOS hay còn được gọi tấn công từ chối dịch vụ đơn giản được hiểu là tạo ra 1 lượt truy cập ảo ồ ạt vào một địa chỉ website tại cùng một thời điểm nào đó đã định sẵn nhằm “đánh sập” máy chủ lưu trữ khiến nó chạy chậm hoặc không thể chạy được nữa. Thật sự thì không có phương pháp chống DDOS hiệu quả nhất nhưng nếu với mức độ nhỏ và mang tính không chuyên khi sử dụng các phần mềm được lập trình sẵn ở quy mô nhỏ lẻ thì ta hoàn toàn có thể chủ động phòng chống.
Chống iframe: Đây là phương pháp được xem là thô sơ nhất. Kẻ tấn công sẽ mượn 1 website có lượt truy cập lớn nào đó chèn các iframe hướng về website cần đánh rồi cho chạy lệnh refresh (tải lại) nhiều lần hoặc họ viết sẵn 1 tập tin flash với công dụng tương tự rồi đặt lên website và khi người dùng truy cập vào website này thì họ vô tình bất đắc dĩ trở thành người tấn công website kia. Với hình thức tấn công kiểu như thế này bạn hoàn toàn có thể chống lại bằng cách chèn 1 đoạn mã Javascript chống chèn iframe từ các website khác đến website của bạn.
<script language="JavaScript">
if (top.location != self.location)
{top.location = self.location}
</script>
Chống tải lại trang web có ác ý: Một hình thức tấn công khác nữa là dùng phím F5 liên tục có chủ ý, hoặc dùng một phần mềm được lập trình sẵn với công dụng tương tự (tải lại trang web liên tục sau những khoảng thời gian định sẵn) của một nhóm người làm cho trang web của bạn tải lại (reload) liên tục. Việc này có thể làm tốn băng thông của trang web hoặc làm trang web chạy chậm vì những kết nối ảo. Với cách thức tấn công này thì nếu dùng cách một để chống coi như là vô ích. Nếu bạn bị tấn công như thế này thì bạn hãy thiết lập tập tin .htaccess với nội dung:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?domain.com [NC] RewriteRule !antiddos.phtml
http://www.domain.com/antiddos.phtml?%{REQUEST_URI} [QSA]
 Sau đó tạo thêm một một tập tin antiddos.phtml có nội dung
<?
$text = $HTTP_SERVER_VARS['QUERY_STRING'];
$text = preg_replace("#php\&#si",'php?',$text);
echo('<center><a href=http://www.domain.com/?'.$text.'><font color=red size=5 face=Monotype>[CLICK HERE TO ENTER]</font></a</center>');
?>
Sau đó upload 2 tập tin này lên thư mục gốc của website. Như vậy là mỗi khi truy cập vào website, nếu lần đầu tiên thì sẽ có thông báo yêu cầu nhấn chuột thì bạn mới vào được website và ở các lần sau sẽ không có và các phần mềm DDOS được lập trình sẽ bị chặn lại ở bước click chuột để vào trang web ở lần truy cập đầu tiên nên việc tải lại trang web chỉ đơn thuần là 1 trang HTML nhỏ không ảnh hưởng nhiều đến hệ thống. Chú ý là cách này chỉ áp dụng cho website đang sử dụng server chạy trên nền Linux.
Giới hạn số kết nối website tại một thời điểm: Khi một khách truy cập vào website thì sẽ tạo ra một truy vấn kết nối với cơ sở dữ liệu (CSDL) lấy thông tin và trả về thông qua hiển thị của website. Mỗi máy chủ sẽ có phép bao nhiêu truy vấn kết nối là hạn định và khi vượt quá hạn mức này thì việc truy cập sẽ khó khăn hoặc không thể truy xuất được. Các tin tặc lợi dụng vào điều này để tạo ra các truy cập ảo, kết nối ảo thông qua proxy hay chuyên nghiệp hơn là mạng botnet nhằm đánh sập trang web và phá  hỏng CSDL website. Để hạn chế điều này ta có thể chủ động giới hạn số kết nối truy vấn tin (lượt truy cập) cùng một thời điểm. Bạn thêm dòng đoạn mã sau vào trang chủ của website.
function server_busy($numer) {
if (THIS_IS == 'WEBSITE' && PHP_OS == 'Linux' and @file_exists (
 '/proc/loadavg' ) and $filestuff = @file_get_contents ( '/proc/loadavg' )) {
$loadavg = explode ( ' ', $filestuff );
if (trim ( $loadavg [0] ) > $numer) {
print '<meta http-equiv="content-type" content="text/html;
charset=UTF-8" />';
print 'Lượng truy cập đang quá tải, mời bạn quay lại sau vài phút.';
exit ( 0 );}}}
$srv = server_busy ( 1000 ); // 1000 là số người truy cập tại 1 thời điểm
Đoạn mã trên có ý nghĩa cho phép 1000 người online trên website tại một thời điểm. Nếu vượt qua số 1000 thì khách truy cập sẽ nhận được thông báo: Lượng truy cập đang quá tải. Mời bạn quay lại sau vài phút. Chú ý đoạn mã này chỉ  áp dụng cho ngôn ngữ lập trình PHP.

Đây chỉ là ba cách chống đỡ mang tính chất giản đơn áp dụng cho những đợt tấn công nhỏ lẻ. Để website của mình hoạt động tốt và có sức chống chọi lại những đợt tấn công quy mô lớn bạn nên: (i) Tối ưu hóa website ví dụ bạn có thể xây dựng bộ nhớ đệm (cache) cho website để nhằm giảm số kết nối vào CSDL. (ii) Lựa chọn nhà cung cấp hosting lưu trữ web tốt để có những đối phó với những  đợt tấn công.

No comments:

Post a Comment