Tujuan saya adalah untuk menganalisis log jaringan (mis., Apache, syslog, audit keamanan Direktori Aktif, dan sebagainya) menggunakan deteksi pengelompokan / anomali untuk tujuan deteksi intrusi.
Dari log saya memiliki banyak bidang teks seperti alamat IP, nama pengguna, nama host, port tujuan, port sumber, dan sebagainya (total 15-20 bidang). Saya tidak tahu apakah ada beberapa serangan di log, dan ingin menyoroti peristiwa yang paling mencurigakan (pencilan).
Biasanya, deteksi anomali menandai titik-titik dengan probabilitas / frekuensi rendah sebagai anomali. Namun, setengah dari catatan log berisi kombinasi unik bidang. Jadi, setengah dari catatan dalam dataset akan memiliki frekuensi serendah mungkin.
Jika saya menggunakan deteksi anomali berdasarkan pengelompokan (misalnya, menemukan cluster dan kemudian memilih titik yang jauh dari semua pusat cluster), saya perlu mencari jarak antara titik yang berbeda. Karena saya memiliki 15-20 bidang, itu akan menjadi ruang multi-dimensi, di mana pengurangan adalah nama pengguna, port, alamat IP dan sebagainya. Namun, jarak Mahalanobis hanya bisa diterapkan pada fitur yang terdistribusi normal. Ini berarti bahwa tidak ada cara untuk menemukan jarak antara titik data dan membangun cluster ...
Sebagai contoh, mari kita bayangkan bahwa saya memiliki pengguna Alice, Bob, Carol, Dave, Eve dan Frank dalam dataset 20 catatan. Mereka bisa memiliki jumlah kejadian berikut dalam database: 2,5,2,5,1,5. Jika saya hanya memetakan nama pengguna ke angka, mis
Alice --> 1
Bob --> 2
Carol --> 3
Dave --> 4
Eve --> 5
Frank --> 6
Kemudian, distribusi probabilitas saya untuk nama pengguna akan terlihat sebagai berikut:
p (1) = 0,1, p (2) = 0,25, p (3) = 0,1, p (4) = 0,25, p (5) = 0,05, p (6) = 0,25
Tentu saja, ini bukan distribusi normal, dan ini juga tidak masuk akal, karena saya bisa memetakan nama pengguna dengan cara yang berbeda ...
Dengan demikian, pemetaan sederhana bidang-bidang seperti nama pengguna, tindakan, nomor port, alamat IP dan sebagainya ke nomor tidak membawa apa-apa.
Oleh karena itu, saya ingin bertanya, bagaimana bidang teks diproses / fitur dibangun biasanya untuk membuat deteksi anomali / outlier tanpa pengawasan menjadi mungkin?
EDIT: struktur data.
Saya memiliki sekitar 100 kolom dalam tabel database, yang berisi informasi dari Peristiwa Direktori Aktif. Dari 100 kolom ini saya memilih yang paling penting (dari sudut pandang saya): SubjectUser, TargetUser, SourceIPaddress, SourceHostName, SourcePort, Komputer, DestinationIPaddress, DestinationHostName, DestinationPort, Tindakan, Status, FilePath, EventID, WeekDay, DayTime.
Acara adalah acara Direktori Aktif, di mana EventID mendefinisikan apa yang dicatat (misalnya, pembuatan tiket Kerberos, log masuk pengguna, logoff pengguna, dll.).
Sampel data terlihat seperti berikut:
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | ID | SubjectUser | TargetUser | SourceIPaddress | SourceHostName | SourcePort | Computer | DestinationIPaddress | DestinationHostName | DestinationPort | Action | Status | FilePath | EventID | WeekDay | DayTime | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 171390673 |? |? |? |? |? | domaincontroller1.domain.com | 1.1.1.1 | domaincontroller1.domain.com |? | / Otentikasi / Verifikasi | / Sukses |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 173348232 |? |? |? |? |? | domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |? | / Otentikasi / Verifikasi | / Sukses |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 180176916 |? |? |? |? |? | domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |? | / Otentikasi / Verifikasi | / Sukses |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 144144725 |? | John.Doe | 3.3.3.3 | domaincontroller3.domain.com | 2407 | domaincontroller3.domain.com | 3.3.3.4 | domaincontroller3.domain.com |? | / Otentikasi / Verifikasi | / Sukses |? | 4624 | 3 | 12345 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - +
Secara keseluruhan, saya memiliki sekitar 150 juta acara. Peristiwa yang berbeda memiliki bidang yang berbeda, dan tidak semua peristiwa terkait dengan log masuk / keluar pengguna.