Il mio obiettivo è analizzare i log di rete (ad es. Apache, syslog, audit di sicurezza di Active Directory e così via) utilizzando il rilevamento di clustering / anomalie ai fini del rilevamento delle intrusioni.
Dai registri ho molti campi di testo come indirizzo IP, nome utente, nome host, porta di destinazione, porta di origine e così via (in totale 15-20 campi). Non so se ci siano alcuni attacchi nei log e voglio evidenziare gli eventi più sospetti (valori anomali).
Di solito, il rilevamento di anomalie contrassegna i punti con bassa probabilità / frequenza come anomalie. Tuttavia, la metà dei record del registro contiene una combinazione univoca di campi. Quindi, metà dei record nel set di dati avrà la frequenza più bassa possibile.
Se utilizzo il rilevamento delle anomalie in base al clustering (ad esempio, trova i cluster e quindi seleziono i punti che sono lontani da tutti i centri del cluster), devo trovare la distanza tra punti diversi. Dato che ho 15-20 campi, sarà uno spazio multidimensionale, in cui le dimensioni sono nome utente, porta, indirizzo IP e così via. Tuttavia, la distanza di Mahalanobis poteva essere applicata solo a funzioni normalmente distribuite. Ciò significa che non c'è modo di trovare la distanza tra i punti dati e costruire cluster ...
Ad esempio, immaginiamo di avere utenti Alice, Bob, Carol, Dave, Eve e Frank nel set di dati di 20 record. Potrebbero avere il seguente numero di occorrenze nel database: 2,5,2,5,1,5. Se associo semplicemente nomi utente a numeri, ad es
Alice --> 1
Bob --> 2
Carol --> 3
Dave --> 4
Eve --> 5
Frank --> 6
Quindi, la mia distribuzione di probabilità per i nomi utente apparirà come segue:
p (1) = 0.1, p (2) = 0.25, p (3) = 0.1, p (4) = 0.25, p (5) = 0.05, p (6) = 0.25
Naturalmente, questa non è una distribuzione normale, e anche questo non ha molto senso, dal momento che potrei mappare i nomi utente in modo diverso ...
Pertanto, la semplice mappatura di campi come nome utente, azione, numero di porta, indirizzo IP e così via ai numeri non porta nulla.
Pertanto, vorrei chiedere, come vengono elaborati i campi di testo / le funzionalità costruite di solito per rendere possibile il rilevamento anomalo / anomalo senza supervisione?
EDIT: struttura dei dati.
Ho circa 100 colonne nella tabella del database, contenente informazioni dagli eventi di Active Directory. Da queste 100 colonne seleziono il più importante (dal mio punto di vista): SubjectUser, TargetUser, SourceIPaddress, SourceHostName, SourcePort, Computer, DestinationIPaddress, DestinationHostName, DestinationPort, Action, Status, FilePath, EventID, WeekDay, DayTime.
Gli eventi sono eventi di Active Directory, in cui EventID definisce ciò che è stato registrato (ad esempio, creazione del ticket Kerberos, accesso utente, disconnessione utente, ecc.).
L'esempio di dati è simile al seguente:
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | ID | SubjectUser | TargetUser | SourceIPaddress | SourceHostName | SourcePort | Computer | DestinationIPaddress | DestinationHostName | DestinationPort | Azione | Stato | FilePath | EventID | WeekDay | DayTime | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 171390673 |? |? |? |? |? | domaincontroller1.domain.com | 1.1.1.1 | domaincontroller1.domain.com |? | / Autenticazione / Verifica | / Successo |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 173348232 |? |? |? |? |? | domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |? | / Autenticazione / Verifica | / Successo |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 180176916 |? |? |? |? |? | domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |? | / Autenticazione / Verifica | / Successo |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 144144725 |? | John.Doe | 3.3.3.3 | domaincontroller3.domain.com | 2407 | domaincontroller3.domain.com | 3.3.3.4 | domaincontroller3.domain.com |? | / Autenticazione / Verifica | / Successo |? | 4624 | 3 | 12345 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - +
Tutti insieme, ho circa 150 milioni di eventi. Eventi diversi hanno campi diversi compilati e non tutti gli eventi sono correlati all'accesso / disconnessione dell'utente.