本帖最后由 chr 于 2024-6-22 14:14 编辑
原文首发出处: https://xz.aliyun.com/t/14807
先知社区 作者:熊猫正正
群里有人发样本,让分析一下,如下所示: 说是某个工作群里发的,如下所示: 看聊天记录,是某人在工作群发了相关的钓鱼链接,然后@所有人,如下所示: 笔者打开该链接,会自动下载一个EXE程序,如下所示: [color=rgba(0, 0, 0, 0.9)]这种攻击方式大概率是此前使用“银狐”工具的黑产团伙组织之一,笔者对该样本进行详细分析,供大家参考学习。 [color=rgba(0, 0, 0, 0.9)](比较有意思的是笔者在早上下载的样本和晚上下载的样本竟然不一样了,黑产组织人员在不断更新了自己的攻击样本,所以笔者对这两个样本都进行了详细分析,代码执行流程基本相同)
[color=rgba(0, 0, 0, 0.9)]详细分析 [color=rgba(0, 0, 0, 0.9)]样本一 [color=rgba(0, 0, 0, 0.9)]1.样本一的编译时间为2024年6月3日,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]2.从远程服务器上下载加密的数据,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]3.解密加密的数据,然后分配相应的内存空间,存放解密后的ShellCode代码,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]4.从服务器上返回加密的数据,然后解密加密的数据,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]5.解密后的ShellCode代码,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]6.分配相应的内存空间,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]7.将解密后的ShellCode代码拷贝到该内存空间,如下所示: [color=rgba(0, 0, 0, 0.9)]8.最后通过EnumDesktopWindows调用解密后的ShellCode代码,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]9.执行ShellCode代码,获取相关的函数地址,如下所示: [color=rgba(0, 0, 0, 0.9)]10.利用VirtualAlloc分配内存空间,如下所示: [color=rgba(0, 0, 0, 0.9)]11.将解密出来的Payload数据拷贝到分配的内存空间当中,如下所示: [color=rgba(0, 0, 0, 0.9)]12.拷贝完成之后,如下所示: [color=rgba(0, 0, 0, 0.9)]13.Payload编译时间为2024年6月4日,如下所示: [color=rgba(0, 0, 0, 0.9)]14.Payload导出函数与此前“银狐”黑产组织使用的某个变种样本的导出函数名字一样,如下所示: [color=rgba(0, 0, 0, 0.9)]15.跳转执行到解密出来的Payload的入口点代码,如下所示: [color=rgba(0, 0, 0, 0.9)]16.获取C2配置信息,然后将包含C2配置信息的ShellCode代码设置为相应的注册表项,如下所示: [color=rgba(0, 0, 0, 0.9)]17.设置的注册表项,如下所示: [color=rgba(0, 0, 0, 0.9)]18.判断进程是否为管理者权限,如下所示: [color=rgba(0, 0, 0, 0.9)]19.判断是否存在360Tray.exe进程,如果存在,则在相应的目录下生成文件,并设置对应的注册表项,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]20.生成的文件,如下所示: [color=rgba(0, 0, 0, 0.9)]21.设置的注册表项,如下所示: [color=rgba(0, 0, 0, 0.9)]22.遍历是否存在相关进程以及360Tray.exe进程,结束进程,如下所示: [color=rgba(0, 0, 0, 0.9)]23.启动colorcpl.exe进程,然后查询之前包含C2配置信息的注册表项的ShellCode代码,然后将里面ShellCode代码注入到colorcpl.exe进程,如下所示: [color=rgba(0, 0, 0, 0.9)]24.启动colorcpl.exe进程,如下所示: [color=rgba(0, 0, 0, 0.9)]25.获取到注册表中的ShellCode代码,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]26.包含的C2配置信息,如下所示: [color=rgba(0, 0, 0, 0.9)]27.将上面的ShellCode代码注入到进程,然后远程调用执行ShellCode代码,如下所示: [color=rgba(0, 0, 0, 0.9)]样本二 [color=rgba(0, 0, 0, 0.9)]1.样本二的编译时间为2024年6月4日,说明黑产组织在6月4日又更新了样本,替换了2024年6月3日编译的样本一,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]2.样本二母体代码与样本一是一样的,但是远程服务器基础设施IP地址改变了,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]3.下载回来的加密数据解密出来的ShellCode,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]4.跳转执行了解密出来的Payload代码导出函数hanshu入口点,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]5.样本二与样本一代码一样,将ShellCode代码设置为注册表项,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]6.检测360Tray.exe进程,生成的文件与样本一不同,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]7.生成的文件,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]8.如果不存在360Tray.exe进程,则与样本一的代码一样,启动colorcpl.exe进程,然后将注册表中的ShellCode注入到该进程,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]9.然后远程调用执行,与样本一的代码一样,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]ShellCode [color=rgba(0, 0, 0, 0.9)]1.经过对比上面两个样本最终注入到进程中的ShellCode是完全一样的,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]2.调用远程ShellCode,colorcpl.exe进程会暂停在ShellCode代码入口点,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]3.查找ShellCode代码中包含的C2配置信息标记字符串codemark,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]4.分配内存空间,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]5.将C2配置信息中的域名拷贝到分配的内存空间当中,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]6.再次分配内存空间,将C2配置信息中的另外一个域名拷贝到内存空间当中,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]7.获取网络相关函数地址,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]8.与远程服务器通信,返回相关的数据,然后分配内存空间,将返回的数据拷贝到内存空间当中,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]9.从服务器上返回的数据,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]10.将返回的数据拷贝到分配的内存空间当中,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]11.从服务器上分断返回数据,然后将返回的数据全部拷贝到分配的内存空间,最后得到的数据,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]12.将返回的数据解密,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]13.解密后的ShellCode,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]14.跳转执行解密的ShellCode,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]15.ShellCode前半部分代码其实就是一个Load,分配内存空间,然后将解密出来的Payload代码拷贝到该内存空间,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]16.执行解密出来的Payload入口代码,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]17.解密出来的Payload导出函数,与此前分析过的“银狐”黑产团伙使用的某个变种样本一样,整体代码结构也基本一致,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]通过分析,可以确认是此次钓鱼攻击活动与此前“银狐”某黑产团伙使用的攻击样本是同源样本。 [color=rgba(0, 0, 0, 0.9)]18.将C2配置信息作为参数,然后调用Payload的Load导出函数,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]19.按固定格式解析C2配置信息,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]20.解析出C2的域名信息,如下所示: [color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]21.获取主机微信和网银窗口截图信息,如下所示: [color=rgba(0, 0, 0, 0.9)]22.获取窗体信息,如下所示: [color=rgba(0, 0, 0, 0.9)]23.将获取的截图信息,保存在C:\\ProgramData\\AnonymousScreenShot目录下,如下所示: [color=rgba(0, 0, 0, 0.9)]24.截取的图片名字以时间命名,如下所示: [color=rgba(0, 0, 0, 0.9)]25.截屏操作,如下所示: [color=rgba(0, 0, 0, 0.9)]26.最后与远程服务器端持续通信,如下所示: 威胁情报 总结结尾 去年使用“银狐”黑客工具的多个黑产团伙非常活跃,今年这些黑产团伙仍然非常活跃,而且仍然在不断的更新自己的攻击样本,采用各种免杀方式,逃避安全厂商的检测,免杀对抗手法一直在升级。
|