FIN7 APT组织有趣的另类样本

  • A+
所属分类:安全新闻
FIN7 APT组织有趣的另类样本

背景



在日常样本狩猎中我们发现了一则比较有意思的FIN7 APT组织的攻击样本,该样本在被分析人员发现后依旧能够在VT上保持较高的免杀率,故分析下该样本的逃逸手法.





样本

分析



第一部分载荷


由于只狩猎到了第一部分的载荷以及后续模块,故该样本的初始投递触发尚不清楚.


该模块下文简称”Load1”,该Load1模块为PowerShell的执行脚本.


FIN7 APT组织有趣的另类样本


该Load1首先定义了变量body用于存放加密的后续脚本模块.


FIN7 APT组织有趣的另类样本


随后调用GetTempFileName随机生成的文件名称,并拼接.ps1的后缀成为完整的文件名.(这句代码后续并没有什么作用,推测是做测试时留下的.)


FIN7 APT组织有趣的另类样本


FIN7 APT组织有趣的另类样本


调用FromBase64String将body中的编码字符进行解密.


FIN7 APT组织有趣的另类样本


解码结果看是乱码.后续可能还有其它操作.


FIN7 APT组织有趣的另类样本


FIN7 APT组织有趣的另类样本


接着通过DeflateStream对象将之前解码的数据进行解压缩,解压的缓冲区大小为59538并且该命令将不会返回任何内容.


FIN7 APT组织有趣的另类样本


将解压后的数据,使用GetString转换成为文本类型(可以看出是一个PowerShell的脚本),并调用IEX进行执行.


FIN7 APT组织有趣的另类样本


FIN7 APT组织有趣的另类样本



第二部分载荷


第二部分的载荷有着大量的混淆.


FIN7 APT组织有趣的另类样本


我们都知道PowerShell在怎么混淆最终都要变成能够执行的命令,也是是说解混淆的关键就在于如何在执行恶意功能前将解混淆的脚本Dump出来.


首先大致看一下混淆逻辑,通过Set-StrictMode, 将脚本设置为强制执行表达式、脚本和脚本块中的编码规则.


随后执行AaPr函数


FIN7 APT组织有趣的另类样本


调用zedEnb函数


FIN7 APT组织有趣的另类样本


调用innM函数


FIN7 APT组织有趣的另类样本


调用PMds函数


FIN7 APT组织有趣的另类样本


调用LoqvPF函数,Param是对输入的参数的数据类型进行绑定, 一旦脚本缺少参数,或者输入的参数类型不正确,就提醒用户.


该函数内部实际上就是将传入的字符进行重新拼接排序,也就是通过多个函数进行混淆.这个混淆思路与以往的还是有所不同的,通过大量函数进行混淆使得整个脚本充斥着大量的变量和函数.


FIN7 APT组织有趣的另类样本


随后输出了字符串9Sv7i82j+


FIN7 APT组织有趣的另类样本


其它的函数都是类似的混淆规则只是位置不同,将PMDS函数执行完成后,返回了如下字符串.


FIN7 APT组织有趣的另类样本


中间多次混淆规则类似,因为篇幅限制就不贴图了,执行完成上述后,Cbnli变量中就是解混淆后的数据.


FIN7 APT组织有趣的另类样本


解混淆的数据如下,可以看出是被Base64编码的数据.

FIN7 APT组织有趣的另类样本


接着通过FromBase64String进行解码.


FIN7 APT组织有趣的另类样本


接着获得DeflateStream对象,用于解压缩和第一阶段的脚本一样.


FIN7 APT组织有趣的另类样本


可以看到dLWDg函数内部是申请缓冲区.


FIN7 APT组织有趣的另类样本


VHAvub函数和第一阶段的脚本一样,通过调用DeflateStream对象将被Base64解码后的数据进行解压缩.


FIN7 APT组织有趣的另类样本


最后调用Dpsi.


FIN7 APT组织有趣的另类样本


FIN7 APT组织有趣的另类样本


Dpsi中还有混淆代码,这里我提取删减了一些,其实是个Load.


FIN7 APT组织有趣的另类样本


首先看下Allocate,这里一看就是动态获得VirtualAlloc


FIN7 APT组织有趣的另类样本


Call_method内部


FIN7 APT组织有趣的另类样本


首先获取System对象,通过System对象的GetType方法获得Microsoft.Win32.UnsafeNativeMethods对象.


FIN7 APT组织有趣的另类样本


通过Microsoft.Win32.UnsafeNativeMethods对象的GetMethod方法,动态获得GetProcAddress和GetModuleHandle的API地址.


FIN7 APT组织有趣的另类样本


通过GetModuleHandle获得传入字符串kernel32.dll的句柄,随后通过GetProcAddress获得VirtualAlloc的函数对象并返回.


FIN7 APT组织有趣的另类样本


接着通过Alloc_conf方法将获得的委托类型.


FIN7 APT组织有趣的另类样本


最后通过GetDelegateForFunctionPointer方法将非托管函数指针转换为委托.( VirtualAlloc)


FIN7 APT组织有趣的另类样本


调用VirtualAlloc申请内存地址.


FIN7 APT组织有趣的另类样本


获取CreateThread的委托对象.


FIN7 APT组织有趣的另类样本


调用CreateThread,创建线程执行解密的数据.


FIN7 APT组织有趣的另类样本


获取WaitForSingleObject的委托对象.


FIN7 APT组织有趣的另类样本


调用WaitForSingleObject,等待线程返回.


FIN7 APT组织有趣的另类样本



第三部分载荷


被解码的数据是一个x64位的DLL,该DLL导出了Reflective


Loader方法和DLLMain方法.


FIN7 APT组织有趣的另类样本


DLLMain方法里,核心功能主要是和C2服务器通讯,得到返回数据后,创建线程执行.


FIN7 APT组织有趣的另类样本


首先收集用户信息和网卡信息


FIN7 APT组织有趣的另类样本


连接C2服务器195.123.227.40,发送窃取的用户信息并接收服务器发送的数据.


FIN7 APT组织有趣的另类样本


通过CreateThread创建线程,执行远程下载的数据.


FIN7 APT组织有趣的另类样本


ReflectiveLoader方法是反射加载DLL.


FIN7 APT组织有趣的另类样本


总结


该组织在Powershell脚本方面,还是有一些建树的,第二阶段脚本的混淆方式与以往有很大的不同,主要通过函数拼接字符串进行混淆,该方式目前在VT上是100%免杀,第一阶段的脚本被上传后依旧只有7家杀软能够查杀,另外该样本也使用了多层套娃的模式,看来未来的脚本免杀路线应该会以无文件+套娃+混淆+多类型混合(脚本,可执行文件等)的形式出现.


FIN7 APT组织有趣的另类样本


FIN7 APT组织有趣的另类样本





IOCFIN7 APT组织有趣的另类样本


1.06141d0448ff590910615a2642cad8f96c9ff76bb3b4ce53c5f079b6e903df46

Layer1.bin


2.003645e2686bf863585f95532e847dfe8f3b791c5b36f1a02ea2060f97b12125

PUAWin32Vigua.A.dll





FIN7 APT组织有趣的另类样本

FIN7 APT组织有趣的另类样本

木星安全实验室(MxLab),由中国网安·广州三零卫士成立,汇聚国内多名安全专家和反间谍专家组建而成,深耕工控安全、IoT安全、红队评估、反间谍、数据保护、APT分析等高级安全领域,木星安全实验室坚持在反间谍和业务安全的领域进行探索和研究。



本文始发于微信公众号(木星安全实验室):FIN7 APT组织有趣的另类样本

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: