恶意代码检测理论(静态与动态分析基础)

什么是恶意代码
恶意代码(malicious code)又称为恶意软件(malicious software,Malware),是能够在计算机系统中进行非授权操作的代码。


恶意代码类型
1、蠕虫或计算机病毒:可以自我复制和感染其他计算机的恶意代码
2、后门:指一类能够绕开正常的安全控制机制,从而为攻击者提供访问途径的一类恶意代码。攻击者可以通过使用后门工具对目标主机进行完全控制。
3、僵尸网络:攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制程序所组成的攻击网络。僵尸网络区别 于其他攻击方式的基本特性是使用一对多的命令与控制机制,此外也具有恶意性和网络传播特性。
4、下载器:这是一类只是用来下载其他恶意代码的恶意代码。下载器通常是在攻击者获得系统的访问时,首先进行安装的。下载程序会下载和安装其他的恶意代码。
5、内核套件: 设计用来隐藏其他恶意代码的恶意软件。通常与其他恶意代码(后门)组合成工具套装。
6、等等。


恶意代码的分析方法:静态分析、动态分析

恶意代码静态分析技术主要包括:反病毒软件扫描、文件格式识别、字符串提取分析、二进制结构分析、反汇编、反编译、代码结构与逻辑分析、加壳识别和代码脱壳。

反病毒软件扫描:使用现成的反病毒软件来扫描待分析的样本,以确代码是否含有病毒。http://www.virustotal.com/
文件格式识别:恶意代码通常是以二进制可执行文件格式存在的,其他的存在形式还包括脚本文件、带有宏指令的数据文件、压缩文件等。文件格式识别能够让我们快速地了解待分析样本的文件格式,对于二进制可执行文件而言,了解样本的格式也意味者我们获知了恶意代码所期望的运行平台。在Windows平台上,二进制可执行yywrexe和dll都是以pe文件格式组织的,而在linux平台上,可执行文件格式则是elf。
字符串提取分析:有时恶意代码的作者会在自己的作品中放入某个特定的url或email地址,或者恶意代码会使用到某个特定的库文件和函数。利用字符串提取技术,可以帮助我们分析恶意代码的功能和结构。
反汇编、反编译:可根据二进制文件最大限度地恢复出源代码,帮助分析代码结构。
加壳识别和代码脱壳:恶意代码的加壳会对深入的静态分析构成阻碍,因此对加壳进行识别以及代码脱壳是支持恶意代码静态分析一项关键性的技术手段。

恶意代码的动态分析技术手段主要有:快照比对、系统动态行为监控、网络协议栈监控、沙箱、动态调试等。

快照比对:对原始的“干净”系统资源列表做一个快照,然后激活恶意代码并给予充分的运行时间,如5分钟,之后我们再对恶意代码运行后“脏”的系统资料列表进行快照,并对比两个快照之间的差异,从而获取恶意代码行为对系统所造成的影响。常使用的工具有:FileSnap,RegSnap,完美卸载等
系统动态行为监控:是目前恶意代码动态行为分析中最为核心和常用的技术步骤,针对恶意代码对文件系统、运行进程列表、注册表、本地网络栈等方面的行为动作,进行实时监视、记录和显示。
网络协议栈监控方法:可从本地网络上的其他主机来检测承受恶意代码攻击的机器的行为,如恶意代码所开放的TCP或UDP端口,对外发起的网络连接和通信会话等。
沙箱技术:沙箱它提供了受限制的执行环境,使得在沙箱中运行的代码不能修改用户系统,从而提供了一个用于运行不可信程序的安全环境。


小白这个学期要做一个简单的分析,但是由于没有任何基础,所以只是摘取了一些简单的分析方法。

第一部分

对于一个可疑的样本,用一个反病毒软件扫描一下,进行一个初步的检测。
这里使用VirusTotal(http://www.virustotal.com/)

第二部分

1、哈希是一种用来唯一标识恶意代码的常用方法。恶意代码样本通过一个哈希程序,会产生出一段用于唯一标识这个样本的独特哈希值(类似一种指纹)
MD5算法是恶意代码分析最为常用的一种哈希函数,SHA算法也同样流行。
这里使用python的库来获取文件的hash值并与已有的病毒样本库中的hash进行对比。

2、查找字符串
一个程序会包含一些字符串,比如打印出的消息,连接的URL,或者复制文到某个特定的位置,以及调用的共享动态库的名称,调用的函数名。
提取可执行文件的字符串,检查是否有存在与黑名单的字符串,如果出现很多黑名单中的字符串,一定程度上可以说明这是一个可疑的软件。

3、检查是否加壳,这里只针对upx壳

第三部分

使用noriben沙箱进行检测,现在还没搞明白怎么用…

更新:
看了一天,有点明白是什么意思了。其实它是对让软件运行在虚拟机中,并借助监视器监控程序执行了那些操作,最后再把给出报告。个人觉得这好像算不上是一个沙箱吧,但是网上都说这是一个沙箱技术。

你可能感兴趣的:(课程设计/实践)