该系列文章将系统整理和深入学习系统安全、逆向分析和恶意代码检测,文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。漫漫长征路,偏向虎山行。享受过程,一起加油~
前文从产业界和学术界分别详细讲解恶意代码攻击溯源的相关知识,在学术界方面,用类似于综述来介绍攻击追踪溯源的不同方法;在产业界方面,主要参考李东宏老师从企业恶意样本分析的角度介绍溯源工作。
这篇文章将详细总结恶意代码检测技术,包括恶意代码检测的对象和策略、特征值检测技术、校验和检测技术、启发式扫描技术、虚拟机检测技术和主动防御技术。主要学习老师的课程,希望这篇文章对您有所帮助,如果文章中存在错误、理解不到位或侵权的地方,还请告知作者与海涵。且看且珍惜,加油~
文章目录:
一.恶意代码检测的对象和策略
二.特征值检测技术
1.特征值检测技术概念
2.特征值的提取选择及方法
3.优缺点
三.校验和检测技术
1.什么是校验和检测技术
2.校验和检测对象
3.优缺点
四.启发式扫描技术
五.虚拟机检测技术
六.主动防御技术
1.主动防御技术概念
2.主动防御实现机理
3.优缺点
七.总结
作者的github资源:
逆向分析:
https://github.com/eastmountyxz/
SystemSecurity-ReverseAnalysis
网络安全:
https://github.com/eastmountyxz/
NetworkSecuritySelf-study
声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。(参考文献见后)
自全球第一个计算机病毒出现后,人们通过与病毒长期的斗争,积累了大量反病毒经验,掌握了大量实用的反病毒技术,并研制出一系列优秀的反病毒产品,主要用于病毒的防护、检测及其清除等。病毒的检测技术主要包括特征值检测技术、校验和检测技术、启发式扫描技术、虚拟机检测技术、主动防御技术,以及新兴的云查杀技术等。个人用户也可以通过经验、安全检测工具和反病毒软件来检查计算机是否感染病毒,或是采用沙箱及相关静、动态分析手段来对病毒进行深入分析。
一.恶意代码检测的对象和策略
恶意代码的检测是将检测对象与恶意代码特征(检测标准)进行对比分析,定位病毒程序或代码,或检测恶意行为。
首先,我们介绍恶意代码检测对象。检测对象主要包括:
接着我们主要介绍三类检测对象。
(1) 检测对象——引导扇区
引导扇区之所以成为检测对象,是因为部分引导扇区是具有控制权的,它在系统启动、执行过程中会执行相应代码,并且这些代码可能会被恶意软件所篡改。主要包括:
硬盘主引导扇区
硬盘操作系统引导扇区
可移动磁盘引导扇区
检测目标:
(2) 检测对象——可能带毒的文件
有些文件是正常被感染所致,有些文件是独立存在系统中的。
可执行程序
.exe;.dll;.com;.scr… (最普遍的检测对象)
数据文件
.doc;.xls;.ppt;.pdf; .mp3;.avi… (比如宏病毒、Office文档都是检测对象)
脚本文件
.js;.vbs;.php;.pl… (比如脚本病毒)
网页文件
.html;.htm;.asp… (比如网页挂马)
…
(3) 检测对象——内存空间
恶意代码在传染或执行时,必然要占有一定的内存空间,部分功能代码驻留在内存中。
比如,部分恶意代码仅存在内存之中,它们是没有文件的,通过文件检测无法找到它们。另外,还有部分恶意代码最开始是有文件的,执行完毕之后会将自身进行删除,此时再去检测文件是检测不到的。也有一些木马程序,最开始执行时只是一个简单的主体程序,它所有的功能代码可能是通过Shellcode的方式进行远程注入,在文件中是找不到这些恶意代码的,此时就驻留在内存中,所以对内存中的代码进行检测是必要的。
同时,还有一些木马程序会启动IE进程,它启动之后会将IE进程掏空,然后将自己的恶意代码植入其中,这种情况的恶意代码也是驻留在内存之中。除此之外,还有一些恶意代码本身在文件中,它是一种加密或压缩状态,只要到内存之后才会进行还原。参考作者前文:
介绍完检测对象之后,我们分享病毒的检测策略。
(1) 专用检查技术:针对某个或某些特定已知恶意代码,比如反病毒软件所采用的文件特征值检测技术,发现病毒之后,对病毒的特征进行提取构建相关特征库。
(2) 通用检测技术:针对已知和未知恶意代码,根据恶意软件广义的特征进行检测,但这里面涉及了很多人为经验,如启发式扫描技术,对目标程序的特性和行为进行判断,给出判断结果或用户提示。
广义特性描述或一般行为特征作为判定依据。
如启发式扫描技术、主动防御技术等。
二.特征值检测技术
1.特征值检测技术概念
病毒特征值:是反病毒软件鉴别特定计算机病毒的一种标志。通常是从病毒样本中提取的一段或多段字符串或二进制串。
如下图所示,特征值检测技术和古代通J令类似,通J令中包含了这个人的特征,对于特征值检测技术也是一样,它首先需要对目标恶意程序进行特征及标志提取。另外,通J令可以通过相关机构或群众发现,而特征值检测技术依靠反病毒引擎来进行比对。
特征值检测技术的具体思路:
早期样本比较少,可以通过人工提取特征,但随着样本增多之后,就不再通过单纯的人工方式提取,会将样本特征更新至病毒库,再下发到客户端的病毒检测设备中。最早的时候,整体病毒数量不多,比如KV300,当时就是拿着软盘每个月去到指定的地方进行病毒库的更新,后来逐渐通过网络的方式更新反病毒软件,每天都可以更新很多次,反病毒软件再根据反病毒引擎进行病毒的查杀。
2.特征值的提取选择及方法
特征值的提取选择具体如下:
(1) 特定字串:从计算机病毒体内提取、为病毒所特有的特征串。如特定提示信息,特定签名信息等。
例如大麻病毒的提示为:“Your PC is now stoned”等。
(2) 感染标记:病毒为避免重复感染而使用的感染标记。
如黑色星期五的“suMs DOS”。
(3) 从病毒代码的特定地方开始取出连续的、不大于64且不含空格(ASCII值为32)的字节串。
同时,所提取的特征需要避免和正常的软件雷同,否则会形成误报。具体的提取方法如下:
特征值的提取还有一些自动提取的方法,下面三篇文章是之前作者分享的。参考作者前文:
3.优缺点
关于特征值检测技术,它有优缺点。具体如下:
最后,针对特征值检测技术,恶意软件如何对抗?
三.校验和检测技术
1.什么是校验和检测技术
校验和检测技术是在文件使用/系统启动过程中,检查检测对象的实际校验和与预期是否一致,因而可以发现文件/引导区是否感染。
首先,我们需要弄清楚什么是预期?
它会通过校验和算法对原始的数据进行预算,从而得到校验值,如果对象被修改,其校验值会变化,从而判断其是否被感染。这里提到一个可信计算,它其实也使用了校验和技术。
运用校验和检测技术查病毒主要采用以下三种方式:
系统自动监测
该技术在反病毒软件中用得比较多。它会将校验和检查程序常驻内存,每当应用程序开始运行时,自动核验当前与预先保存的校验和是否一致。如果不一致说明这段数据被篡改,会有相应的提示。
专用检测工具
对被查的对象文件计算其正常状态的校验和,将校验和值写入被查文件中或检测工具中,而后进行比较。如MD5Checker。
自我检测
有些应用程序会进行自我校验,比如QQ,如果修改其数据会有相应提示QQ被篡改。在应用程序中,放入校验和检测技术自我检查功能,将文件正常状态的校验和写入文件自身,应用程序启动比较现行校验和与原校验和值,实现应用程序的自检测。
2.校验和检测对象
校验和检测对象通常包括文件头部、文件属性、文件内容和系统数据等。
(1) 文件头部
目前大部分的寄生病毒,它要去感染其它程序,它通常都要改变目标程序头部的数据,比如PE病毒感染。一般比较整个文件效率较低,有的检测仅比较文件的头部。现有大多数寄生病毒需要改变宿主程序的头部。
(2) 文件基本属性
文件的基本属性在整个生命周期中相对固定,如果发生改变可能发生了病毒攻击。文件基本属性通常包括文件长度、文件创建日期和时间、文件属性(一般属性、只读属性、隐含属性、系统属性)。下图展示了Tripwire软件能够对UNIX和Windows中的文件属性进行监控,如果文件中任何一个属性发生了异常变化,则说明该文件极有可能被病毒攻击或感染、损坏了。
(3) 文件内容校验和
对文件内容(可含文件的属性)的全部字节进行某种函数运算,这种运算所产生的适当字节长度的结果就叫做校验和。这种校验和在很大程度上代表了原文件的特征,一般文件的任何变化都可以反映在校验和中。比如对于散列函数来说,原始特征哪怕改变一位,它的散列值都会发生很大变化。
(4) 系统数据
有些病毒可能修改、且相对固定的重要系统数据。
如硬盘主引导扇区、分区引导扇区
内存中断向量表、SSDT、设备驱动程序处理例程等
3.优缺点
校验和检测技术优缺点如下:
优点:
缺点:
必须预先记录正常文件的校验和[预期]
误报率高
不能识别病毒名称
效率低
四.启发式扫描技术
主要依赖病毒检测的经验和知识,如专业反病毒技术人员使用反汇编、调试或沙箱工具稍加分析,就可能判定出某程序是否染毒,主要通过的就是反病毒技术人员的经验。启发式代码扫描技术(Heuristic Scanning)实际上就是恶意代码检测经验和知识的软件实现。
经验主要是判断可疑的程序代码指令序列,常见的如下:
启发式扫描步骤如下:
下图展示反病毒软件的启发式分析过程,包括轻度扫描、中毒扫描、深度扫描。
为了方便用户或研究人员直观地检测被测试程序中可疑功能调用的存在情况,病毒检测程序可以显示地为不同的可疑功能调用设置标志。例如,早期TbScan这款病毒检测软件就为每一项可以病毒功能调用定义一个标志,如F、R、A等,从而直观地判断被检测程序是否感染病毒。
下图展示了TBScan不同病毒触发的标志。
启发式扫描优缺点如下:
优点:
缺点:
解决方案:
下面展示了相应的安全软件进行“启发式扫描+特征值扫描”的检测率。比如,卡巴斯基能达到99.57%,
2015年AVC测试结果,即启发式/行为检测能力的结果如下图所示。
2011年/2012年测试结果如下,针对未知病毒静态检测能力,其中奇虎对未知病毒检测率最高,然后是GDATA。
当时的结果报告中也给出了另一个结果——误报率,详见下图。如果你期待获得一个更严格的安全,误报率高一点也是可以承受的,希望不要有漏掉的,不同的安全软件存在不同的策略,当然同时提高检测率,降低误报率也非常考验安全公司的实力。
针对启发式扫描技术,病毒如何博弈?病毒又能采取什么措施呢?
五.虚拟机检测技术
为什么需要虚拟机检测技术?主要是因为:
其中,加密病毒是指真实代码被压缩或加密,但最终需要在内存中还原。多态性病毒是指对自身二进制文件进行加密,在运行时再自解密,它在每次感染时都会改变其密钥和解密代码,以对抗反病毒软件,这类病毒的代表有 “幽灵病毒”。普通特征值检测技术对其基本失效,因为其对代码实施加密变换,而且每次感染使用不同密钥和解密代码。
在电脑病毒中有一个特殊群体,它们生活在比Windows系统更早启动的“异度空间”,拥有对整个系统和软件的生杀大权;同时它们又极隐蔽,检测难度远远高于普通病毒,我们将其统称为“幽灵病毒”。
一台电脑的启动顺序:BIOS(基本输入输出系统)-> MBR(磁盘主引导记录)-> VBR(卷引导记录)-> 系统加载程序(C盘根目录)-> Windows系统。BIOS、MBR和VBR就是幽灵病毒活跃的空间。360全球率先发现了BMW、谍影等BIOS病毒和VBR病毒,以及魅影、鬼影2、暗云Ⅱ、暗云Ⅲ等MBR病毒,并第一时间进行防御查杀。
早在2016年12月份,360安全卫士查杀团队首次发现了暗云的新一个变种,这就是今年兴起的暗云Ⅲ木马。此版本跟以往版本最大的不同之处,在于暗云Ⅲ加入了对360急救箱查杀对抗,占位了急救箱的驱动所有设备名。下图展示了占坑急救箱设备名,正常为 Device设备,而暗云为Event设备。
并且暗云Ⅲ能通过挂钩磁盘StartIO保护自身,去掉了上一个版本Object钩子,保留了DPC保护,在2016年12月,360安全卫士就已经专门为查杀此顽固木马下发了新驱动,一旦发现自身设备名被占用,即判定为暗云Ⅲ设备并开启查杀修复。
虚拟机检测技术如下:
最后介绍虚拟机检测技术的优点,具有如下:
有效处理加密类病毒。
虚拟机技术+特征值扫描,准确率更高。
虚拟机技术+启发式扫描,有利于检测未知变形病毒。
六.主动防御技术
1.主动防御技术概念
主动防御检测技术有时也被称为行为监控等技术。
东方微点公司创始人刘老师最早在国内提出了主动防御技术。下图展示了主动防御的过程,但该技术对于用户本身而言比较困难,因为用户缺乏专业知识。所以反病毒公司会根据实际情况制定自身的反病毒软件策略,结合用户需求可能会放松策略。
常见可疑行为包括:
对可执行文件进行写操作
写磁盘引导区
病毒程序与宿主程序的切换
写注册表启动键值
远程线程插入
安装、加载驱动
键盘钩子
自我隐藏
下载并执行等
…
下图是卡巴斯基的主动防御过程。
2.主动防御实现机理
恶意软件包括几个主要的功能,
这些功能又细分为文件管理、进程管理、服务管理、注册表管理、屏幕监控、屏幕截取、语音视频截获、键盘记录、窗口管理、远程Shell等。
那么这些功能怎么实现的呢?主要是通过关键API实现。
键盘按键记录的API
SetWindowsHookExA
文件遍历的API
FindFirstFileA
FindNextFileA
进程遍历的API
CreateToolhelp32Snapshot
Process32First
Process32Next
文件操作的API
fopen、fread、fwrite、fclose
截屏的API
GetDC、SelectObject、GetDIBits
录像的API
capCreateCaptureWindow
capGetDriverDescription
capGetVideoFormat
下图展示了录音API从设备准备、缓冲区准备到开始录音的过程。
对这些关键API或API序列监控,希望获取其逻辑关系,自动判断其合法性,判断行为的可行性。常见检测思路特征包括:
静态文件特征
网络流量特征
系统行为特征
功能行为特征
攻击意图
其中,功能行为特征主要是动态监视所运行程序调用各种应用编程接口(API)的动作,自动分析程序动作之间的逻辑关系,自动判定程序行为的合法性。
这里涉及到一个行为监控技术,它用于捕获拦截关键的API信息,具体包括:
API调用的实参
API调用的返回值
API调用的上下文(栈)
具体的技术实现包括:
(1) Hooking
Hooking包括IAT钩子、IDT钩子、SSDT钩子、过滤驱动程序、驱动程序钩子等,通过下图所示的工具可以查看SSDT表是否被挂了钩子,它会比较当前函数和原始函数的地址。
IAT Hooking显示如下图所示,其中MyMessageBox的地址为00002598位置,如果修改其Data后,它就会跳转到自身设置的位置。
(2) InlineHooking
InlineHooking技术更为复杂一些。如下图所示,左边是部分描述了InlineHooking前的MessageBox,右边是MyMessageBox在内存中的定义体。
首先将MessageBox头部的5个字节Move到准备好的位置,其次把MessageBox的头部5个字节给一个jmp,跳转到自定义的MessageBox上(00401280)。
第三步,在定义好的MyMessageBox区域内给个jmp,跳转到原来的函数位置,即7566FD23处。
最后在MyMessageBox函数体中调用原始的MessageBoxA函数地址,即004012D7地址。
行为监控可以从用户态到核心态文件处理,再到核心态磁盘处理,有一系列的函数进行Hooking和InlineHooking进行整体的行为监控
3.优缺点
主动防御技术的优缺点如下:
同时给出两个小的思考问题:
七.总结
写到这里,这篇文章就介绍完毕,希望对您有所帮助,下一篇文章作者将继续分析机器学习与恶意代码结合的知识,再下一篇会介绍恶意代码检测技术对应的安全软件评测,包括:
如此多的反病毒软件,哪款更适合你?
各个反病毒软件采用了哪些关键技术?
各自有什么特色?
学安全两年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。作者作为网络安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,感谢老师、师兄师弟、师姐师妹们的教导,深知自己很菜,得努力前行。
《珈国情》
明月千里两相思,
清风缕缕寄离愁。
燕归珞珈花已谢,
情满景逸映深秋。
最感恩的永远是家人的支持,知道为啥而来,知道要做啥,知道努力才能回去。夜已深,虽然笨,但还得奋斗。
欢迎大家讨论,是否觉得这系列文章帮助到您!任何建议都可以评论告知读者,共勉。
(By:Eastmount 2021-10-25 写于武汉)
参考资料:
[1] https://mooc.study.163.com/learn/1000003014?share=2&shareId=1000001005
[2] 《软件安全之恶意代码机理与防护》WHU 强推
[3] 作者学习和实践经验