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:
- Dengan pertanyaan yang bagus
- 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:
- 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.
- Saya tidak memasukkan perilaku klien ke dalam akun. Lebih baik mempertimbangkan grafik transisi halaman ke halaman untuk setiap pengguna.
- 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.
- Saya tidak mengambil data geolokasi ke akun. Tentu saja jika Anda menjalankan situs di Rusia, ada sedikit peluang klien dari Brasil.
- 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.
- 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?
sumber
nginx
variabel tambahan dalam log. Dan saya tidak bisa menggunakan PCA karena penyerang dapat mengubah perilaku bot.Ini adalah masalah yang sulit, berikut adalah beberapa pengamatan:
sumber