1. 项目概述一次对高级威胁的逆向追踪最近在分析一批恶意样本时一个名为“银狐”的木马家族频繁进入视野。它不像那些大张旗鼓的勒索软件动静很大反而更像一个精于潜伏的“间谍”通过一系列精巧的伪装和利用链悄无声息地渗透进目标系统。这次我们聚焦的是一条从“搜狗拼音输入法MSI安装包”作为诱饵开始最终利用sRDIShellcode Reflective DLL Injection技术加载恶意载荷的完整攻击链。这不仅仅是一个简单的病毒分析它更像是一场攻防思维的实战推演揭示了现代恶意软件如何利用合法软件的分发渠道、系统信任机制以及前沿的开源攻击技术构建起一条隐蔽且高效的入侵路径。对于安全研究人员、应急响应工程师甚至是好奇的开发者而言理解这条利用链的价值在于“知其然更知其所以然”。我们不仅能看清攻击者每一步的操作更能洞察其背后的设计逻辑和所要规避的防御机制。从诱饵文件的制作、数字签名的伪造或盗用到内存中无文件落地的Shellcode反射加载每一个环节都充满了对抗性思考。接下来我将以从业者的视角带你一步步拆解这条“银狐”木马的利用链还原攻击现场并分享在实际分析中用到的方法、工具以及那些容易踩坑的细节。2. 攻击链全景与核心思路拆解在深入技术细节之前我们有必要从上帝视角俯瞰整条攻击链。这有助于我们理解攻击者的战术意图和各个环节的衔接逻辑。一条完整的攻击链Kill Chain通常包括侦查、武器化、投递、利用、安装、命令与控制、行动等多个阶段。而“银狐”木马的这条链则精彩地演绎了从“武器化投递”到“隐蔽安装”的核心环节。2.1 攻击链阶段解析攻击者并非盲目行动其每一步都经过精心设计以最大化成功率并规避检测。武器化与投递阶段Weaponization Delivery这是攻击的起点。攻击者选择了“搜狗拼音输入法”的MSI安装包作为诱饵。为什么是它首先输入法是用户的刚需软件伪装成它的更新包或安装包极具迷惑性。其次MSIMicrosoft Installer是Windows系统官方支持的安装包格式通常享有较高的用户信任度。攻击者会制作一个恶意的MSI文件这个文件表面上看是正常的搜狗拼音安装程序甚至可能带有伪造的、或窃取来的有效数字签名以通过一些基础的安全检查。这个恶意MSI可能通过钓鱼邮件附件、被篡改的下载站、或水坑攻击等方式投递给目标用户。利用与执行阶段Exploitation Execution用户双击运行恶意MSI。此时利用的不是软件本身的漏洞如缓冲区溢出而是对“用户习惯”和“系统机制”的利用。MSI文件在执行时会调用Windows Installer服务msiexec.exe。恶意MSI中预置了自定义操作Custom Actions这些操作可以在安装过程的特定阶段如安装后执行攻击者指定的命令或脚本。这是将恶意代码嵌入合法安装流程的关键。通过Custom Actions攻击者可以启动一个PowerShell脚本、释放一个伪装的可执行文件DLL或者直接执行内嵌的Shellcode。安装与持久化阶段Installation Persistence在这一阶段传统的木马会释放一个恶意可执行文件到磁盘并设置自启动。但“银狐”的高明之处在于它大量采用了“无文件”或“轻文件”技术来规避基于文件的检测。它释放的很可能不是一个完整的PE可执行文件而是一段经过加密或编码的Shellcode或者一个用于后续下载的轻量级下载器。持久化手段也可能更加隐蔽例如通过计划任务、WMI事件订阅、服务 DLL劫持Service DLL Hijacking或注册表Run键的非常规路径来实现。命令与控制阶段Command Control木马成功驻留后需要与攻击者的服务器C2通信以接收指令、上传窃取的数据。通信方式可能使用HTTP/HTTPS、DNS隧道甚至隐藏在看似正常的网络流量中。通信内容通常经过加密协议也可能模仿合法软件如模仿浏览器User-Agent、使用云存储API等以绕过网络层检测。2.2 为何选择MSI与sRDI组合这是本案例的两个技术亮点理解其选型原因至关重要。选择MSI作为载体高信任度MSI是微软官方格式企业环境中常通过组策略统一部署普通用户对其警惕性较低。执行权限默认情况下MSI安装会触发UAC提权弹窗如果安装需要修改系统目录。对于伪装成知名软件更新的MSI用户点击“是”的可能性很高从而让恶意代码获得较高权限运行。隐蔽性强恶意逻辑可以封装在MSI包内部通过Custom Actions触发不会在磁盘上留下明显的、独立的恶意脚本文件如.bat, .vbs增加了静态检测的难度。规避应用白名单在一些只允许执行特定签名程序的环境中带有伪造有效签名的MSI可能被放行。选择sRDI进行载荷加载无文件落地sRDI的核心思想是将DLL文件转换成位置无关的Shellcode并直接在内存中反射加载无需将DLL文件写入磁盘。这完美规避了基于磁盘文件的杀毒扫描和行为监控。隐蔽进程内存反射加载的DLL不会在进程的模块列表中注册通过LoadLibrary加载的DLL会在Process Explorer等工具中可见使得检测工具难以发现其存在。灵活性强Shellcode可以作为一段数据通过多种方式传递和注入如进程镂空、APC注入等与MSI的Custom Actions可执行任意代码能力结合得天衣无缝。攻击者可以将加密的Shellcode作为资源嵌入MSI安装时解密并在内存中执行。注意sRDI本身是一个开源的、被安全社区广泛用于红队测试和恶意软件分析的技术项目。攻击者利用它正说明了“技术无罪关键在于使用它的人”。这也提醒我们安全人员必须密切关注开源安全项目的动态因为攻击者同样在学习和利用这些工具。3. 技术细节深度剖析从诱饵到内存驻留现在让我们钻进每一个技术环节看看攻击者具体是怎么做的以及我们在分析时该如何应对。3.1 恶意MSI安装包的解构一个MSI文件本质上是一个结构化存储文件类似于一个微型数据库。我们可以使用微软官方工具Orca或者更强大的开源工具如lessmsi、MSI Explorer来解包和分析。关键分析点数字签名验证首先使用signtool verify /v /a malicious.msi检查其签名。银狐木马可能使用过期证书、自签名证书或通过窃取等方式获得的“有效”证书进行签名。查看证书的颁发者、有效期以及是否被吊销。一个来自“某不知名公司”却声称是“搜狗”的证书就是明显的红旗。Custom Actions表分析这是恶意MSI的“心脏”。在Orca中打开MSI文件找到CustomAction表。该表定义了在安装序列的某个时间点如InstallFinalize之后要执行的操作。恶意操作通常指向一个包含二进制代码的Binary表条目或者一个要执行的命令行如msiexec.exe /X用于卸载但后面接的是恶意命令。类型识别Type字段的值很关键。1表示DLL中导出的函数2表示可执行文件50表示JScript代码51表示VBScript代码。攻击者常用50或51来执行内嵌的脚本。源追踪查看Source字段它可能指向Binary表中的某个Name。去Binary表找到对应的条目其Data字段就是一段二进制数据可能是EXE、DLL或Shellcode。Binary与Script表提取将Binary表中可疑条目的Data字段或者Script表中的脚本内容导出到文件。对于二进制数据可以用十六进制编辑器查看文件头判断是PE文件MZ还是纯Shellcode。对于脚本直接阅读其内容看其是否用于解密数据、下载文件或执行命令。实操心得不要只在虚拟机里双击运行MSI来观察行为第一步永远是静态解包分析。这能让你在安全的环境中看清攻击者的全部底牌。遇到经过混淆或加密的脚本如VBScript被编码可以尝试使用在线解码工具或简单的查找替换来还原。常见的混淆包括将字符串拆散、使用Chr()函数拼接、或进行简单的XOR运算。如果CustomAction调用了msiexec.exe自身并传入奇怪参数要高度警惕。这可能是利用MSI的“修复”或“卸载”机制来执行恶意命令。3.2 sRDI技术原理与在野利用sRDI将DLL转换为位置无关Shellcode的过程可以粗略理解为“打包DLL的加载器”。其核心步骤包括DLL反射加载器这是一段用C/汇编编写的、体积小巧的Shellcode。它的功能类似于Windows系统的LoadLibrary但完全在内存中完成解析DLL的PE头部、申请内存、重定位地址、解析导入表、调用DLL的入口函数DllMain。DLL嵌入将需要隐藏执行的恶意DLL文件以二进制形式附加到上述加载器Shellcode的后面。转换与整合通过一个转换工具Python脚本计算DLL在Shellcode中的偏移量并修补加载器代码中的相关指针最终生成一个完整的、独立的Shellcode块。当这个Shellcode被注入到目标进程并执行时加载器部分会动态定位到紧随其后的DLL数据在内存中将其“实例化”为一个可运行的模块并调用其DllMain。从外部看目标进程只是多了一段可执行的内存区域并没有新的DLL模块被系统记录。在银狐木马中的利用场景攻击者通过MSI的Custom Action执行一段PowerShell或VBScript。这段脚本的核心功能可能是从网络下载或从MSI自身资源中解密出一段Shellcode即sRDI转换后的产物。通过经典的进程注入技术如VirtualAllocEx/WriteProcessMemory/CreateRemoteThread将这段Shellcode注入到一个合法的、正在运行的进程如explorer.exe,svchost.exe中。Shellcode在目标进程内存中反射加载内嵌的恶意DLL该DLL开始执行窃密、远控等恶意功能。分析应对内存取证当怀疑进程被注入时使用Volatility或Rekall等内存取证工具分析进程的VAD虚拟地址描述符树查找具有PAGE_EXECUTE_READWRITE权限的私有内存区域并尝试从中提取Shellcode或DLL。行为监控使用Process Monitor或API Monitor监控目标进程虽然反射加载的DLL不在模块列表但其对系统API的调用如网络连接、注册表访问、文件读写会被捕获。寻找来自“无名模块”的API调用链。网络流量分析反射加载的DLL最终需要通信监控异常的网络连接非常用端口、非常用域名是发现其行踪的有效手段。3.3 利用链的串联与对抗检测攻击者将MSI和sRDI串联形成了一条深度隐匿的链条诱饵MSI (入口) - 脚本解释器 (执行环境) - 内存注入 (无文件) - 反射DLL加载 (无模块) - 恶意功能 (最终目的)。这条链上的每个环节都在试图对抗不同的检测点MSI签名对抗 静态文件信誉检测。Custom Action脚本对抗 基于PE文件的恶意代码扫描。进程注入对抗 基于父进程和启动路径的检测。sRDI反射加载对抗 基于进程模块列表和磁盘文件的检测。作为防御方我们需要建立纵深检测体系端点部署具备行为监控能力的EDR关注进程的“子进程启动”、“内存操作”、“代码注入”等可疑行为序列而不仅仅是文件哈希。网络部署NIDS/NDR分析网络流量中的异常模式即使TLS加密也能从JA3指纹、通信频率、目标域名特征等方面发现端倪。日志集中收集和分析Windows事件日志如4688进程创建、4689进程退出、Sysmon事件如ProcessCreate, NetworkConnect通过关联分析发现利用链的蛛丝马迹。4. 实战分析与排查技巧实录理论说再多不如动手分析一次。假设我们收到了一个可疑的“SogouPinyin_Update.msi”文件。4.1 静态分析实战步骤环境隔离在完全隔离的虚拟机或沙箱环境中进行操作。初步检查# 检查文件签名 signtool verify /v /pa SogouPinyin_Update.msi # 使用file命令查看粗略信息Linux分析环境 file SogouPinyin_Update.msi # 计算哈希值用于威胁情报查询 Get-FileHash SogouPinyin_Update.msi -Algorithm SHA256解包MSI# 使用lessmsi解包到目录 lessmsi x SogouPinyin_Update.msi output_dir/查看output_dir目录重点关注解压出的脚本文件.vbs, .js、二进制文件、以及output_dir/SourceDir下的文件。深入Custom Actions使用Orca或MSI Explorer打开MSI文件。按以下顺序检查CustomAction表记录下所有Action的Action,Type,Source,Target。Binary表对照CustomAction表中的Source导出可疑的Binary数据。InstallExecuteSequence表查看恶意Action被安排在哪个序列点执行。分析导出物对导出的二进制数据用PE分析工具如PE-bear,CFF Explorer查看是否为有效PE文件或用scdbg、libemu等Shellcode模拟器尝试运行观察其API调用。对导出的脚本进行去混淆和代码审阅。4.2 动态行为监控如果静态分析发现可疑脚本或二进制下一步是在受控环境中运行它并监控其所有行为。工具准备在监控虚拟机中同时运行Process Monitor配置好过滤器抓取所有进程事件、Process Explorer、Wireshark抓取所有网卡流量和API Monitor附加到关键进程。执行与捕获运行恶意MSI。在Process Monitor中你会看到msiexec.exe进程启动随后可能启动powershell.exe,cmd.exe,wscript.exe等进程。仔细查看这些进程的命令行参数、加载的DLL、以及文件、注册表操作。关键行为寻找可疑进程创建由msiexec或脚本解释器创建的、不常见的子进程。可疑文件写入在临时目录%TEMP%,%APPDATA%或系统目录写入的可执行文件、DLL、或加密数据文件。计划任务/服务创建对schtasks或sc的调用用于持久化。网络连接在Wireshark中观察是否有向陌生IP或域名的HTTP/HTTPS/DNS请求。代码注入迹象在Process Explorer中查看可疑进程的内存占用、句柄数并检查其内存区域View - Lower Pane View - DLLs 和 Handles。注意那些没有对应磁盘文件的DLL模块可能是反射加载的。4.3 常见问题与排查技巧速查表在实际分析中你肯定会遇到各种问题。下面是我总结的一些常见场景和应对技巧问题现象可能原因排查思路与技巧MSI文件无法用常规工具解包或打开文件头损坏、自定义加密、或非标准MSI格式1. 用十六进制编辑器如010 Editor查看文件头确认是否是D0 CF 11 E0复合文档标志。2. 尝试使用7-zip它有时能解开非标准封装的MSI。3. 搜索文件内是否有已知的脚本或Shellcode特征码。Custom Action中的脚本高度混淆攻击者使用了字符替换、编码如Base64、或自定义加密函数来逃避静态查杀1. 寻找解码/解密函数。通常混淆脚本末尾会有一个巨大的字符串数组和一个Execute或Eval调用。2. 将脚本在隔离的VBS/JS解释器中分段执行打印中间变量值。3. 使用CyberChef等在线工具尝试常见的编码解码。行为监控中看不到明显的恶意进程或文件落地可能使用了无文件技术如PowerShell内存加载、sRDI、或.NET Assembly反射加载1. 检查powershell.exe的命令行是否有-EncodedCommand参数后面跟Base64编码的命令。2. 使用Sysinternals Suite中的ProcDump或Process Explorer的“Create Dump”功能对可疑进程创建完整内存转储然后用Volatility分析。3. 监控WinAPI调用如VirtualAlloc,WriteProcessMemory,CreateRemoteThread的组合使用。网络流量全部是HTTPS无法解密通信内容被加密1. 虽然内容不可读但可以分析元数据目标IP/域名是否新出现、是否与威胁情报匹配、通信端口是否为443、数据包大小和频率是否呈现心跳包特征。2. 尝试在端点安装Burp Suite或Fiddler的根证书配合进程监控有时可以解密出特定进程的流量。恶意样本有有效的数字签名证书被盗用或恶意软件签署服务购买1.不要仅凭签名判断清白检查证书详情颁发给CN是否与软件名称匹配颁发者是否可信证书有效期是否合理2. 查询证书的吊销状态CRL/OCSP。3. 对比该证书签名的其他已知合法文件看哈希是否一致。攻击者可能只盗用了证书但签名的文件完全不同。独家避坑技巧时间戳把戏有些恶意软件会将其释放的文件时间戳修改为与系统文件一致如kernel32.dll的修改时间。不要仅凭时间戳判断文件新旧要结合文件路径、数字签名和内容综合分析。父进程伪装通过进程注入或COM劫持恶意代码可能在一个合法进程如explorer.exe的上下文中运行。在Process Monitor中关注进程的“Parent PID”是否合理。一个由svchost.exe启动的explorer.exe显然不正常。“一闪而过”的进程有些恶意脚本会快速启动一个进程并结束难以捕捉。在Process Monitor中提前设置好过滤器并开始捕获然后执行样本。事后在日志中搜索进程创建事件即使进程生命周期极短也会被记录下来。可以过滤Operation为Process Create的事件进行查看。5. 防御建议与体系化思考分析完一次攻击最终目的是为了更好的防御。针对“银狐”这类利用合法软件包装和高级内存技术的木马单一的防御手段是无效的必须构建体系化的防御能力。5.1 终端防护升级终端是最后的防线也是最关键的战场。启用攻击面减少规则充分利用Windows Defender攻击面减少ASR规则或类似EDR功能。例如可以启用“阻止从PSExec和WMI命令创建进程”、“阻止Office应用程序创建子进程”、“阻止可执行文件从电子邮件客户端和Webmail运行”等规则这些能有效打断利用链中的关键步骤。部署高级EDR选择具备强行为检测和内存扫描能力的终端检测与响应平台。EDR应能记录详细的进程树、网络连接、文件操作和注册表修改并能够检测进程空心化、远程线程注入、反射DLL加载等恶意技术。严格应用程序控制在企业环境中实施应用程序白名单。只允许运行经过审批的、有合法签名的应用程序。这能从根本上阻止恶意MSI或任何未知程序执行。保持系统和软件更新虽然本次利用的不是软件漏洞但及时更新可以堵住其他可能的入口并确保安全组件如AMSI处于最新状态。5.2 网络与邮件网关过滤在威胁到达终端前进行拦截。邮件安全网关配置策略拦截带有MSI、ISO、LNK等高风险附件的邮件或强制对这些附件进行沙箱动态分析。对声称来自知名软件厂商的更新邮件要特别检查发件人地址的真伪。Web网关/防火墙阻止用户访问已知的恶意软件分发域名和IP。对可执行文件、安装包的下载进行流量扫描或沙箱分析。网络流量分析部署网络检测与响应系统建立网络通信基线识别异常的外联流量如内部主机向陌生域名发起周期性心跳连接。5.3 安全意识与流程管控技术手段需要与管理结合。用户教育持续对员工进行安全意识培训强调“不要随意打开来历不明的邮件附件和链接”、“不要从非官方渠道下载软件”、“对提权请求保持警惕”。软件分发管理企业应建立统一的软件分发平台禁止员工自行下载和安装软件。所有需要部署的软件必须由IT部门从官方渠道获取、验证哈希值和签名后再通过管理工具推送。最小权限原则为员工账户分配工作所需的最小权限。避免使用本地管理员账户进行日常办公。这可以极大增加攻击者进行持久化、横向移动的难度。5.4 威胁狩猎与主动监测不能只依赖告警要主动出击寻找潜伏的威胁。利用日志集中收集端点、网络、身份验证日志。编写狩猎规则例如查找由msiexec.exe启动的powershell.exe进程。查找命令行中包含-EncodedCommand、IEX、DownloadString等关键字的PowerShell执行记录。查找在临时目录创建的可执行文件随后被计划任务或服务调用的序列。内存取证常态化对于关键服务器和敏感岗位的终端定期或触发式地进行内存采集和分析寻找无文件攻击的痕迹。威胁情报驱动订阅高质量的威胁情报源及时获取像“银狐”这类活跃木马家族使用的C2域名、IP、文件哈希、攻击手法TTPs等信息并将其加入到本地的检测规则中。剖析“银狐”木马的这条利用链给我的最大体会是现代威胁的对抗已经上升到了“思维层”。攻击者在精心设计每一个环节的对抗策略。作为防御者我们必须摆脱对单一特征如文件哈希、恶意域名的依赖转向关注行为序列和战术意图。从一次可疑的MSI安装到一段异常的内存分配再到一个异常的出站连接将这些碎片化的异常信号关联起来才能拼凑出攻击的全貌实现有效的检测和响应。安全建设没有银弹它是一场需要持续投入、不断学习和迭代的持久战。