首页
社区
课程
招聘
[原创]银狐后门:Python库压缩包篡改与Chrome伪装攻击分析
发表于: 5小时前 110

[原创]银狐后门:Python库压缩包篡改与Chrome伪装攻击分析

5小时前
110

摘要:本报告分析的银狐后门病毒样本源自卡饭论坛。其原理有趣,该病毒的ShellCode加载逻辑具有典型特征:借助pythonw.exe程序解压并执行库压缩包中.pyc文件的特性,且使用的是官方版本的pythonw.exe,所以全程只有压缩包中 .pyc 文件有明确恶意行为,隐蔽性较强。


关键词:pythonw.exe;银狐后门;Python 标准库压缩包;虚假安装包;Rust;OLLVM 控制流平坦化;


近期,火绒安全工程师在日常安全监测中发现一款伪装为 Chrome 浏览器安装包的银狐后门病毒。该病毒运行后,通过标准库压缩包加载逻辑、加载恶意程序,结合计划任务与自启动项实现持久化驻留,持续威胁用户设备系统安全,存在隐私信息泄露、系统功能被破坏等风险。火绒安全产品可对上述木马进行拦截查杀,可有效保障用户设备安全。

内存查杀图


流程图如下:

流程图


一、样本分析

此样本使用到了多个不同组件与语言,涵盖MSI安装包、Rust程序、Python库压缩包,其核心 ShellCode 利用OLLVM控制流平坦化进行混淆,最终借助内存加载的方式加载银狐Winos后门下载器并进行下载执行。因此,可划分为以下几个阶段,其中RUST阶段与PYTHON阶段分别是运用Rust语言编写程序以及采用Python导入机制的阶段。

阶段任务表


1.1 MSI 阶段(999999.msi)

该999999.msi安装包无签名,且伪装成谷歌浏览器安装包,以此诱导用户进行安装。当用户下载并执行该病毒程序时,会弹出Chrome在线安装界面(此为真实的在线安装界面,其本体为MSI安装包中的Guauausns.exe文件),但实际上真正的病毒程序此时已开始运行,最显著的特征是在任务管理器中可看到gcc.exe程序正在运行。

样本文件属性

谷歌浏览器在线安装界面


其中可以通过Orca程序可以观察到该MSI程序数据库中CustomAction表中有LaunchFile 一行,表示执行viewer.exe_1程序且传入参数/DontWait /RunAsAdmin "[#Gasmealdmylsge.exe]"。


MSI安装包CustomAction表


随后分析viewer.exe_1发现该程序是Advanced Installer软件中的viewer.exe程序,会利用该程序启动Gasmealdmylsge.exe。其中/RunAsAdmin和/DontWait分别代表管理员权限运行Gasmealdmylsge.exe和不等待Gasmealdmylsge.exe运行结束。


viewer.exe不同参数对应行为


1.2 RUST 阶段(Gasmealdmylsge.exe)

该阶段总共做了以下操作:

1. 创建文件夹C:\Users\Administrator\Python、C:\users\Public\Python

2. 解压压缩数据(计划任务设置器)到C:\Users\Administrator\Python,并执行run.exe。

3. 解压压缩数据(自启动设置器)到C:\users\Public\Python,其中会有gcc.exe与App目录下的 gcc.exe。


解压出计划任务设置器与自启动设置器


下图为解压后的文件夹情况:其中计划任务设置器会将gcc.exe设置为计划任务,从而持久驻留于受害者系统中。


计划任务设置器与自启动设置器文件夹中详情


1.3 PYTHON-计划任务设置器(run.exe)

分析发现计划任务设置器文件夹中的Python是3.9.0版本,随后从Python官网下载该版本取出python39.zip文件并与篡改后文件进行比对,发现其中唯一不同的是encodings\__init__.pyc 文件。


python39.zip 对比图


