恶意代码分析实战 8 恶意代码行为

8.1 Lab 11-01

代码分析
首先使用strings进行分析。
vmware_NupjUFhPiZ.png
Gina是在 msgina.dll中的。
vmware_l3HQXuw5ts.png
很多有关资源的函数。
vmware_RwAsDO2Q8y.png
关于注册表的函数。
使用ResourceHacker查看。
vmware_Ha3xNR0WqC.png
发现是一个PE文件。
保存为dll文件。
vmware_4qaLzze4d8.png
动态分析
启动Promon。
vmware_wIKSy1UumC.png
vmware_ETKdG4cjat.png
进入注册表查看。
vmware_6AqcxgIoqi.png

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

向磁盘释放了一个msgina32.dll。使用WinMD5发现这个dll和我们在资源中提取出来的文件是同一个文件。
vmware_o7Ub3nHqfh.png

  1. 这个代码如何进行驻留?

代码将自己添加到注册表中,使得系统被重启后,msgina32.dll会被重新加载。

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

vmware_7623NE7yjr.png
非常多的以Wlx开头的函数名字,可以判断是gina。 查看字符串发现了msutil32.sys文件。
还有格式化的字符串,可能是用来记录用户登录凭证的。
使用IDA进行分析。vmware_xHREsdNd6d.png
Dllmain首先检查参数fdReason,这个传入参数表示着DLL入口函数被调用的原因。恶意代码检查传入参数是否为DLL_PROCESS_ATTACH,在进程启动或者使用loadLibrary函数加载DLL时,带有这一参数的入口函数将会被调用。如果这个特殊的DllMain在DLL_PROCESS_ATTACH期间被调用,那么将会调用loadLibrary函数,获取Windows系统目录中msgina.dll的句柄。(这个真的实现GINA的Windows的DLL,然而msgina32.dll是拦截GINA的恶意DLL程序。设计成msgina32.dll是为了欺骗分析人员。)
程序会调用GetSystemDirectoryW这个函数,用于获取系统目录。然后调用lstrcatW把上面获取的目录与"\MSGina"组合在一起,再使用LoadLibraryW函数获取msgina.dll的句柄。这里将LoadLibraryW的返回值保存到了eax,然后又将eax的值保存到了hModule里面。这样就可以让这个恶意的DLL程序的导入函数使用真实的msgina.dll中的函数,从而使系统操作得以正常执行。

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

分析一下导出函数,找到WlxLoggedOnSAS。
msedge_GyPOifY7g8.png
可以看到,这里现将字符串“WlxLoggedOnSAS”作为参数压栈,然后调用了sub_10001000这个函数。双击进去分析一下:
msedge_8oCjhTsnzE.png
可以看到,这里使用到了我们刚刚所获取的msgina.dll的句柄hModule以及WlxLoggedOnSAS(lpProcName)这个字符串。下面调用了GetProcAddress,目的就是获取WlxLoggedOnSAS的地址。继续分析其它的导出函数,基本上和WlxLoggedOnSAS这个函数差不多。但是发现这个函数WlxLoggedOutSAS有点不一样,这个函数是在系统注销的时候被调用的,进去分析一下。
msedge_HJeOe0qFBH.png
这里进行了一系列的push操作,还有一个格式化字符串"UN %s DM %s PW %s OLD %s",可以看到这些参数都是函数sub_10001570的函数,双击进去查看一下:
msedge_SARgcbMxUQ.png
这里是将时间,日期和登录凭证写入到msutil32.sys这个文件里。

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

重启电脑,然后找到msutil32.sys这个文件并打开。
vmware_0wcHzr1iQN.png

8.2 Lab 11-02

