恶意代码分析-第十一章-恶意代码行为

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37809075/article/details/81562878

目录

 

笔记

实验

Lab11-1

Lab11-2

Lab11-3


笔记

下载器:从网上下载代码,在本地运行,通常会用到URLDownLoadtoFileA和WinExec进行下载和运行恶意代码

启动器:一类可执行文件,用来安装运行的

后门:让攻击者通过远程访问来控制计算机的恶意代码,常用的方法是借助80端口的HTTP协议进行通信。

反向shell:从感染机器上发起一个连接给攻击者,

                 通过CreateProcess的STARTUPINFO的结构来创建套接字并与远程服务器连接。并绑定套接字与cmd.exe标准流。还可以利用隐藏窗口的模式来创建cmd程序。

      多线程:涉及一个套接字,两个管道及两个线程的创建。(CreateThread,CreatePipe)CreatePipe绑定一个管道的读写端。CreateThread用来绑定一个管道与标准流

远程控制工具:远程管理一台或多台计算机。

僵尸网络:是被感染主机的一个集合。由一个称为僵尸控制器的机器作为服务器。目标是尽可能多的感染机器,构建一个更大的僵尸网络,来达到传播其他恶意代码或蠕虫或执行分布式拒绝服务攻击(所以僵尸机同时访问同一个站点)。

登录凭证窃密器:窃取一台主机上的登录凭证(窃取登录凭证的程序,转储存放信息的程序,击键记录程序)

                            GINA拦截:伪造一个类似于msgina.dll功能的dll,将其放在winlogon.exe和msginall.dll中间,实现中间人攻击。

                          口令hash转储:1.pwdump->注入dll到lsass.exe程序,调用lsaext.dll的Gethash函数来执行口令的提取。在标准的pwdump中的导出函数是GrabHash。但这个函数名会被轻易改变,所以我们要关注与这个导出函数的提取hash的过程,因为要动态解析一些API函数,所以这个函数会首先调用多次GetProAddress。其中samsrv.dll可以访问SAM,这个里面的SamIGetPrivateData函数用来提取哈希,SystemFunction025用来解密hash。

                                                  2.PSH工具->whosthere-alt注入一个DLl到lsass.exe来转储SAM。导出的函数是Testdump的函数。这个导出函数会调用secur32.dll的LsaEnumeraLogonSessions函数获取代码清单,再利用GetmoduleHandle。。。。。

                            击键记录:SetWindowsHookEx挂钩击键记录器

                                              GetAsynKeyState来识别一个按键是被按下还是弹起

                                              GetForegroundWindow对应于当前操作的端口,告诉击键器哪个应用程序正在执行输入

                                   可能出现的字符串:Up/Num Lock/Down/Right/Left/PageDown

存活机制:

Sysinternals帮助找出所有的自启程序

Applnit_DLL->存储在HLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost (user32加载时加载)

                       值:REG_SZ

Winlogon Notify->HLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

                       值:Notify

                       挂钩一个特殊的Winlogon事件,甚至可以在安全模式下运行。

SvcHost DLL->HLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost 服务组被定义的位置

                        HLM\SOFTWARE\System\CurrentControlSet\Services\ServiceName   服务定义

                     (值:DisplayName,Description,ImagePath包含服务可执行文件的位置,ServiceDll->Parameters(位置)->start(启动时间))

特洛伊木马化:修改系统二进制文件(修改一个系统文件的函数入口,使他跳转到恶意代码),当被感染的二进制文件下次运行或者加载时,将会强制运行恶意代码。

DLL加载顺序劫持:因为WIndows上的Dll加载有一个默认的规则,就是先在主程序目录下查找B.dll,如果没有就在系统路径下找,如果还没有,就去环境变量路径里找。下面两个链接关于DLL劫持有着更好的叙述。

                                https://blog.csdn.net/u013761036/article/details/52268500

                                https://www.cnblogs.com/wayuzhi/p/4152516.html

提权:

利用本地系统已知漏洞和0day漏洞->Metasploit Framework->http://www.metasploit.com

DLL顺序劫持->通过写操作加载到高权集上运行

使用SeDebugPrivilege

                                  访问令牌->一个包含进程安全描述符的对象

                                                                                   |

                                                                           指定拥有者的访问权限(可以通过AdjustTokenPrivilege来调整访问令牌)

                                  调用函数组合:OpenProcessToken,LookupPrivilegeValueA,LUID结构,AdjustTokenPrivileges

隐藏踪迹:

通过用户态的Rootkit隐藏它的生存机制和运行的进程

IAT Hook->修改函数指针,改变执行流

lnline Hook->修改函数的实际代码

                     照样放上链接https://blog.csdn.net/hpp24/article/details/52511509,越来越感觉后面写的生涩难懂。

