selph
selph
发布于 2021-11-08 / 631 阅读
0
0

恶意代码分析实战Lab11-恶意代码行为

从本章开始,会见识各种恶意行为

笔记

下载器和启动器

下载器用来将恶意代码下载下来进行执行;启动器用来秘密加载恶意代码

后门(Backdoor)

后门程序往往实现了全套功能,不需要额外下载功能代码,有一套通用功能:注册表操作、文件操作等

反向Shell:从目标机器上发起连接来接受控制,可以作为单独的代码,也可以作为组件的一部分存在

RAT:控制管理主机,通常是为了特定目标进行控制

botnet:大范围控制主机,用来进行大规模攻击

登录凭证窃密器

转储Windows口令Hash,用来进行离线破解,或Pass-The-Hash攻击

  • pwdump:从SAM输出本地账户LM和NTLM口令,通过注入DLL到Lsass进程进行获取,pwdump变种经常会动态获取函数,经常会见到GetProcAddress函数
  • PTH:也是通过DLL注入进行获取

识别转出技术很重要,但确定恶意代码对哈希做了什么操作更重要,是存在硬盘了还是上传网上了,还是PTH攻击用了

按键记录

内核态常用键盘渠道来进行检测

用户态常用API进行Hook来实现,可能会见到这几个函数:SetWindowsHookEx(设置Hook)、GetAsyncKeyState(判断按键状态)、GetForgeroundWindow(判断当前窗口)

通过字符串列表来识别按键记录器很有用(Up、Num Lock、Down、Right、Left、PageDown等。。)

存活机制

注册表有很多地方能实现存活,Run、AppInit_DLL、Winlogon、SvcHost DLL等,一般通过procmon等工具去检测访问的注册表、通过sysinternals等工具找出自启动项

特洛伊木马化系统二进制文件,修改系统二进制文件,使其运行时加载恶意代码

DLL劫持也行

提权

通过访问令牌来提权,据说这种方式在最新的windows上没用了,不知道是不是真的

用户态Rootkit

用来隐藏恶意代码行为的工具称为rootkit,用户态常用的有IAT Hook(过时、容易检测),InlineHook技术

作业

Lab 11-1:

分析目标:Lab11-01.exe

无壳

查导入表发现:设置注册表键值的函数,资源释放的函数,存在资源文件,4D5A开头是个二进制文件

查看字符串:发现了好多Wlx开头没见过的函数,以及其他一些可疑信息:

image-20211017161414376

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

    运行火绒剑监控系统信息:

    image-20211017161859038

    该恶意代码向进程所在目录释放了msgina32.dll文件,还修改了注册表,设置了GinaDLL的值,是个二进制数据,没有观测到网络行为

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

    WindowsXP通过注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL来设置需要WinLogon加载的第三方DLL,恶意代码将释放出来的msgina32.dll设置到了这个注册表里

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

    静态分析看见exe文件仅仅是做了资源释放和注册表设置两件事,其他功能应该是在资源文件里实现的,分析资源文件,无壳,字符串里是Wlx那堆函数,导入表没啥特别的,有注册表操作相关API,

    看到一堆Wlx开头函数,以及GinaDLL字符串,这里应该是用了GINA拦截的操作(有点像DLL劫持操作)

    根据查资料:WinLogon会和GINA DLL进行交互,缺省是MSGINA.DLL(在System32目录下)。微软同时也为我们提供了接口,我们可以自己编写GINA DLL来代替MSGINA.DLL。

    参考资料:Windows开机登录认证与Gina DLL - 一心一意 - 博客园 (cnblogs.com)

    查资料得知:GINA DLLs are ignored in Windows Vista,看来这是个XP特有的

    参考资料:GINA - Win32 apps | Microsoft Docs

    静态分析:

    image-20211017170213991

    这里把系统原本的msgina.dll给加载了,然后把句柄存到全局变量里,然后dllmain就结束了,因为是DLL劫持,所以功能不是全部都在dllmain中实现的,观察旁边的函数列表:

    image-20211017170635776

    基本上全部都是调用sub_10001000函数,这应该是个函数转发,查看:

    image-20211017170714361

    确实是这样,这里是从原本的dll中获取函数地址,然后返回函数地址,然后再返回出来之后直接jmp过去

    密码验证相关的函数是:WlxLoggedOutSAS,把函数挨个点一遍也会发现,就这个函数里面的内容不一样:

    image-20211017171427272

    前面先是正常调用了函数,然后把参数里的关键信息入栈调用了sub_10001570函数:

    image-20211017171652783

    这个函数主要就是打开文件msutil32.sys然后把数据写进去了

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

    把信息记录在了msutil32.sys

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

    要重启系统才能触发:

    image-20211017172211428