其中run.exe原文件名为pythonw.exe,启动该程序的时候会导入encodings模块,此时会寻找encodings库文件,且按照Python导入逻辑会读取python39.zip压缩包中encodings目录中的__init__.pyc文件并完成初始化,而该文件早已被病毒作者所修改。


该被篡改的__init__.pyc文件反编译后为如下所示,可看出利用ctypes库调用Windows API,将ShellCode 数据放入到可执行内存中,最后利用CreateThread执行该ShellCode,并等待该线程结束。


__init__.pyc 反编译图


该ShellCode经Obfuscator - LLVM工具进行混淆处理,实现控制流平坦化,以此隐匿特征并提升分析难度。此后,其会在自启动设置器阶段与加载银狐后门阶段出现,累计出现三次。


IDA 控制流图


随后利用开源项目angr对部分代码去混淆,其中借鉴文章“利用符号执行去除控制流平坦化”(056K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6k6h3y4#2M7X3W2@1P5g2)9J5k6i4c8W2L8X3y4W2L8Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6A6L8X3c8W2P5q4)9J5k6i4m8Z5M7q4)9J5c8X3u0D9L8$3N6Q4x3V1k6E0M7$3N6Q4x3V1j5I4x3e0u0Q4c8f1k6Q4b7V1y4Q4z5o6W2Q4c8e0c8Q4b7U0S2Q4z5p5f1`. 83eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6U0M7e0j5%4y4o6x3#2x3o6f1J5z5g2)9J5c8X3c8W2k6X3I4S2N6q4!0q4y4g2!0n7b7#2)9^5x3q4!0q4y4W2!0n7b7g2)9&6x3q4!0q4z5g2!0m8x3g2!0n7z5g2!0q4y4#2)9&6b7W2!0m8c8g2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4q4!0n7b7W2!0m8y4g2!0q4y4W2!0m8c8q4!0m8y4q4!0q4y4g2!0n7x3q4)9^5y4W2!0q4y4#2!0m8c8q4)9&6y4W2!0q4y4#2)9&6y4g2!0m8y4g2!0q4y4g2!0m8c8g2)9&6b7g2!0q4y4q4!0n7z5q4!0n7b7g2!0q4z5g2)9^5x3q4)9&6b7g2!0q4z5q4!0n7c8W2)9^5y4#2!0q4z5q4!0n7c8W2)9&6c8g2!0q4y4W2)9^5c8g2!0m8y4g2!0q4y4#2)9&6b7#2)9&6c8W2!0q4y4g2!0m8c8g2)9&6c8g2!0q4y4g2)9&6c8q4)9&6y4#2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4W2)9&6y4W2!0n7z5g2!0q4y4g2!0n7b7#2)9^5c8W2!0q4y4g2)9^5c8g2!0n7b7W2!0q4z5g2)9&6z5g2!0m8y4q4!0q4y4W2)9^5c8g2!0m8y4#2!0q4y4g2)9^5z5q4!0n7y4W2!0q4y4W2!0n7y4g2)9^5x3g2!0q4y4g2!0n7z5g2!0n7x3#2!0q4y4g2)9&6c8q4!0m8y4W2!0q4y4g2)9^5b7#2)9&6y4W2!0q4x3#2)9^5x3q4)9^5x3R3`.`.


文章与开源项目


在该样本中可根据去掉跳转块的方式筛选出真实块,其中观察发现跳转块的特征为以下三种:

cmp/mov + j开头跳转指令

mov ecx/rcx + cmove/cmovz +jmp

mov + cmp + j开头跳转指令并且非jmp指令

跳转块特征


最后,将所有跳转块进行空操作处理(nop),并将真实块进行连接即可。下图展示的是筛选过程的代码。


筛选代码

符号执行过程中因为会涉及call指令,需要Hook该类指令,设置不同返回值,在该样本中设置0或1发现效果不错。


Hook call指令函数


经多次测试发现,首次符号执行采用单纯Hook call指令时,若在真实块处未出现本该出现的分支时,可再次进行符号执行。二次符号执行时,可强行修改IR语句执行行为(此操作已在 deflat项目中应用),进而使符号执行能够抵达更多真实块。


按情况启用第二次符号执行


在执行真实块相连操作时,可通过核查最后一条指令的类别,进而选定打补丁时的条件跳转指令。在该样本中,指令分为下图所示的两类,经观察,按此方式分类时去混淆效果较为合理。

两类跳转指令选择


经过以上方式去混淆后可以比较明显的看到该ShellCode会获取VirtualAlloc、LoadLibraryA等函数用于分配内存和加载动态库,还会通过异或算法对加密PE数据进行解密。


解密数据


随后将解密出PE数据(创建执行gcc.exe的计划任务),随后利用手动加载的方式加载,其中会涉及到IAT修复、重定位、修复延迟导入表、TLS修复相关,最终会调用入口点。


手动加载并调用入口点


1.3.1 设置计划任务

对管理员权限进行检测,若不具备管理员权限,则会以管理员权限重新打开,随后借助COM接口关闭防火墙。


管理员权限打开


防火墙关闭


利用put_DefaultOutboundAction函数设置默认阻止所有出站连接,随后利用NdrClientCall3函数通过RPC(Remote Procedure Call) 创建计划任务,并利用WdcRunTaskAsInteractiveUser执行gcc.exe,该gcc.exe只有一个功能,即执行同目录中App文件夹下的同名文件gcc.exe,最后恢复所有出站连接。


创建计划任务



计划任务实际表现图:

计划任务实际表现图


1.4 中间阶段-执行器(gcc.exe)

该gcc.exe使用的是89aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6e0M7i4g2A6M7Y4u0W2L8q4)9J5c8W2y4I4N6h3W2J5M7X3g2D9i4K6u0W2g2$3W2F1k6r3!0%4M7#2!0q4z5g2!0m8x3g2!0n7z5g2!0q4y4#2)9&6b7W2!0m8c8g2!0q4y4q4!0n7z5q4!0m8c8q4!0q4y4#2)9&6b7g2)9^5y4l9`.`. StubExecutable/StubExecutable.cpp代码,从而实现寻找当前目录下最新App目录,并执行其目录下同名文件gcc.exe程序。


