我们极为兴奋地推出首款监督式ML和安全集成方案!今天,我们将正式发布监督 式ML解决方案包,旨在检测网络数据中的域名生成算法(DGA)活动。
除了配备经充分训练的检测模型以外,我们的版本还提供采集管道(ingest pipeline) 配置、异常检测作业,以及有助于顺利轻松地完成从设置到DGA检测这一过程的检 测规则。导航至检测规则库查看如何开始使用监督式Machine Learning来检测您 网络中的DGA活动,并立即开始免费试用Elastic安全。
1. DGA:分解
域名生成算法(DGA)是一种由众多恶意软件创建者所利用的技术,旨在确保避开 防御措施而感染客户端机器。这一技术企图通过使用成百上千或成千上万随机生成 的域名(最终解析为C&C服务器的IP地址)来隐藏受感染客户端机器与命令和控 制(C&C或C2)服务器之间的通信。
为了便于以可视化的方式理解DGA攻击的过程,想象一下,你是战场上的一名士 兵。像许多士兵一样,你拥有通过无线电频率进行通信的通信设备。你的敌人可能 试图通过干扰你的无线电频率来干扰你的通信。应对这种情况的方法之一是采用跳 频技术,即在传输过程中利用载波频率不断跳变的无线电系统。对敌人来说,频率 变化似乎是随机且不可预测的,所以很难进行干扰。
DGA就像是恶意软件的一个跳频通信信道。它们频繁更换域名,如此一来,通过DNS 域名屏蔽来阻断恶意软件C2通信信道变得不可行。因为会有太多随机生成的DNS 域名,因而难以试着识别并阻断它们。
该技术早在2009年就在恶意软件领域强势登场,当时“Conficker”蠕虫开始使用 大量随机生成的域名进行通信。安全研究人员团队通过关闭蠕虫用于通信的DNS域 名来中断其C2信道,之后,蠕虫创建者开发了这一应对方案。在2017年WannaCry 勒索软件席卷全球时,还执行了 DNS缓解计划。
2. “鱼目混珠”
如果隐藏一棵树的最佳地点是森林,那么恶意软件运营商早就认识到,与正常的网 络流量混在一起是躲过检测的最佳方法之一。带有随机生成域名的HTTP请求是网 络安全监测和检测的一大难题。
在现代网络中,HTTP流量庞大,很难实现人工审查。一些恶意软件和机器人具有异 常用户代理字符串,可使用搜索规则发出与其相关的警报,但恶意软件创建者可以 很轻松地利用看起来与Web浏览器没什么区别的用户代理字符串。
随着移动网络和物联网的兴起,用户代理字符串数量变得如此庞大,以致于人工审 查可疑活动也变得不可行。长期以来,Web代理始终通过分类来查找已知可疑的 URL,但是DGA域名如此众多且"短寿”,使其通常未经分类。威胁情报可以识别 与已知恶意软件家族和活动相关的IP地址和HTTP请求,但这些很容易被恶意软件 运营商篡改,当我们对其进行搜索时,这些列表往往已经过时了。
众多组织收集的网络流量庞大,而且DGA生成的域名具有随机性,因此,基于规则 的技术很难检测这种活动,而我们的监督式Machine Learning模型是不二之选! Elastic 的 DGA检测ML模型采用推理,将在其被采集至Elasticsearch集群时检查 packetbeat DNS数据,以自动确定哪些是潜在的恶意域名。按照下节中的步骤开始使用。
3. 开始使用
为了在安全应用程序中开始使用DGA检测,我们已向公开可用的规则存储库发布 —组特性,以便将Machine Learning模型导入Elastic Stack。这一存储库不仅为我 们的社区提供了威胁检测的协作场地,而且还充当了共享测试和验证规则所需工具 的场所。
这个规则工具包的一部分是CLI (命令行接口)既可用于测试规则,还可与堆栈进 行交互。例如,我们已发布了各种Python库来与Kibana API进行交互。对于简化 导入模型依赖项以使规则可操作的过程,这至关重要。若要开始扩充DNS数据并接 收DGA活动的警报,请遵循以下三个步骤:
步骤一:导入模型
首先,必须将DGA模型、简单脚本和采集处理器导入堆栈。目前,DGA模型及任 何用于异常检测的非监督式模型(后续会有更多)均可以在采用github版本的检测 规则库中可用。若要上传,运行下面的CLI命令:
python -m detection_rules es <args_or_config> experimental setup-dga-model -t <release-tag>
上传后,您将需要更新packetbeat配置,因为该模型将使用DGA评分扩充 packetbeat DNS事件。这可通过在Elasticsearch输出配置中添加以下额外配置轻 松实现:
output.elasticsearch: hosts: [''your-hostname:your-port''] pipeline: dns_enrich_pipeline
然后,监督式模型将分析并扩充Packetbeat DNS事件,其中包含以下ECS字段:
dns.question.name dns.question.registered_domain
然后,模型将这些字段添加至已处理的DNS事件中:
扩充后的DNS数据的示例性截图如下所示:
注意:如需更多详情,请参阅检测规则自述文件。
4. 关于 DGA 规则
现在,让我们来看看部分检测DGA活动并发出相关警报的条件搜索规则。解决方案 包中提供两条搜索规则,可在Elastic Security应用程序的检测引擎中启用并运行:
• Machine Learning Detected a DNS Request Predicted to be a DGA Domain;
• Machine Learning Detected a DNS Request With a High DGA Probability Score。
第一条规则匹配任何DGA预测值为1的DNS事件,表明该DNS域名很可能是域 名生成算法的结果,因此是可疑的。这里的规则仅用于查找以下条件:
event.category:network and network.protocol:dns and ml_is_dga.malicious_prediction:1
第二条规则匹配任何DGA概率评分超过0.98的DNS事件,表明该DNS域名很可 能是域名生成算法的结果,因此是可疑的。这里的规则仅用于查找以下条件:
event.category:network and network.protocol:dns and ml_is_dga.malicious_probability > 0.98
与Elastic检测引擎中的所有规则一样,它们可以分叉(fork打分支仓库)并根据 局部特性进行定制。如果您发现另一个概率评分更适用于您的DNS事件,则可以向 上或向下调整第二条规则中的概率评分。如果您希望提高警报队列中DGA检测的 优先级,可以增加任何一条规则的风险评分。可将例外情况添加至规则中,以忽略 误报情况,例如可能使用伪随机域名的内容分发网络(CDN)域名。
我们将要探讨的另一种未来可能性是使用事件查询语言(EQL), EQL采用多变量相 关性查找异常集群或基于搜索的警报集群。例如,如果我们发现参与可能的DGA活 动的主机发来的警报集群,那么就更有信心检测到需要引起注意的重大恶意检测结果。
这一集群可以包含DGA警报及诸如罕见进程、网络进程、域名或URL等其他异常 检测警报。这些额外的异常检测结果由Elastic Security应用程序中的Machine Learning方案包库生成。
步骤二:导入规则
DGA方案包中的规则可使用检测规则CLI (采用.toml格式)中的Kibana上传规则 功能导入。由于检测规则库版本中提供的规则采用.比利格式,因此只需运行以下命 令即可从规则库上传规则:
python -m detection_rules kibana upload-rule -h Kibana client: Options: --space TEXT Kibana space -kp, --kibana-password TEXT -ku, --kibana-user TEXT --cloud-id TEXT -k, --kibana-url TEXT Usage: detection_rules kibana upload-rule [OPTIONS] TOML_FILES... Upload a list of rule .toml files to Kibana. Options: -h, --help Show this message and exit. -h, --help Show this message and exit.
步骤三:启用规则并从中获益
由于我们已将经充分验证的监督式ML模型导入至堆栈、DNS事件得到扩充且相关 规则亦可供使用,那么,接下来仅需确认相关规则已启用并等待警报!
在检测引擎中查看该规则时,可确认该规则是否已激活,如下所示: 现在等待警报。
警报生成后,您便可以通过时间线功能来调查DNS事件并着手展开 相关调查。
然而,Machine Learning模型都并非无懈可击!有些良性域名将被错误地标记,我 们称之为误报。在下一节中,我们将探究如何利用预先配置的异常检测任务及这一 版本附带的相关规则来排除误报。
更多精彩内容,欢迎观看:
《Elastic(中国)产品应用实战》—— 一、为DGA检测整合监督式和非监督式Machine Learning(下):https://developer.aliyun.com/article/1220965?spm=a2c6h.13148508.setting.14.653f4f0eL3UEOo