越来越多的恶意软件采用了先进的规避阻断技术。其中一种最为普遍的技术是使用域生成算法(Domain Generation Algorithms),该算法周期性地生成一组域名用于联系命令与控制服务器(C&C server)。这些 DGA 域名大多生成随机的字母数字字符串,与标准域名的结构显著不同。通过观察某个域名中一组二元组(bigrams)在 Alexa 前 100 万域名中出现的频率,我们能够判断该域名是由随机字符串构成,还是合法的、可读的域名。如果一个域名几乎完全由低频二元组构成(这些二元组在 Alexa 前 100 万域名中很少出现),则该域名更可能是随机字符串。由元音和常量构成的二元组出现频率最高,而字符和整数构成的二元组出现频率最低。该脚本针对 100,000 个 GameoverZeus 域名进行了测试,检测率达到 100%,在 Alexa 前 100 万域名上的误报率为 8%(未应用任何域名白名单)。
本系统已在 Ubuntu 和 RaspberryPi 上测试通过。 目前,我将树莓派配置为使用 Bind9 的 DNS 服务器。 DGA-Detection 脚本也在树莓派上运行并读取请求。 然后对请求进行处理,以判断是否为潜在的 DGA 域名。
git clone https://github.com/philarkwright/DGA-Detection.git
cd DGA-Detection
chmod +x install.sh
./install.sh
sudo python dga_detection.py
nohup sudo python dga-detection.py -o 2 -i <interface>
在运行 install.sh 文件时,请注意 git:// 协议使用端口 9418,因此您应确保防火墙允许对该端口的出站连接。
本项目仍处于开发阶段。
在我家网络环境中以网络层级运行脚本时,我注意到如果我在谷歌 Chrome 浏览器上进行某些谷歌搜索,会收到大量看似 DGA 域名的警报。即使您不访问这些通常为中文的网站(因为它们的域名使用乱码字符串),谷歌 Chrome 也会预加载并获取它们,从而触发警报。
注意:白名单功能使用了 Alexa 前 100 万域名。
可通过 Twitter @philarkwright 联系我。