使用深度学习模型检测 DGA 生成的域名

我目前使用 Conda(Anaconda/Miniconda)进行开发,但使用附带的 requirements.txt 时,你也可以使用 Pipenv 或 virtualenv。
conda:
conda env create -f environment.yml
conda activate degas
Pipenv:
pipenv install -r requirements.txt
pipenv shell
Virtualenv 类似,但确实再没有理由用 virtualenv 而不是 Pipenv 了。
models 目录中有一个训练好的模型。如果你想训练自己的模型,首先需要从 S3 下载训练数据:
python degas/runner download-data
将数据处理成模型构建器所期望的简单 CSV 格式:
python degas/runner process-data data/raw data/processed
这些步骤只需运行一次,除非你更改了训练数据。
然后,使用生成的训练集重新训练模型,首先用你选择的包管理器安装 tensorflow-gpu(conda install tensorflow-gpu 或 pip install tensorflow-gpu),以便训练过程由 GPU 加速。
接着,运行:
python degas/runner train-model data/processed
运行 python degas/runner train-model --help 可查看一些可用的调优选项。
在 GTX 1070 上大约需要一个半小时。它只运行大约 9 个周期就会提前停止;你也可以只运行 5 个周期,仍能获得良好的准确率,而训练时间减半:
python degas/runner train-model --epochs 5 data/processed
由于本项目使用 Tensorflow 作为底层深度学习库,推荐使用 Tensorflow Serving 进行推理。
你可以通过以下方式提供服务:
docker run -p 8501:8501 \
--mount type=bind,source=models/degas,target=/models/degas\
-e MODEL_NAME=degas -t tensorflow/serving
更多可用选项,请参阅 Tensorflow Serving 文档。
为什么要在这项任务中使用深度学习?因为它效果很好,而且实现起来并不困难。根据 Byu 等人 2018 年的论文(http://faculty.washington.edu/mdecock/papers/byu2018a.pdf):
“深度神经网络最近出现在关于 DGA 检测的文献中(Woodbridge 等人,2016;Saxe & Berlin,2017;Yu 等人,2017)。它们在准确率上显著优于传统的机器学习方法,代价是增加了模型训练的复杂度,并且需要更大的数据集。”
既然有足够的数据可用于训练,创建深度学习模型就和其他替代方法一样简单,甚至更容易。
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)郑重声明,我把它读作“德加”,就像 埃德加·德加 一样,而不是“去气”,像“去除所有气体”那样。