病毒分析教程第六话--高级病毒分析(上)

版权声明: https://blog.csdn.net/m0_37552052/article/details/83061839

高级病毒分析(上)


教程参考自《恶意代码分析实战》
程序来自:http://www.nostarch.com/malware.htm


Lab 11-1

本节实验使用样本Lab11-01.exe。

这个恶意代码向磁盘释放了什么?

查看导入表,有资源操作相关的API,直觉告诉我们该病毒会从资源节中读取并释放文件。
1

果不出其然,病毒读取资源节中的数据后,将其写入当前路径的msgina32.dll文件中。
2

这个恶意代码如何进行驻留?

定位到注册表API,发现病毒对HKLM…\Winlogon\GinaDLL进行了篡改,与Run启动项不同,该注册表项的利用过程相较复杂点,
3

GINA(微软图形识别和验证界面)设计的初衷是作为一个给第三方DIY登陆过程的接口,只要在GinaDLL键值中配置自己的dll,该dll就能在开机时被Winlogon自动加载。所以,病毒常使用这种方法来加载恶意dll,如下,将msgina32.dll(这名字起到了混淆作用)设置为GinaDll的值,就达到了持久化攻击的目的。
4

这个恶意代码如何窃取用户登录凭证?

我们对msgina32.dll进行调试,发现它首先会加载真的那个msgina.dll(C:\Windows\system32\MSGina.dll),然后导入该DLL的Wlx开头的函数。
5

在导出表中可以清晰地看到很多Wlx开头的函数,其中WlxLoggedOutSAS与其他函数不太一样,原因下面会说。6

我们随意点开一个函数,比如WlxLogoff,结构很简单,一个push、一个call和一个jmp,其他导出函数出了WlxLoggedOutSAS都是这种结构。
7

我们来看看0x10001000函数,主要功能就是调用GetProcAddress从msgina.dll(hLibModule)获取相对应的函数地址,保存在exa中并返回,然后通过刚刚的jmp eax跳过去。
8

WlxLoggedOutSAS函数的结构一看就不一样,多了两个call。
9

先来看第一个call,地址为edi,而网上回溯,edi等于eax,而eax又来自0x10001000函数的返回值,所以call edi的功能就跟其他函数一样,目的是调用原来的API。
10

然后,恶意代码会将劫持到的敏感信息(就是push的那些edx、ecx、eax)填充到“UN %s DM %s PW %s OLD %s”字符串中。
11

这个恶意代码对窃取的证书做了什么处理?

恶意代码随后会获取时间和日期信息,拼凑到上面的字符串中,最后将这些信息写入到“msutil32.sys”中,由于当前DLL被Winlogon进程所加载,所以该文件的路径被写入到了C:\Windows\system32路径下。
12

如何在你的测试环境让这个恶意代码获得用户登录凭证?

由于该恶意操作是在WlxLoggedOutSAS函数中,所以要重新登陆才能触发该恶意代码。我们重启一下,OK,恶意代码运行了,我们找到了msutil32.sys,其内容中显示了窃取的信息(由于我没有设置密码,所以PW这一栏为空)。
13

猜你喜欢

转载自blog.csdn.net/m0_37552052/article/details/83061839