一、传统检测方法
1. 基于恶意代码的特征码作为检测
特征值的提取选择具体如下:
(1) 特定子串:从计算机病毒体内提取、为病毒所特有的特征串。如特定提示信息,特定签名信息等。例如大麻病毒的提示为:“Your PC is now stoned”等。
(2) 感染标记:病毒为避免重复感染而使用的感染标记。如黑色星期五的“suMs DOS”。
(3) 从病毒代码的特定地方开始取出连续的、不大于64且不含空格(ASCII值为32)的字节串。同时,所提取的特征需要避免和正常的软件雷同,否则会形成误报。具体的提取方法如下:
a)人工提取
– 反病毒工程师对病毒样本进行分析后,人工确定病毒特征。
b)自动提取
– 通过软件系统自动提取特定范围内特定长度具有一定特征的数据。
– 处理不利则可能被别有用心者利用,形成误杀。比如杀毒软件会对Windows核心文件进行查杀,但样本取时可能会有相应的失误,通过制造对抗样本使得正常程序或文件被误杀
2. 用恶意代码的指纹来检测
- 系统自动监测
该技术在反病毒软件中用得比较多。它会将校验和检查程序常驻内存,每当应用程序开始运行时,自动核验当前与预先保存的校验和是否一致。如果不一致说明这段数据被篡改,会有相应的提示。
- 专用检测工具
对被查的对象文件计算其正常状态的校验和,将校验和值写入被查文件中或检测工具中,而后进行比较。如MD5Checker。
- 自我检测
有些应用程序会进行自我校验,比如QQ,如果修改其数据会有相应提示QQ被篡改。在应用程序中,放入校验和检测技术自我检查功能,将文件正常状态的校验和写入文件自身,应用程序启动比较现行校验和与原校验和值,实现应用程序的自检测。
注意:不一定对整个文件验证,可能是对文件头或者是文件内容进行操作
3. 查找恶意字符串
4. 分析PE文件头与分节
5. 分析链接库与函数,也就是导入表
方法一:将PE头的IAT表里面的文件名和函数名hash到0到255范围,如果某个文件出现某个函数,就将该位置为1,当然每位对应表示的函数是固定的,最终得到256数组。
二、基于机器学习方法的恶意代码检测
1. 字节视图特征
文件大小
可见字符串(查找恶意进程名,恶意字符等等)
程序熵值
pe文件二进制灰度图
-
2. 汇编视图特征
操作码特征
寄存器特征
函数特征
-
3. PE 视图特征
PE 结构化特征(API 调用数量、DLL 调用数量、导入函数数量、导出函数数量、各方法起始虚拟地址、虚拟大小、语言及编码方式等重要的结构化特征)
(1) PE元信息是将PE信息的数值型信息抽取出来,组成256维数组,每一个数组的位置表示了一个固定的信息种类,再信息种类将对应的信息填入到元素的位置,比如编译时间戳等。
(2) 设置属性值,判断pe文件是否满足情况,将其对应值标为1或0,组成对应向量。
- 反检测引擎特征(可以用Yara规则来匹配)
YARA的每一条描述或规则都由一系列字符串和一个布尔型表达式构成,并阐述其逻辑。YARA规则可以提交给文件或在运行进程,以帮助研究人员识别其是否属于某个已进行规则描述的恶意软件家族。
YARA的规则可以复杂和强大到支持通配符、大小写敏感字符串、正则表达式、特殊符号以及其他特性。
- 编译特征
软件的编译时间与编译环境(在资源里的版本信息里)以及加壳信息
- 恶意 API
4. 函数名(CG图)
三、基于深度学习方法的恶意代码检测
将恶意代码转化为图像,利用深度学习模型提取特征学习,分类
- 在图像识别、语音识别、机器翻译等领域的效果都远远超过非深度学习的算法,将恶意软件转换为对应形式数据(图像),采用对应领域先进的模型进行应用。
- 迁移学习,将比较成熟模型迁移到这里运用
下一步:
1、overlay特征
2、Yara规则
https://github.com/Yara-Rules/rules/tree/master/malware
3、编译特征
4、PE 结构化特征中的属性值其余补充
https://github.com/evilsocket/ergo-pe-av/blob/master/attribute.names
四、绕过新思路
1、
2、
(1) 向导入地址表中添加一个从未使用过的函数
(2) 操作现有的section name(从良性样本的节名中提取)
(3) 创建新的(未使用的)section
(4) 将字节追加到section末尾的额外空间
(5) 创建一个新的入口点,它会立即跳转到原始入口点
(6) 操纵(破坏)签名
(7) 操作调试信息
(8) 打包或解压文件
(9) 修改(中断)报头校验和
(10) 向覆盖层追加字节(对等文件的结尾)
五、参考
基于深度学习的二进制恶意样本检测:https://zhuanlan.zhihu.com/p/31232907
基于静态多特征融合的恶意软件分类方法:http://www.infocomm-journal.com/cjnis/CN/article/downloadArticleFile.do?attachType=PDF&id=166605
恶意代码实战分析-第一章:静态分析基础:https://blog.csdn.net/u013687652/article/details/45288925
基于机器学习的恶意代码检测技术详解:https://blog.csdn.net/Eastmount/article/details/107420755
Yara规则概述:https://blog.csdn.net/qq_36090437/article/details/79911375
如何使用机器学习创建恶意软件检测系统:https://www.freebuf.com/articles/system/205444.html
Defcon“黑客大赛”冠军讲述:如何让50个恶意文件一起骗过AI系统?:https://www.secrss.com/articles/13984
Evading Machine Learning Malware Classifiers:https://towardsdatascience.com/evading-machine-learning-malware-classifiers-ce52dabdb713
Evading Machine Learning Malware Detection: https://www.blackhat.com/docs/us-17/thursday/us-17-Anderson-Bot-Vs-Bot-Evading-Machine-Learning-Malware-Detection-wp.pdf
Learning to Evade Static PE Machine Learning Malware Models via Reinforcement Learning: https://arxiv.org/pdf/1801.08917.pdf
代码:https://github.com/endgameinc/gym-malware