Kỹ thuật tấn công từ chối dịch vụ

Một phần của tài liệu Bảo mật an toàn thông tin cho phần mềm hóa đơn điện tử của tập đoàn điện lực (Trang 25)

Nguyên tắc: Chiếm dụng một lƣợng lớn tài nguyên của hệ thống cung cấp bằng nhiều cách gây nên quá tải và ngừng cung cấp dịch vụ. Việc này phụ thuộc vào khả năng của kẻ tấn công và sức chịu đựng của mục tiêu.

Hacker sẽ chiếm dụng một lƣợng lớn tài nguyên trên server, tài nguyên có thể là băng thông, bộ nhớ, CPU, đĩa cứng, ... làm cho server không thể nào đáp ứng các yêu cầu khác từ các client của những ngƣời dùng bình thƣờng và có thể nhanh chóng bị ngừng hoạt động, crash hoặc reboot.

2.2 Các mô hình tấn công DdoS 2.2.1 Mô hình Agent – Handler: 2.2.1 Mô hình Agent – Handler:

Hình 8 – Kiến trúc attack-network kiểu Agent – Handler

Theo mô hình này, attack-network gồm 3 thành phần: Agent, Attacker và Handler

 Attacker: là software cơ sở để hacker điều khiển mọi hoạt động của attack- network

 Handler : là một thành phần software trung gian giữa Agent và Attacker

 Agent : là thành phần software thực hiện sự tấn công mục tiêu, nhận điều khiển từ Attacker thông qua các Handler

Thông thƣờng Attacker sẽ đặt Handler software trên một Router hay một server có lƣợng traffic lƣu thông nhiều. Việc này nhằm làm cho các giao tiếp giữa Attacker, handler và Agent khó bị phát hiện. Các giao tiếp này thông thƣờng xảy ra trên các protocol TCP, UDP hay ICMP. Chủ nhân thực sự của các Agent thông thƣờng không hề hay biết họ bị lợi dụng vào cuộc tấn công kiểu DDoS, do họ không đủ kiến thức hoặc các chƣơng trình Backdoor Agent chỉ sử dụng rất ít tài nguyên hệ thống làm cho hầu nhƣ không thể thấy ảnh hƣởng gì đến hiệu năng của hệ thống.

2.2.2 Mô hình IRC – Based:

Hình 9 – Kiến trúc attack-network của kiểu IRC-Base

IRC – Based net work cũng tƣơng tự nhƣ Agent – Handler network nhƣng mô hình này sử dụng các kênh giao tiếp IRC làm phƣơng tiện giao tiếp giữa Client và Agent (không sử dụng Handler). Sử dụng mô hình này, attacker còn có thêm một số lợi thế khác nhƣ:

 Các giao tiếp dƣới dạng chat message làm cho việc phát hiện chúng là vô cùng khó khăn

 IRC traffic có thể di chuyển trên mạng với số lƣợng lớn mà không bị nghi ngờ

 Không cần phải duy trì danh sách các Agent, hacker chỉ cần logon vào IRC server là đã có thể nhận đƣợc report về trạng thái các Agent do các channel gửi về.

 Sau cùng: IRC cũng là một môi trƣờng file sharing tạo điều kiện phát tán các Agent code lên nhiều máy khác.

2.3 Phân loại tấn công DdoS

Nhìn chung, có rất nhiều biến thể của kỹ thuật tấn công DDoS nhƣng nếu nhìn dƣới góc độ chuyên môn thì có thể chia các biến thể này thành hai loại dựa trên mục đích tấn công: Làm cạn kiệt băng thông và làm cạn kiệt tài nguyên hệ thống.

Attacker Attacker

Agent Agent Agent Agent Agent

Victim IRC NETWORK

2.3.1 Làm cạn kiệt băng thông của mạng

Có hai loại làm cạn kiệt băng thông mạng (BandWith Depletion Attack):

+ Flood attack: Điều khiển các Agent gửi một lƣợng lớn traffic đến hệ thống dịch vụ của mục tiêu, làm dịch vụ này bị hết khả năng về băng thông.

+ Amplification attack: Điều khiển các agent hay Client tự gửi message đến một địa chỉ IP broadcast, làm cho tất cả các máy trong subnet này gửi message đến hệ thống dịch vụ của mục tiêu. Phƣơng pháp này làm gia tăng traffic không cần thiết, làm suy giảm băng thông của mục tiêu.

