Áp dụng học máy để lọc DDoS


12

Trong khóa học Machine Learning của Stanford, Andrew Ng đã đề cập đến việc áp dụng ML trong CNTT. Một thời gian sau khi tôi có kích thước vừa phải (khoảng 20 nghìn bot) DDoS trên trang web của chúng tôi, tôi quyết định chiến đấu chống lại nó bằng cách sử dụng trình phân loại Mạng thần kinh đơn giản.

Tôi đã viết kịch bản python này trong khoảng 30 phút:
https://github.com/SaveTheRbtz/junk/tree/master/neural_networks_vs_ddos

Nó sử dụng pyBrain và lấy 3 nginx log làm đầu vào, hai trong số chúng để huấn luyện Mạng thần kinh:

  1. Với các truy vấn tốt
  2. Với những người xấu

Và một bản ghi để phân loại

Từ các truy vấn xấu ..

0.0.0.0 - - [20/Dec/2011:20:00:08 +0400] "POST /forum/index.php HTTP/1.1" 503 107 "http://www.mozilla-europe.org/" "-"

...và tốt...

0.0.0.0 - - [20/Dec/2011:15:00:03 +0400] "GET /forum/rss.php?topic=347425 HTTP/1.0" 200 1685 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9) Gecko/2008052906 Firefox/3.0"

... nó xây dựng một từ điển:

['__UA___OS_U', '__UA_EMPTY', '__REQ___METHOD_POST', '__REQ___HTTP_VER_HTTP/1.0', 
'__REQ___URL___NETLOC_', '__REQ___URL___PATH_/forum/rss.php', '__REQ___URL___PATH_/forum/index.php',
'__REQ___URL___SCHEME_', '__REQ___HTTP_VER_HTTP/1.1', '__UA___VER_Firefox/3.0',
'__REFER___NETLOC_www.mozilla-europe.org', '__UA___OS_Windows', '__UA___BASE_Mozilla/5.0',
'__CODE_503', '__UA___OS_pl', '__REFER___PATH_/', '__REFER___SCHEME_http', '__NO_REFER__',
'__REQ___METHOD_GET', '__UA___OS_Windows NT 5.1', '__UA___OS_rv:1.9',
'__REQ___URL___QS_topic', '__UA___VER_Gecko/2008052906']

Mỗi mục mà chúng tôi đào tạo mạng của chúng tôi với / mục mà chúng tôi cần phân loại ...

0.0.0.0 - - [20/Dec/2011:20:00:01 +0400] "GET /forum/viewtopic.php?t=425550 HTTP/1.1" 502 107 "-" "BTWebClient/3000(25824)"

... được chuyển đổi thành vector tính năng:

[False, False, False, False, True, False, False, True, True, False, False, False, False, False, False, False, False, True, True, False, False, False, False]

Sau tất cả những điều này, có đường dẫn tiêu chuẩn để chia dữ liệu thành tập huấn luyện và kiểm tra, đào tạo mạng lưới thần kinh và chọn ra mạng tốt nhất. Sau quá trình này (có thể mất nhiều thời gian tùy thuộc vào kích thước tập dữ liệu), cuối cùng chúng ta cũng có thể phân loại nhật ký bằng cách sử dụng mạng được đào tạo.

Nhưng đây là một số vấn đề với cách tiếp cận đó:

  1. Học máy được giám sát là sai đối với loại vấn đề đó, bởi vì để phát hiện các bot trước tiên tôi cần phát hiện các bot và huấn luyện Mạng thần kinh với dữ liệu đó.
  2. Tôi không đưa hành vi của khách hàng vào một tài khoản. Tốt hơn là xem xét biểu đồ chuyển trang từ trang này sang trang khác cho mỗi người dùng.
  3. Tôi không đưa khách hàng vào tài khoản. Nếu một máy tính trong mạng bị nhiễm một số vi-rút thì có nhiều khả năng các máy tính khác trong mạng đó bị nhiễm.
  4. Tôi không lấy dữ liệu định vị địa lý vào tài khoản. Tất nhiên nếu bạn đang điều hành trang web ở Nga thì có rất ít cơ hội của khách hàng từ Brazil.
  5. Tôi không biết liệu đó có phải là cách đúng đắn để sử dụng mạng lưới thần kinh và phân loại để giải quyết vấn đề như vậy. Có thể tôi đã tốt hơn với một số hệ thống phát hiện bất thường.
  6. Sẽ tốt hơn khi phương thức ML là "trực tuyến" (hay còn gọi là "phát trực tuyến") để nó có thể được đào tạo nhanh chóng.

