导语:0x01、前言 在上一篇ML&AI如何在云态势感知产品中落地中介绍了,为什么我们要预测未知恶意程序,传统的安全产品已经无法满足现有的安全态势。那么我们要使用新的技术手段武装我们的安全产品,通过大数据的手段更好的解决未知恶意程序
0x01、前言
在上一篇ML&AI如何在云态势感知产品中落地中介绍了,为什么我们要预测未知恶意程序,传统的安全产品已经无法满足现有的安全态势。那么我们要使用新的技术手段武装我们的安全产品,通过大数据的手段更好的解决未知恶意程序给我们带来的危害。
0x02、落地技术架构
一、如何检测
上篇文章讲了大致的落地方法,本文主要是给大家暴露更多的技术细节。
1、IDS Agent还原文件会计算一下MD5hash值与FIleHash缓存系统对比一下,如果有则直接报告为恶意软件,并且附上恶意软件家族分类,如果没有根据聚类算法分成不同的未知分类,不存储该文件,更新缓存,把发生的时间和次数记录一下,为下一步流行度统计使用。
2、如果没有这个文件,那么存储到对象存储(公有云IAAS组件,OSS)。存储完成后向下一个环节投递,发出kafka Topic消息给主程序。设计这个是因为在公有云环境下需要鉴定的文件是海量的,需要一套大数据流转系统缓存。
3、主程序使用多线程的方式启动多个处理单元。接收到kafka消息后,从消息中取出OSS的文件路径,然后下载文件到本地,然后调用动态沙箱的文件送检API接口传递到下一个环节。然后等待沙箱回调函数,有回调消息后,获取沙箱的report,然后把相关信息填充到kafka Topic中向下传递。当然中间可以加数据补齐的流程等。在这有两个分支
分支一:把APICall信息传递给SparkMlib库做动态文件二分类器判断。这里主要是使用GBDT、XGBOOST (具体使用哪个算法需要看准确率、召回率 、F1_score 最终的结果选定)
分支二:网络流量从沙箱镜像出来,然后向网络重放一下。通过异常流量检测引擎,这四个检测又是4个ML&AI判断模型。
恶意SSL流量检测
特征工程,有具体意义特征->CNN
·flowMetadata[上行字节数/下行字节数/上行报数/下行包数/持续时间]
·sequence of packet[长度序列/间隔时间序列]
·Byte distribution[字节分布概率]
·TLS header[TLS加密套件/TLS扩展/公钥长度]
前N个包payload 直接转化成图像CNN
合并两个检测结果判断恶意SSL流量
DNS异常域名检测
通过LSTM聚类的方法,找出高度关联的域名和独立点。孤立点设为可疑域名。
DGA域名检测
特征工程主要包含以下3点
·域名随机性(随机性和熵)
·域名长度较长
·n-gram(bigram(相邻双字) )
隐藏通讯信道检测
使用随机森林算法
4、主程序同时需要做静态文件检测,根据不同文件类型送入到不同的类型静态文件分类器。
针对PE/ELF文件处理流程
需要通过yara文件简单判断一下是否加壳&加密。
未加壳&加密经过静态反编译服务中,计算出汇编序列,然后送入到静态PE/ELF分类器判断。
针对其它类型文件,需要不同的ML学习模型判断。
比如说脚本文件powershell,调研一般都有不同的操作码。这都需要深耕细作。
还有比如说webshell检测,也需要对不同的webshell做不同的处理。php马是一个很典型的例子,还有菜刀等。
5、检测结果都发往决策中心。根据多类决策树判断。得出最终结果发往恶意文件家族分类器。
恶意文件家族分类一般使用两种多分类器方法。
机器学习算法推荐使用k-means
深度学习方法建议使用卷积神经网络CNN算法
最后建议再过一遍聚类,找出孤立点。
6、形成恶意文件家族和未知恶意分类。最终存储到ElasticSearch方便提供给前端用户展示。
二、如何训练
通过上述全栈机器学习和深度学习算法的描述,所有模型加起来15+。那么这么多模型如何训练,如何更新是本次换“芯”最重要的部分。
1、那么针对机器学习部分,我们需要保存所提交的样本,无论什么形式都通过流量的形式发送到kafka最终存储到HIVE重,然后导入到spark mlib中进行模型计算。当然,还有一些公网中加入的黑白样本,也是通过同样的形式进入到这个循环中。
2、那些针对深度学习的模型,需要我们建立深度计算GPU服务集群,设备需求规格:24核128G内存/流量50Gbps(20% https流量) NVidia GeForceGTX1080 GPU https:7000QPS计算文本和图像加起来需要8台物理服务器。恶意软件病毒家族分类看规模大约8台可以满足目前带宽情况下的文件还原速度(25万个样本/day)。
3、在有限的资源下,大约1周更新一次所有模型。
0x03、总结
通过以上描述,大家可以基本了解未知威胁检测的ML&AI的大致原理。剩下的就是如何代码实现其功能。当然算法调优也是一个漫长的过程。最终实现提升态势感知产品自动化程度,以及实现安全能力的智能化输出。