
Detecção de domínios gerados por DGA usando modelos de aprendizado profundo
Detecção de domínios gerados por DGA usando modelos de deep learning

Atualmente estou usando Conda (Anaconda/Miniconda) para desenvolvimento, mas você também deve conseguir usar Pipenv ou virtualenv com o requirements.txt incluído.
conda:
conda env create -f environment.yml
conda activate degas
Pipenv:
pipenv install -r requirements.txt
pipenv shell
Virtualenv é semelhante, mas realmente não há mais razão para usar virtualenv em vez de Pipenv.
Há um modelo treinado no diretório models. Se quiser treinar o seu próprio, primeiro você precisará baixar os dados de treinamento do S3:
python degas/runner download-data
Processe os dados para o formato CSV simples que o construtor do modelo espera:
python degas/runner process-data data/raw data/processed
Essas etapas só precisam ser executadas uma vez, a menos que você altere os dados de treinamento.
Para então retreinar o modelo usando o conjunto de dados gerado, primeiro instale o tensorflow-gpu usando o gerenciador de pacotes de sua preferência (conda install tensorflow-gpu ou pip install tensorflow-gpu) para que o treinamento seja acelerado por GPU.
Então, execute:
python degas/runner train-model data/processed
Execute python degas/runner train-model --help para ver algumas opções de ajuste disponíveis.
Isso leva cerca de uma hora e meia em uma GTX 1070. Ele executa apenas cerca de 9 épocas antes de interromper; você poderia potencialmente executá-lo por, digamos, 5 épocas e ainda obter boa precisão com metade do tempo de treinamento:
python degas/runner train-model --epochs 5 data/processed
Como este projeto usa o Tensorflow como biblioteca subjacente de deep learning, a maneira recomendada de usá-lo para inferência é usar o Tensorflow Serving.
Você deve conseguir servir o modelo usando:
docker run -p 8501:8501 \
--mount type=bind,source=models/degas,target=/models/degas\
-e MODEL_NAME=degas -t tensorflow/serving
Consulte a documentação do Tensorflow Serving para obter mais informações sobre as opções disponíveis.
Por que deep learning para essa tarefa? Porque funciona bem e não é difícil de implementar. De Byu et al, 2018:
"Redes neurais profundas apareceram recentemente na literatura sobre detecção de DGA Woodbridge et al. (2016); Saxe & Berlin (2017); Yu et al. (2017). Elas superam significativamente os métodos tradicionais de machine learning em precisão, ao custo de aumentar a complexidade do treinamento do modelo e exigir conjuntos de dados maiores."
Como há muitos dados disponíveis para treinar, criar um modelo de deep learning é tão fácil ou mais fácil do que as alternativas.
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 )Para constar, eu pronuncio "de-gah", como em Edgar Degas, e não "de-gas", como em "remover todo o gás."