Menerapkan pembelajaran mesin untuk penyaringan DDoS

12

Dalam kursus Pembelajaran Mesin Stanford, Andrew Ng menyebut penerapan ML di bidang TI. Beberapa waktu kemudian ketika saya mendapat ukuran sedang (sekitar 20k bot) DDoS di situs kami, saya memutuskan untuk melawannya menggunakan classifier Neural Network sederhana.

Saya telah menulis skrip python ini dalam waktu sekitar 30 menit:
https://github.com/SaveTheRbtz/junk/tree/master/neural_networks_vs_ddos

Menggunakan pyBrain dan mengambil 3 nginx log sebagai input, dua di antaranya untuk melatih Neural Network:

  1. Dengan pertanyaan yang bagus
  2. Dengan yang buruk

Dan satu log untuk klasifikasi

Dari kueri buruk ..

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

...dan bagus...

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"

... itu membangun kamus:

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

Setiap entri yang kita latih dengan jaringan / entri yang kita perlu untuk mengklasifikasikan ...

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

... akan dikonversi ke fitur-vektor:

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

Setelah semua ini ada jalur standar pemisahan dataset ke dalam set pelatihan dan tes, pelatihan jaringan saraf dan memilih yang terbaik. Setelah proses ini (yang bisa memakan waktu cukup lama tergantung pada ukuran dataset) kami akhirnya dapat mengklasifikasikan log menggunakan jaringan terlatih.

Tapi di sini ada sejumlah masalah dengan pendekatan itu:

  1. Pembelajaran mesin yang diawasi agak salah untuk jenis masalah itu, karena untuk mendeteksi bot saya pertama kali perlu mendeteksi bot dan melatih Neural Network dengan data itu.
  2. Saya tidak memasukkan perilaku klien ke dalam akun. Lebih baik mempertimbangkan grafik transisi halaman ke halaman untuk setiap pengguna.
  3. Saya tidak memasukkan lokalitas klien ke dalam akun. Jika satu komputer dalam jaringan terinfeksi dengan beberapa virus maka ada lebih banyak kemungkinan bahwa komputer lain dalam jaringan tersebut terinfeksi.
  4. Saya tidak mengambil data geolokasi ke akun. Tentu saja jika Anda menjalankan situs di Rusia, ada sedikit peluang klien dari Brasil.
  5. Saya tidak tahu apakah itu cara yang benar untuk menggunakan jaringan saraf dan klasifikasi untuk memecahkan masalah seperti itu. Mungkin saya lebih baik dengan beberapa sistem deteksi anomali.
  6. Lebih baik ketika metode ML "online" (atau disebut "streaming") sehingga dapat dilatih dengan cepat.

Jadi inilah pertanyaannya:
Apa yang akan Anda lakukan jika Anda dihadapkan dengan masalah yang sama dalam membela terhadap serangan DDoS yang hanya diberikan log server web saat ini (yang terdiri dari klien dan bot yang baik) dan data historis (log untuk hari / minggu / bulan sebelumnya) dengan sebagian besar klien yang baik)?
Pendekatan Pembelajaran Mesin mana yang akan Anda pilih.
Algoritma mana yang akan Anda gunakan?

SaveTheRbtz
sumber

Jawaban:

11

Bagaimana dengan algoritma pendeteksian anomali? Seperti yang Anda sebutkan dengan kelas Andrew Ng Anda mungkin akan melihat bagian "XV. ANOMALY DETECTION" di ml-class.org , tetapi bagaimanapun juga.

Deteksi anomali akan lebih unggul daripada klasifikasi terawasi dalam skenario yang mirip dengan Anda karena:

  • biasanya Anda hanya memiliki sedikit anomali (mis., terlalu sedikit contoh "positif")
  • biasanya Anda memiliki berbagai jenis anomali
  • anomali di masa depan mungkin tidak seperti yang Anda miliki sejauh ini

Poin penting dalam deteksi anomali adalah, fitur mana yang harus dipilih. Dua saran umum di sini adalah memilih fitur

  • Distribusi Gaussian (atau mengubah mereka menjadi seperti itu)

  • probabilitas p (anomali) tidak dapat dibandingkan dengan p (normal) - katakanlah, nilai-nilai anomali menjadi sangat besar sedangkan yang normal sangat kecil (atau sebaliknya).

Saya tidak yakin apakah geolokasi akan membantu skenario Anda, tetapi perilaku klien pasti akan berpengaruh - meskipun mungkin akan berbeda dari satu aplikasi ke aplikasi lainnya. Anda mungkin menemukan bahwa rasio GET / POST penting. Atau rasio ukuran respons dengan jumlah permintaan. Atau jumlah klik satu halaman. Jika Anda memiliki info dalam log - pasti Anda dapat menggunakan data untuk analisis retrospektif, diikuti dengan daftar hitam IP :)

andreister
sumber
+1 untuk deteksi anomali. Saya juga menambahkan "jumlah percobaan yang dicoba 5 menit terakhir" dan "jumlah percobaan yang dicoba dari ip X 5 menit terakhir".
neuron
Masalah utama dengan deteksi anomali (seperti yang diberikan dalam ML-Class) adalah bahwa Anda tidak dapat menggunakannya untuk sejumlah besar fitur dengan hubungan kompleks di antara mereka - terlalu mahal secara komputasi. Dalam contoh saya, saya memiliki 23 fitur dari 2 (!!) query bahkan tanpa grafik panggilan, geolokasi dan nginxvariabel tambahan dalam log. Dan saya tidak bisa menggunakan PCA karena penyerang dapat mengubah perilaku bot.
SaveTheRbtz
@SaveTheRbtz re "mahal secara komputasi" - IIRC, deteksi anomali seperti yang disajikan dalam kelas-ml hanyalah perkiraan kepadatan sehingga Anda hanya akan menggandakan probabilitas fitur Anda seperti dalam p (x1) * .. * p (xN) yang, saya percaya, apakah O (n) jadi apakah Anda mencari O (logn) atau sesuatu? Tapi bagaimanapun, ini adalah pertanyaan yang wajar dan itu membuat saya berpikir tentang seleksi fitur otomatis - sehingga mengajukan pertanyaan di machinelearning.stackexchange.com/questions/184
andreister
Untuk lebih tepatnya - saya berbicara tentang hingga 100.000 fitur per 1Mb file log. PS. Pertanyaan bagus!
SaveTheRbtz
1

Ini adalah masalah yang sulit, berikut adalah beberapa pengamatan:

  • Makalah ini mungkin bisa membantu Anda - ini bergantung pada teknik pembelajaran yang diawasi (dalam konteks klasifikasi multi-kelas) untuk mendeteksi iklan permusuhan. Karena strategi permusuhan berkembang, penulis harus mengandalkan ahli manusia yang membuat anotasi "anomali" langka. Mereka menggunakan teknik peringkat berbasis SVM antara lain.
  • Seperti dicatat oleh orang lain, Anda dapat mencoba deteksi anomali / outlier yang tidak diawasi-pembelajaran tetapi itu akan membutuhkan banyak penyetelan untuk mendapatkan keseimbangan antara false-positive dan false-negative dengan benar.
  • Memiliki seperangkat fitur yang baik sangat penting - pilihan metodologi adalah yang sekunder (yaitu teknik sederhana seperti Naif Bayes atau regresi logistik seringkali cukup diberikan serangkaian fitur yang baik)
Yevgeny
sumber