Hình 10 – BandWith Depletion Attack - Amplification attack

Theo hình 10: attacker đăng ký với một DNS server và public một số bản ghi dung lƣợng lớn. Sau đó ra lệnh cho các agent (botnet) tấn công, các agent sẽ gửi request đến DNS server yêu cầu bản ghi lớn này, nhƣng trên Header của gói tin yêu cầu ghi IP của victim. Và khi DNS server gửi bản ghi dung lƣợng lớn này về cho victim, victim sẽ bị suy giảm băng thông nghiêm trọng.

2.3.2 Làm cạn kiệt tài nguyên

Làm cạn kiệt tài nguyên (Resource Deleption Attack) là kiểu tấn công trong đó Attacker gửi những packet dùng các protocol sai chức năng thiết kế, hay gửi những packet với dụng ý làm tắt nghẽn tài nguyên mạng làm cho các tài nguyên này không phục vụ user thông thƣờng khác đƣợc.

1/ Protocol Exploit Attack:

TCP SYS Attack: Transfer Control Protocol hỗ trợ truyền nhận với độ tin cậy cao nên sử dụng phƣơng thức bắt tay giữa bên gởi và bên nhận trƣớc khi truyền dữ liệu. Bƣớc đầu tiên, bên gửi gởi một SYN REQUEST packet (Synchronize). Bên nhận nếu nhận đƣợc SYN REQUEST sẽ trả lời bằng SYN/ACK REPLY packet. Bƣớc cuối cùng, bên gửi sẽ truyên packet cuối cùng ACK và bắt đầu truyền dữ liệu.

Hình 11 –Protocol Exploit Attack: Cơ chế TCP SYN/ACK

Nếu bên server đã trả lời một yêu cầu SYN bằng một SYN/ACK REPLY nhƣng không nhận đƣợc ACK packet cuối cùng sau một khoảng thời gian quy định thì nó sẽ resend lại SYN/ACK REPLY cho đến hết thời gian timeout. Toàn bộ tài nguyên hệ thống “dự trữ” để xử lý phiên giao tiếp nếu nhận đƣợc ACK packet cuối cùng sẽ bị “phong tỏa” cho đến hết thời gian timeout.

Hình 12 –Protocol Exploit Attack: Dùng IP không có thực

Nắm đƣợc điểm yếu này, attacker gởi một SYN packet đến nạn nhân với địa chỉ bên gửi là giả mạo, kết quả là nạn nhân gửi SYN/ACK REPLY đến một địa chỉ khác và sẽ không bao giờ nhận đƣợc ACK packet cuối cùng, cho đến hết thời gian timeout nạn nhân mới nhận ra đƣợc điều này và giải phóng các tài nguyên hệ thống. Tuy nhiên, nếu

Malicious TCP Client Victim TCP Server

SYS packet with a deliberately fraudulent (spoofed) source IP return address

SYS/ACK SYN 80 ? TCP Server Service Port 1-1023 SYS ACK SYN/ACK 80 TCP Client Client Port 1024-65535

lƣợng SYN packet giả mạo đến với số lƣợng nhiều và dồn dập, hệ thống của nạn nhân có thể bị hết tài nguyên.

Hình 13 –Protocol Exploit Attack: Kết quả

Trong TCP protocol, các packet đƣợc chứa trong buffer, khi buffer đầy thì các packet này sẽ đƣợc chuyển đến nơi cần thiết. Tuy nhiên, bên gửi có thể yêu cầu hệ thống unload buffer trƣớc khi buffer đầy bằng cách gởi một packet với PUSH và ACK mang giá trị là 1. Những packet này làm cho hệ thống của nạn nhân unload tất cả dữ liệu trong TCP buffer ngay lập tức và gửi một ACK packet trở về khi thực hiện xong điều này, nếu quá trình đƣợc diễn ra liên tục với nhiều Agent, hệ thống sẽ không thể xử lý đƣợc lƣợng lớn packet gửi đến và sẽ bị treo.

2/ Malformed Packet Attack:

Malformed Packet Attack là cách tấn công dùng các Agent để gửi các packet có cấu trúc không đúng chuẩn nhằm làm cho hệ thống của nạn nhân bị treo.