获取最新App目录


执行最新App目录下的同名文件(开源项目中代码)


1.5 PYTHON-自启动设置器(app-0.99.0\gcc.exe)

再次利用经过OLLVM控制流平坦化的ShellCode将自启动设置器加载执行,此次的被恶意篡改的 pyc文件依然是python39.zip压缩包中的encodings\__init__.pyc文件。


创建自启动项与读取并执行x.ini文件中ShellCode:在读取x.ini文件之前会通过COM接口在自启动目录创建快捷方式run.lnk,该快捷方式将指向当前gcc.exe程序文件,从而完成持久化。随后会读取x.ini文件,x.ini文件中是未被加密的ShellCode,该ShellCode的任务就是用来加载银狐后门下载器。


快捷方式run.lnk


设置快捷方式自启动与执行x.ini文件中ShellCode


1.5.1 银狐后门阶段

下图依次展示了银狐经典 Winos 后门下载器入口、解析远程服务器配置、保存后门模块数据以及执行后门模块的情况。在分析过程中发现,服务器(qaqbba.com)已停止下发后门模块。


银狐Winos后门下载器部分截图


火绒安全在此郑重提醒广大用户,日常软件下载需通过官方渠道或正规应用平台,切勿随意打开来历不明的安装文件,从源头规避病毒入侵风险。同时,应保持安全软件实时开启,强化设备防护能力。若发现设备中出现陌生gcc.exe进程,或存在系统运行异常、网络连接异常等情况,需立即使用安全软件进行全盘扫描查杀,切实保障个人设备与信息安全。


二、附录

C&C:

HASH:




传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回