
Détection de domaines générés par DGA à l'aide de modèles d'apprentissage profond
Détection de domaines générés par DGA à l'aide de modèles d'apprentissage profond

J'utilise actuellement Conda (Anaconda/Miniconda) pour le développement, mais vous devriez pouvoir utiliser Pipenv ou virtualenv également avec le fichier requirements.txt fourni.
conda:
conda env create -f environment.yml
conda activate degas
Pipenv:
pipenv install -r requirements.txt
pipenv shell
Virtualenv est similaire, mais il n'y a plus vraiment de raison d'utiliser virtualenv à la place de Pipenv.
Un modèle entraîné est inclus dans le répertoire models. Si vous souhaitez entraîner le vôtre, vous devez d'abord télécharger les données d'entraînement depuis S3 :
python degas/runner download-data
Traitez les données dans le format CSV simple attendu par le constructeur du modèle :
python degas/runner process-data data/raw data/processed
Ces étapes ne doivent être exécutées qu'une seule fois, sauf si vous modifiez les données d'entraînement.
Pour réentraîner ensuite le modèle à l'aide du jeu de données généré, installez d'abord tensorflow-gpu avec votre gestionnaire de paquets habituel (conda install tensorflow-gpu ou pip install tensorflow-gpu) afin que l'entraînement soit accéléré par le GPU.
Ensuite, exécutez :
python degas/runner train-model data/processed
Exécutez python degas/runner train-model --help pour voir les options de paramétrage disponibles.
Cela prend environ une heure et demie sur une GTX 1070. Il ne tourne qu'environ 9 époques avant de s'interrompre ; vous pourriez potentiellement le faire tourner, par exemple, sur 5 époques et obtenir encore une bonne précision avec la moitié du temps d'entraînement :
python degas/runner train-model --epochs 5 data/processed
Puisque ce projet utilise Tensorflow comme bibliothèque d'apprentissage profond sous-jacente, la méthode recommandée pour l'inférence est d'utiliser Tensorflow Serving.
Vous devriez pouvoir le servir avec :
docker run -p 8501:8501 \
--mount type=bind,source=models/degas,target=/models/degas\
-e MODEL_NAME=degas -t tensorflow/serving
Voir la documentation de Tensorflow Serving pour plus d'informations sur les options disponibles.
Pourquoi l'apprentissage profond pour cette tâche ? Parce qu'il fonctionne bien et qu'il n'est pas difficile à mettre en œuvre. D'après Byu et al., 2018 :
« Les réseaux de neurones profonds sont récemment apparus dans la littérature sur la détection de DGA (Woodbridge et al., 2016 ; Saxe & Berlin, 2017 ; Yu et al., 2017). Ils surpassent significativement les méthodes d'apprentissage automatique traditionnelles en termes de précision, au prix d'une complexité accrue de l'entraînement du modèle et de la nécessité de jeux de données plus volumineux. »
Comme il y a abondance de données disponibles pour l'entraînement, créer un modèle d'apprentissage profond est aussi facile, voire plus facile, que les alternatives.
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 )Pour mémoire, je le prononce « dé-ga », comme Edgar Degas, et non « dé-gaz », comme « enlever tout le gaz. »