Lab 11-2:

目标文件:Lab11-02.dll,Lab11-02.ini

PE查看:导入表导入了遍历模块列表的函数,注册表操作的函数

字符串查看:有好多exe结尾的名称,还有注册表地址,和spoolvxx32.dll和Lab11-02.ini

image-20211017185034520

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

    导出了installer函数

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

    image-20211017190633320

    在系统system32目录下创建了文件spoolvxx32.dll,在注册表AppInit_DLLs里添加了这个dll

  3. 为了使这个恶意代码正确安装,ini文件需要放置在哪里?

    分析DLLmain函数:首先获取当前路径到一个全局变量,然后打开system32目录下的ini文件,如果打开失败,则后面就不执行了

    image-20211017191120452

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

    驻留是通过AppInit_DLLs注册表进行的,installer函数会把自己复制到system32目录下,以及给注册表AppInit_DLLs添加项:

    image-20211017191321324

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

    采用了InlineHook,dllmain函数后面读取ini信息,然后进行解密操作,解密完成之后保存在全局变量里,接下来调用了函数进行Hook:

    image-20211017193936227

    sub_100014B6函数首先获取当前进程名:

    image-20211017194011558

    紧接着将进程名变大写,进行判断,是不是如下三个进程:

    image-20211017194107075

    如果是的话,就执行接下来的操作:设置Hook,Hook wsock32.dll的send函数

    image-20211017194126430

  6. Hook代码做了什么?

    Hook代码Hook了send函数,将要发送的字符串里如果有RCPT TO:就添加:RCPT TO: <billy@malwareanalysisbook.com>\r\n,然后再调用send函数,应该是邮件劫持

    image-20211017195809703

  7. 哪个进程执行这个恶意攻击,为啥?

    劫持邮件,针对邮件程序进行攻击,针对:THEBAT.exe、OUTLOOK.exe、MSIMN.exe进程进行攻击

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

    是加密后的邮箱地址,解密后如下图所示:

    image-20211017200431396

Lab 11-3:

分析目标:LAb11-03.exe、Lab11-03.dll

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

    exe:导入表没啥东西,字符串有奇怪的东西:

    image-20211017201646773

    dll:导入表导入了按键记录三件套:

    image-20211017201936519

    导出了一个函数:zzz69806582,

    字符串特别的有:

    image-20211017201750008

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

    看起来是把自己的dll复制到了system32目录下,改名为inet_epar32.dll,修改了cisvc程序,然后通过cmd执行了命令:cmd.exe /c net start cisvc启动了一个服务

    image-20211017202441998

  3. exe如何安装dll使其长期驻留?

    通过修改服务文件cisvc.exe实现驻留,除了去读反汇编分析改了哪些内容,还可以通过对比二进制文件来了解:

    image-20211017205007362

    OEP被修改了,然后下面删掉了大堆0,又添加了一堆数据:

    image-20211017205136814

    这里有两个字符串,分别是dll路径和它的导出函数,大概率这里是加载这个导出函数来运行,拖入OD便运行便配合IDA进行分析,功能和推断一致:

    image-20211017211312844

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

    cisvc.exe文件

  5. dll做了什么?

    创建了一个线程:

    image-20211017211415332

    线程函数首先判断互斥量:

    image-20211017211523296

    然后接下来创建了一个文件,进入了一个函数,这个函数的功能就是按键记录器

    image-20211017211601822

  6. 这个恶意代码将收集到的信息存到了哪里?

    都存到了C:\Windows\System32\kernel64x.dll,随便按几下查看该文件,emmm,挺看不懂的:

    image-20211017212002186

总结

本章见识了WindowsXP的MSGina.dll是怎么工作的,特洛伊木马写shellcode、inlinehook,注册表等存活机制,按键记录器行为

rootkit其实没那么神秘,好像也就那么一回事

感觉啊,恶意代码的重点在于如何持久化存活,而功能就是后面的事情了


评论