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 đó.
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]”.
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.
Đầu tiên kẻ tấn công sẽ gửi một yêu cầu hoàn chỉnh.
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):
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:
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.
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.
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.Hình 1. Kiểu tấn công http slowloris
Hình 2. Kiểu tấn công http slowbody
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.
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:
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: