
Classificazione dei dispositivi di rete basata sull'IA e guidata dal contesto

Una batea è una grande padella poco profonda di legno o ferro utilizzata tradizionalmente dai cercatori d'oro per lavare sabbia e ghiaia e recuperare pepite d'oro.
Batea è un framework di ranking di dispositivi di rete basato sul contesto, che utilizza la famiglia di algoritmi di machine learning per il rilevamento di anomalie. L'obiettivo di Batea è consentire ai team di sicurezza di filtrare automaticamente gli asset di rete interessanti in grandi reti utilizzando i report delle scansioni nmap. Li chiamiamo Gold Nuggets (Pepite d'Oro).
Per maggiori informazioni sul Gold Nuggeting e sulla scienza alla base di Batea, consulta il nostro whitepaper qui
Batea costruisce una rappresentazione numerica (numpy) di tutti i dispositivi dai tuoi report nmap (XML) e quindi applica metodi di rilevamento di anomalie per scoprire le pepite d'oro. È facilmente estendibile aggiungendo caratteristiche specifiche, o caratteristiche interessanti, alla rappresentazione numerica degli elementi di rete.
La rappresentazione numerica della rete è costruita utilizzando caratteristiche (features), ispirate all'esperienza della comunità della sicurezza. Le caratteristiche agiscono come elementi di intuizione, e i metodi di rilevamento di anomalie non supervisionati permettono di utilizzare il contesto dell'asset di rete, o la descrizione completa della rete, come elemento centrale dell'algoritmo di ranking. L'algoritmo esatto utilizzato è Isolation Forest (https://en.wikipedia.org/wiki/Isolation_forest)
I modelli di machine learning sono il cuore di Batea. I modelli sono algoritmi addestrati sull'intero dataset e utilizzati per prevedere un punteggio sugli stessi (e altri) punti dati (dispositivi di rete). Batea permette anche la persistenza dei modelli. Cioè, puoi riutilizzare modelli pre-addestrati ed esportare modelli addestrati su grandi dataset per un uso futuro.
# Informazioni complete
$ sudo nmap -A 192.168.0.0/16 -oX output.xml
# Informazioni parziali
$ sudo nmap -O -sV 192.168.0.0/16 -oX output.xml
$ batea -v output.xml
$ git clone [email protected]:delvelabs/batea.git
$ cd batea
$ python3 setup.py sdist
$ pip3 install -r requirements.txt
$ pip3 install -e .
$ git clone [email protected]:delvelabs/batea.git
$ cd batea
$ python3 -m venv batea/
$ source batea/bin/activate
$ python3 setup.py sdist
$ pip3 install -r requirements-dev.txt
$ pip3 install -e .
$ pytest
# Utilizzo semplice (output delle prime 5 pepite d'oro con formato predefinito)
$ batea nmap_report.xml
# Output delle prime 3
$ batea -n 3 nmap_report.xml
# Output di tutti gli asset
$ batea -A nmap_report.xml
# Utilizzo di più file di input
$ batea -A nmap_report1.xml nmap_report2.xml
# Utilizzo di wildcard (default xsl)
$ batea ./nmap*.xml
$ batea -f csv ./assets*.csv
# Puoi usare batea su modelli pre-addestrati ed esportare modelli addestrati.
# Addestramento, output e dump del modello per persistenza
$ batea -D mymodel.batea nmap_report.xml
# Utilizzo di un modello pre-addestrato
$ batea -L mymodel.batea nmap_report.xml
# Utilizzo di csv preformattato insieme a file xml
$ batea -x nmap_report.xml -c portscan_data.csv
# Regola la verbosità
$ batea -vv nmap_report.xml
Batea assegna caratteristiche numeriche a ogni host nel report (o serie di report).
Gli host sono oggetti Python derivati dal report nmap. Consistono nel seguente elenco di attributi: [ipv4, hostname, os_info, ports] dove ports è un elenco di oggetti porta. Ogni porta ha il seguente elenco di attributi: [port, protocol, state, service, software, version, cpe, scripts], tutti con valore predefinito None.
Le caratteristiche sono oggetti ereditati dalla classe FeatureBase che istanziano un metodo specifico _transform. Questo metodo prende sempre come input l'elenco di tutti gli host e restituisce una funzione lambda che mappa ogni host a una colonna numpy di valori numerici (l'ordine degli host è conservato). La colonna viene quindi aggiunta alla rappresentazione matriciale del report. Le caratteristiche devono produrre valori numerici corretti (float o interi) e nient'altro.
La maggior parte delle trasformazioni delle caratteristiche sono implementate usando una semplice funzione lambda. Assicurati solo di assegnare un valore numerico predefinito a ogni host per la compatibilità del modello.
Es:
class CustomInterestingPorts(FeatureBase):
def __init__(self):
super().__init__(name="some_custom_interesting_ports")
def _transform(self, hosts):
"""Questo metodo prende un elenco di host e restituisce una funzione che conta il numero
di porte dell'host appartenenti a un elenco predefinito di porte "interessanti", con valore predefinito 0.
Parametri
----------
hosts : list
L'elenco di tutti gli host
Restituisce
-------
f : funzione lambda
Conta il numero di porte nell'elenco definito.
"""
member_ports = [21, 22, 25, 8080, 8081, 1234]
f = lambda host: len([port for port in host.ports if port.port in member_ports])
return f
Puoi quindi aggiungere la caratteristica al report usando il metodo NmapReport.add_feature in batea/__init__.py
from .features.basic_features import CustomInterestingPorts
def build_report():
report = NmapReport()
#[...]
report.add_feature(CustomInterestingPorts())
return report
È possibile utilizzare dati preelaborati per addestrare il modello o per la previsione.
I dati devono essere indicizzati da (ipv4, port) con una combinazione unica per riga. Il tipo di dati dovrebbe essere simile a quanto ci si aspetta dalla versione XML di un report nmap.
Una colonna deve utilizzare uno dei seguenti nomi, ma non è necessario utilizzarli tutti. Il parser assegna valori nulli se una colonna è assente.
'ipv4',
'hostname',
'os_name',
'port',
'state',
'protocol',
'service',
'software_banner',
'version',
'cpe',
'other_info'
Esempio:
ipv4,hostname,os_name,port,state,protocol,service,software_banner
10.251.53.100,internal.delvesecurity.com,Linux,110,open,tcp,rpcbind,"program version port/proto service100000 2,3,4 111/tcp rpcbind100000 2,3,4 "
10.251.53.100,internal.delvesecurity.com,Linux,111,open,tcp,rpcbind,
10.251.53.188,serious.delvesecurity.com,Linux,6000,open,tcp,X11,"X11Probe: CentOS"
Per il data scientist che è in te, o solo per divertimento e profitto, puoi produrre la matrice numerica insieme alla colonna del punteggio invece dell'output normale. Questo può essere utile per ulteriori analisi dei dati e scopi di debug.
$ batea -oM network_matrix nmap_report.xml