某诈骗案件中发现的.Net木马动静态分析思路与方法

2024-07-24 176 0

背景

当今诈骗案件中,Windows系统环境下的远控软件是主要的“作案工具”,从魔改的Teamview到木马程序,诈骗人员也不断在进化“技术能力”。近期在对涉案木马程序进行分析时,注意到.Net架构木马程序相对于常规的C++木马而言,其涉案频率呈现出明显的上升趋势。这类木马以C#语言编写,通常使用dnSpy、ILSpy等工具进行逆向分析,其分析方法和思路与C++木马有所不同。

以近期一诈骗案中的.Net架构木马为例进行分析,笔者发现该木马具备多种恶意功能,包括但不限于监控用户屏幕、记录用户按键、实现远程控制等,并针对其shellcode释放以及远程连接C&C服务器的功能逻辑进行了深入逆向分析。本文以该案例为研究对象,介绍动态分析和静态逆向分析两种方法,查找其远程连接地址,并对木马具体功能的实现逻辑进行分析。

一、木马动态分析

1. 取证环境

测试电脑系统:Win10_64bit_19045

木马取证分析工具:火绒剑、StudyPE、dnSpy

使用火绒剑加载检材木马程序文件后,获取基本信息如下图所示:

2. 文件相关行为

启动木马时,首先关注该程序是否有文件创建,修改和删除等行为,这些行为意味着木马程序可能会释放出所携带的shellcode进行远控操作,抑或是将自身复制到敏感目录下并修改其文件名为系统常见组件项,从而在受害者主机内达成持续化的操作。检查发现该木马能够复制自身到C:\Users\admin\AppData\Local目录下,复制程序和原始程序的MD5值相同且并未改变文件名称。

完成复制行为后,该木马执行\Local目录下的复制程序,并终止掉其原始进程(原始程序仍然保留并未删除)。

3. 木马远联地址

搜寻木马在运行时尝试远程连接的攻击者C&C服务器的IP地址,是在动态分析中最重要的一步,如果木马程序并未在启动时释放DLL库文件等shellcode,那它很有可能是先通过连接远程服务器,然后再下载shellcode以规避杀毒软件并开展下一步攻击行为。本文中,上一步中复制的木马程序尝试与IP地址27.*.*.137的6606端口进行TCP协议通讯,本次分析时已无法与对方建立连接。

使用火绒剑可以直观的发现木马程序尝试连接的IP地址,但这并不意味着C&C服务器一定就是在这个IP地址上,木马程序内可能编码的是一个下载服务器的IP地址,木马连接该服务器下载shellcode,或者程序内编码的是攻击者网站域名,如果存在CDN时极可能捕获到的仅是CDN服务器IP地址。这就需要对木马进一步逆向分析,在内部找到远联地址的调用方法,从而获取并佐证真正的IP地址线索,如下图所示。

4. 木马持久化操作

攻击者为了使木马在受害者主机上实现持续化运行,一般会在注册表,计划任务,服务中注册自启动项。本文中该木马远联IP地址已无法连接,在注册表,计划任务,服务中也暂未发现木马有持久化行为,重新启动测试机后也未发现有木马进程运行,可以初步判断该木马在此阶段中并未创建自启项,因此推断木马在连接CC服务器后,攻击者远程连接木马进行持久化行为。在对其他木马分析时,常见的自启动项位置也需要检查是否有存在恶意项目,包括如下范围:

  • 注册表(使用regedit.exe检查):

1. HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run

2. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

3. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runonce

  • 计划任务(使用计算机管理工具检查):

右键【开始】> 【计算机管理】 > 【系统工具】 > 【任务计划程序】 > 【任务计划程序库】,一般木         马程序创建的计划任务项都在该目录下,触发器设置为“当任何用户登录时”

  • 服务项(使用services.msc检查):

单击【开始】>【运行】,输入services.msc,注意服务状态和启动类型,检查是否有异常服务。

二、木马静态逆向分析

动态分析主要是对木马程序进行一个活动状态的认知,分析它实现的文件操作,远程连接的IP地址。而静态逆向分析则是对木马内部运行逻辑进行分析,与动态分析中获得的线索相印证,保证线索的准确性。本节主要介绍对本次检验中的木马进行静态逆向分析并复现其功能,探查其远联IP地址的调用逻辑。

1. 定位木马功能函数

