恶意代码分析实战Lab11

恶意代码分析实战Lab11

Lab11-1

strings

可能存在窃取用户登录凭证
image.png

peid

资源操作

image.png

注册表操作

image.png

source hacker查看资源

有PE文件

image.png

导出二进制文件为exe

image.png

peid打开发现是dll文件

image.png

然后改名为dll文件

使用process monitor 分析

image.png

image.png

注册表查看

image.png

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

msgina32.dll

image.png

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

查看提取的和释放的dll文件md5是否一致

提取的

image.png

释放的

image.png

一致

程序被写入到GinaDll重启会自动加载

image.png

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

strings分析提取的dll文件

有很多Gina函数,有格式化字符串可能用来记录凭证

还有msutil32.sys文件

image.png

ida打开dll

判断程序是否在加载时调用

image.png

如果是

GetSystemDirectoryW 获取目录

lstrcatW 组合目录

LoadLibraryW 加载调用

这里的MSGina实现真实的功能

image.png

查看导出表

image.png

进入函数

image.png

WlxLoggedOnSAS

GetProcess获取真实的Gina

image.png

WlxLoggedOutSAS 系统注销时调用

进入函数

image.png

将时间,日期,打印等信息写入到msutil32.sys中

image.png

使用Ginan拦截用户的登录凭证

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

msutil32.sys 用户名,密码、时间,日期都记录在这个文件里

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

重启虚拟机输入密码

image.png

image.png

Lab11-2

strings lab11-02.dll查看

image.png

strings 查看ini文件

文件被加密

image.png

dependency walker 查看

CreateToolhelp32Snapshot

用于给当前进程或线程拍摄快照

image.png

注册表操作

image.png

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

installer

image.png

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

dll文件不能直接监控所以要监控rundll32

image.png

运行时跟上参数

rundll32.exe Lab11-02.dll,installer

创建了文件

spoolvxx32.dll

image.png

md5对比相同

image.png

image.png

系统目录中复制了文件

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

程序试图打开这个文件,但文件未找到

image.png

将Lab11-O2.ini放到c:\windows\system32下即可

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

在注册表里添加了恶意程序

image.png

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

ida分析lab11-02.dll

image.png

重命名和更改注册表

image.png

分析1000105b函数

image.png

获取系统路径

image.png

将系统路径和Lab11-02.ini进行拼接尝试打开ini文件,如果可以打开则读取

image.png

将读取的文件内容作为sub_100010B3参数传入(可能是解密)

image.png

将lab11-02.dll和ini文件拖入这个路径,然后lab11-02.dll改名为spoolvxx32.dll

image.png

od打开ldd文件跳转到解密函数

image.png

下断点后运行,查看参数发现无法识别的

ctrl+g

f2

f9

image.png

查看解密结果,是个邮箱

image.png

将函数重命名为email address

image.png

hook安装

image.png

内联hook原理

image.png

函数10001075返回绝对路径

函数10001104提取路径内容

image.png

确定程序名是不是(THEBAT.EXE OUTLOOK.EXE MSIMN.EXE)中的一个,不是结束,是的话看loc_10001561

image.png

观察发现sub_100013BD和sub_10001499函数及其相似,他们都会查找当前进程的所以线程,只是对线程的处理方式不一样,一个是挂起除了当前线程外的其他线程,一个是唤醒其他线程.

好了,现在只剩下最难的sub_100012A4,牢记这四个参数,都很重要

image.png

进入程序,头三个函数调用很明确,加载wsock32.dll,然后得到send函数地址

image.png

接着调用sub_10001203(三个参数,其中第一个是send函数地址)

image.png

程序的头尾都调用virtualprotect,一个是修改send代码区域可读写,一个是恢复原来的保护

image.png

这段代码把原来send函数的头五个字节保存在申请的内存空间

image.png

这段代码是对原来send函数代码的修改(我对一些参数和局部变量重命名,为了更好理解)

首先要注意三个地址,一个是lp_send_address这是send原函数的地址,一个是p_p_sub_1000113d地址他是函数1000113d的地址(这个函数会在send之前被调用,也就是说send函数被这个函数挂钩了),还有一个malloc_space这是临时申请的内存空间地址(他会被用来存放原来send函数的头五个字节和一个跳转命令)
image.png

一个一个来,看第一个E9h的赋值语句,E9就是jmp,E9被赋值给malloc_space的0a偏移处,第二个eax被赋值到偏移0b处(这两个语句中edx和ecx都是malloc_space)很明显这是跟在jmp后面的一个相对地址,他的值是send的原函数地址相对于malloc_space 0a偏移处的地址大小(这条jmp语句的执行效果就是跳转到被修改后的send函数的第一个一句jmp(jmp是5字节)后的代码,想一下eip的计算就知道为啥,eip=原eip+该汇编代码字节数(jmp是5字节)+jmp后面跟的相对地址).
image.png

上面是对malloc_space的一系列操作,下面是对原send函数的操作,同样是修改第一个字节为E9,然后第二个字节开始是ecx这里的ecx是挂钩函数sub_1000113d的地址(很明显是把send的头五个字节改成jmp sub_1000113d)

image.png

看最后的操作,把malloc_space偏移为5(为啥偏移为5看上面memcpy)的地址赋值给sub_10003484,这样call sub_10003484,就会执行原send函数头五字节汇编代码,然后跳回send继续执行剩下的send代码.

image.png

挂钩分析完毕,现在只剩下,挂钩函数sub_1000113d了,关键在于两个memcpy

