HomeLập trìnhPhpTấn công Loris...

Tấn công Loris chậm bằng JavaScript trên Máy chủ PHP [and its prevention!]


Quên bài đăng trong một phút, hãy bắt đầu với tiêu đề này nói về cái gì! Đây là một bài viết dựa trên bảo mật web sẽ đi vào những điều cơ bản về cách thức hoạt động của HTTP. Chúng ta cũng sẽ xem xét một cuộc tấn công đơn giản khai thác cách thức hoạt động của giao thức HTTP.

HTTP là gì?

HTTP, Giao thức truyền tải siêu văn bản, là giao thức được web sử dụng để liên lạc. Thiết bị của bạn, khi bạn sử dụng trình duyệt, sẽ sử dụng giao thức cụ thể này để gửi yêu cầu đến các máy chủ từ xa để yêu cầu dữ liệu từ chúng.

Về cơ bản, nó giống như bạn nói với mẹ của mình, “Mẹ ơi, con cần ăn món trong tủ lạnh ở ngăn 2, mẹ có thể cho con không?”

Và mẹ bạn nói, “Chắc chắn rồi, của bạn đây” và gửi cho bạn món đồ đó. Giờ đây, HTTP là cách bạn có thể truyền đạt thông tin này cho mẹ mình, giống ngôn ngữ bạn sử dụng để liên lạc hơn.

Cách thức hoạt động của HTTP

Đây là video TL; DR nếu bạn là người thích xem video. Nếu không, hãy tiếp tục với bài viết:

HTTP (Lớp 7) được xây dựng trên giao thức TCP (Lớp 4). chúng ta có thể sử dụng nc (netcat) để mở ổ cắm TCP thô cho bất kỳ trang web nào chạy trên HTTP (thường là cổng 80). Xem ví dụ sau về cách chúng tôi kết nối với cổng HTTP 80 cho google.com bằng netcat:

Đọc thêm  Sự cố với PDO khi thực thi php
Ảnh chụp màn hình-2019-10-02-at-6.09.39-am

Xem dữ liệu chúng tôi đã gửi:

GET / HTTP/1.1
Host: google.com
X-header-1: somemoredata
X-header-2: somemoredata
<empty line>

Bỏ qua phần phụ X-header-* tiêu đề, chúng chỉ là tiêu đề ngẫu nhiên mà bạn có thể gửi cùng với yêu cầu của mình. Tiêu đề quan trọng bao gồm trong thông số kỹ thuật HTTP/1.1 là Host tiêu đề.

Và phản hồi chúng tôi nhận được:

HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Tue, 01 Oct 2019 23:24:13 GMT
Expires: Thu, 31 Oct 2019 23:24:13 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Accept-Ranges: none
Via: HTTP/1.1 forward.http.proxy:3128
Connection: keep-alive

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

Như vậy, HTTP là một giao thức bản rõ bao gồm thông tin yêu cầu được gửi bởi máy khách và phản hồi như hình trên.

Cuộc tấn công culi chậm

Một cuộc tấn công Slow Loris khai thác thực tế là tôi có thể thực hiện một yêu cầu HTTP rất chậm. Nói cách khác, tôi có thể bắt đầu một yêu cầu HTTP đến máy chủ và tiếp tục gửi dữ liệu đến máy chủ rất chậm để duy trì kết nối đó. Đồng thời, nó không bao giờ kết thúc kết nối đó và mở ra nhiều kết nối như vậy để làm cạn kiệt nhóm kết nối của máy chủ.

từ chối trách nhiệm – Thử nghiệm thâm nhập bất kỳ dịch vụ trực tuyến/ngoại tuyến nào không thuộc sở hữu của bạn mà không có sự cho phép trước bằng văn bản là không hợp lệ và tôi không chịu trách nhiệm cho bất kỳ thiệt hại gây ra. Chỉ sử dụng nội dung này cho mục đích giáo dục.

Đọc thêm  Mẫu liên hệ PHP lỗi 404

Trình diễn Cu li chậm:

Điều này có nghĩa là tôi có thể tiếp tục gửi dữ liệu bổ sung đến máy chủ dưới dạng tiêu đề. Bây giờ, tôi sẽ bắt đầu một máy chủ phát triển PHP đơn giản trên máy của mình:

Ảnh chụp màn hình-2019-10-02-at-6.16.34-am

Và tôi sử dụng một tập lệnh Node đơn giản để thực hiện những gì chúng ta đã thảo luận ở trên trên máy chủ cục bộ của mình:

Ảnh chụp màn hình-2019-10-02-at-6.17.40-am

Bạn có thể tìm thấy tập lệnh Node được sử dụng tại đây.

Sau một thời gian, bạn sẽ thấy rằng máy chủ PHP của chúng tôi thực sự gặp sự cố!

Ảnh chụp màn hình-2019-10-02-at-6.17.52-am

Điều này là do có quá nhiều kết nối mở và PHP không thể xử lý bất kỳ kết nối mở nào nữa (do giới hạn bộ nhớ/phần cứng).

Bây giờ, tất nhiên, điều này hoạt động hoàn hảo trên máy chủ phát triển cục bộ. Nhưng nếu bạn có thể tìm thấy một máy chủ không triển khai các biện pháp bảo vệ chống lại các cuộc tấn công culi chậm, thì đó là một vấn đề lớn đối với họ.

Bảo vệ chống lại một cuộc tấn công chậm Loris

  • Sử dụng các giải pháp như Cloudflare trước máy chủ của bạn để ngăn chặn DoS/DDoS
    Trích dẫn từ trang web của Cloudflare:

đám mây bộ đệm yêu cầu đến trước khi bắt đầu gửi bất cứ thứ gì đến máy chủ gốc. Kết quả là lưu lượng tấn công “thấp và chậm” như tấn công Slowloris không bao giờ đến được mục tiêu đã định. Tìm hiểu thêm về cách bảo vệ DDoS của Cloudflare ngăn chặn các cuộc tấn công slowloris.

  • Tỷ lệ giới hạn số lượng kết nối đồng thời được mở bởi một địa chỉ IP cụ thể thành một số lượng nhỏ. Điều này có thể đạt được bằng cách sử dụng các máy chủ proxy ngược giao diện người dùng đơn giản như nginx bằng cách sử dụng triển khai thuật toán thùng bị rò rỉ của chúng. Làm thế nào nó hoạt động, là một cái gì đó cho một ngày khác!
  • Tăng dung lượng máy chủ – Giờ đây, điều này có thể giảm thiểu các cuộc tấn công nhỏ, nhưng kẻ tấn công thực sự có thể và sẽ mở rộng/khuếch đại cuộc tấn công ban đầu khá dễ dàng do cần ít băng thông hơn để thực hiện một cuộc tấn công như vậy.
Đọc thêm  Bảng quản trị php - Diễn đàn freeCodeCamp

Phần kết luận

Rất nhiều máy chủ (nginx/apache2 phiên bản mới) đi kèm với các biện pháp bảo vệ tấn công loris chậm theo mặc định. Nhưng đối với nhiều dịch vụ nội bộ, máy chủ có thể dễ bị tấn công đơn giản này.

Bạn có thể muốn kiểm tra các dịch vụ của mình và triển khai các bản sửa lỗi. Bảo mật web là một lĩnh vực thú vị và tôi dự định thực hiện một loạt web về nó trên codedamn. Bạn có thể kết nối với tôi trên Twitter để cập nhật quá. Cho đến lúc đó, được an toàn!





Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status