静态分析
使用strings进行分析。
vmware_wouJnXq2zJ.png
存在注册表的位置和AppInit_DLLs,表明程序可能通过注册表来达到永久驻留自身的功能,此外还出现了Lab11-02.ini则表明程序可能使用了这个文件。而send和wsock32.dll,表明程序可能有联网的操作。
还有OUTLOOK.EXE这种字符串,可能是对邮件进行了操作。
vmware_3XtYfMNByU.png
Lab11-02.ini文件的字符串看起来应该是进行了加密。
使用IDA进行分析
使用交叉引用。
vmware_8rXTnKUapz.png
installer注册了一个键值,将文件复制到其他目录。
首先检查DLL_PROCESS_ATTACH。
vmware_LMOWZsVOdg.png
接下来,DLLMAIN试图打开Lab11-02.ini。
vmware_B2mDMG2BYm.png
①处程序试图提取Windows系统目录,以及②处的字符串Lab11-02.ini。③处程序使用strncat将它们组成一个路径。恶意代码在④处打开一个用来读取的INI文件,如果不能,则退出。
恶意代码如果成功打开了INI文件,就会生成一个缓冲区,最后将内容传入到一个解密函数中去。
vmware_lEvHPL76YP.png
使用OllyDbg来查看解密的内容。
vmware_8uQdjsBJ20.png
是一个邮箱,有可能是我们的邮件会给这个邮箱发一份。
下面还有一个函数,我们命名为hook_installer。
分析挂钩函数
hook_installer函数安装挂钩之前,会检查恶意代码正在哪个进程中进行。它调用了三个函数来获取当前的进程名。
vmware_skM6szevx3.png
vmware_LaZLQ6zDXq.png
接下来恶意代码检查当前进程大写字母的进程名是否与这四个相同,不同的话就会退出。
接下来,分析安装inline挂钩的函数。
vmware_HACQOYPesZ.png
在①中我们看到它首先调用GetCurrentProcessId函数,然后是sub_100012FE函数,我们将这个函数命名为suspend_threads。suspend_threads函数调用了GetCurrentThreadId,它返回当前运行线程的线程标识符(TID)。接下来,suspend_threads调用CreateToolhelp32Snapshot,并且使用结果循环遍历当前的所有TID,如果TID不是当前的线程,则用TID调用SuspendThread。我们可以得出结论,在①处的函数调用挂起了进程的所有运行线程。
③处函数调用做的工作则是恢复所有线程,使用ResumeThread函数,两个函数的意图是,先挂起,然后恢复执行。恶意代码执行一些影响改变当前进程运行行为的动作比较常见,例如修改内核或者是安装一个inline挂钩。
接下来,检查②处调用的代码。将该函数的参数修改成合适的名字。
vmware_UvSo8VdOpO.png
内联钩子原理图:
image.png
vmware_PRwhin8cPM.png
此函数存在三个参数,进入此函数进行分析:
vmware_03UcosYAnR.png
可以发现此过程是在修改地址,首先将0E9赋值到edx中,接着用参数覆盖ecx寄存器中的值,这一过程就是实现jmp执行,因为jmp指令的机器码就是E9。
此过程执行完毕以后就会跳转到sub_1000113D函数执行位置:
vmware_SFVqhEcvjm.png
因为此函数的地址是作为参数传递进去的。现在将此函数重命名为:hook_function现在我们返回到钩子函数执行过程函数:
vmware_acVPV9PcJ3.png
VirtualProtect函数可以修改进程的运行,保护其读和写的权限,下面又调用了此函数的目的是恢复原始进程权限。在上图中我们发现其使用malloc函数分配的新的空间并将其保存在var_8这个参数里面,目的是为了以后在构造E9(jmp指令)时所需的空间。

  1. 这个恶意DLL导出了什么?

使用depends查看导出函数。
vmware_hN5WIxIAq5.png
可以看到,导出函数的名字叫做,installer。

  1. 使用rundll32.exe安装这个恶意代码后,发生了什么?

使用promon来监控rundll32.exe。
vmware_79tTUMAijO.png
写入了注册表,查看一下。而且创建了一个新文件。
vmware_MqZW4daahn.png
可以看到这个文件其实是Lab11-02.dll复制的自身。
vmware_9qRozXXGYR.pngvmware_AFVqb1695N.png
文件还试图打开system32下的lab11-02.ini文件,因此为了程序顺利运行,我们将该文件放入对应的目录下。

  1. 为了使这个恶意代码正确安装,Lab11-02.ini必须放置在何处?