Vì vậy, đây là câu hỏi:
Bạn sẽ làm gì nếu gặp phải vấn đề tương tự chống lại cuộc tấn công DDoS chỉ bằng nhật ký máy chủ web hiện tại (bao gồm các máy khách và bot tốt) và dữ liệu lịch sử (nhật ký cho ngày / tuần / tháng trước với khách hàng chủ yếu là tốt)?
Bạn sẽ chọn cách tiếp cận Machine Learning nào.
Những thuật toán bạn sẽ sử dụng?

Câu trả lời:


11

Làm thế nào về các thuật toán phát hiện bất thường? Như bạn đã đề cập đến lớp của Andrew Ng, có lẽ bạn đã thấy phần "XV. ANOMALY DETATION" trên ml- class.org , nhưng dù sao đi nữa.

Phát hiện bất thường sẽ vượt trội hơn so với phân loại được giám sát trong các tình huống tương tự như của bạn bởi vì:

  • thông thường bạn có rất ít dị thường (ví dụ: quá ít ví dụ "tích cực")
  • thông thường bạn có các loại dị thường rất khác nhau
  • dị thường trong tương lai có thể trông không giống với những gì bạn đã có cho đến nay

Điểm quan trọng trong phát hiện bất thường là, tính năng nào để chọn. Hai lời khuyên phổ biến ở đây là chọn các tính năng với

  • Phân phối Gaussian (hoặc bóp méo chúng để được như vậy)

  • xác suất p (dị thường) không thể so sánh với p (bình thường) - giả sử, giá trị dị thường là rất lớn trong khi giá trị bình thường rất nhỏ (hoặc ngược lại).

Tôi không chắc liệu định vị địa lý có giúp ích cho kịch bản của bạn hay không, nhưng hành vi của khách hàng chắc chắn sẽ có vấn đề - mặc dù nó có thể khác với ứng dụng này đến ứng dụng khác. Bạn có thể thấy rằng tỷ lệ GET / POST là vấn đề. Hoặc tỷ lệ kích thước phản hồi cho số lượng yêu cầu. Hoặc số lần truy cập trang đơn. Nếu bạn có thông tin như vậy trong nhật ký - chắc chắn bạn có thể sử dụng dữ liệu để phân tích hồi cứu, theo sau là danh sách đen IP :)


+1 để phát hiện bất thường. Tôi cũng đã thêm "số lần đăng nhập đã thử trong 5 phút cuối" và "số lần đăng nhập đã thử từ ip X trong 5 phút cuối".
nơ-ron

Vấn đề chính với phát hiện bất thường (như đã được đưa ra trong ML-Class) là bạn không thể sử dụng nó cho số lượng lớn các tính năng có mối quan hệ phức tạp giữa chúng - nó quá đắt về mặt tính toán. Trong ví dụ của tôi, tôi đã có 23 tính năng trong số 2 (!!) truy vấn ngay cả khi không có biểu đồ cuộc gọi, định vị địa lý và các nginxbiến bổ sung trong nhật ký. Và tôi không thể sử dụng PCA vì những kẻ tấn công có thể thay đổi hành vi của bot.
SaveTheRbtz

@SaveTheRbtz lại "đắt tiền về mặt tính toán" - IIRC, phát hiện bất thường như được trình bày trong lớp ml chỉ là ước tính mật độ, vì vậy bạn chỉ cần nhân xác suất của các tính năng của mình như trong p (x1) * .. * p (xN) mà tôi tin, là O (n) vậy bạn đang tìm kiếm O (logn) hay cái gì đó? Nhưng dù sao, đó là một câu hỏi hợp lý và nó khiến tôi suy nghĩ về việc lựa chọn tính năng tự động - vì vậy hỏi một câu hỏi tại machinelearning.stackexchange.com/questions/184
andreister

Nói chính xác hơn - tôi đang nói về tối đa 100.000 tính năng trên 1Mb tệp nhật ký. Tái bút Câu hỏi hay!
SaveTheRbtz

1

Đây là một vấn đề khó khăn, đây là một vài quan sát:

  • Bài viết này có thể giúp ích cho bạn - nó dựa vào các kỹ thuật học tập có giám sát (trong bối cảnh phân loại nhiều lớp) để phát hiện quảng cáo đối nghịch. Kể từ khi các chiến lược đối nghịch phát triển, các tác giả phải dựa vào các chuyên gia của con người chú thích các "dị thường" hiếm gặp. Họ sử dụng các kỹ thuật xếp hạng dựa trên SVM trong số những người khác.
  • Như những người khác lưu ý, bạn có thể thử phát hiện bất thường / ngoại lệ dựa trên học tập không giám sát nhưng điều đó sẽ đòi hỏi rất nhiều điều chỉnh để có được sự cân bằng giữa dương tính giả và phủ định sai.
  • Có một bộ tính năng tốt là rất quan trọng - sự lựa chọn phương pháp là thứ yếu (nghĩa là một kỹ thuật đơn giản như Naive Bayes hoặc hồi quy logistic thường đủ cho một bộ tính năng tốt)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.