笔记
本章介绍的是从在不执行的情况下,从恶意文件中初步提取有用信息:
- 使用杀毒软件和云沙箱进行检测(获取在线信息)
- 从静态PE文件中获取有用信息(获取离线信息)
首先,可以使用杀毒软件和云沙箱来进行检测,结果中通常会显示其哈希值,这个哈希值是用来唯一标识恶意代码的常用方法
接下来对PE文件进行分析,可以从这几个角度入手:
- 字符串:有几率可以获得程序功能相关的提示,常用工具:Strings - Windows Sysinternals | Microsoft Docs
- 查壳:查看程序是否有进行加密加壳压缩等,常用工具:https://github.com/horsicq/Detect-It-Easy
- PE文件格式:从PE头中可以获取程序的一些信息,例如编译信息、空间要求等
- 链接库和函数:从程序的链接库中可以初步推断程序的功能,常用工具:Dependency Walker(包含在VS里了)
- 动态链接库:可以大概知道做什么事情了,例如用了ws2_32.dll,可以推测程序有联网行为
- 导入表:看到具体从dll中获取了哪些函数
- 导出表:dll中常见
作业
Lab 1-1
-
将文件上传至云沙箱查看报告,文件匹配到了已有的反病毒软件特征了吗?
在微步在线云沙箱中检出率:8/25,被识别为了木马
-
这个文件是什么时候编译的?
这个文件编译时间是:2010年12月20日:
-
这两个文件中是否存在迹象说明它们是否被加壳或混淆了?如果是,这些迹象在哪里?
区段名称和大小正常,没有被加壳或混淆
-
是否有导入函数显示出了这个恶意代码是做什么的?如果是,是哪些导入函数?
exe文件的导入表如上图,这里调用了各种文件相关API,文件搜索用的,文件复制,文件打开/创建,创建/关闭文件映射,暂不清楚是干嘛用的
dll文件的导入表如上图,这里调用了创建进程的API,以及创建互斥对象API,说明要防止这个被创建的进程被多次创建,可能是创建一个命名互斥对象,然后还可以看到,调用了ws2_32.dll,这是用于网络连接的库,而且全部都是序号导入,看不到函数名称
奇怪的是,这个dll文件导出表是空的,一般来说dll都是给exe导出函数来调用的,这里推测可能通过某种我不知道的方式进行执行
答案:dll从msvcrt.dll里导出的了Sleep函数和kernel32.dll的CreateProcess函数,可以用来创建进程,执行功能,执行完就Sleep进入睡眠,这可能是个后门程序
-
是否有任何其他文件或基于主机的迹象,让你可以在受感染的系统上查找?
通过查询字符串:
可以推测,exe会对把原本
kernel32.dll
变成kerne132.dll
还放在原来的目录下,dll里发现了ip地址,可能有网络连接行为,可以通过:c:\windows\system32\kerne132.dll
来判断感染迹象 -
是否有基于网络的迹象,可以用来发现受感染机器上的这个恶意代码?
有,在dll被执行的时候会向
127.26.152.13
发起连接 -
你猜这些文件的目的是什么?
猜测会进行从网络中获取有问题的kerne132.dll进行读取,把正常的kernel32.dll映射到内存进行修改,修改成不正常的kerne132.dll的内容
答案:dll可能是个后门,exe用来安装与运行dll文件
Lab 1-2
-
上传至云沙箱查看
-
是否有加壳混淆迹象?迹象是什么?被加壳的话请进行脱壳
通过Die查看PE文件信息:
看到这里有加壳:UPX壳,版本是3.04,upx是压缩壳,可通过加壳工具脱壳(UPX: the Ultimate Packer for eXecutables - Homepage)
重新查壳发现没壳了:
-
有没有导入函数能暗示这个程序的功能?如果是,是哪些导入函数,暗示了什么?
LoadLibrary函数和GetProcAddress函数配合,可以动态获取dll中的函数地址,来调用函数而不显示在导入表里,接下来的Virtual三个函数是用来申请内存和修改内存属性的,可以把缓冲区的内容设置为可执行,然后进行执行,进一步看执行了哪些函数需要查询字符串:
这里调用了CreateService函数,OpenSCManager函数,显然是创建服务程序,下面的InternetOpen,还有网址和IE8.0的字符串,表明,这里会有网络连接行为
-
哪些基于主机或网络的迹象确定被这个程序所感染的机器?
连接上图中的那个网址的行为,以及服务里的MalService服务可以确定
Lab 1-3
-
上传云沙箱查看信息
-
是否有加壳混淆迹象?迹象是什么?被加壳的话请进行脱壳
有被加壳,FSG壳,使用UnFSG进行脱壳:
再次查看,已经无壳了:
-
有没有导入函数能暗示这个程序的功能?如果是,是哪些导入函数,暗示了什么?
Ole.dll里导入了COM操作相关的函数,这个程序要进行COM组件的操作
-
哪些基于主机或网络的迹象确定被这个程序所感染的机器?
字符串里搜索到了字符串:
http://www.malwareanalysisbook.com/ad.html
,这里被感染的机器会对这个域名发起访问请求书上解答说这个文件加壳了,暂时无法解答2,3,4问题,等后门学完脱壳再回来分析这个文件。。。
Lab 1-4
-
上传云沙箱查看信息
-
是否有加壳混淆迹象?迹象是什么?被加壳的话请进行脱壳
没有加壳迹象
-
文件是什么时候编译的?
大大的疑惑?这里很可能是程序篡改了自身的编译时间
-
有没有导入函数能暗示这个程序的功能?如果是,是哪些导入函数,暗示了什么?
资源释放三件套,这个程序里有资源文件会被放出来,除此之外,还在字符串看到了dll注入用的函数,提升权限令牌的函数,网址uri的exe,这里大概率资源文件里藏了一个dll,程序会把dll释放出来提权注入到某个进程中去
-
哪些基于主机或网络的迹象确定被这个程序所感染的机器?
检查
C:\windows\system32\wupdmgrd.exe
文件和C:\windows\winup.exe
文件的存在,以及检查连接网址:http://www.practicalmalwareanalysis.com/updater.exe
的行为 -
文件包含一个资源,你能从资源中发现什么吗?
使用Die的资源查看可以看到:
这里藏了一个可执行程序,大概率是个动态链接库