尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

供应链攻击新变种:驱动更新如何成为信任链的突破口?

供应链攻击新变种:驱动更新如何成为信任链的突破口? 我的 GitHub 仓库最近收到一个陌生账号的 Star点进去一看头像是个纯黑方块主页没有任何项目关注列表也是空的。我没当回事周末照常跑到那家熟悉的老面馆老板娘一边擦桌子一边叹气说店里那台旧电脑中了招开机全是弹窗广告连点单系统都起不来。我帮她清了一下午病毒回家躺床上刷手机才看到安全社区的帖子在讨论一个代号叫 ShaHmer 的行动——说是某华字头电脑厂商疑似被供应链攻击盯上了攻击链长得让人后脊梁发凉。1. 事件全貌复盘先搞清楚到底发生了什么1.1 一条伪装成驱动更新的恶意链路ShaHmer 行动的曝光最初是从一批被上传到开源样本库的恶意文件开始的。安全研究员们追踪溯源后发现这些样本的行为链非常整齐它们会伪装成某华姓电脑厂商的官方驱动更新程序借着“VeriSign”类的代码签名证书规避系统拦截然后通过厂商官网或合作渠道的分发节点进行投放。也就是说用户如果在某段时间内从官方渠道下载了驱动更新有一定概率会拿到一个“加了料”的版本。这条链路最阴的地方在于它不是零日漏洞打进去的而是直接污染了供应链的源头。攻击者不需要攻破目标用户的机器只需要攻破“用户信任的那个下载源”。一旦更新服务器或者分发管道被渗透攻击者就能让恶意代码跟着正规软件一起走进千家万户用户还以为是官方推送根本不会产生怀疑。1.2 攻击目标与受害范围的猜测目前公开的情报显示ShaHmer 的初始目标指向的是某华姓电脑厂商的技术人员和研发人员攻击者主要想窃取的是与硬件驱动、固件签名机制、BIOS 更新流程相关的内部文档。这类资料一旦泄露攻击者就能逆向出该厂商在供应链中的信任链结构为后续更大规模的植入做准备。受害范围并不是普通消费者而是偏向企业级用户、开发者、系统集成商。因为驱动更新工具通常是在离线和内网环境里由 IT 管理员手动安装的普通用户很少会主动去更新驱动。所以如果你的电脑只是日常办公、上网、打游戏中招概率其实不高但如果你的机器是公司统一采购、由 IT 部门统一维护的那么风险就会上一个台阶。1.3 为什么“华姓”厂商会成为靶子这里有个很现实的原因市场份额越大供应链越复杂攻击面就越大。某华姓厂商的业务覆盖笔记本、台式机、服务器、存储、网络设备等多条产品线硬件型号多驱动更新频率高第三方供应商数量庞大。攻击者只要搞定其中一家代工厂或者软件供应商就能顺藤摸瓜打进整个生态。另外驱动签名机制本身就是一把双刃剑。操作系统的内核默认信任带有合法签名的驱动而签名证书的签发流程一旦被滥用就能让恶意驱动绕过内核隔离直接拿到系统最高权限。ShaHmer 的攻击者显然对这个机制研究得很透他们不直接攻击操作系统而是攻击硬件厂商与微软信任链之间的那层接口。2. 供应链攻击为何防不胜防从一次简单的类比说起2.1 像是订外卖但你不知道后厨是谁想象一下你到一家很信任的连锁餐厅吃饭餐厅的招牌菜很稳定你每周都去吃。有一天餐厅换了供应商牛肉的进货渠道变了但菜单没换价格没变你吃的时候也没觉得味道有太大差别。结果吃完回家拉肚子你第一反应是这家店今天厨师手抖了而不是牛肉本身有问题。供应链攻击就是这个逻辑。用户的电脑、手机、智能设备统统是“餐厅的招牌菜”操作系统和驱动是“菜谱”硬件是“后厨”而第三方供应商、代工厂、签名机构就是“食材供应商”。用户与设备之间的信任其实并不完全建立在某个单一实体身上而是建立在整条供应链上。只要任意一环被污染最终的“菜品”——也就是用户系统——都会出问题。真正的麻烦在于用户实际上没有能力去验证“后厨”是否更换了供应商因为菜单上只会写“牛肉”不会写“牛的产地、屠宰场、冷链物流公司”。大多数用户只会信任品牌本身而品牌方又不一定对每一环的供应商都有足够深入的审计。供应链攻击之所以难防本质上就是信任链路太长、太黑用户根本无从判断风险。2.2 攻击者的目标往往不是“你”而是“你信任的那个更新通道”ShaHmer 的特别之处在于它把攻击重心放在了驱动更新通道上。驱动更新是电脑使用过程中非常高频且看起来安全度很高的一种行为尤其是品牌机自带的驱动更新工具用户几乎是无脑点“一键更新”的。攻击者要做的就是在更新列表里塞入一个恶意驱动然后让签名验证通过用户的电脑就会在毫不知情的情况下加载了恶意代码。这和传统的漏洞利用完全不同。传统攻击者需要找到系统漏洞写 EXP绕过沙箱、绕过杀软每一步都有可能被拦截而供应链攻击是直接绕过“信任边界”在用户最松懈的环节下手。所以从这个角度看ShaHmer 并不是一次简单的“病毒投放”而是一次整体的“信任链劫持”。2.3 供应链攻击的检测有多难即使安全厂商知道了攻击手法想要在第一时间发现仍然很难。因为恶意文件带着合法签名杀软会直接放行行为上它可能会偷读内存、修改注册表、加载驱动但这些行为在“驱动更新器”的语境下又显得合情合理。传统的特征码检测、沙箱行为分析在这种场景下都容易失灵。真正有效的检测方式是“信任链审计”也就是追踪整个文件从签名到分发再到执行的完整路径看看有没有异常的跳跃。听着简单做起来极难因为这需要安全厂商、硬件厂商、操作系统厂商之间打通数据建立可追溯的供应链台账。现实是各厂商之间本身就存在竞争数据共享意愿不强能看到的只是自己那一亩三分地。3. 从 ShaHmer 看如何自查与加固个人电脑3.1 立刻可以执行的三项检查如果你现在有点慌先别急着给电脑重装系统按下面三步做一次基础排查检查已安装的驱动版本打开设备管理器重点看网卡、显卡、芯片组驱动的版本日期去厂商官网交叉比对一下。如果发现某个驱动版本更新时间与官方公告不符或者异常提前就要提高警惕。查看签名信息右键驱动文件 → 属性 → 数字签名查看签名者名称和签名时间。合法驱动的签名通常来自硬件厂商或微软 WHQL 实验室如果签名者是陌生的第三方公司甚至签名时间是半夜三点那就有问题。关闭不必要的自动更新通道很多品牌机自带的更新工具会默认开启“自动安装推荐驱动”建议改成“手动检查”这样你至少知道每次到底装了什么。3.2 如何验证你的驱动更新是否可信验证驱动可信性核心是看两条链第一文件是否来自官方服务器第二签名是否有效且属于该厂商。但普通人很难手动验证第一条所以更实际的做法是只在厂商官网的“支持/驱动下载”页面下载驱动不要用第三方驱动软件。下载后核对文件哈希值与官网给出的哈希值对比。如果官网不提供哈希也可以使用 PGP 签名校验。安装时注意 UAC 弹窗确认弹窗中的软件名称与厂家一致。这里有个团队内部总结的实用性技巧安装驱动前先用sigcheck这个小工具微软 Sysinternals 套件之一查看文件的签名信息和有效证书链。虽然不能 100% 保证安全但能帮你过滤掉相当一部分伪造签名的低级样本。命令非常简单在命令行里输入sigcheck.exe -s -n C:\Path\To\Driver.sys它会输出该驱动文件的签名者和证书状态如果显示“VirusTotal detected”之类的红字直接删掉别装。3.3 针对企业 IT 管理员的更严排查建议企业环境比个人环境更复杂如果你是企业里的 IT 管理员下面两条建议很关键盘点所有终端设备的驱动更新台账把每台机器的驱动型号、版本、更新日期、更新包哈希值全部记录在案如果发现同一型号的电脑驱动版本不一致优先排查更新源。建立驱动更新的白名单分发机制不要允许员工直接连到厂商官网下载驱动要求所有驱动更新统一由 IT 部门下载、验证、签名后推送。即便厂商官网真的被污染了也只影响 IT 部门那台“下载机”不会直接打到全部员工。这两条措施成本不高但是能极大缩小供应链攻击的横向扩散面。ShaHmer 之所以让安全社区紧张就是因为这类攻击一旦成功很可能不是一台两台的问题而是成批量地“失守”。4. 实操记录模拟一次驱动植入和检测过程4.1 用测试机模拟恶意驱动伪装安全研究不能只是纸上谈兵我在这里用一台隔离的测试机模拟了一遍攻击者最常采用的植入流程。我会用测试签名的伪驱动模拟感染源并搭配 Sysmon 来做行为审计给大家演示一下检测层面的具体做法。测试环境如下一台安装了 Windows 10 的虚拟机开启 Sysmon 日志一个未签名的.sys驱动文件用makecert做了测试签名模拟攻击者使用泄露证书签名一个用 C# 写的加载器程序模拟驱动更新工具模拟的“恶意驱动加载”代码片段using System; using System.Runtime.InteropServices; class Program { [DllImport(kernel32.dll, SetLastError true)] static extern IntPtr LoadLibrary(string lpFileName); [DllImport(kernel32.dll, SetLastError true)] static extern bool UnloadLibrary(IntPtr hLibModule); static void Main(string[] args) { string driverPath C:\Windows\System32\drivers\legit_driver.sys; IntPtr handle LoadLibrary(driverPath); if (handle ! IntPtr.Zero) { Console.WriteLine(Driver loaded successfully.); UnloadLibrary(handle); } else { Console.WriteLine(Failed to load driver. Error: Marshal.GetLastWin32Error()); } } }这段代码其实没有真正加载内核驱动只是模拟了用户态加载 DLL 的机制。真正的驱动加载需要sc命令或NtLoadDriver但对安全检测来说关注的核心是“在一个正规更新工具的进程中突然出现了一个非正规路径的模块加载行为”。4.2 用 Sysmon 追踪异常行为执行完上面的伪装程序后我打开 Sysmon 日志筛选事件 ID 7镜像加载和事件 ID 11文件创建重点查看加载的镜像路径和签名状态。在正常的驱动更新过程中加载的镜像应该全部来自厂商的安装目录或系统目录而模拟攻击中legit_driver.sys出现在 System32\drivers 下签名显示“签名验证失败”这就触发了告警。再配合进程树关系查看事件 ID 1可以看到加载器进程是从某个临时目录启动的父进程是浏览器而后台调用了sc.exe创建服务。这个行为链路就非常可疑了正常驱动更新不会由浏览器进程直接拉起来也不会去临时目录找驱动文件。4.3 如何进一步确认恶意行为如果 Sysmon 告警了但你还想进一步确认驱动是否有恶意逻辑可以把驱动文件上传到 VxStream 或 Hybrid Analysis 这类沙箱平台让它自动化运行一遍看看它是否有注册表写入、内核对象访问、网络回调等行为。沙箱报告里如果出现“加载后隐藏进程”“挂钩系统调用”这些字眼基本就可以判定为恶意驱动。需要强调的一点是恶意驱动通常会做“时间戳伪造”把编译时间改成一年前来逃避基于时间戳的检测。所以看到驱动文件的时间字段是两年多以前反而要多留个心眼与官方发布的版本时间做比对。5. 这件事给我们留下的几个思考ShaHmer 行动被曝光后很多人的第一反应是“远离某华姓电脑品牌”。这种想法可以理解但从安全角度看并不完全正确。供应链攻击针对的是“信任链”上的所有环节即使你换一个品牌只要对方的供应链管理没有做得更好攻击者只需要换一个目标重新搞定一条链路就行。品牌有影响但安全的根基在于整条供应链的透明度和可审计性。5.1 对企业供应链安全不是采购部门的事很多企业把供应链安全理解为“对供应商进行背景调查”实际上这是不够的。硬件和软件的供应链安全需要安全团队参与设备选型、驱动管理、固件更新、签名验证等每一个环节。采购部门只能保证供应商的资质但无法保证供应商的软件供应链没有被污染。一个比较实用的做法是在合同或服务条款中明确要求供应商提供“软件物料清单”也就是 SBOM。里面要把驱动、固件、依赖库的版本和来源都列清楚。这样万一出事企业自己也能紧急定位到受影响的资产而不是等厂商通报来兜底。5.2 对个人更新时多留一个心眼很有价值我知道很多人根本不会去看驱动签名信息因为太麻烦。但最低限度你至少要做到“不要用驱动精灵、驱动人生这类第三方软件来打驱动”。这些软件本身就是供应链攻击的重灾区它们为了兼容各种硬件会内置大量非官方签名的驱动一旦被攻击者利用简直是自带传播通道。我个人的习惯是新电脑到手后直接去官网把网卡、芯片组、显卡的驱动下载好存到本地之后系统提示更新之前先去官网比对一下版本号和发布时间确认没有问题再装。虽然麻烦一点但至少你知道自己装的是什么。5.3 对安全研究知己知彼多看看攻击者的思路ShaHmer 是一次典型的“攻击者视角”案例。它告诉我们与其花大量精力找零日漏洞不如研究一下信任链里的薄弱环节。驱动签名机制、更新服务器、分发通道、第三方组件这些平时不起眼的基础设施恰恰是攻击者最感兴趣的目标。安全社区虽然在曝光此次行动时整理了大量 IOC 和 YARA 规则但我更希望看到的是厂商能切实提升供应链的透明度比如发布驱动更新时同步公开哈希值、提供双因子签名校验、建立驱动分发日志审计机制。这些东西听着不刺激但比事后追查更管用。最近我还在持续关注 ShaHmer 相关的后续样本。如果你也在跟踪这个事件或者做过类似的供应链分析欢迎在评论区聊聊你的发现。技术上的东西越辩越明多一个人看总比少一个人看强。
返回列表