所以我们的流程如图所示。将正负样本按 1:1 的比例转换为图像。将 ImageNet 中训练好的图像分类模型作为迁移学习的输入。在 GPU 集群中进行训练。我们同时训练了标准模型和压缩模型,对应不同的客户需求(有无 GPU 环境)。

流程中比较核心的算法其实在文件到图像的转换。因为常规的网络一般能输入的尺寸也就是 300 x 300 上下,也就是 9K 左右的规模。而病毒样本的大小平均接近 1M,是远远大于这个尺寸。图像领域的常规转换方法就是缩放,或者用 pyramid pooling。这两者我们实验效果都非常低差,AUC 在 0.6 左右。所以后来我们又设计了一个很复杂的 pooling 算法处理大尺寸文件。

前面我们介绍过,加壳的样本会对基于内容的分析造成影响。实验中我们发现文件 A 和 B 经过加壳后转图像。肉眼看过去,A 和 B 的相识度会比以前更高。就好比 PS 中马赛克一张猫和一张狗的图片,马赛克强度越高,两图片处理后看起来越相似。但马赛克(加壳)强度低的话,其实处理后的图片和处理前的图片有一定的高纬度映射关系(加壳前后有对应关系)。这种关系,实验看起来深度学习网络能够分辨。当然强度大就无能为力了。

假设算法目前是分辨猫狗照片,不管有没有马赛克。但训练照片中,只有猫照片有马赛克处理,狗没有。所以人工产生狗马赛克图片(人工对样本加壳),让算法有更强分辨能力,至少是对弱马赛克后的图片。

高强度马赛克的话,算法只能记住高强度马赛克后的特征,只是如果有额外信息,比如图片出现在的邮件正文有猫或者狗的字样,就能辅助我们判断(引入其他信息)。

流程中提过我们训练了双模型,一个的 Inception-V4,一个是 Squeezenet。Inception-V4 是目前较为先进的模型,有最好的实验结果,训练和 inference 的速度也可以接受。而 Squeezenet 是压缩模型,参数数量只有 AlexNet 的 1/50,虽然准确度稍差,但检测速度快很多,专为不能提供 GPU 环境的客户设计。另外针对这两个模型做迁移学习的时候,我们都替换掉了最顶和最低几层。

简单说一下测试结果,AUC 可以达到 0.985,误报率小于 1/1000,检测的速度目前可以达到 150M/ 天。

再与各位分享一些经验教训。上面提到检测率和误报率已经同等于沙箱检测的水平。而基于二进制文件的深度学习无需沙箱环境(无需在客户处部署沙箱)。深度学习模型记住的是病毒二进制文件中的有效特征,而不是特征码(特征码由专家选取,对应唯一病毒样本),所以具有更好的通用性。在实际测试中,即使一个月不更新模型,对新衍生的病毒样本也有较高的识别能力。

测试发现,对不同规模的样本进行测试。更大的数据集,有更高的准确度。这个深度学习本身的性质是一致的。再者不能完全把深度学习当成黑箱,而是需要分析其机制,至少要观察哪些样本的哪些特征比重较大。

今年 5 月爆发的 WannaCry 席卷了全球 90 多个国家,造成了很恶劣的影响。上图贴出了 Virustotal 上各家病毒引擎对早期 WannaCry 样本的扫描结果。我们可以看到,只有 CrowdStrike 和 Endgame 两家使用机器学习为核心的病毒引擎能够将其识别为可疑。这也印证了我们所说的泛化能力强。

另外有一个意外发现是,我们的模型对恶意的 HTML 检测率也很高。但同时对正常的 HTML 样本有很高的误报率。定位发现原因是训练集的恶意样本中包含很多 HTML 内容,被深度学习抽取成了特征。优化方法很简单,只需要在正常样本中加入一定的 HTML 就可以平衡。

前面提到微软比赛中第一名的方案是有问题的。他的方案是用 N-gram 产生数万特征,然后用 XGboost 来做分类。赛后有人发现,微软提供病毒样本时是按病毒分类放在不同路径下,而路径字符是包含在样本中,并被分类器判断成了重要特征。这才使其分类准确度优于其他选手。

上面两个案例都再次提醒我们,不能把机器学习黑箱化。

下一步,我们还会深入到网络中,继续探索具体的检测机制。我们还会测试其他的样本类型,比如文档类型。目前我们的输出只是一个二元判断,那安全人员可能希望可以进一步给出病毒类型,甚至是家族归属。方案层面,除了目前使用的二进制码转低纬度图片 +CNN 的方法,我们也在测试另一套方案,考察二进制码在长空间跨度下的特征,并应用 LSTM。