Có hai loại Malformed Packet Attack:

+ IP address attack: dùng packet có địa chỉ gửi và nhận giống nhau làm cho hệ điều hành của nạn nhân không xử lý nổi và bị treo.

+ IP packet options attack: ngẫu nhiên hóa vùng OPTION trong IP packet và thiết

lập tất cả các bit QoS lên 1, điều này làm cho hệ thống của nạn nhân phải tốn thời gian phân tích, nếu sử dụng số lƣợng lớn Agent có thể làm hệ thống nạn nhân hết khả năng xử lý. SYN ACK SYN/ACK Client Server SYN SYN/ACK SYN/ACK Server Attacker/Agent

2.4 DRDoS (Distributed Reflection Denial of Service) 2.4.1 Khái niệm: 2.4.1 Khái niệm:

Tấn công từ chối dịch vụ phản xạ nhiều vùng dựa trên các bƣớc thiết lập một giao thức TCP – cơ chế bắt tay 3 bƣớc:

- Bƣớc 1 : Client gửi gói tin SYN tới server thông báo yêu cầu thiết lập kết nối. Lúc này một kết nối tiềm tàng ( potential connection ) đã đƣợc thiết lập giữa client và server.

- Bƣớc 2 : Server sau khi nhận đƣợc tín hiệu SYN trên sẽ gửi lại cho client gói tin SYN/ACK xác nhận việc thiết lập liên kết (đây là lý do xuất hiện từ Reflection – Phản xạ trong tên gọi của cách thức tấn công này)

- Bƣớc 3 : Client sau khi nhận đƣợc gói tin SYN/ACK trên, nó sẽ gửi tiếp cho Server gói tin ACK. Kết thúc bƣớc này giữa client và server đã hoàn thành một kết nối

2.4.2 Cách thức thực hiện tấn công DRDoS.

Về cơ bản, DRDoS là sự phối hợp giữa hai kiểu DoS và DDoS. Nó có kiểu tấn công SYN với một máy tính đơn, vừa có sự kết hợp giữa nhiều máy tính để chiếm dụng băng thông nhƣ kiểu DDoS. Kẻ tấn công thực hiện bằng cách giả mạo địa chỉ của server mục tiêu rồi gửi yêu cầu SYN đến các server lớn nhƣ Yahoo, Microsoft…, để các server này gửi các gói tin SYN/ACK đến server mục tiêu. Các server lớn, đƣờng truyền mạnh đã vô tình đóng vai trò zombies cho kẻ tấn công nhƣ trong DDoS

Hình 14 – Sơ đồ mô tả kiểu tấn công DRDOS

Quá trình gửi cứ lặp lại liên tục với nhiều địa chỉ IP giả từ kẻ tấn công, với nhiều server lớn tham gia nên server mục tiêu nhanh chóng bị quá tải, bandwidth bị chiếm dụng bởi server lớn. Tính nghệ thuật là ở chỗ chỉ cần với một máy tính với modem 56kbps, một hacker lành nghề có thể đánh bại bất cứ máy chủ nào trong giây lát mà không cần chiếm đoạt bất cứ máy nào để làm phƣơng tiện thực hiện tấn công.

CHƢƠNG III: GIẢI QUYẾT VẤN ĐỀ 1. Các kỹ thuật phòng chống

Các kỹ thuật phòng chống đƣợc nên ra dƣới đây đều do tác giả đề xuất sau khi đã tham khảo ý kiến từ các thành viên khác trong dự án, bên cạnh đó tác giả cũng phụ trách việc lập trình các hàm dung chung nêu trong mục 2.1.1 (lọc dữ liệu đầu vào), 2.1.3 (mã hóa dữ liệu đầu ra), 2.1.4 (server control webcaptchar) và 2.3.1 (web service).

1.1 Phòng chống từ mức xây dựng mã nguồn ứng dụng

Điểm yếu SQL Injection, XSS, CSRF bắt nguồn từ việc xử lý dữ liệu từ ngƣời dùng không tốt, do đó vấn đề xây dựng mã nguồn đảm bảo an ninh là cốt lõi của việc phòng chống SQL Injection, XSS, CSRF. Các giải pháp ở mức mã nguồn ứng dụng đƣợc đƣa ra dựa trên tài liệu TCVN 27002:2011 mục 10.4.1 (Biện pháp chống lại mã độc) và mục 10.9.3 (Thông tin công bố công khai).

