从这里开始,我会将近期对于恶意软件分析的一些研究结果分享给大家。我们会从零基础逐渐提高到一个新的高度,在Part1中我们会讨论静态分析恶意软件。
在我们开始分析之前,我们有必要对这个领域进行一些了解。
什么是恶意软件
恶意软件是一种会对用户,电脑,网络造成损害的东西。比如病毒程序,特洛伊木马,蠕虫,rootkits,恐吓软件以及间谍软件。
静态分析恶意软件
基本的静态分析包括不查看实际的指令检查可执行文件。基本的静态分析就可以确定是否为恶意文件,并提供其函数的相关信息,有时提供的信息允许你创建简单网络签名。基本的静态分析简单方便,但它对于复杂的恶意软件,很大程度上来说就是无效的。
简单了解下,接下来开始谈谈恶意软件静态分析技术。
VirusTotal上传结果
静态分析技术第一个就是将可疑的可执行文件上传到VirusTotal,VirusTotal使用多种反病毒引擎对所上传的文件进行检测, 以判断文件是否被病毒, 蠕虫, 木马, 以及各类恶意软件感染。
寻找字符串
通过寻找字符串是一个简单的方法来获取这个程序功能提示。举个例子,如果这个程序需要访问URL,在程序中你会看到访问的URL被存储为字符串。
微软有一个叫做“Strings”的实用程序,当Strings搜索可执行的ASCII和Unicode字符串,由于它忽略环境和格式,所以它能够分析任何文件类型以及在整个文件中检测字符串(这也意味着它可能将字符作为字符串)
下面的例子就可以透露出字符串的重要信息,使用Strings工具,在CMD下使用一下命令进行搜索。
Strings <filename>
示例1:下面是从恶意软件中提取的一个关键字符串。正如我们所见到的,它给了我们很多信息,比如“FindNextFileA” 和“FindFirstFileA”这表明可执行文件可能是在查找一个文件,结合“CopyFileA” 似乎可以理解为先寻找一个文件然后在替换这个文件。另外我们还需注意“Kerne132.dll”,不要与“Kernel32.dll”搞混淆了。
译者注:Kernel32.dll是Windows 9x/Me中非常重要的32位动态链接库文件,属于内核级文件。
示例2:下面是由String工具提取的内容,它显示了我们使用的“CreateProcessA”会创建一个进程。“Exec” 和“sleep”命令用来控制一个远程文件。
示例3:下面是由String工具提取的另一个例子,亮点在于“InternetOpenURLA” 可以连接到外部服务器下载一些东西。接着,我们获取到的一个http:// 文件,甚至清除了它将连接的服务器地址和下载的东西
检测被混淆的恶意软件
通常恶意软件作者都会将其代码进行混淆以降低其代码的可读性。当一个加壳程序运行时,一个封装程序运行解压缩它。使用静态分析,真的很难预测加壳内的文件,除非它提示的很明显。比如说,PEid工具有时会提示我们文件已经打包。如下图,很清楚的看到文件用UPX加壳
可以通过以下命令脱壳
upx –o <newfilename> -d <packedfilename>
从PE文件格式进行信息收集
PE文件格式是Windows可执行文件,DLL等的格式,它包含Windows OS加载运行代码的必要信息。检测PE文件,我们可以分析被调用了的函数,输出以及有什么类型的链接。
PE头
PE文件包含一个头和一些其他重要信息,接着我们就来了解一二。
.text:包含可执行代码 .rdata:这部分可以阅读全局数据 .data:通过程序访问存储的全局数据 .rsrc:这部分存储需要的可执行文件资源
许多恶意软件作者在其代码中经常会使用动态链接,使用Dependency Walker工具,在下面的截图,“WININET.dll”中有一个“InternetOpenUrlA”函数,即这个恶意软件将与一些外部服务器建立连接。
注意:Wininet.dll包含实现FTP,HTTP,NTP协议的功能
在头下面有一个分段名“IMAGE_FILE_HEADER”,它包含了时间戳字段。这个时间戳显示可执行的编译时间,这是一个非常重要的信息,因为如果年代久远,有一种情况是杀毒软件可能会有其特征。然而这个字段是不可靠的,恶意软件作者可以轻松的进行编译。
由静态分析假设,分析人员预测可执行文件会创建一个进程,接着假设发现了后面的exec和sleep命令,但是没有发现相对应的DLL信息。在这种可执行文件资源被隐藏的情况下,使用Resource Hacker工具打开PE文件中的.rsrc,来获得更多有关恶意软件的信息。
下面是使用PEview分析上述资源
当我们学会了静态分析,仅仅只能够获取到小部分可用的信息,在下一篇文章我会讲解动态分析
* 参考来源infosecinstitute,翻译/鸢尾,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)