应该放置到该目录下。
vmware_nq1FoGCzzV.png

  1. 这个安装的恶意代码如何驻留?

恶意代码将自身安装到AppInit_DLLs的注册表键值中,这可以使恶意代码加载到所有装载User32.dll的文件中。

  1. 这个恶意代码采用的用户态Rootkit技术是什么?

这个恶意代码针对send函数安装了一个inline函数(hook)。

  1. 挂钩代码做了什么?

这个挂钩检查向外发出的包,看外传的包是否包含RCPT T0:的电子邮件信息,如果发现了这个字符串,则它会添加一个额外的RCT T0行,来增加一个恶意的电子邮件账户。

  1. 哪个或者哪些进程执行这个恶意攻击,为什么?


我们可以看到其会针对以上三个进程进行攻击。,这三个进程都是有关于邮件的进程。

  1. ini文件的意义是什么?

这个.ini文件里面包含一个经过加密的邮件地址,解密之后发现就是一个邮箱 [email protected]

  1. 你怎么用wireshark动态抓获这个恶意代码的行为?

使用WireShark,过滤tcp。
vmware_h12w1X1nCq.png
随便写点什么。
vmware_vRpGkIzJwU.png
点击这里。
vmware_QRggHV2548.png
可以看到它额外添加了一个发送邮箱。
vmware_DAAAqOgzri.png

8.3 Lab 11-03

  1. 使用基础的静态分析过程,你可以发现上面有趣的线索?

首先使用strings进行分析。
vmware_vehP3ATM7D.png
vmware_iPlGlus1UK.png启动了一个服务,这个服务是系统的索引服务。可能创建了一个文件inet_epar32.dll,还有一个奇怪的程序vmware_TVH20BgBTX.png
上网查一下cisvc.exe是什么:
msedge_S39ubHp0Oi.png
查看一下Lab11-03.dll:
vmware_v0SBjqNGUL.png
这里的GetForegroundWindow;GetiindowTextA;GetAsyncKeyState三个导入函数。初步推断是要做键盘记录。
查看一下导出函数:
vmware_bAKDII3oJx.png
在IDA中查看一下:
vmware_oh55xgOHWS.png
vmware_jqNHRWQawE.png
这个导出函数暂时也不知道是干什么的。这里好像创建了个kernel64 x.dll的文件,其他还有创建文件,创建互斥体,创建线程什么的,我们就先不管。
Lab11-03.exe包含字符串inet_epar32.dll和 net start cisvc,这意味着它可能启动CiSvc索引服务。包含字符串C:\WINDOWS\System32\kernel64x.dll的Lab11-03.dl导入了API函数GetAsyncKeyState和 GetForegroundwindow,这让我们怀疑它是一个记录到文件kernel64x.dll的击键记录器。

  1. 当运行这个恶意代码时,发生了什么?

用procmon来监测一下,过滤一下:
vmware_9uxLhw8pRH.png
vmware_soADxcX3E1.png
可以看到,这里会创建inet_epar32.dll,还有Lab11-03.dll的一堆操作。我们打开创建的inet_epar32.dll看看)。进行MD5比对能够发现,inet_epar32.dll和Lab11-03.dll是相同的文件,所以我们可以知道恶意代码复制了lab11-03.dll到windows系统目录。
vmware_bzgOJLEUEP.pngvmware_mu2kIn7ILB.png
恶意代码首先复制Lab11-03.dll到Windows系统目录的inet_ epar32.dll中, 并有针对cisvc.exe的操作。

  1. Lab11-03.exe如何安装Lab11-03.dll使其长期驻留