1.1.1 Lọc dữ liệu đầu vào

Dữ liệu đầu vào cần đảm bảo các nguyên tắc sau

 Chỉ chấp nhận những kiểu dữ liệu hợp lệ

 Từ chối nhận các dữ liệu hỏng, vô lý.

 Liên tục kiểm tra và thanh lọc dữ liệu.

 Tạo ra danh sách những thẻ HTML đƣợc phép sử dụng, xóa bỏ thẻ <script> hoặc đóng các thẻ Script trong thẻ <comment> coi đoạn Script đó nhƣ là một đoạn trích dẫn thôi.

 Lọc ra bất kì một đoạn mã JavaScript/Java/VBScript/ActiveX/Flash Related

 Lọc dấu nháy đơn hay kép

 Lọc kí tự Null

 Xóa những kí tự “ > ”, “ < ” hoặc Output Encoding các dòng nhƣ sau

< &lt; > &gt; ( &#40; ) &#41; # &#35; & &#38;

Đây đƣợc coi là công việc quan trọng đầu tiên cần xử lý trong chuỗi các thao tác. Có hai mô hình có thể đƣợc áp dụng cho việc lọc dữ liệu đầu vào, đó là sử dụng whitelist, hoặc blacklist. Các mô hình này sẽ đƣợc minh họa sau đây dƣới ngôn ngữ phát triển ứng dụng web C#.

Whitelist

Mô hình whitelist liệt kê danh sách những giá trị input nào đƣợc cho phép, chính vì thế khi xây dựng nó đòi hỏi ngƣời phát triển phải hiểu rõ logic nghiệp vụ của ứng dụng đƣợc xây dựng. Một số đặc điểm của input mà mô hình này chú ý tới nhƣ kiểu dữ liệu, độ dài, miền dữ liệu (đối với input kiểu số) hoặc một số định dạng chuẩn khác. Ví dụ, với dạng một username thƣờng dùng cho một database công ty, thì một mẫu hợp lệ sẽ là các ký tự giới hạn trong cỡ 15 ký tự, chỉ chứa chữ cái và con số. Các điều kiện này phụ thuộc nhiều vào logic nghiệp vụ và thỏa thuận với ngƣời sử dụng. Phƣơng pháp đơn giản và hiệu quả nhất để xây dựng các mẫu (pattern) hợp lệ là sử dụng biểu thức chính quy (regular expression). Xét một số mẫu biểu thức chính quy áp dụng cho username, password, email sau đây:

 Username: chỉ chứa các ký tự chữ cái, chữ số và dấu gạch dƣới, độ dài tối đa 30 ký tự, tối thiểu 3 ký tự:

―^([a-zA-Z0-9]|_){3,30}$‖

 ™ Password: chỉ chứa ký tự chữ cái, chữ số, dấu gạch dƣới, độ dài tối thiểu 4, tối đa 50

―^([a-zA-Z0-9]|_){4,50}$‖

 ™ Email: chỉ chứa ký tự chữ cái, chữ số, dấu gạch dƣới, dấu chấm và ký tự@ trong tên, sẽ có dạng nhƣ sau:

―( |^)[a-zA-Z]+([a-zA-Z0-9]|_)*@([a-z0-9]+.){1,}[a-z]+( |$)‖

Cách thực hiện

Lập trình một control nhập liệu (Textbox) dùng chung, inherit từ control Textbox của ASP.NET. Khai báo enum TypeControl cho control này nhƣ sau

public enum TypeControl { Int32, Int64, Email, UserName }; private string strBlackList =

Thêm thuộc tính Error và Type cho control này nhƣ sau

private string strError; public string Error { get { return strError; } set { strError = value; } }

private TypeControl type; public TypeControl Type { get { return type; } set { type = value; } }

Viết lại thuộc tính Text của control nhƣ sau

[Bindable(true)]

[Category("Appearance")] [DefaultValue("")]

public string Text { get { //WhiteList if (type == TypeControl.Email) {

string email = base.Text;

Regex regex = new Regex(@"(|^)[a-zA-Z]+([a-zA-Z0-9]|_)*@([a- z0-9]+.){1,}[a-z]+(|$)");

Match match = regex.Match(email); if (match.Success) { strError = ""; return base.Text; } else {

throw new Exception("Email nhập chưa đúng định dạng"); }

}

else if (type == TypeControl.Int32) {

string num = base.Text; try { int i = Convert.ToInt32(num); strError = ""; return base.Text; }

catch

{

throw new Exception("Dữ liệu phải là kiểu số: >=" + Int32.MinValue.ToString() + " và <=" + Int32.MaxValue.ToString()); }

}

else if (type == TypeControl.Int64) {

string num = base.Text; try { long i = Convert.ToInt64(num); strError = ""; return base.Text; } catch {

throw new Exception("Dữ liệu phải là kiểu số: >=" + Int64.MinValue.ToString() + " và <=" + Int64.MaxValue.ToString()); }

} else {

string user_name = base.Text;

Regex regex = new Regex(@"^([a-zA-Z0-9]|_){3,30}$"); Match match = regex.Match(user_name);

if (match.Success) {

strError = ""; return base.Text;

} else

{

throw new Exception("Tên đăng nhập không đúng định dạng"); } } } set { base.Text = value; } } Cách sử dụng, ví dụ nhập Email:

