1. 银狐木马攻击链全解析
最近在分析一个特别狡猾的木马样本,攻击者把恶意代码藏在了搜狗拼音输入法的MSI安装包里。这种手法在安全圈被称为"供应链攻击",就像给快递包裹偷偷塞了违禁品。我拆解了整个攻击流程,发现攻击者至少用了三层伪装:
第一层是合法的MSI安装包,文件名为sogou_pinyin_guanwang.msi,大小159.12MB,看起来完全正常。用lessmsi工具打开后能看到里面包含两个关键文件:qmbrowser.exe和sougo_pinyin_guanwang.exe。前者是带数字签名的合法程序,后者是真正的输入法安装程序。
第二层伪装藏在qmbrowser.exe里。这个程序会加载同目录下的qbcore.dll,而这个DLL才是真正的恶意组件。攻击者很聪明地利用了"白加黑"技术——用合法程序加载恶意DLL,这种手法能轻松绕过很多杀软的静态检测。
第三层是qbcore.dll的shellcode加载机制。它会读取同目录下的1.txt文件,这个看似普通的文本文件实际上是个PE加载器,技术原型来自GitHub上的sRDI项目(Shellcode Reflective DLL Injection)。我逆向分析时发现,攻击者对开源项目做了定制化改造,使得加载过程更加隐蔽。
2. 恶意DLL的Shellcode加载技术
2.1 sRDI项目改造分析
qbcore.dll的核心功能是加载并执行shellcode,其技术实现基于著名的sRDI项目。这个开源工具原本是红队用来测试防御能力的,现在却被黑产团伙"拿来主义"。我在分析时特别注意了攻击者的几处关键修改:
首先是对内存加载方式的优化。原始sRDI会一次性映射所有PE节区,而恶意版本改为按需加载。当我在IDA中跟踪VirtualAlloc调用时,发现它先分配小内存块加载DOS头和PE头,等执行到具体功能时才动态加载对应节区。
其次是字符串混淆。所有关键API函数名(如CreateProcessInternalW、NtCreateSection)都采用运行时解密。我调试时不得不在内存下断点,等字符串解密后才能看到真实调用的函数。
最狡猾的是错误处理机制。当检测到调试器时(通过IsDebuggerPresent和CheckRemoteDebuggerPresent),它会转而执行一段看似正常的代码路径——加载系统自带的version.dll并调用无关函数。这种"反沙箱"技巧让自动化分析工具很容易误判。
2.2 文件隐藏技巧
攻击者在同目录下放置的1.txt文件实际上是个精心设计的PE加载器。通过010 Editor查看二进制结构,可以发现它伪装成文本文件的几个特征:
- 文件开头是合法的UTF-8 BOM头(EF BB BF)
- 前512字节填充了可打印字符
- 真实PE结构从0x400偏移开始
- 节区名称伪装成
.text、.data等合法名称
这种手法能骗过简单的文件类型检测。我在测试时发现,用file命令检测会显示"UTF-8 Unicode text",只有用binwalk深度扫描才能发现内嵌的PE结构。
3. 持久化与防御规避技术
3.1 三重持久化机制
这个木马实现了三种不同的持久化方式,会根据执行环境自动选择最优方案:
第一种是注册表启动项。当直接运行时会记录启动时间到HKCU\Software\Microsoft\Windows\CurrentVersion\Run,键值伪装成系统更新相关名称。
第二种是服务安装。木马会把自己复制到Windows\system\Umnof.exe,然后创建名为"Xyarsj Lmefw"的服务。有趣的是,它会修改文件前0x400字节为随机数据,这招专门对抗基于文件哈希的检测。
第三种是启动目录复制。通过DefineDosDeviceA创建特殊链接后,将自身拷贝到启动目录。我实测发现它还会监控这些持久化点,如果被删除会自动恢复。
3.2 反分析技巧
在逆向过程中,我遇到了几个精心设计的反分析陷阱:
- 时间炸弹:木马检查系统安装时间,如果小于30天就休眠24小时再执行
- 环境检测:通过
GetSystemMetrics检查屏幕分辨率、鼠标移动轨迹等 - 垃圾代码:插入大量无意义的算术运算和API调用干扰静态分析
- 互斥体迷惑:创建名为"Global{CommandLineA}"的互斥体,实际功能却与命名无关
最绝的是它的"自清洁"功能。当通过服务启动时,会立即执行cmd /c del [自身路径]删除原始文件,使得取证更加困难。
4. C2通信与功能模块分析
4.1 加密通信机制
木马连接C2服务器(45.207.12.71:1815)时采用多层加密:
- 初始握手使用RC4加密,密钥硬编码在资源段
- 后续通信采用动态生成的XOR密钥
- 关键指令额外用TEA算法二次加密
我在分析网络流量时发现,它还会伪装成正常的HTTPS流量。只有当检测到特定User-Agent(包含"qbmobile"字符串)时才启用真实功能。
4.2 模块化功能设计
木马实现了超过30种功能命令,这里列举几个典型模块:
系统管理模块
- 命令0x1C:
runas提权执行 - 命令0x5B:清理Windows事件日志
- 命令0x28:添加Defender排除路径
数据窃取模块
- 命令0x3A:键盘记录
- 命令0x40:麦克风录音
- 命令0x8f:注册表项导出
浏览器攻击模块
- 命令0x22:清除QQ浏览器数据
- 命令0x24:窃取Chrome历史记录
- 命令0x27:劫持360安全浏览器
特别值得注意的是命令0x56,它会将配置信息写入C:\ProgramData\config.ini。这个文件采用INI格式但实际是序列化数据,解析后发现包含C2备用地址和触发条件。
5. 防御检测方案
针对这类供应链攻击,我总结了几种有效的检测方法:
静态检测
- 检查MSI包中的异常文件关系(如合法exe加载非标准dll)
- 扫描文本文件中嵌入的PE结构
- 检测sRDI特征字节序列(如0xE8, 0x00, 0x00, 0x00, 0x00)
动态检测
- 监控
CreateProcess与LoadLibrary的异常调用链 - 记录服务创建时的异常命名模式
- 捕获
DefineDosDeviceA的非常规使用
网络检测
- 识别RC4+TEA的混合加密流量
- 检测包含特定User-Agent的TCP连接
- 分析心跳包的时间间隔规律
在实际防御中,建议结合YARA规则和EDR的进程行为监控。我编写的一个检测规则曾成功捕获变种样本,关键点是匹配服务描述中的异常空格分布(如"Rsklmdev Xypqrjkcd Fvwopqi"这种不自然的单词组合)。