复制RCPT TO: <到dst

image.png

头两个push是memcpy的参数,strlen的参数是第三个push,把src复制到dst这里的src是之前翻译出来的邮箱地址

image.png

最后把send的四个参数传给10003484,det就是消息,eax是长度,s是套接口描述字

image.png

说了这么多,其实就是在我们发邮件的时候,添加一个收件人,这个收件人就是上面提到的的邮箱地址

分析结束(几个虚拟机都没有outlook这几个软件就没有抓包,演示了)

使用的技术是内联hook

6.挂钩代码做了什么?

添加邮件发送目标,窃取邮件内容

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

THEBAT.EXE、OUTLOOK.EXE、MSIMN.EXE

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

加密恶意邮件地址

9.你怎样用Wireshark动态抓获这个恶意代码的行为?

恶意程序加载到内存后outlook发送邮件,wireshark监控到发送的收件人里多出一个新的收件人

image.png

Lab11-3

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

strings exe程序

启动服务 cisvc

image.png

strings dll程序

image.png

查看dll文件,键盘记录

image.png

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

创建了inet_epar32.dll文件

image.png

对比实验文件的dll和这个文件的md5

image.png

image.png

一致

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

分析.exe程序,程序先复制lab11-03.dll到inet_epar32.dll,然后得到cisvc.exe的绝对路径,然后调用sub_401070函数,接着就是调用_system来启动cisvc程序,所以我们猜测关键在于sub_401070函数对原cisvc文件做了什么事,进入sub_401070,可以看到开头几个函数调用事打开cisvc,然后映射到内存,以便后面的修改操作.一直到下面的函数调用sub_401000

image.png

image.png

看sub_401000参数一个是节区数目3,一个是第一个节区名.text,函数其实是在查找.text节区头的头8字节是否具有内存访问权限,以便后面修改,并且返回.text节区头的地址

20180528184736613.png

接着的是一系列的内存操作很难一步步理解,最好是直接跳过不要陷入细节,看关键的赋值

20180528192017708.png

20180528192342350.png

直接动态看结果,是在如下图地方的末尾添加了一串的东西

20180528192310788.png

接着看,这句话是在修改程序的入口地址为1A28

20180528192658512.png20180528192723645.png

用PEview打开被修改后的cisvc也可以证实,程序入口点正是被修改到,上面添加的那一段代码处

20180528193406877.png

现在只需要看一下这段代码是什么,就知道.exe文件到底干了什么坏事,用ollydbg跟随cisvc程序,到下图地方可以发现程序动态加载了inet_epar32.dll也就是lab11-03.dll文件,这就是lab11-03.dll的长期驻留方式

20180528194451737.png

现在我们开始分析lab11-03.dll,关键看一下导出函数和dllmain

可以看到dllmain没做什么内容,再看导出函数创建了一个线程就结束了,看来这个线程函数很关键,查看startaddress

20180528195332184.png

可以看到创建了互斥量MZ,然后打开互斥量来确定只有一个恶意线程在运行,然后创建C:\WINDOWS\System32\kernel64x.dll文件,接着SetFilePointer明显是要对上面的文件进行读写操作了,接着是函数调用

20180528195945883.png

跟进就看到一个函数调用,跟进发现这个程序很大,大致浏览一下,看个几个关键字符串和关键函数有很多的getasynckeystate调用还有getforegroundwindow函数可以推测很可能是击键记录.并且传递的参数是之前传递的参数四个buffer可能用来装,击键的记录数据

20180528200513297.png

再看后面两个函数调用,一个_sprintf是对buffer的写,一个是把,buffer写到文件kernel64x.dll,注意write参数有个ecx+80ch正好指向了var_4,而var_4之前被赋值为文件kernel64x.dll指针,所以是把buffer写到kernel64x.dll
20180528200825784.png

现在我们运行一下程序,然后测试一下,可以看到已经记录了很多的信息,但是记录的数据还是16进制的不太好理解记得0x54我打的应该是t键

20180528203632124.png

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

cisvc.exe

感染前后对比

image.png

将程序里所隐藏的shellcode复制到cisvc.exe里

image.png

image.png

关于修改的前两个字节

感染前程序入口点

image.png

感染后程序入口点,运行程序时会先执行shellcode

image.png

od调试

程序入口点

image.png

断点在01001b0a

kernel32.loadLibraryExA用于将dll文件加载到内存

image.png

image.png

01001b1b用于获取导出函数地址

image.png

最后执行到程序正确的入口地址

image.png

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

主要分析导出函数zzz69806582

创建了一个线程

image.png

主要看StartAddress

创建互斥量避免线程冲突

image.png

获取文件创建句柄

image.png

函数SetFilePointer

dwMoveMethod的值为2表示指向文件末尾

image.png

循环调用

image.png

进入10001000

image.png

GetForegroundWindow 识别当前聚焦的前端窗口,告诉键盘记录器当前哪一个窗口正在执行输入

GetWindowTextA 获取窗口标题

image.png

在sub_10001030里

GetAsyncKeyState 用来识别当前按键是被按下还是弹起

image.png

键盘记录

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

20180528203632124.png

参考

https://blog.csdn.net/abel_big_xu/article/details/117633708?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165855916616782246461892%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165855916616782246461892&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-1-117633708-null-null.185v2control&utm_term=%E6%81%B6%E6%84%8F%E4%BB%A3%E7%A0%81&spm=1018.2226.3001.4450

0%