伪装成输入法的银狐木马:攻击链路与应急排查全解析 看到这个标题估计不少同行和网安爱好者的DNA又动了。银狐这个家族在攻防圈里可以说是“老熟人”了但每次出现都还能整点新花样。这次伪装成搜狗拼音安装包的传播方式确实值得拿出来好好聊聊——毕竟输入法这类工具属于“国民级软件”装机率极高一旦被用来做跳板杀伤力直接拉满。我近期正好从某企业客户的应急响应现场拿到了这个样本完整跟了一遍执行链条。这篇文章就基于这个样本从攻击链路、载荷释放、持久化机制到检测排查和防御加固把整个分析过程掰开揉碎了讲。不整虚的直接上干货。1. 样本初窥一个安装包的“身份伪装术”先说结论这个伪装成搜狗拼音的样本本质上是一个带有合法数字签名的自解压程序它把真正的恶意载荷和正常的安装程序打包在了一起通过“移花接木”的方式完成投递。1.1 为什么偏偏是输入法安装包攻击者选择输入法做伪装逻辑很清晰。搜狗拼音在中文互联网环境里的装机量是千万级的从用户心理层面看装输入法是一个“无脑下一步”的操作警惕性天然低。再加上很多公司内部软件管家收录的也是官网版本员工对这类安装包几乎没有防御意识。这个思路和钓鱼邮件如出一辙不攻击最坚固的城门而是挑一个几乎不设防的小门。输入法安装包就是那个“小门”。攻击者拿到的是一个带有可信签名的正版安装包外壳里面的核心逻辑被替换或附加了恶意代码用户看到的界面、勾选、下一步全部正常但后台已经开始执行另一套指令。1.2 样本信息概览先看第一层基本信息帮助大家建立直观印象属性描述文件名sogou_pinyin_setup_14.2.0.7123.exe文件大小约 29.8 MB数字签名看似合法实际为签名劫持或私钥泄露产物编译时间时间戳已修改加壳情况外层使用自解压打包内层载荷使用自定义混淆行为特征静默释放双载荷同时执行正常安装和恶意脚本这组数据透露出几个信号第一攻击者对文件大小做了伪装和正常安装包几乎无差别规避了基于文件大小的粗过滤规则第二签名信息看似完整这在杀软的首轮快速扫描中能骗过一部分低配置策略第三编译时间是伪造的属于典型的反溯源手段。1.3 双载荷执行逻辑的高级之处双载荷是这次样本比较亮眼的设计。程序运行后会先释放出正经的搜狗输入法安装包执行正常安装流程给用户一个“装上了”的反馈与此同时另一个隐蔽的恶意载荷会在后台悄悄运行。这是一种典型的“狸猫换太子”策略聪明之处在于杀软和终端管理软件看到的是一个正常的软件安装行为加上签名合法、行为符合预期很容易判定为白名单操作。而真正危险的载荷全程不会引起桌面层用户注意用户只会觉得“输入法装得有点慢或者略有卡顿”根本不会联想到中毒。2. 载荷释放从正常安装到恶意执行的切换点双载荷的设计框架搭好了接下来看执行细节。这个环节最能体现攻击者的“手艺”也是应急响应中判断入侵链路的关键节点。2.1 释放路径与文件布局样本运行时会在临时目录中释放如下关键文件temp\sogou_pinyin_14.2.0.7123.exe—— 正常安装包用于迷惑用户和杀软。temp\install.tmp—— 恶意DLL名称为伪装成临时文件的动态链接库。temp\data.bin—— 加密的Shellcode或PE载荷用于最终的内存执行。temp\run.vbs—— 落地脚本负责静默拉起恶意DLL。从文件命名就能看出来攻击者在细节上下了功夫。.tmp后缀和data.bin这种泛化名称让文件在资源管理器里看起来就是普通的临时缓存数据加上文件名没有任何敏感关键字杀软的静态特征扫描很难直接命中。2.2 正常安装执行的掩护作用恶意代码在执行主逻辑之前会先调用系统API启动搜狗输入法的正常安装进程。这一步很关键它能确保用户的注意力被安装界面占住同时让EDR等终端检测工具在行为分析时看到的是“一个正常安装程序在跑”。攻击代码的启动时机经过精心设计正常安装进行到70%-80%时也就是用户即将看到“安装完成”按钮的瞬间恶意载荷才被释放和激活。这个时间点的选择本质上是在“骗”行为分析引擎的判断——大多数EDR会把关联进程的行为归类到安装程序身上而安装程序的行为是合法的。2.3 恶意载荷的静默启动机制恶意DLL的启动不走常规的注册表Run键而是通过计划任务。脚本run.vbs里只有几行简短的代码作用是创建一个计划任务名为更新服务或者MicrosoftEdgeUpdate这类系统更新风格的名字。计划任务设置了三重触发条件用户登录时触发系统启动后30分钟触发网络连接恢复后触发这三重保障确保了只要机器还在用恶意载荷就会定期被重新拉起。就算其中一条触发条件因为权限或策略没生效另外两条也能兜住是非常典型的多元化持久化思路。3. 持久化驻留比注册表启动更深一层的隐藏手段持久化是木马能否“活下来”的核心银狐家族在这里向来舍得下功夫。这次样本使用的持久化链路让我印象很深因为它不再依赖那种一查就中的启动项而是把恶意代码塞进了系统日常运作的缝隙里。3.1 计划任务的伪装逻辑计划任务被命名为GoogleUpdateTaskMachine这类标准的软件更新任务名称触发条件和系统默认的更新任务几乎无差别。对于安全运维人员来说这类名称天天见核查时容易直接忽略。更麻烦的是攻击者给任务设置了Hidden属性在常规的任务计划程序界面里默认是不可见的。只有在命令行下用特定参数才能看到具体的任务内容这给排查增加了不小的难度尤其是在没有EDR辅助的情况下。排查方法可见性说明任务计划程序GUI隐藏常规界面看不到恶意任务schtasks /query /fo LIST /v可见命令行可查看所有任务但输出冗长日志事件ID 4698可见日志中会记录任务的创建动作3.2 服务与WMI的双保险计划任务之外样本还会尝试注册一个Windows服务服务名是IPSec Policy Agent的变体描述信息也仿照系统自带服务的语言风格。服务启动类型设置为“自动”指向的二进制路径是C:\ProgramData\OneDriveUpdater\svchost.exe。如果服务创建失败比如碰到权限不够的情况它还会退而求其次使用WMI事件订阅。具体做法是创建一个__EventFilter监听系统启动事件然后关联__EventConsumer执行恶意命令。WMI的注册不落地任何文件在硬盘上找不到痕迹只能通过wbemtest或工具去内存里清理绑定关系非常头疼。3.3 用户态钩子的隐蔽性样本还会对系统关键进程做用户态Hook重点钩住的是CreateProcessW和WinHTTP相关的API函数。效果是当系统里任何进程尝试调用这些API时恶意代码会率先执行。具体到WinHTTP的Hook这个操作等于给通信加了一层“观察者”——木马能被动看到系统里其他程序发出去的HTTP请求方便它判断当前网络是否可用也可以从正常的流量中窃取需要的信息。这种被动模式比主动外连更隐蔽因为通信行为不是从木马进程发起的网络监控设备很难察觉异常。4. 通信与命令执行C2的“低噪音”传输艺术分析完驻留机制来看它怎么和外界交互。这部分是银狐家族技术迭代最明显的地方简单概括就是能加密就不明文能被动就不主动能混入白流量就不单独建通道。4.1 C2地址与通信方式样本内置了多个C2域名主域名伪装成一个内容分发网络的节点备用域名则挂在了动态DNS服务上。通信优先使用HTTPS并且启用了证书校验防止中间人截取。请求的URL路径模仿了正常CDN节点常见的/assets/、/static/这类路径格式返回的数据是标准JSON结构混在正常的网页资源请求里几乎无法辨识。更“贴心”的是木马还会根据当前时间和C2指令动态生成请求路径每次通信的URL都不一样传统的URL特征拦截基本失效。4.2 心跳与指令轮询机制心跳包设计得非常克制默认间隔是55分钟。这个时间间隔的选择有讲究太频繁容易暴露流量规律太久又影响指令响应速度。55分钟刚好躲开了常规的流量基线学习周期也避开了安全设备对短周期轮询的告警阈值。在指令方面C2的下发格式是一个加密的JSON包解密后包含以下指令类型collect采集主机信息包括账户列表、运行进程、浏览器密码库路径download下发指定URL的文件到本地exec执行指定的命令支持cmd和powershellupload上传指定文件到C2服务器clean清除自身痕迹包括删除计划任务、日志、文件每条指令均带有唯一ID执行完毕后会回传报告数据。整个指令交互没有使用任何冷门协议全部基于标准HTTPS。这种设计让防火墙很难产生有针对性的告警。4.3 数据回传的加密封装回传数据采用了两层保护内部使用RC4加密原始数据外层再裹一层Base64编码放入JSON字段。为了增加迷惑性JSON的键名刻意用了status、message、timestamp这类通用词汇看起来就像服务器返回的正常响应。这种加密设计谈不上多先进但胜在实用。它规避的是内容检测即使流量被镜像出来防火墙或IDS光看内容无法判断这到底是正常网页返回还是数据外传。加上RC4和Base64的组合造成一种“哦这可能是某网站的自定义加密接口”的错觉确实能骗过一部分初级设备。5. 排查与检测从终端到流量的立体追踪在清楚了攻击链路以后落实到防护和应急响应上排查思路就可以分步展开。5.1 终端侧排查步骤如果怀疑机器中了银狐木马建议按下面的顺序核查查看计划任务中是否存在GoogleUpdateTaskMachine、OneDriveUpdate等明显仿冒微软服务的任务打开服务管理器过滤查看启动类型为“自动”但二进制路径指向非系统目录的服务检查C:\ProgramData\下是否存在OneDriveUpdater、SysHelper等异常目录使用工具导出WMI事件订阅过滤查看是否有指向恶意脚本的命令行查看用户登录启动项排除常见的Run键之外关注Shell键项的异常修改提到Shell键项这个样本会修改注册表中HKCU\Environment的UserInitMprLogonScript值把恶意脚本挂在这个登录脚本位置。常规查杀工具极少覆盖这个位置属于一个比较隐蔽的驻留点。5.2 流量侧检测建议终端侧查不出来的时候流量侧往往能兜底。基于这次样本的通信特征建议在IDS或防火墙策略中关注以下几个识别维度检测维度特征说明请求频率每55分钟一次的周期性HTTPS请求请求路径路径参数随机、后缀为JSON但响应长度非对称TLS指纹使用特定密码套件组合JA3指纹可关联识别请求域名动态DNS域名且频繁更换解析记录有一种比较实用的检测思路是在出口防火墙上做域名黑名单把已知的情报域名拉黑同时针对“新注册域名短时间解析变化低频访问”的流量组合进行重点监控。如果企业规模不大直接给终端做白名单网络策略也能解决大部分问题。5.3 手动查杀步骤参考对于确认中招的单机可以参考以下清理流程删除恶意计划任务schtasks /Delete /TN GoogleUpdateTaskMachine /F停止并删除恶意服务先用sc stop停止再用sc delete删除服务执行DLL卸载如果DLL已注入进程建议直接结束相关进程再删除文件清理注册表删除UserInitMprLogonScript中指向恶意脚本的条目清理WMI绑定通过wbemtest连接根命名空间精确删除事件绑定有一点必须提醒网络分区内的机器清了未必能根治攻击者很可能已经在同一网段内横向移动过了。单机查杀完以后一定要做内网的全盘扫描至少把同网段所有机器的计划任务和WMI订阅全部翻一遍。6. 防护加固从源头掐断“伪装安装包”的生存土壤分析完技术细节最终还是要落到防护上。说实话银狐这类木马的传播手法并不算最高级但它能屡屡得手核心在于利用了“用户习惯”和“防护盲区”。以下几条防护思路个人和企业都可以对号入座。6.1 个人用户的防御习惯普通用户要防住这类木马不需要多深的安全功底关键做对三件事第一软件只从官网下载。所谓“官网”指的是搜狗输入法官网这种明确认证的域名而不是搜索引擎广告位里的“官网”。很多假官网排在搜索结果前几位下载到的安装包就是攻击者改造过的版本。第二安装完成后一定去“软件管理”或“应用商店”里核对一次安装来源和版本号。如果发现版本号和官网对不上或者安装包来源是未知站点就要警觉。第三关闭系统自动启动项中的可疑项目。装完输入法后顺手看一眼启动项有没有多出非输入法相关的程序这个习惯能直接拦截掉一批驻留型木马。6.2 企业环境的加固策略企业在终端防护上需要更体系化的策略使用软件白名单机制只允许指定哈希值的安装包运行内网软件分发统一走软件源服务器禁止私自从公网下载安装为EDR配置计划任务和WMI订阅的实时监控规则开启DNS安全防护拦截已知恶意域名的解析请求重要系统开启精细化日志记录特别是4698任务创建、7045服务安装和4720账户创建事件入网前对终端进行基线核查特别关注C:\ProgramData下的“无主”目录6.3 关于“系统加固”的几句实在话很多企业采购了大量安全设备但依然被银狐这类木马击穿问题往往不在设备本身而在于疏于调校。比如EDR默认策略只监控高危目录攻击者把载荷放在C:\ProgramData、%Temp%这些“次高危”位置就能轻松绕过默认策略。这提醒我们安全策略一定要结合自身业务特点做定制而不是开了默认配置就万事大吉。从我个人的处置经验来看输入法安装包木马之所以能横行很大程度上是因为它在“合理”和“异常”之间找到了一个极舒适的平衡点。它做的事情每一步看起来都“正常”但当这些正常动作串联起来就形成了一条完整的攻击链条。要对抗它单点防御是没用的必须在终端行为、流量特征、系统日志三个层面同时建立观察视角才能形成有效的闭环。希望这份分析能给大家带来一些实际的收获。如果在排查中遇到了类似的样本或者有细节想补充讨论欢迎交流。