实验

Lab11-1

静态分析call sub_401080

FindResourceA:在可执行文件和装载的DLL文件中寻找资源

LoadResource:从PE文件中装载资源到内存中

LockResource:锁定资源并得到资源在内存中的第一个字节的指针

 

SizeofResource:表示该函数返回指定资源的字节数大小

https://blog.csdn.net/qq1841370452/article/details/54859528

对资源段中进行了一系列操作

 分配指定的内存大小,创建一个msgina32.dll文件,将指定资源段的东西写入。

在PE查看器中打开,看到资源段的TGAD处是一个内嵌的PE文件,有可能是恶意的。

               call sub_401000

恶意代码插入msgina32.dll的路径到注册表CurrentVersion\winlogon\GinaDLL中 ,当系统重启时,WinLogon会加载这个DLL

动态分析:

 在c目录下创建了msgina32.dll文件,并设置了GINA注册表的值。

分析msgina32.dll:

 存在大部分以Wl开头的导出函数,初步判断是GINA拦截恶意代码

加载真正的msgina,因为恶意代码介于Winlogon.exe与msgina.dll中间,必须要兼顾msgina.dll中的函数,所以获取MSGina句柄。

分析WlxLoggendOnSAS导出函数,调用sub_10001000,传入函数名,MSGina句柄从而获取到真正WlxLoggendOnSAS的函数地址。

分析WlxLoggendOutSAS导出函数,进入sub_10001570,打开msutil32.sys文件来记录登录的时间,日期,凭证信息。

Lab11-2

静态分析:

根据AppInit DLLs知道恶意代码使用AppInit_DLLs来永久安装自身。sendwsock32.dll表明可能有网络操作。OUTLOOK.exeMSIMN.EXETHEBAT.EXE是邮件客户端。RCPT是一个SMTP命令,创建一个电子邮件的收件人

这个dll的导出函数installer的作用是将本身拷贝一份命名为spoolvxx32.dll到系统目录,并将设置为一个APPInit_DLLs的值。从而一旦user32.dll调用,这个dll就会跟随调用。

下面来分析DLLMain:

所有的DllMain函数开始都会核验DLL_PROCESS_ATTACH(1值)。如果不是1值,会直接返回。

先利用GetWindowsSystemDirectory获取系统目录, 在使用strncat将其与文件名组成一个绝对路径。打开文件,读取文件内容,最下方的sub_10001003应该就是解密函数。利用od动态调试,得到这个函数处理后的字符串 [email protected]

分析sub_100014B6:

进行进程的比对,是否有与邮件相关的进程

 先来看一下sub_10013BD函数和sub_10001499函数。根据sub_10013BD函数的调用序列表明挂起除当前线程的其他线程。

CreateToolhelp32Snapshot---是对线程建立快照

Thread32First---第一个线程

SuspendThread---挂起线程

重点关注sub_100012A3函数,对send函数进行了挂钩。

分析sub_100012A3:

进去sub_10001203

分析完毕

Lab11-3

静态分析:

根据这两个导出函数,猜测功能是击键记录器。

启动cisvc程序,并且调用了zzz69806582函数。

Lab11-3.exe

将Lab11-03.dll复制到系统目录下,经过sub_401070后,调用cisvc程序。

sub_401070

对cisvc.exe文件的代码段进行了修改,UnmapViewOfFile函数可以对修改后的文件保存,所以这个里面没有writefile函数。说明这个程序的目的是对cisvc.exe进行感染,具体修改了什么,接着往下看,关注代码后半段,如下图

 这里的代码F5进行还原C,可以看出把byte_409030地方的数据复制到了cisvc.exe代码段开始的位置。所以要追溯byte_409030

byte_409030

将这这里的数据转化为代码如下图 

可以看到标准的函数开始时的push语句,然后调转到了loc_409134 

loc_409134 

 这里是最开始复制到系统目录下的dll文件,还有一个它的导出函数。所以有理由猜测,调用了这个函数。关注zzz69806582

zzz69806582

函数的开始位置创建了一个线程,这个线程的代码位置在红框处,跟入

在系统目录下创建了一个文件,在关闭这个文件之前,调用了函数sub_10001380,进入

sub_10001380

进入到这个函数,可以看见标准的击键记录器所需要的函数,由此判定功能是击键记录器,并把记录写入kernel64x.dll文件中

总结:这个.exe程序将具有击键功能的dll程序复制到系统目录,然后感染cisvc.exe系统文件,使其运行时调用恶意dll程序的zzz69806582函数,并记录在系统目录下的kernel64x.dll文件中。静态分析结束。

猜你喜欢

转载自blog.csdn.net/m0_37809075/article/details/81562878