内容简介:本文分析一个远程控制木马,它的众多恶意行为之一是操作注册表,实现开机自启动,在注册表中程序为自己命名为Kris。样本类型:PE32 executable (GUI) Intel 80386, for MS Windows, UPX compressed在国内某款知名沙箱系统中对恶意程序做自动分析,归纳出的执行流程如下:
前言
本文分析一个远程控制木马,它的众多恶意行为之一是操作注册表,实现开机自启动,在注册表中程序为自己命名为Kris。
一、基本情况
样本类型:PE32 executable (GUI) Intel 80386, for MS Windows, UPX compressed
1.1 程序基本流程
在国内某款知名沙箱系统中对恶意程序做自动分析,归纳出的执行流程如下:
图1:程序的执行流程
自动分析的结果,归纳出此恶意程序有如下行为:
1.连接域名jesso.3322.org(59.42.71.178,广东省广州市白云区)
2.释放名为BJ.exe的可执行程序
3.创建进程,此进程会创建互斥体,并且连接动态域名
1.2 加壳信息
通过PEiD检查出该病毒被加壳,可以使用upx脱壳。本文后面分析的是利用upx对原程序脱壳后的PE文件。
图2:通过PEiD检测恶意程序的加壳情况
1.3 注册表操作
恶意程序会创建HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Kris,键值为C:\Users\vbccsb\AppData\Local\Temp\sample.exe,此文件为原程序将自身拷贝到这个目录下,用于来实现开机自启动。
恶意程序还会检查注册表中是否有360safe,来判断宿主机器中是否安装了杀毒软件。
二、网络行为
运行恶意程序,并用wireshark抓包,发现恶意程序会发起针对jesso.3322.org的DNS查询:
图3:恶意代码的网络行为
但是后续没有实质性的网络通信,经查,此IP地址仍旧存活但是域名已经失效:
图4:与C2地址的网络通信
根据国内知名安全厂商的威胁情报显示,域名和IP地址都是恶意的。
图5:域名的威胁情报
图6:IP地址的威胁情报
三、程序分析
3.1 Main函数分析
程序的Main函数位于0x0040D990,首先会通过sub_47866C函数创建BJ.exe文件,随后调用sub_40D950函数延时60秒执行此文件。
图7:创建BJ.exe并延时60s执行
程序会通过注册表查看系统中是否安装了360安全软件,如果没有安装,那么就调用sub_40D630函数,此函数用于实现开机自启动。
图8:通过注册表检查目标系统中的360防护软件
通过sub_40D630函数通过注册表项“SOFTWARE\Microsoft\Windows\CurrentVersion\Run”实现开机自启动。
图9:通过注册表实现开机自启动
Main函数会连接远程网址jesso.3322.org,通过sub_403300函数发起连接。
图10:连接域名jesso.3322.org
3.2 Switch函数分析
恶意代码中的函数sub_40A050通过switch结构,实现了不同的恶意行为分支,即根据得到的指令,执行不同的操作。概述如下:
sub_409C00:创建新用户并添加到管理员组 sub_408070:提升进程权限 sub_4073E0:窃取系统磁盘信息并发送给远程主机 sub_4075A0:窃取桌面信息并发送给远程主机 sub_407760:窃取音频设备信息并发送给远程主机 sub_407920:击键记录器 sub_409320:关闭防火墙 sub_407F80:删除日志文件
3.2.1 创建新用户并添加到管理员组
sub_409C00函数实现创建新用户并添加到管理员组的功能:
图11:用于添加用户并添加到管理员组的switch分支
通过调用函数NetUserAdd添加用户账户,随后调用NetLocalGroupAddMember函数,将新建的用户添加到管理员组。
图12:sub_409C00函数实现添加用户并添加到管理员组的功能片段
3.2.2 提升权限
sub_408070实现提升进程权限的功能:
图13:用于实现提升权限的switch分支
通过OpenProcessToken得到进程的令牌句柄,随后使用LookupPrivilegeValue查询进程权限,最后用AdjustTokenPrivileges函数提升权限。
图14:sub_408070函数用于提升进程权限的功能片段
3.2.3 获取驱动器和磁盘卷信息并发送给远端主机
sub_4073E0函数用于获取磁盘以及驱动器的信息并发送给远端系统。它最终通过sub_405AC0来实现获取磁盘信息的功能,通过sub_403300用来实现连接远程主机并发送信息的功能。
图15:用于实现获取磁盘信息并发送给远程主机的switch分支
sub_405AC0函数通过调用GetVolumeInformation获取磁盘卷信息,同时通过SHGetFileInfo函数获取文件系统对象的信息。
图16:sub_405AC0函数用来获得磁盘信息
sub_403300函数通过一系列套接字函数实现网络通信,将窃取的信息发送给远程主机
图17:sub_403300函数用来与远程主机通信
3.2.4 获取桌面信息并发送给远端主机
sub_4075A0通过调用sub_40F780函数实现截屏功能,发送给远端主机的功能仍然是通过sub_403300函数实现的,与3.2.3中相同。
图18:用于实现获取桌面信息并发送给远端主机功能的switch分支
sub_40F780函数通过调用GetThreadDesktop得到桌面窗口所在线程,然后调用GetUserObjectInformation获取特殊的窗口站和桌面对象信息。
图19:sub_40F780函数实现获取桌面信息的功能
3.2.5 窃取音频设备信息并发送给远端主机
sub_407760函数通过sub_401760函数窃取音频设备信息并通过sub_403300函数来实现连接远程主机并发送的功能,sub_403300在上面已经提到了。
图20:用于实现窃取音频设备信息的switch分支
通过调用waveInGetNumDevs获得就绪的波形声音输入设备的数量:
图21:sub_401760函数获得系统中波形声音输入设备的数量
3.2.6 击键记录器
sub_407920函数会调用sub_40A580函数实现击键记录功能,并且调用sub_403300函数向远程主机发送信息:
图22:用于实现击键记录器的switch分支
sub_40A580函数调用GetKeyState, GetAsyncKeyState, GetKeyState三个函数实现击键记录的功能。
图23:sub_40A580函数实现击键记录功能
3.2.7 关闭防火墙
sub_409320函数通过sub_409240函数实现关闭防火墙的操作:
图24:用于实现关闭防火墙功能的switch分支
sub_409240函数构造”cmd /c net stop sharedaccess”指令,实现关闭Internet连接共享和防火墙服务的功能:
图25:sub_409240函数实现关闭防火墙的功能
3.2.8 删除日志文件
恶意代码通过sub_407F80函数实现删除日志文件的功能:
图26:用于实现删除日志文件功能的switch分支
程序首先通过OpenEventLog函数打开日志文件,如果成功打开,就调用ClearEventLog函数清除日志文件中的内容,最后通过CloseEventLog函数关闭日志文件。
图27:sub_407F80函数实现删除日志的功能
四、总结
此样本是一个简单的远控木马,通过访问C2服务器获取指令,然后根据Switch分支操作执行诸如: 创建新用户并添加到管理员组、 提升进程权限、 窃取系统磁盘信息并发送给远程主机、 窃取桌面信息并发送给远程主机、 窃取音频设备信息并发送给远程主机、 击键记录器、 关闭防火墙、 删除日志文件等危险的操作。程序本身还会有拷贝自身、延时执行、查询系统中是否安装安全软件的操作,并以此来确保自身的安全,同时还会通过修改注册表实现开机自启动。
*本文作者:navyofficer,转载请注明来自FreeBuf.COM
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Trading and Exchanges
Larry Harris / Oxford University Press, USA / 2002-10-24 / USD 95.00
This book is about trading, the people who trade securities and contracts, the marketplaces where they trade, and the rules that govern it. Readers will learn about investors, brokers, dealers, arbit......一起来看看 《Trading and Exchanges》 这本书的介绍吧!