Một chương trình được chia thành nhiều đoạn mã gọi là thủ tục (procedure). Mỗi thủ tục chịu trách nhiệm về một hành động nào đó của chương trình. Mỗi thủ tục sau khi hoàn thành nhiệm vụ sẽ gọi thủ tục kế tiếp. Sau lời gọi một thủ tục, địa chỉ kế tiếp sau địa chỉ gọi thủ tục sẽ được lưu vào trong STACK.
Ví d ụ 8.II.3-1: 0x0012FF00 0x0012FF01 0x0012FF02 0x0012FF03 0x0012FF04----------------------------đỉnh Stack 0x0012FF05 0x0012FF06 0x0012FF07 0x0012FF08----------------------------đáy Stack …
Chương 8: Tràn bộ đệm (Buffer Overflow)
…
0x401F2034 gọi thủ tục Q -> thủ tục Q được gọi để thực thi
0x401F2035 …
0x40209876 thủ tục Q …
0xFFFFFFFF
Khi lệnh tại địa chỉ 0x401F2034 được thực thi thì khơng gian địa chỉ như sau:
0x0012FF00----------------------------đỉnh Stack 0x0012FF01 40 0x0012FF02 1F 0x0012FF03 20 0x0012FF04 35 0x0012FF05 0x0012FF06 0x0012FF07 0x0012FF08----------------------------đáy Stack …. …
Như vậy địa chỉ sau địa chỉ gọi thủ tục được đưa vào trong STACK. Khi thủ tục Q chuẩn bị hồn thành nhiệm vụ của mình và sẵn sàng quay trở về thì tiến trình nhận lại địa chỉ đã lưu trước đó ở STACK và khơi phục lại việc thực thi. Địa chỉ này được gọi là “saved return address”.
• Ghi chú:
Chương 8: Tràn bộ đệm (Buffer Overflow)
Ví
dụ 8.II.3-2: strcpy(one,two); printf("Okie\n");
thì return address sẽ trỏ tới vị trí của lệnh gọi tới hàm printf trong bộ nhớ, và khi hàm strcpy kết thúc thì con trỏ lệnh sẽ chỉ tới đó.
II.4. Shell code
Cần phải thay đổi địa chỉ trở về trỏ đến shellcode để đổ một shell. Có thể hình dung ra cách đặt shellcode trên stack như sau:
i. Tr ướ c khi tràn b ộ đệ m:
đáy của bộ nhớ đỉnh của bộ nhớ
<----- FFFFF BBBBBBBBBBBBBBBBBBBBB EEEE RRRR FFFFFFFFFF
đỉnh của stack đáy của stack
B = buffer
E = stack frame pointer R = return address F = các data khác
ii. Khi tràn b ộ đệ m:
đáy của bộ nhớ đỉnh của bộ nhớ
<----- FFFFF SSSSSSSSSSSSSSSSSSSSSSSSSAAAAAAAAFFFFFFFFF
đỉnh của stack đáy của stack
Chương 8: Tràn bộ đệm (Buffer Overflow)
A = con trỏ đến shellcode
F = các data khác
(1) Lắp tràn bộ đệm (đến return addr) bằng địa chỉ của buffer (2) Đặt shellcode vào buffer
Như vậy địa chỉ trở về sẽ trỏ đến shellcode, shellcode sẽ đổ một root shell. Tuy nhiên, thật khó để làm cho ret addr trỏ đến đúng shellcode. Một cách có thể thực hiện được cơng việc khó khăn đó, là đặt vào đầu của buffer một dãy lệnh NOP(NO oPeration - không xử lí), tiếp theo đẩy shellcode vào sau NOPs. Như vậy khi thay đổi ret addr trỏ đến một nơi này đó ở đầu buffer, các
lệnh NOP sẽ được thi hành, chúng không làm gì cả. Đến khi gặp các lệnh shellcode, shellcode sẽ làm nhiệm vụ đổ root shell. Stack có dạng như sau:
đáy của bộ nhớ đỉnh của bộ nhớ
<----- FFFFF NNNNNNNNNNNSSSSSSSSSSSSSSAAAAAAAAFFFFFFFFF
đỉnh của stack đáy của stack
N = NOP
S = shellcode
A = con trỏ đến shellcode F = các data khác
Chương 8: Tràn bộ đệm (Buffer Overflow)
III. MỘT SỐ CÁCH GÂY TRÀN BỘ ĐỆM QUA ỨNGDỤNG WEB: DỤNG WEB:
Các bước cơ bản của kỹ thuật tràn bộ đệm là: chuẩn bị bộ đệm dùng để làm tràn, xác định địa chỉ trả về (RET), xác định địa chỉ của bộ đệm chứa shellcode, cuối cùng gọi thực thi chương trình bị tràn bộ đệm.
Thơng qua những ô nhập dữ liệu hacker có thể sử dụng một chuỗi string nhị phân có khả năng thực thi đoạn lệnh trên máy đích hoặc phá vỡ hệ thống do phải xử lí dữ liệu quá dài, vượt khả năng cho phép của hệ thống ( có thể nói cách này cũng là cách tấn cơng DoS- được nói rõ hơn trong chương 6). Thơng thường đoạn mã rất đơn giản, ví dụ như exec(“sh”) để tạo ra một root shell.
Một ví dụ về cách tấn cơng buffer overflow qua Web là Code Red Worm.
IV. CÁC CÁCH PHỊNG CHỐNG:
• Người thiết kế Web cần phải kiểm tra kĩ kích thước dữ liệu trước khi sử dụng.
• Dùng Referer trong HTTP Header để kiểm tra yêu cầu có phải xuất phát từ máy người dùng
Nh
ậ n xét:
Đây là kĩ thuật tấn công đi sâu vào phần hệ thống nhất, đòi hỏi hacker là người hiểu sâu về tổ chức bộ nhớ cũng như về ngơn ngữ lập trình Assembly. Tuy nhiên, điều này chỉ địi hỏi nếu hacker muốn điều khiển hệ thống. Nếu chỉ sửa đồi nội dung kích thước ô nhập để từ đó đưa lên trình chủ một khối dữ liệu lớn để hệ thống có thể bị phá hủy vì khơng đủ dung lượng đáp ứng việc yêu cầu xử lí khối dữ liệu đó. Kiểu tấn
Chương 8: Tràn bộ đệm (Buffer Overflow)
công này tương tự như kiểu tấn cơng từ chối dịch vụ được nói rõ hơn trong chương tiếp theo.
Chương 9: Từ chối dịch vụ (Dos)
Chương 9
TỪ CHỐI DỊCH VỤ
Nội dung:
I. Khái niệm
II. Những khả năng bị tấn công bằng DoSIII. Các kĩ thuật tấn công III. Các kĩ thuật tấn công
Chương 9: Từ chối dịch vụ (Dos)
CHƯƠNG 9: TỪ CHỐI DỊCH VỤ (DoS)
I. KHÁI NIỆM
Tấn công kiểu DoS là kiểu tấn công làm cho các dịch vụ mạng bị tê liệt, khơng cịn khả năng đáp ứng được yêu cầu nữa. Loại tấn công này ảnh hưởng đến nhiều hệ thống, rất dễ thực hiện và lại rất khó bảo vệ hệ thống khỏi kiểu tấn công DoS.
Thông thường, kiểu tấn công DoS dựa trên những giao thức (protocol). Ví dụ với giao thức là ICMP, hacker có thể sử dụng bomb e-mail để gửi hàng ngàn thơng điệp email với mục đích tiêu thụ băng thơng để làm hao hụt tài nguyên hệ thống trên mail server. Hoặc có thể dùng phần mềm gửi hàng loạt yêu cầu đến máy chủ khiến cho máy chủ khơng thể đáp ứng những u cầu chính đáng khác.
II. NHỮNG KHẢ NĂNG BỊ TẤN CƠNG BẰNG DOS
• TẤN CƠNG TRÊN SWAP SPACE:
Hầu hết các hệ thống đều có vài trăm MB không gian chuyển đổi ( swap space) để phục vụ cho những yêu cầu từ máy khách. Swap space thuờng dùng cho các tiến trình con có thời gian ngắn nên DoS có thể được dựa trên phương thức làm tràn đầy swap space.
• TẤN CƠNG TRÊN BANDWIDTH:
Phần băng thông dành cho mỗi hệ thống là giới hạn, vì thế nếu hacker cùng lúc gửi nhiều yêu cầu đến hệ thống thì phần băng thơng khơng đủ đáp ứng cho một khối lượng dữ liệu lớn đó và dẫn đến hệ thống bị phá vỡ.
Chương 9: Từ chối dịch vụ (Dos)
• TẤN CƠNG VÀO RAM:
Tấn cơng Dos chiếm 1 khoảng lớn của RAM cũng có thể gây ra các vấn đề phá hủy hệ thống. Kiểu tấn cơng BufferOverflow là một ví dụ cho cách phá hủy này (xem kĩ hơn trong nội dung chương..)
• TẤN CƠNG VÀO DISKS:
Một kiểu tấn cơng cổ điển là làm đầy đĩa cứng. Đĩa cứng có thể bị tràn và khơng thể được sử dụng nữa.
III. CÁC KĨ THUẬT TẤN CÔNG:
III.1. Khái niệm về Tcp bắt tay ba chiều:
Đầu tiên, để tìm hiểu phương pháp tấn cơng DoS , luận văn sẽ trình bày cơ chế làm việc “tcp bắt tay ba chiều”.
Gói dữ liệu TCP chứa flag bits (cờ) để mô tả nội dung và mục đích của gói dữ liệu .
Ví
d ụ 9.III.1-1:
• Gói dữ liệu TCP với cờ SYN (synchoronize) dùng để bắt đầu 1 kết nối
• ACK (acknowledgement)
• FIN (finish) dùng để cắt 1 kết nối Cách hoạt động của gói TCP:
Chương 9: Từ chối dịch vụ (Dos)
Hình 9.III.1-1: Cơ chế thiết lập kết nối trước khi truyền số liệu
Buớc 1: Máy con gửi gói tin SYN yêu cầu kết nối
Bước 2: Nếu máy chủ chấp nhận kết nối, máy chủ sẽ gửi gói tin SYN/ACK
Server bắt buộc phải gửi thơng báo lại bởi vì TCP là chuẩn tin cậy nên nếu máy con khơng nhận được thơng báo thì sẽ nghĩ rằng packet đã bị lạc và gửi lại một packet mới .
Bước 3: Máy con gửi hồi đáp bằng gói tin ACK
Báo cho máy chủ biết rằng máy con đã nhận được SYN/ACK packet và lúc này kết nối đã được thiết lập.
Chương 9: Từ chối dịch vụ (Dos)
III.2. Lợi dụng TCP thực hiện phương pháp SYN flood truyền thống: truyền thống:
Hình 9.III.2-1: Tấn cơng DoS truyền thống
Như đã đề cập về vấn đề thiết lập kết nối trong phần 1, bất cứ 1 gói tin SYN, máy chủ cũng phải để 1 phần tài nguyên của hệ thống như bộ nhớ đệm để nhận và truyền dữ liệu cho đường truyền đó. Tuy nhiên, tài nguyên của hệ thống là có hạn và hacker sẽ tìm mọi cách để hệ thống tràn qua giới hạn đó. ( Đây cịn được gọi là half-open connection vì máy khách mở kết nối giữa chừng)
Theo hình 9.III.2-1: Nếu máy chủ sau khi gửi trả một gói tin SYN/ACK để thơng báo chấp nhận kết nối cho máy yêu cầu nhưng nếu địa chỉ IP của máy yêu cầu này là giả mạo thì gói tin khơng thể đến được đích, nên máy chủ vẫn phải dành tài nguyên cho yêu cầu đó. Sau một thời gian không nhận được phản hồi từ máy khách, máy chủ lại tiếp tục gửi một gói tin SYN/ACK để xác nhận lần nữa và cứ như vậy, kết nối vẫn tiếp tục mở.
Nếu như hacker gửi nhiều gói tin SYN đến máy chủ đến khi máy chủ không thể tiếp nhận thêm 1 kết nối nào nữa thì lúc này hệ thống đã bị phá vỡ.
Chương 9: Từ chối dịch vụ (Dos)
Kết luận:
Chỉ với một đường truyền băng thơng nhỏ, hacker đã có thể phá vỡ một hệ thống. Thêm vào đó, địa chỉ IP của hacker có thể được sửa đổi nên việc xác định thủ phạm là một vấn đề hết sức khó khăn.
III.3. Tấn cơng vào băng thơngIII.3.1. Kiểu tấn cơng thứ 1 III.3.1. Kiểu tấn công thứ 1
Hacker hồn tồn có khả năng làm ngập hệ thống vì băng thông của hacker lớn hơn băng thơng của máy đích. Kiểu tấn cơng này không bị hạn chế bởi tốc độ truyền mạng.
Ví
d ụ 9.III.3.1-1: Hacker có một đường truyền tốc độ cao T1 ( 1.544- Mbps ) hay lớn hơn có thể dễ dàng phá vỡ một hệ thống có đường truyền 56Kbps.
III.3.2. Kiểu tấn cơng thứ 2
Kiểu tấn công này được sử dụng khi đường truyền mạng của hacker là quá thấp so với đường truyền của máy đích.
Khơng giống như kiểu tấn công DoS truyền thống ( phần 2 ), kiểu tấn công vào băng thơng lớn hơn sẽ lợi dụng những gói tin từ những hệ thống khác nhau cùng một lúc tiến đến hệ thống đích khiến cho đường truyền của hệ thống đích khơng cịn khả năng đáp ứng, máy chủ khơng cịn khả năng nhận một gói tin nào nữa.
Chương 9: Từ chối dịch vụ (Dos)
Hình 9.III.3.2-1: Kiểu tấn cơng DoS vào băng thơng
Theo hình 9.III.3.2-1, tất cả các gói tin đi vào 1 mạng máy tính qua 1 "Big-Pipe" ( ống dẫn lớn ), sau đó được router chia ra những "Small Pipe" ( ống dẫn nhỏ ) cho nhiều máy tính con tùy theo địa chỉ IP của gói tin.
Nhưng nếu tồn bộ "Big-Pipe" bị làm ngập bằng những gói tin chỉ hướng đến 1 máy nhất định trong mạng máy tính con này, router đành phải chấp nhận loại bỏ phần lớn các packet để chỉ còn lại số lượng vừa đủ đi qua "Small Pipe" của máy tính đó. Kiểu tấn cơng này sẽ loại máy đích ra khỏi Internet.
Đây là phương pháp tấn công kiểu từ chối dịch vụ nhưng không là DoS mà gọi là DDoS ( kiểu từ chối dịch vụ phân tán ), nghĩa là cùng một lúc nhiều máy sẽ được phát động để gửi gói tin đến máy đích ( mặc dù đường truyền của mỗi máy khơng cao nhưng nhiều đường truyền lại hợp thành một ống dẫn “ Big Pipe”), làm cho máy đích khơng cịn khả năng tiếp nhận gói tin và bị loại khỏi mạng Internet, như sơ đồ minh họa sau:
Chương 9: Từ chối dịch vụ (Dos)
Hình 9.III.3.2-2: Tấn cơng DDoS
DRDoS (Distributed Reflection Denial of Service) - Thế hệ tiếp theo của DDoS:
Đây cũng chính là nguyên nhân khiến cho trang grc.com bị phá vỡ. Hình sau sẽ minh họa kiểu tấn công DRDoS này.
Chương 9: Từ chối dịch vụ (Dos)
Hình 9.III.3.2-3. Tấn cơng kiểu DRDoS
Bằng cách giả địa chỉ IP của máy đích, hacker sẽ cùng lúc gửi nhiều gói tin đến các hệ thống máy mạnh trên mạng, các hệ thống này khi nhận gói tin SYN giả này, chấp nhận kết nối và gửi trả một gói tin SYN/ACK để thơng báo. Vì địa chỉ IP của gói tin SYN bị hacker sửa đổi thành địa chỉ IP máy đích nên những gói tin SYN/ACK sẽ được gửi về cho máy đích. Cùng một lúc nhận được nhiều gói tin, đường truyền của máy đích khơng đủ khả năng đáp ứng, hệ thống máy đích từ chối nhận bất kì gói tin nào và lúc này hệ thống máy đích đã bị sụp đổ.
Chương 9: Từ chối dịch vụ (Dos)
III.4. Kiểu tấn công vào tài nguyên hệ thống
Đây là kiểu tấn công nhằm vào tài nguyên hệ thống hơn là tài nguyên mạng như CPU, bộ nhớ, file hệ thống, tiến trình…..Hacker là một người dùng hợp lệ của hệ thống, và được một lượng tài nguyên giới hạn trên hệ thống. Tuy nhiên, hacker sẽ lạm dụng quyền truy cập này để yêu cầu thêm tài nguyên. Như vậy, hệ thống hay những người dùng hợp lệ sẽ bị từ chối sử dụng tài nguyên chia sẻ.
Kiểu tấn công sẽ khiến cho hệ thống khơng thể sử dụng được vì tài nguyên đã bị sử dụng hết, khơng cịn tiến trình để thực thi nữa.
IV. BIỆN PHÁP PHỊNG CHỐNG
Kiểu tấn cơng từ chối dịch vụ là kiểu tấn cơng gây nhiều khó khăn trong vấn đề bảo vệ cũng như điều tra tìm ra thủ phạm nhất, bởi vì hầu hết hacker đã thay đổi địa chỉ IP của máy mình nên rất khó xác định ai là thủ phạm.
Để phòng chống khả năng khuyếch đại đường truyền, cần:
• Huỷ khả năng broadcast tại router biên
• Tăng kích thước hàng đợi kết nối
-> kết quả: có thể phòng tránh khả năng tràn hàng đợi qua nhiều kết nối, nhưng cách này sử dụng nhiều tài nguyên
• Giảm thời gian thiết lập kết nối
• Dùng những phần mềm phát hiện và phá hủy kiểu tấn công DoS:
Hầu hết những hệ điều hành hiện nay đều hỗ trợ khả năng phát hiện và phịng chống kiểu tấn cơng lụt SYN.
Chương 9: Từ chối dịch vụ (Dos)
Tuy nhiên cũng đã có những phần mềm được có khả năng tránh kiểu tấn cơng này. Ví dụ như với Linux kernels 2.0.30 và về sau cài đặt một tùy chọn gọi là SYN Cookie, kernel có nhiệm vụ truy tìm và lưu vết những khả năng có thể xảy ra kĩ thuật SYN. Sau đó, kernel sẽ sử dụng một giao thức mã hoá như SYN cookie cho phép người dùng hợp lệ của hệ thống tiếp tục kết nối đến hệ thống
Với WindowNT 4.0 trở về sau, sử dụng kĩ thuật backlog, mỗi khi hàng đợi kết nối không đủ đáp ứng, hệ thống tự động cung cấp tài nguyên cho hàng đợi, vì thế hàng đợi sẽ khơng bị phá vỡ.
• Ứng dụng chỉ cho phép mỗi một máy con chỉ được thiết lập số kết nối tối đa theo qui định tránh trường hợp hacker gửi cùng lúc nhiều yêu câu gây tắc nghẽn.
Nh
ậ n xét:
Kiểu tấn công từ chối dịch vụ tuy chỉ khiến cho hệ thống bị phá vỡ trong vài phút nhưng hậu quả thì khá to lớn (ảnh hưởng trên phạm vi tiền và uy tín). Đây là kĩ thuật thường được hacker sử dụng trong trường hợp không thể chiếm quyền quản trị trên hệ thống hoặc thơng tin, hoặc muốn phá hủy uy tín của cơ quan đó.Thêm vào đó việc giả mạo địa chỉ khiến cho hacker càng dễ dàng thực hiện viêc tấn công mà không sợ bị phát hiện. Thông thường kĩ thuật này được thực hiện kèm theo sự hỗ trợ của vài công cụ như ping of death, teardrop…Những công cụ này được liệt kê thêm trong