用IDA调试一下Lab11-03.exe。
vmware_utwAbBbuGV.png
在main函数中一开始是复制lab11-03.dll到system32系统目录中的inet_epar32.dll。之后创建一个字符c:\windows\system32\cisvc.exe,将其作为参数传递给了sub_401070.之后是使用系统运行命令net start cisvc,来启动索引服务。
接下来我们看看他的子函数:
vmware_Ryq4Rqm2SJ.png
从上图可知调用了createfile(创建文件),createfilemappingA(创建一个文件映射内核对象)和MapViewOfFile(将一个文件映射对象映射到当前应用程序的地址空间),将cisvc.exe映射到内存中。这些函数都有访问这个文件的权限。
MapViewOfFile返回的内存映射视图的基地址(lpBaseAddrress)可以被读写:
vmware_VMAXmjZgxU.png
我们接着往下看:
vmware_YFo4c4RCiB.png
可以看到调用了UnmapViewOfFile(停止当前程序的一个内存映射),这样对这个文件做的任何修改都会被写入到硬盘。
同时我们顺着绿色那条线看下来(上三图的下面那张),查看在调用该函数sub_401070之前的操作。
能够发现其实是进行了写入操作。一开始文件的映射位置移入到EDI,用Var_28调整一些偏移量。rep movsd循环,用ecx(4E)计数来写入该数量的DWORD。之后byte_409030被移入ESI,复制byte_409030的数据到映射文件中。
vmware_lhfme8RTR5.png
按c。
vmware_VlE6w056Uo.png
进缓冲区看一眼,
vmware_eLxWGjM0k1.png
vmware_FcBwQTbvXJ.png
是一个文件的目录。
发现这里出现了被感染的dll和这个exe的导出函数。所以我们可以猜测,shellcode加载了这个dll,并调用了它的导出函数。
接下来IDA分析一下感染后的文件。
vmware_huQk8TZChJ.png
这里call了sub_1001AD5,我们跟过去看看
vmware_ze10nIs3T4.png
这里call的这些个函数不知道是个啥,所以我们上OD里面调试一下在01001B0A用这个函数的位置下断点,运行提示出用的是loadlibrary函数,在数据窗口看一下这个位置。
可以知道其作用是将inet_epar32.dll载入内存,同理接着看下一个函数,00101B1B处下断点,看到此时是调用GetProcAddress,其作用是获取导出函数的地址(在右下角可以看到导出函数)返回值在eax,接下来将eax赋给ebp-8,之后是call ebp-8,那么也就是说下一个call就是在调用这个导出函数。
所以,恶意代码通过入口点重定向从而使它永久性地安装Lab11-03.dll。它通过重定向入口点,来运行加载这个DLL的shellcode。

  1. 这个恶意代码感染Windows系统的哪个文件?

为加载inet epar32.dll,恶意代码感染了cisvc.exe,然后调用了inet_epar32.dll的导出函数zzz69806582。

  1. Lab11-03.dll做了什么?

查看看他的导出函数。
vmware_84cVYPCisX.png
这里有个创建线程,其中有个startaddress参数,跟进去:
vmware_Fys4EV0iOX.png
这里创建了个“MZ”互斥量(因为前面OpenMutexA那个地方没有互斥量,所以跟着绿线运行下来)
vmware_KRrMMnl8QI.png
创建了文件"C:\WINDOWS \System32\kernel64x.dll"
vmware_AnB0Ni8aqg.png
SetFilePointer:在一个文件中设置新的读取位置,dwMoveMethod值为2(开始点为文件的结尾位置)然后call了个sub_10001380,看看是什么
vmware_7SU7OQEo6y.png
call了个sub_10001030,跟进:
vmware_Pm5RWTmtpw.png
这里看到了一开始静态分析的时候看到的GetForegroundWindow,GetiindowTextA,用来判断当前哪个程序正在输入和获取当前的标题。
vmware_eUODb6jRUg.png
用到了GetAsyncKeyState判断一个按键是被按下还是弹起。
所以Lab11-03.dll 是一个轮询的记录器,这在它的导出函数zzz69806582中得到实现

  1. 这个恶意代码将收集的数据存放在何处?

恶意代码存储击键记录和窗体输入记录,其中击键记录被存入到C:\Windows\System32\kernel64x.dll。

猜你喜欢

转载自blog.csdn.net/weixin_61823031/article/details/128758155