DDoS filtrelemesi için makine öğrenimi uygulama


12

In Stanford Yapay Öğrenme kursu Andrew Ng IT ML uygulayarak söz. Bir süre sonra sitemizde orta büyüklükte (yaklaşık 20 bin bot) DDoS aldığımda basit Sinir Ağı sınıflandırıcısını kullanarak buna karşı savaşmaya karar verdim.

Bu python betiğini yaklaşık 30 dakika içinde yazdım:
https://github.com/SaveTheRbtz/junk/tree/master/neural_networks_vs_ddos

PyBrain kullanır ve ikisi Sinir Ağı'nı eğitmek için giriş olarak 3 nginx günlüğü alır :

  1. İyi sorgularla
  2. Kötü olanlarla

Ve sınıflandırma için bir günlük

Kötü sorgulardan ..

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

...ve iyi...

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"

... bir sözlük oluşturur:

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

Ağımızı eğittiğimiz her giriş / sınıflandırmamız gereken giriş ...

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

... özellik-vektörüne dönüştürülür:

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

Tüm bunlardan sonra, veri kümesini eğitim ve test setlerine ayırma, sinir ağlarını eğitme ve en iyisini seçmenin standart yolu vardır. Bu işlemden sonra (veri kümesi boyutuna bağlı olarak oldukça uzun zaman alabilir), sonunda günlükleri eğitimli ağ kullanarak sınıflandırabiliriz.

Ancak bu yaklaşımla ilgili bazı sorunlar şunlardır:

  1. Çünkü Denetimli makine öğrenimi, sorunun türü için tür yanlış botlar algılamak için ilk ihtiyaç botlar algılamak ve bu verilerle Sinir Ağı eğitmek.
  2. Müşterinin davranışını hesaba katmam. Her kullanıcı için sayfadan sayfaya geçişleri düşünmek daha iyidir.
  3. Müşterilerin yerelliklerini hesaba katmıyorum. Ağdaki bir bilgisayara virüs bulaşmışsa, o ağdaki diğer bilgisayarlara virüs bulaşma olasılığı daha yüksektir.
  4. Coğrafi konum verilerini hesaba almıyorum. Tabii ki Rusya'da bir site işletiyorsanız, Brezilya'dan müşterilerin çok az şansı var.
  5. Bu problemi çözmek için sinir ağını ve sınıflandırmayı kullanmanın doğru bir yol olup olmadığını bilmiyorum. Belki bazı anomali tespit sistemi ile daha iyi oldu.
  6. ML yöntemi "çevrimiçi" (veya "akış" olarak adlandırılır) olduğunda daha iyidir, böylece anında eğitilebilir.

İşte sorular:
Sadece mevcut web sunucusu günlükleri (iyi istemciler ve botlardan oluşur) ve geçmiş veriler (önceki gün / hafta / ay için günlükler) verildiğinde aynı DDoS saldırısına karşı aynı savunma sorunuyla karşılaşsaydınız ne yapardınız? çoğunlukla iyi müşterilerle)?
Hangi Makine Öğrenimi yaklaşımını seçersiniz.
Hangi algoritmaları kullanırsınız?

Yanıtlar:


11

Anomali tespit algoritmalarına ne dersiniz? Andrew Ng'in dersinden bahsettiğiniz gibi , muhtemelen ml-class.org'da "XV. ANOMALY ALGILAMA" bölümünü görmüştünüz , ama yine de.

Anomali tespiti, sizinkine benzer senaryolarda denetimli bir sınıflandırmadan daha üstün olacaktır, çünkü:

  • normalde çok az anomaliniz vardır (yani, çok az "pozitif" örnek)
  • normalde çok farklı tipte anomalileriniz vardır
  • gelecekteki anomaliler şimdiye kadar olanlara benzemez

Anomali tespitinde önemli olan hangi özellikleri seçeceğidir. Buradaki iki yaygın öneri,

  • Gauss dağılımı (veya bu şekilde olmalarını bozma)

  • Olasılık p (sapma) için eşsiz olduğu p (normal) - örneğin, normal bir olanları (veya tam tersine) çok küçük olurken, çok büyük olan anormal değerleri.

Coğrafi konumun senaryonuz için yardımcı olup olmayacağından emin değilim, ancak istemci davranışı kesinlikle önemli olacaktır - ancak muhtemelen uygulamadan uygulamaya farklılık gösterecektir. GET / POST oranının önemli olduğunu görebilirsiniz. Veya yanıt boyutunun istek sayısına oranı. Veya tek sayfa isabeti sayısı. Günlüklerde böyle bir bilginiz varsa - tanımlı olarak verileri geriye dönük analiz ve ardından IP kara listeleme için kullanabilirsiniz :)


Anomali tespiti için +1. Ayrıca "son 5 dakika içinde denenen giriş sayısı" ve "son 5 dakika içinde ip X denenen giriş sayısı" da ekledim.
nöron

Anomali tespiti ile ilgili temel problem (ML-Class'ta verildiği gibi), aralarındaki karmaşık ilişkilerle muazzam miktarda özellik için kullanamamanızdır - çok hesaplı olarak pahalıdır. Örneğimde, arama grafiği, coğrafi konum ve nginxgünlükteki ek değişkenler olmadan bile 2 (!!) sorgudan 23 özelliği var . Ve PCA'yı kullanamıyorum çünkü saldırganlar botların davranışını değiştirebilir.
SaveTheRbtz

@SaveTheRbtz yeniden "hesaplamalı olarak pahalı" - IIRC, ml sınıfında sunulan anomali tespiti sadece yoğunluk tahminiydi, bu yüzden özelliklerinizin olasılıklarını p (x1) * .. * p (xN) 'de olduğu gibi çarpın. inan, O (n) yani O (logn) falan mı arıyorsunuz? Ama yine de, bu adil bir soru ve bu beni otomatik özellik seçimi hakkında düşündürdü - bu yüzden bir de soru sordu machinelearning.stackexchange.com/questions/184
andreister

Daha kesin olmak gerekirse, 1Mb günlük dosyası başına 100.000'e kadar özellikten bahsediyorum. PS. Güzel soru!
SaveTheRbtz

1

Bu zor bir problem, işte birkaç gözlem:

  • Bu makale size yardımcı olabilir - rakip reklamları tespit etmek için denetimli öğrenme tekniklerine (çok sınıflı sınıflandırma bağlamında) dayanır. Çekişmeli stratejiler geliştiğinden, yazarlar nadir "anomalilere" açıklama ekleyen insan uzmanlara güvenmek zorundadır. Diğerleri arasında SVM tabanlı sıralama teknikleri kullanırlar.
  • Başkaları tarafından belirtildiği gibi, gözetim altında olmayan öğrenme tabanlı anomali / aykırı algılamayı deneyebilirsiniz, ancak yanlış pozitif ve yanlış negatiflerin dengesini doğru elde etmek için çok fazla ayarlama yapılması gerekir.
  • İyi bir özellik setine sahip olmak çok önemlidir - metodoloji seçimi ikincildir (yani Naif Bayes veya lojistik regresyon gibi basit bir teknik genellikle iyi bir özellik seti göz önüne alındığında yeterlidir)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.