使用StudyPE可发现该木马为.net架构,然后使用dnSpy打开该木马程序。

进入入口点,分析主函数发现该程序首先睡眠了4次3333毫秒,再进入MyMain方法。

MyMain方法负责获取当前用户的AppData\Local路径,并判断该路径下是否存在与木马文件名相同的程序,如果存在则跳入_MEP方法(真正功能方法所在处),如果不存在,则进入Start方法复制一个相同文件。

功能函数1:获取程序所需DLL并注入到目标地址

_MEP函数内主要调用了两个方法DL_And_P_RTK()和Program._R();,

首先分析DL_And_P_RTK(),该函数继续跳转到_RTK_Adv方法,调用Nw_ET_P方法和_____方法,如下图中箭头标注所示。

Nw_ET_P方法根据操作系统选择不同的加密字符串,然后加载指定的DLL库和获取函数地址,然后便将解密得到的字节数据注入到目标地址。

_____方法跟上述方法功能类似,通过解密unicode字符串获取需要使用的DLL库和函数地址、然后尝试将字节数据注入到目标地址处。

继续分析unicode字符串的解密逻辑,字符串主要由"ф"和"й"两个unicode字符组成,根据上图中的代码:Replace("ф", "0").Replace("й", "1")可知,其字符串即为一个01的二进制字节流,继续分析解码方法_B可得,其主要功能为将传入的二进制字符串转换为字节,再将字节转换为对应的ASCII字符串。

编写对应的python脚本,对字符串

“фййфййфффййфййфффййффйффффйфйййффййфйффйфйййффййфййфййфйфййффффй”进行解密,解密结果为字符串“lld.isma”,即小端读取的“amsi.dll”。在网上搜索该DLL相关信息得,其为Windows为反病毒软件开放的一个接口,可用于扫描文件,内存或其他数据流,猜测该木马将Shellcode注入到该DLL中运行,绕过反病毒软件的安全机制。

功能函数2:对硬编码数据进行解密,释放Shellcode

获取到上述DLL并注入其目标地址后,_MEP方法接下来对硬编码数据Program.RT(实质为加密并压缩后的Shellcode)进行一系列操作:首先使用ST方法对其进行解密,接着使用_Dec方法解压其解密数据,并将解压后的文件传递给_R方法,在_R方法内定义了对解压文件的调用方式(定位其入口点并进入)。

ST函数内主要使用KEY值对字节数组数据进行循环异或解密,实现功能为:将字节数组内的每一个字节与密钥数组中对应的字节进行异或,并将异或结果减去字节数组中的下一个字节(减法结果可能出现负值,该方法接着对结果进行加256并取256的模,保证数值相同且不会出现负数),从而完成解密。

_Dec方法主要对解密后的数据(lzma压缩包格式数据流)解压缩为原始的字节数据,并未对数据进行其他修改操作。

功能函数2复现

在本地编写C#脚本复现功能函数2,调用ST方法使用Key值解密RT字节数组。

解密结果如下所示,将该文件后缀名改为.lzma后打开并解压,里面的文件为MZ头,即PE文件DOS头,解密成功。

1. 分析释放的PE文件,定位远联IP地址

使用StudyPE可发现该PE文件也是.net架构,使用dnSpy打开该PE文件。

打开后发现其项目名为Orcus,网络查询可得其可能隶属于远控木马Orcus家族。

本次分析中主要定位其远联IP地址,因此主要寻找Connect,IPaddress等关联信息,该PE文件中的各个命名空间的命名方法较为直观且未做混淆操作,可以根据名字大致猜测各个命名空间负责的功能。

根据这一特点寻找Connect关键词,即网络连接相关的命名空间,最后发现得Orcus,Connection命名空间,里面存在Client,ServerConnection这几个类,高度怀疑与远联IP地址相关,对其进行检查。

检查得,Client类下的Connect()方法与尝试连接到服务器构建TCP连接相关,首先其通过通过Settings.GetBuilderProperty<ConnectionBuilderProperty>().IpAddresses获取服务器IP地址,接着其尝试连接服务器,在while循环内其完成了检查客户端插件是否可以加载,尝试建立到服务器的SSL连接。如果连接成功,就进入初始化和认证流程。

可以发现其远联服务器IP地址是通过Settings类下的GetBuilderProperty方法进行获取的,检查此方法发现,其主要功能为管理和获取Settings集合中不同的属性实例。