<cc1:CCText ID="CCText1" runat="server" Type="Email"></cc1:CCText></div>

Kiểm soát dữ liệu:

protected void btnGhi_Click(object sender, EventArgs e) {

try {

//Do something with CCText1.Text

//Example: string strInsertToDB = CCText1.Text; string strInsertToDB = CCText1.Text;

} catch(Exception ex) { Label1.Text = ex.Message; } }

Kết quả:

Hình vẽ cho thấy khi nhập giá trị không đúng định dạng email, chƣơng trình sẽ cảnh báo và không chấp nhận dữ liệu không hợp lệ này. Việc viết code theo kiểu kế thừa là một ƣu điểm, giúp cho lập trình viên kể cả khi là ngƣời mới cũng có thể lập trình an toàn mà không cần phải hƣớng dẫn quá chi tiết, chỉ cần chọn đúng kiểu dữ liệu cần dùng. Ngoài ra do sử dụng throw exception nên kể cả lập trình viên có quên không đặt try catch, chƣơng trình vẫn báo lỗi và nhảy về trang thông báo lỗi chung.

Blacklist

Mô hình này xây dựng nên các mẫu input đƣợc cho là nguy hiểm và sẽ không chấp nhận những mẫu này. Mô hình blacklist kém hiệu quả hơn mô hình whitelist do một vài lý do nhƣ sau: ™

 Số lƣợng khả năng xảy ra của một input xấu rất lớn, không thể xét đủ đƣợc ™

 Khó cập nhật các mẫu này

Ƣu điểm của mô hình này so với whitelist đó là việc xây dựng đơn giản hơn. Thông thƣờng mô hình này không nên sử dụng một mình, để đảm bảo an ninh nên sử dụng whitelist nếu có thể. Nếu sử dụng blacklist nhất thiết cần mã hóa output để giảm thiểu nguy cơ rò rỉ thông tin về những mẫu mà mô hình này bỏ sót. Xét ví dụ một mẫu lọc các ký tự nguy hiểm thƣờng có trong các truy vấn SQL:

―'|%|--|;|/\*|\\\*|_|\[|@|xp_‖

Mẫu này tiến hành tìm sự xuất hiện của các ký tự nhƣ dấu nháy đơn, %, --, dấu chấm phảy,\*,*/, _, [, @,xp_, đƣơng nhiên mẫu này không phải là một mẫu đủ tốt để có thể đảm bảo một input là “sạch”.

Một điều cần chú ý hơn đối với việc sử dụng các mô hình blacklist và whitelist, đó là các mẫu này nên đƣợc xử lý ở phía client (trực tiếp tại trình duyệt) nếu có thể. Bởi

trong một phiên làm việc phức tạp, điều cần tránh nhất cho ngƣời dùng đó là tất cả mọi thông tin đã xử lý bị hủy, phải làm lại từ đầu do phát hiện có điều bất ổn trong input.

Một phần của tài liệu Bảo mật an toàn thông tin cho phần mềm hóa đơn điện tử của tập đoàn điện lực (Trang 25)

Tải bản đầy đủ (PDF)

(75 trang)