
Rilevamento di domini generati da DGA tramite modelli di deep learning
Rilevamento di domini generati da DGA tramite modelli di deep learning

Attualmente uso Conda (Anaconda/Miniconda) per lo sviluppo, ma dovresti essere in grado di usare anche Pipenv o virtualenv con il requirements.txt incluso.
conda:
conda env create -f environment.yml
conda activate degas
Pipenv:
pipenv install -r requirements.txt
pipenv shell
Virtualenv è simile, ma non c'è più alcun motivo di usare virtualenv invece di Pipenv.
C'è un modello addestrato incluso nella directory models. Se vuoi addestrarne uno tuo, dovrai prima scaricare i dati di addestramento da S3:
python degas/runner download-data
Elabora i dati nella semplice forma CSV che il costruttore del modello si aspetta:
python degas/runner process-data data/raw data/processed
Questi passaggi devono essere eseguiti una sola volta, a meno che tu non modifichi i dati di addestramento.
Per riaddestrare il modello usando il dataset generato, installa prima tensorflow-gpu con il tuo gestore di pacchetti preferito (conda install tensorflow-gpu o pip install tensorflow-gpu) in modo che l'addestramento sia accelerato dalla GPU.
Quindi, esegui:
python degas/runner train-model data/processed
Esegui python degas/runner train-model --help per alcune opzioni di regolazione disponibili.
Questa operazione richiede circa un'ora e mezza su una GTX 1070. Esegue solo circa 9 epoche prima di interrompersi; potresti potenzialmente farlo girare per, diciamo, 5 epoche e ottenere comunque una buona accuratezza con metà del tempo di addestramento: python degas/runner train-model --epochs 5 data/processed
Poiché questo progetto usa Tensorflow come libreria di deep learning sottostante, il modo consigliato per usarlo per l'inferenza è Tensorflow Serving.
Dovresti essere in grado di servirlo usando:
docker run -p 8501:8501 \
--mount type=bind,source=models/degas,target=/models/degas\
-e MODEL_NAME=degas -t tensorflow/serving
Vedi la documentazione di Tensorflow Serving per maggiori informazioni sulle opzioni disponibili.
Perché il deep learning per questo compito? Perché funziona bene e non è difficile da implementare. Da Byu et al, 2018:
"Le reti neurali profonde sono apparse di recente nella letteratura sul rilevamento dei DGA Woodbridge et al. (2016); Saxe & Berlin (2017); Yu et al. (2017). Superano significativamente i metodi tradizionali di machine learning in accuratezza, al prezzo di aumentare la complessità dell'addestramento del modello e richiedere dataset più grandi."
Poiché ci sono molti dati disponibili con cui addestrare, creare un modello di deep learning è altrettanto facile o più facile delle alternative.
https://openreview.net/forum?id=BJLmN8xRW¬eId=BJLmN8xRW http://faculty.washington.edu/mdecock/papers/byu2018a.pdf
egrep -i '^d.*g.*a.* /usr/share/dict/words )Per la cronaca, lo pronuncio "de-gah", come Edgar Degas, non "de-gas", cioè "rimuovere tutto il gas."