一、 Lab11-01
行为分析
在当前目录释放文件msgina32.dll
并且修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL为释放出来的msgina32.dll,对登录进行劫持。
ida pro7.5很多unicode字符串无法识别出来。这里用了SysinternalsSuite中的strings工具来搜索字符串。
静态分析
对Wlx开头的所有函数进行分析。大部分的函数如下:
1.push对应的api名字符串
2.获取msgina.dll中函数地址
3.跳转执行。
也就是之进行了简单函数的调用,并没做额外的事情。
WlxLoggedOutSAS
有一个函数WlxLoggedOutSAS做了很多不一样的操作。
1.先调用了msgina.dll中的WlxLoggedOutSAS
2.将pNprNotifyInfo结构体中的内容(包括用户名、密码等保存)
sub_10001570就是将前面的内容按“UN %s DM %s PW %s OLD %s"”格式保存
可以重新登录系统看看效果。查看C:\windows\system32\msuntil32.sys
习题答案
1.这个恶意代码向磁盘释放了什么?
在当前目录释放msgina32.dll文件
2.这个恶意代码如何进行驻留?
3.这个恶意代码如何窃取用户登录凭证?
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL为释放出来的msgina32.dll
4.这个恶意代码对窃取的证书做了什么处理?
将得到的密码保存到C:\windows\system32\msuntl.sys中
5.如何在你的测试环境让这个恶意代码获得用户登录凭证?
重新登录
二、Lab11-02
静态分析
Lab11-02.dll导出了installer
Installer导出函数
1.设置注册表SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs为spoolvxx32.dll
2.将当前的dll复制到C:\windows\system32\spoolvxx32.dll
DLLMain函数
1.判断fdwReason是否为1(DLL_PROCESS_ATTACH),如果不是则退出
2.读取当前目录下(c:\windows\system32)的Lab11-02.ini的内容
3.将内容与0x21进行异或得到email地址:billy@malwareanalysisbook.com
sub_100014B6函数
1.得到进程的名字并大写
2.将进程名字与THEBAT.EXE、OUTLOOK.EXE、MSIMN.EXE,没有匹配就退出
3.循环挂起线程(SuspendThread)
4.对send函数设置inline hook。
5.恢复挂起的函数(ResumeThread)
hook_func函数(sub_1000113D)
inlinehook函数所以参数和send一样(socket s,const char* buf,int len,int flags).
1.搜索RCPT TO:字符串,如果没有则调用原本的send
2.添加一个邮件用户 billy@malwareanalysisbook.com
习题答案
1.这个恶意DLL导出了什么?
installer
2.使用rundll32.exe安装这个恶意代码后,发生了什么?
SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs为spoolvxx32.dll
将当前的dll复制到C:\windows\system32\spoolvxx32.dll
3.为了使这个恶意代码正确安装,Lab11-02.ini必须放置在何处?
c:\windows\system32\目录下
4.这个安装的恶意代码如何驻留?
通过设置AppInit_DLLs注册表项为恶意dll。AppInit_DLLs用来全局注入dll模块,凡是导入了user32.dll的程序都会 主动加载这个键值下的模块。
5.这个恶意代码采用的用户态Rootkit技术是什么?
对send函数进行inlinehook
6.挂钩代码做了什么?
添加邮件发送目标,窃取邮件内容
7.哪个或者哪些进程执行这个恶意攻击,为什么?
THEBAT.EXE、OUTLOOK.EXE、MSIMN.EXE
8.ini文件的意义是什么?
加密恶意邮件地址
9.你怎么用wireshark动态抓获这个恶意代码的行为?
三、Lab11-03
行为分析
lab11-03.dll包含了和一个c:\WINDOWS\System32\kernel64x.dll两个可疑字符串。且导入了GetWindowTextA、GetAsyncKeyState、GetForegroundWindow,可能是键盘记录器。
设置过滤条件为Lab11-03.exe。可以观察到有两次文件创建和一次cmd.exe执行命令
设置过滤条件为cisvc.exe,只关注文件操作,有向kernel64x.dll进行写操作。
kernel64x.dll记录了当前运行程序的内容。
静态分析Lab11-03.exe
main函数
1.复制Lab11-03.dll到C:\WINDOWS\System32\inet_epar32.dll
2.sub_401070函数对C:\WINDOWS\System32\cisvc.exe进行操作
3.“net start cisvc”启动cisvc服务
sub_401070函数
1.通过CreateFile、CreateFileMapping、MapViewOfFile将cisvc.exe映射到内存中
2.一堆没用的操作,搜索xV4\12,最后还是直接把shellcode复制到.text段的空闲位置(virtualsize+PointToRawData)之后
3.计算新的OEP=shellcode偏移+baseOfCode,并赋值给AddressOfEntryPoint
shellcode
shellcode分析起来比较麻烦,先看一下shellcode包含两个字符串“C:\WINDOWS\System32\inet_epar32.dll”和“zzz69806582”。猜测应该是加载dll并调用zzz69806582函数。
bindiff比较
使用bindiff对比cisvc.exe前后的变化(注意:文件路径不能出现中文)
1.先用ida打开cisvc_ori.exe,原本的exe文件,然后关闭选择(pack database)
2.用ida打开cisvc.exe,再ctrl+6,点击diff database,选择cisvc_ori.exe.idb
主要就是start,入口点发生了变化。
动态调试shellcode
shellcode动态调试分析
od加载cisvc.exe并在shellcode下断点
0x1001B0A Loadlibrary(C:\WINDOWS\System32\inet_epar32.dll)
0x1001B1B GetProcessAddress(,‘zzz69806582’)
0x1001B21调用zzz69806582,最后回到cisvc.exe原本的start地址。
inet_epar32.dll(Lab11-03.dll)分析
zzz69806582函数启动了一个线程然后退出(线程函数0x10001410),线程函数主要功能如下如下:
1.打开一个互斥体“MZ”失败则退出,防止多个实例运行
2.如果没有互斥体则创建
3.打开kernel64x.dll并把文件指针指向最后
4.获取按键信息。GetForegroundWindow获取前台窗口句柄并GetWindowText获取当前窗口的标题,GetAsyncKeyState获取按键信息。
5.将内容保存到kernel64x.dll中
习题答案
1.使用基础的静态分析过程,你可以发现上面有趣的线索?
2.当运行这个恶意代码时,发生了什么?
记录键盘信息
3.Lab11-03.exe如何安装Lab11-03.dll使其长期驻留
感染cisvc.exe的添加shellcode
4.这个恶意代码感染windows系统的哪个文件?
cisvc.exe
5.Lab11-03.dll做了什么?
开启线程,记录键盘信息
6.这个恶意代码将收集的数据存放在何处?
kernel64x.dll
总结
需要补强的点
1.pe结构
2.各种hook技术