zoukankan      html  css  js  c++  java
  • 利用ML&AI判定未知恶意程序——里面提到ssl恶意加密流检测使用N个payload CNN + 字节分布包长等特征综合判定

    利用ML&AI判定未知恶意程序

    导语:0x01、前言 在上一篇ML&AI如何在云态势感知产品中落地中介绍了,为什么我们要预测未知恶意程序,传统的安全产品已经无法满足现有的安全态势。那么我们要使用新的技术手段武装我们的安全产品,通过大数据的手段更好的解决未知恶意程序

    0x01、前言

    在上一篇ML&AI如何在云态势感知产品中落地中介绍了,为什么我们要预测未知恶意程序,传统的安全产品已经无法满足现有的安全态势。那么我们要使用新的技术手段武装我们的安全产品,通过大数据的手段更好的解决未知恶意程序给我们带来的危害。

    0x02、落地技术架构

    一、如何检测

    上篇文章讲了大致的落地方法,本文主要是给大家暴露更多的技术细节。

    利用ML&AI判定未知恶意程序

    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的大致原理。剩下的就是如何代码实现其功能。当然算法调优也是一个漫长的过程。最终实现提升态势感知产品自动化程度,以及实现安全能力的智能化输出。

    如若转载,请注明原文地址: http://www.4hou.com/technology/13181.html
  • 相关阅读:
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 41 缺失的第一个正数
    Java实现 LeetCode 41 缺失的第一个正数
    Java实现 LeetCode 41 缺失的第一个正数
  • 原文地址:https://www.cnblogs.com/bonelee/p/10214203.html
Copyright © 2011-2022 走看看