准确率99%!基于深度学习的二进制恶意样本检测——瀚思APT 沙箱恶意文件检测使用的是CNN,LSTM TODO的更多相关文章

  1. 基于深度学习的病毒检测技术无需沙箱环境,直接将样本文件转换为二维图片,进而应用改造后的卷积神经网络 Inception V4 进行训练和检测

    话题 3: 基于深度学习的二进制恶意样本检测 分享主题:全球正在经历一场由科技驱动的数字化转型,传统技术已经不能适应病毒数量飞速增长的发展态势.而基于沙箱的检测方案无法满足 APT 攻击的检测需求,也 ...

  2. 基于深度学习的安卓恶意应用检测----------android manfest.xml + run time opcode, use 深度置信网络(DBN)

    基于深度学习的安卓恶意应用检测 from:http://www.xml-data.org/JSJYY/2017-6-1650.htm 苏志达, 祝跃飞, 刘龙     摘要: 针对传统安卓恶意程序检测 ...

  3. 【OCR技术系列之四】基于深度学习的文字识别(3755个汉字)

    上一篇提到文字数据集的合成,现在我们手头上已经得到了3755个汉字(一级字库)的印刷体图像数据集,我们可以利用它们进行接下来的3755个汉字的识别系统的搭建.用深度学习做文字识别,用的网络当然是CNN ...

  4. 【OCR技术系列之四】基于深度学习的文字识别

    上一篇提到文字数据集的合成,现在我们手头上已经得到了3755个汉字(一级字库)的印刷体图像数据集,我们可以利用它们进行接下来的3755个汉字的识别系统的搭建.用深度学习做文字识别,用的网络当然是CNN ...

  5. 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

    object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.object detection要解决的问题就是物体在哪里,是什么这整个流程的问题.然而,这个问题 ...

  6. (转)基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

    object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.object detection要解决的问题就是物体在哪里,是什么这整个流程的问题.然而,这个问题 ...

  7. 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN,Faster R-CNN

    基于深度学习的目标检测技术演进:R-CNN.Fast R-CNN,Faster R-CNN object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.obj ...

  8. 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【三】VGG网络进行特征提取

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  9. 基于深度学习的人脸性别识别系统(含UI界面,Python代码)

    摘要:人脸性别识别是人脸识别领域的一个热门方向,本文详细介绍基于深度学习的人脸性别识别系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中可以选择人脸图片.视频进行检 ...

随机推荐

  1. insert into 语句的三种写法 以及批量插入

    方式1. INSERT INTO t1(field1,field2) VALUE(v001,v002);            // 插入一条 方式2. INSERT INTO t1(field1,f ...

  2. Splay树

    class SplayNode { public: SplayNode *child[]; char value; int size; bool flip; SplayNode(), flip(fal ...

  3. Django学习案例一(blog):一. 创建project、app

    1.创建project 方法1:使用命令行创建项目.在E盘cmd执行如下命令: django-admin.py startproject myblog 方法2:使用pycharm创建项目.放置位置为D ...

  4. 算法 之 3n+1问题

    卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数 ...

  5. linux下使用Android studio启动模拟器时提示 waiting for target device to come online 的问题

    方法来自:http://stackoverflow.com/questions/42612468/how-can-i-get-more-information-about-waiting-for-ta ...

  6. 用python(2.7)自定义实现SQL的集合操作

    有的时候需要在不同的数据库实例之间做集合操作,这就无法直接使用SQL语句的join,left join了.相同类型的数据库之间虽然也有类似于DBLINK和FEDERATED之类的东西,但一来这些东西不 ...

  7. aspnet_regiis加密文件提示路径中具有非法字符

    加密结果受当前目录影响,不知道是不是哪里操作错误,mark.   Web.config文件位置:E:\Web\Surgery 加密成功,上图命令最后有个".",表示web.conf ...

  8. 改造PAXOS算法消灭活锁

    分布式一致性协议的目的是确定一个不可变变量分布式存储的取值:通过对国内外一致性算法的研究成果和PAXOS协议活锁的分析,发现引入一个角色作为竞争时的代理提交者就可以解决活锁问题,从而在本文引入“代理提 ...

  9. 03--(二)编程实践中C语言的一些常见细节

    编程实践中C语言的一些常见细节(转载) 对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所 ...

  10. codeforces 789 A. Anastasia and pebbles

    链接 A. Anastasia and pebbles 题意 这个人有两个口袋,有n种类型的鹅卵石,每种鹅卵石有wi个,每次可以放同一种最多k个,每次不能把不同类型的鹅卵石放进同一个口袋,但是她可以同 ...