Kĩ thuật tấn công http slowread và slow body.

kaitoukid

Wh------
18/07/2014
26
31 bài viết
Kĩ thuật tấn công http slowread và slow body.
Loạt bài viết về tấn công httpslow sẽ được tiếp tục với bài viết với hai kiểu tấn công khác có tên: http slowbody (hay có tên khác là slowpost) và httpread. Vậy slowloris (như trình bày ở bài trước) và 2 kiểu tấn công này có gì khác nhau? Bài viết dưới đây sẽ trình bày về điều đó.

Kĩ thuật tấn công httpslow

Tấn công httpslow là một kĩ thuật khai thác giao thức http. Do thiết kế của giao thức http đòi hỏi phải nhận hoàn chỉnh một yêu cầu trước khi server xử lý. Nếu như một yêu cầu không đầy đủ, hoặc tốc độ truyền tải rất thấp, server sẽ được duy trì kết nối để chờ đợi phần còn lại của yêu cầu. Do số lượng kết nối đồng thời của mỗi webserver đều có hạn (với apache là khoảng hơn 300 kết nối đồng thời), và mục đích của các cuộc tấn công httpslow là làm cho số kết nối đồng thời tới server bị chạm ngưỡng và không thể đáp ứng được bất kì yêu hợp lệ nào khác.

Slowloris vs slowbody

Slowloris và slowbody giống nhau ở chỗ đều duy trì kết nối tới server bằng cách làm chậm yêu cầu gửi lên server, bắt server phải đợi đầy đủ request để xử lý. Sự khác nhau giữa chúng là ở cách thức duy trì kết nối.

1.jpg

Hình 1. Kiểu tấn công http slowloris
Ở phía slowloris duy trì kết nối bằng cách gửi lên server liên tiếp với nội dung “X-a: b[CRLF]” để thể hiện rằng request gửi lên vẫn còn chứa những trường còn thiếu và server chờ đợi dấu hiệu kết thúc từ client “[CRLF][CRLF]”.

2.png

Hình 2. Kiểu tấn công http slowbody
Nhưng với slowbody, các trường yêu cầu gửi lên đầy đủ đã có chứa “[CRLF] [CRLF]”, tuy nhiên trong yêu cầu gửi lên có chứa nội dung kèm theo với độ dài là 10000 bytes (Content-Length: 10000).

Sau khi nhận được nội dung yêu cầu có trường “Content-Length: 10000” server biết được phía client sẽ gửi lên có kèm nội dung 10000 bytes và duy trì kết nối đến khi nhận đủ nội dung.

Kẻ tấn công cố gắng lợi dụng phần nội dung kèm theo này để duy trì kết nối bằng cách gửi “nhỏ giọt” cứ sau 1 khoảng thời gian lại gửi dạng “A… [CRLF]”cho server, trong đó A là chuỗi kí tự bất kì và nội dung này có dung lượng rất nhỏ (khoảng vài bytes) so với tổng dung lượng cần gửi. Server sẽ chờ đợi khi nào client gửi đủ nội dung kèm theo lên hoặc vượt quá thời gian giới hạn của kết nối thì mới kết thúc phiên.

Slowread

Với 2 kiểu tấn công trên, kẻ tấn công gửi một yêu cầu không hoàn chỉnh lên và bắt server đợi chờ, nhưng với kiểu tấn côn slowread thì lại ngược lại. Ở đây, kẻ tấn công gửi một yêu cầu hoàn chỉnh trong một lần, nhưng lại duy trì luồng kết nối phản hồi về từ server bằng cách đọc “nhỏ giọt” dữ liệu trả về.

Đầu tiên kẻ tấn công sẽ gửi một yêu cầu hoàn chỉnh.

3.jpg
Nếu như nhận dữ liệu thông thường, kẻ tấn công sẽ nhận được dữ liệu (phân tích qua cách đọc cách gói tin):

4.jpg

Qua những gói tin được bắt ở trên, phía vicctim.http (tức server) gửi về cho attacker (tức client) những gói tin có dung lượng khoảng 1448 bytes (length = 1448) cho đến khi gửi toàn bộ nội dung phản hồi từ phía server gửi cho client.

Nhưng kẻ tấn công sẽ sử dụng kĩ thuật slowread và kết quả, luồng dữ liệu nhận được khi qua phân tích gói tin phía nhận:

5.jpg

Phía attacker (tức client) đã sử dụng kĩ thuật slowread. Ta phân tích kĩ hơn 1 về cặp gói tin ACK giữa client và server để làm rõ kĩ thuật này.

6.png

Ta thấy gói tin từ attacker (client) gửi cho victim.http (server) nằm ở seq: 148 có trường len=0. Theo cấu trúc gói tin TCP thì dung lượng nhận về tối đa của gói seq 148 là 0 bytes và đúng như vậy, ở gói tin trả về từ server cho client thì cũng có trường len=0 (tức dung lượng dữ liệu trả về cho client =0). Để rõ hơn về các trường cũng như cách thức hoạt động của TCP bạn đọc có thể tham khảo tại đây.

Do cách xử lý giao thức http, server sẽ đảm bảo gửi toàn bộ nội dung phản hồi cho client. Nhưng với kĩ thuật slowread, phía server sẽ mất rất nhiều thời gian để gửi hết phản hồi, như vậy kết nối gửi từ server tới client sẽ được duy trì đến khi gửi xong hoặc timeout.

Công cụ tấn công tham khảo, các bạn có thể tham khảo qua tại google code theo đường dẫn.

Qua 2 bài viết về kĩ thuật tấn công httpslow, chắc hẳn các bạn đã hiểu qua về kĩ thuật và cách thức thực hiện của kẻ tấn công khi sử dụng chúng. Chỉ cần sử dụng một máy tính đã có thể làm 1 website bị từ chối dịch vụ. Tuy nguy hiểm nhưng các bạn có thể ngăn chặn chúng qua một số bước cấu hình với từng webserver. Trong bài viết sau tôi sẽ viết về kĩ thuật bảo vệ trước kĩ thuật tấn công này.
 
Chỉnh sửa lần cuối bởi người điều hành:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Thẻ
http slowread slow body
Bên trên