
Erkennung von DGA-generierten Domains mithilfe von Deep-Learning-Modellen
Erkennung von DGA-generierten Domains mittels Deep-Learning-Modellen

Ich verwende derzeit Conda (Anaconda/Miniconda) für die Entwicklung, aber Sie sollten auch Pipenv oder virtualenv mit der mitgelieferten requirements.txt verwenden können.
conda:
conda env create -f environment.yml
conda activate degas
Pipenv:
pipenv install -r requirements.txt
pipenv shell
Virtualenv ist ähnlich, aber es gibt wirklich keinen Grund mehr, virtualenv anstelle von Pipenv zu verwenden.
Es gibt ein trainiertes Modell im Verzeichnis models. Wenn Sie Ihr eigenes trainieren möchten, müssen Sie zunächst die Trainingsdaten von S3 herunterladen:
python degas/runner download-data
Verarbeiten Sie die Daten in das einfache CSV-Format, das der Modell-Builder erwartet:
python degas/runner process-data data/raw data/processed
Diese Schritte müssen nur einmal ausgeführt werden, es sei denn, Sie ändern die Trainingsdaten.
Um das Modell dann mit dem generierten Datensatz neu zu trainieren, installieren Sie zunächst tensorflow-gpu mit Ihrem bevorzugten Paketmanager (conda install tensorflow-gpu oder pip install tensorflow-gpu), damit das Training GPU-beschleunigt ist.
Führen Sie dann aus:
python degas/runner train-model data/processed
Führen Sie python degas/runner train-model --help aus, um einige verfügbare Optimierungsoptionen zu sehen.
Dies dauert etwa eineinhalb Stunden auf einer GTX 1070. Es führt nur etwa 9 Epochen aus, bevor es abbricht; Sie könnten es theoretisch für, sagen wir, 5 Epochen laufen lassen und immer noch eine gute Genauigkeit bei halber Trainingszeit erzielen:
python degas/runner train-model --epochs 5 data/processed
Da dieses Projekt Tensorflow als zugrundeliegende Deep-Learning-Bibliothek verwendet, wird empfohlen, Tensorflow Serving für die Inferenz zu verwenden.
Sie sollten es wie folgt bereitstellen können:
docker run -p 8501:8501 \
--mount type=bind,source=models/degas,target=/models/degas\
-e MODEL_NAME=degas -t tensorflow/serving
Weitere Informationen zu den verfügbaren Optionen finden Sie in der Tensorflow Serving-Dokumentation.
Warum Deep Learning für diese Aufgabe? Weil es gut funktioniert und nicht schwer zu implementieren ist. Aus Byu et al., 2018:
"Tiefe neuronale Netze sind kürzlich in der Literatur zur DGA-Erkennung aufgetaucht (Woodbridge et al., 2016; Saxe & Berlin, 2017; Yu et al., 2017). Sie übertreffen traditionelle maschinelle Lernmethoden in der Genauigkeit deutlich, allerdings auf Kosten einer erhöhten Komplexität des Modelltrainings und der Notwendigkeit größerer Datensätze."
Da es reichlich Daten zum Trainieren gibt, ist die Erstellung eines Deep-Learning-Modells genauso einfach oder einfacher als die Alternativen.
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 )Um das klarzustellen: Ich spreche es "de-gah" aus, wie Edgar Degas, nicht "de-gas", wie im Sinne von "das gesamte Gas entfernen".