Застосування машинного навчання для фільтрації DDoS


12

У курсі машинного навчання Стенфорда Ендрю Нг згадав про застосування ML в ІТ. Через деякий час, коли я отримав DDoS середнього розміру (близько 20k ботів) на нашому сайті, я вирішив боротися з ним, використовуючи простий класифікатор Neural Network.

Я написав цей сценарій python приблизно за 30 хвилин:
https://github.com/SaveTheRbtz/junk/tree/master/neural_networks_vs_ddos

Він використовує pyBrain і приймає 3 вхідні журнали nginx , два з яких для тренування нейронної мережі:

  1. З хорошими запитами
  2. З поганими

І один журнал для класифікації

Від поганих запитів ..

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/" "-"

... і добре ...

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"

... він будує словник:

['__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']

Кожен запис, на якому ми навчаємо нашу мережу, / запис, який нам потрібно класифікувати ...

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)"

... перетворюється на функціональний вектор:

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

Після всього цього існує стандартний шлях розбиття набору даних на навчальні та тестові набори, навчання нейронних мереж та вибір найкращого. Після цього процесу (який може зайняти досить багато часу залежно від розміру набору даних) ми можемо нарешті класифікувати журнали за допомогою навченої мережі.

Але тут є ряд питань із таким підходом:

  1. Контрольоване машинне навчання начебто неправильно для такого типу проблем, тому що для виявлення ботів я спочатку повинен виявити ботів і навчити Нейрову мережу з цими даними.
  2. Я не беру до уваги поведінку клієнта. Краще розглянути графік сторінки до переходів сторінки для кожного користувача.
  3. Я не враховую місцезнаходження клієнтів. Якщо один комп’ютер у мережі інфікований вірусом, то більше шансів зараження інших комп'ютерів у цій мережі.
  4. Я не беру дані геолокації в обліковий запис. Звичайно, якщо ви працюєте на сайті в Росії, шанси клієнтів з Бразилії є мало.
  5. Я не знаю, чи це був правильний спосіб використання нейронної мережі та класифікації для вирішення такої проблеми. Можливо, мені було краще з деякою системою виявлення аномалій.
  6. Краще, коли метод ML є "он-лайн" (або так званий "потоковий"), щоб його можна було тренувати на льоту.

Ось ось питання:
Що б ви зробили, якби ви стикалися з тією самою проблемою захисту від DDoS-атаки з урахуванням лише поточних журналів веб-сервера (які складаються з хороших клієнтів та ботів) та історичних даних (журнали за попередній день / тиждень / місяць з переважно хорошими клієнтами)?
Який підхід машинного навчання ви б обрали.
Які алгоритми ви б використовували?

Відповіді:


11

Як щодо алгоритмів виявлення аномалії? Згадуючи про клас Ендрю Нґ, ви, мабуть, бачили розділ "XV. АНОМАЛЬНЕ ВИЗНАЧЕННЯ " на ml-class.org , але все одно.

Виявлення аномалій буде кращим за контрольованою класифікацією у сценаріях, аналогічних вашому, оскільки:

  • зазвичай у вас дуже мало аномалій (тобто занадто мало "позитивних" прикладів)
  • зазвичай у вас дуже різні типи аномалій
  • майбутні аномалії можуть виглядати не так, як ті, які ви мали досі

Важливим моментом виявлення аномалії є те, які функції вибрати. Тут є два поширені поради - вибрати функції

  • Гауссова розподіл (або спотворює їх таким)

  • ймовірність p (аномалія) буде непорівнянна з p (нормальна) - скажімо, аномальні величини дуже великі, а нормальні - дуже малі (або навпаки).

Я не впевнений, чи допоможе геолокація для вашого сценарію, але поведінка клієнта, безумовно, має значення - хоча це, мабуть, відрізнятиметься від програми до програми. Ви можете виявити, що співвідношення GET / POST має значення. Або співвідношення розміру відповіді до кількості запитів. Або кількість звернень на одну сторінку. Якщо у вас є така інформація в журналах - визначено, ви можете використовувати дані для ретроспективного аналізу з подальшим чорним списком IP :)


+1 для виявлення аномалії. Я також додаю "кількість спроб входу за останні 5 хвилин" та "кількість спроб входу з ip X за останні 5 хвилин".
нейрон

Основна проблема виявлення аномалії (як це було задано в ML-класі) полягає в тому, що ви не можете використовувати її для величезної кількості функцій зі складними відносинами між ними - це занадто обчислювально дорого. У моєму прикладі я отримав 23 функції з 2 (!!) запитів навіть без графіку виклику, геолокації та додаткових nginxзмінних у журналі. І я не можу використовувати PCA, оскільки зловмисники можуть змінити поведінку ботів.
SaveTheRbtz

@SaveTheRbtz повторно "обчислювально дорогий" - IIRC, виявлення аномалії, представлене в ml-класі, було просто оцінкою щільності, тому ви просто помножите ймовірність своїх особливостей, як у p (x1) * .. * p (xN), який, я вірите, це O (n), тому ви шукаєте O (logn) чи щось таке? Але в будь-якому випадку, це хороше запитання , і це змусило мене думати про автоматичне виборі особливості - так поставив питання на machinelearning.stackexchange.com/questions/184
andreister

Точніше кажучи - я говорю про до 100 000 функцій на 1 Мб файлу журналу. PS. Приємне запитання!
SaveTheRbtz

1

Це складна проблема, ось кілька спостережень:

  • Цей документ може вам допомогти - він покладається на керовані методи навчання (в контексті багатокласової класифікації) для виявлення змагальних оголошень. Оскільки змагальні стратегії розвиваються, авторам доводиться покладатися на експертів-людей, які коментують рідкісні «аномалії». Вони використовують методи ранжирування на основі SVM.
  • Як зазначають інші, ви можете спробувати виявити аномалію / сторонність на основі навчання, що не контролюється, але це потребує великої настройки, щоб правильно встановити баланс хибнопозитивних та помилкових негативів.
  • Маючи гарний набір особливостей дуже важливо - вибір методології є другорядним (тобто проста техніка, наприклад, Naive Bayes або логістична регресія, часто досить, якщо враховувати хороший набір функцій)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.