通过该方法可以猜测服务器远联IP地址即存在Settings集合内,继续寻找调用该集合的方式。最后发现得其存在于该类的Settings方法内,其主要功能是从加密的设置中解密数据流(GetDecryptedSettings方法),加载并反序列化应用程序的配置数据。

定位GetDecryptedSettings方法的实现代码即可获取到其是AES加解密操作,根据AES.Decrypt的实现方式,即可对其进行解密,但是寻找后发现代码内并未存在AES类,猜测其可能在其他外部DLL内,或是在硬编码在代码其他区域。我们需要知道AES类的实现形式,才能知晓该AES是什么加密模式,是否需要IV去进行解密。

2. 远联IP地址解密

既然是网络上较为出名的木马家族,猜测网上会存在该木马服务端的代码,说不定能找到这个AES类的实现代码。在网络上搜索Orcus后发现Github上存在其1.9.1版本的源代码,搜索AES.Decrypt后得到其实现代码在AES.cs中,复制其函数,在本地实现其解密(AES-CBC解密算法,密钥大小为256,初始iv为0sjufcjbsoyzube6的ASCII编码,key就是GetDecryptedSettings方法里的SettingsData.SIGNATURE参数)。

不知道这个服务端版本能不能对应上本次案件内出现的木马,尝试一下。调用AES类对密文进行解密,Bingo!得到解密后的数据为XML格式数据。

在该XML中发现了远联IP地址和端口号:27.*.*.137:6606,与动态分析中的远联IP地址对应,复现成功。

在网上寻找源码这一方法在分析市面中流行的木马家族时较为有效,但有些木马程序可能是攻击者对这些木马的魔改,抑或是自己编写的木马程序,则需要分析人员自己去查找实现功能的所在之处,以本次实验中orcus的配置文件加密逻辑为例,寻找其真正使用到的加密逻辑文件。

根据上文分析可得知,解密该配置文件的方法定义在Settings类中,检查该类所使用到的命令空间时,发现其中存在一Orcus.Shared.Encryption命名空间,可能与加解密相关,最后在程序所使用的资源中,发现了有costura.orcus.shared.dll.zip该文件,怀疑就是调用的shared库文件。

将此zip文件保存到本地,尝试使用bandzip解压打开发现文件报错,无法打开,使用Winhex检查该文件发现其也并不是正常的zip压缩文件头,返回到木马程序中查找其调用方法。

其文件名开头为costura,而程序内也存在该命名空间,猜测可能就是在此命名空间中定义了对其的调用方式,具体检查后可得Costura的AssemblyLoader类中定义了对此类.zip结尾文件的解压缩方法:判断文件名是否以".zip"结尾,如果是,则表示该资源文件是一个压缩文件,将其传入DeflateStream中进行解压缩,并将其返回作为方法的结果。

此文件并不是真正的zip格式压缩文件,而是调用.NET Framework中DEFLATE压缩算法压缩后的文件,可以使用Cyberchef在线网站对其解压缩,解压缩结果如下图所示。观察解压后的文件流可得知,其为MZ头起始,判断为PE文件,也就是该DLL文件本身。

保存该DLL文件后,在dnSpy中打开检查可发现AES解密类,其中的AES加密实现方式和网上寻找到的加密源码类似。

结论

PE木马分析是一个漫长的过程,需要取证分析人员对木马程序抽丝剥茧,在代码中找到真正的功能运行逻辑,本文中以动态分析为辅,静态逆向分析为主,对一个.NET架构的木马进行了深入分析,在本文撰稿期间,笔者也在网上找到了可用的Orcus木马服务端,并将本文中木马释放的Orcus客户端调整配置文件后,实现了上线。在网络技术不断发展过程中,各类木马文件所使用的加壳,混淆,抗逆向等对抗技术等层出不穷,分析人员需要不断提高技术能力,搜寻可用线索以充分打击违法犯罪势力。


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

电力企业 | 安全建设框架
HTB-Infiltrator:一文带你走进域渗透
JAVA安全 | Classloader:理解与利用一篇就够了
多角度揭秘威胁行为组织CryptoCore复杂的加密货币欺诈活动
网络空间的“边水往事”?针对华语黑产及用户进行攻击的 APT-K-UN3 活动分析
伪装“黑神话悟空修改器”传播木马的活动分析

发布评论