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

news2024/11/13 9:45:36

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文件里面包含一个经过加密的邮件地址,解密之后发现就是一个邮箱 billy@malwareanalysisbook.com。

  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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/178037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享140个ASP源码,总有一款适合您

ASP源码 分享140个ASP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 140个ASP源码下载链接:https://pan.baidu.com/s/1vxAMMEI7WYS8SAnfbJKdGQ?pwdsas8 提取码&#x…

【ARIXV2209】Multi-Scale Attention Network for Single Image Super-Resolution

【ARIXV2209】Multi-Scale Attention Network for Single Image Super-Resolution 代码:https://github.com/icandle/MAN 这是来自南开大学的工作,将多尺度机制与大核注意机制结合,用于图像超分辨率。 2022年初,大核卷积火了&a…

GBD学习

GBD gbd官网 GDB, the GNU Project debugger 是一个debug工具 支持多种语言: Ada、Assembly、C、C、D、Fortran、Go、 Objective-C、OpenCL、Modula-2、Pascal、Rust 编译文件 首先使用gcc -g .c文件 -o 可执行文件名 进行编译,再使用gdb 可执行文件名…

恶意代码分析实战 10 数据加密

10.1 Lab13-01 比较恶意代码中的字符串(字符串命令的输出)与动态分析提供的有用信息,基于这些比较,哪些元素可能被加密? 使用WireShark进行动态分析。 有一串字符看起来像是加密的。 使用Strings分析一下。 发现疑似…

KUKA机器人初次通电配置

安全配置 机器人KSS系统里,会提示选择机器人信息的对话框,选择“机器人”按钮,如下: 承接上一步骤,通过示教器确认所有消息,单击消息提示区域,此时一定会弹出如图 所标示的报警消息&#xff0…

【唐诗学习】一、古诗概述

一、古诗概述 为什么要学习古诗词? 古诗词可以陶冶情操,传承文化诗词,其实就是古代的流行歌曲,它们记录着一个个时代的变迁,是历史的旋律。还有一点很重要:同样是记录历史,史书是国家视角&…

零基础学JavaWeb开发(二十二)之 springmvc入门到精通(2)

3、SpringMVC PostMan工具使用 PostMan简介 Postman 是一款功能超级强大的用于发送 HTTP 请求的 Chrome插件 。做web页面开发和测试的人员会使用到该工具其主要特点 特点: 创建 测试:创建和发送任何的HTTP请求,使用PostMan发送 Get、Post、…

Java IO流之字符流详解

字符流概述 字符流的底层其实就是字节流 字符流 字节流 字符集 字符流特点 输入流:一次读一个字节,遇到中文时,一次读多个字节输出流:底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中 使用场景 用于…

学习Go的全部网站集合

给Golang 入门新手整理了一份全部所需网站集合,主要分为三类。 社区类:这类网站是问答、文档、搜索、资源类网站汇总 镜像和安装包类:有些安装包可能无法下载,此处列出一些可下载Go包和镜像的网站。 开发工具:目前流…

代码随想录--栈与队列章节总结

代码随想录–栈与队列章节总结 1.LeetCode232 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾i…

2.4.2 浮点型

1.浮点型基本数据类型介绍 浮点类型用于表示有小数部分的数值。在JAVA种有俩种浮点类型,分别是float和double. 类型字节长度位数取值范围float4字节32约 3.40282347E38Fdouble8字节64约 1.79769313486231570E308 double表示这种类型的数值精度是float类型的俩倍&a…

PyCharm中运行LeetCode中代码

Leetcode中题目只需要写函数体里面内容即可。不需要关注输入,输出。 这里拿LeetCode中第一题,两数之和 “给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数…

随机梯度下降算法 入门介绍(最通俗易懂)

文章目录1.什么是梯度2.什么是梯度下降算法3.什么是随机梯度下降算法1.什么是梯度 首先给出高数课程中梯度的定义: 如果对上面的定义没有理解也没有关系,用通俗的语言来说,梯度实际上就是一个向量,向量中的各个元素表示多元函数在…

Java IO流之字节流详解

一、OutputStream输出流 FileOutputStream概述: 操作本地文件的字节输出流,可以把程序中的数据写到本地文件中 书写步骤: ① 创建字节输出流对象 细节1:参数一是字符串表示的路径或者File对象都是可以的 细节2:如果文…

《安富莱嵌入式周报》第300期:几百种炫酷灯阵玩法, USB Web网页固件升级,波士顿动力整活,并联二极管问题,VisualStudio升级,STM32C0

往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 祝大家春节快乐! 视频版: https://www.bilibili.com/video/BV1UY4y1d7C7 《安富莱嵌入式周…

(考研湖科大教书匠计算机网络)第二章物理层-第三、四节:传输方式和编码与调制

文章目录一:传输方式(1)串行传输和并行传输(2)同步传输和异步传输(3)单工、半双工和全双工二:编码与调制(1)通信相关基础知识①:消息、数据、信号…

linux实战笔记整理(1.24)

后台挂起程序: 如果报错:nohup: ignoring input and appending output to nohup.out,则在指令最后加一个&让程序自己运行:nohup command增加rm 提醒:(重要的命令问三遍): 操作: …

为tableview添加带控件的单元格如复选框checkbox与combbox单元格

我们常常会有这样的需求,为QTableView增加复选框checkbox和选择下拉框combbox,毕竟依靠键盘输入不是很好约束其规范性。下面我们逐个来介绍。完成之后的效果如下: 一、准备TableView 1、数据准备 数据大家可以随意准备,有的话…

[C语言]柔性数组

目录 1.柔性数组 2.柔性数组的特点 3.柔性数组的使用 1.柔性数组 柔性数组存在于结构体中,当结构体最后一个成员元素为一个未知大小的数组,则称其为柔性数组。 struct s {int a;char arr[];//柔性数组 }; 2.柔性数组的特点 1. 结构中的柔性数…

八、python-高级语法篇(黑马程序猿-python学习记录)

黑马程序猿的python学习视频:https://www.bilibili.com/video/BV1qW4y1a7fU/ 目录 1. 什么是闭包 2. 闭包的优缺点 3. nonlocal关键字的作用 4. 简单闭包 5. 使用nonlocal关键字修改外部函数的值 6. 使用闭包实现ATM小案例 7. 装饰器概念 8. 装饰器的一般写法 9. 装…