「史上最强」vs「现代最弱」——一次广告位投毒引发的挖矿木马

「史上最强」vs「现代最弱」——一次广告位投毒引发的挖矿木马

接day02的预告,站内也有许多前辈讲过原理和概念,排骨技术力不够就简单分享一下纯小白首战挖矿病毒的过程和经验。(由于是第一次真的没经验,许多地方都忘记取证了,本篇部分内容为手工复现,并非现场。)

一头是成熟的攻击手法,一头是几乎为零的防守配置。 这也算是标题的由来了

关于本稿的证据边界(请先看一眼):
本篇有两类材料。唯一有原始文件时间戳支撑的硬证据是 6.1 节的 43 秒时间线(.lnk 文件自带时间戳);其余细节多为凭回忆整理,个别段落(如 4.3 节的 hosts 截图)是事后手工补的,会单独标注。凡是标了"手工复现"的地方,都不是现场记录。

特别声明:本文所有操作均在自己受害的机器和隔离环境内完成,目的是取证与清除。文中涉及的恶意文件样本不会提供下载,相关分析手法仅供网络安全学习研究使用。严禁在未获得书面授权的情况下对任何非自有系统实施扫描、测试、攻击等行为。

一、起因及发现

事情的起因是:排骨在和朋友玩泰拉瑞亚,但是一直在慢动作,走两步卡一下,像开了 0.5 倍速,因为加装了灾厄、众神之怒等等大型模组,所以第一反应就是去调画面、帧率、跳帧、光影等等,并且关停了部分不重要的模组,甚至显卡驱动都去重装了,直到这时排骨还以为是 “bug之怒”的问题,折腾了半个多小时,一次都没好。

然后排骨突然想到——泰拉瑞亚吃CPU的性能。

Ctrl + Shift + Esc 打开任务管理器。CPU 挂在 90% 以上。

再看「详细信息」里的进程列表,一个名字很奇怪的东西排在最上面:

  • 进程名是一串没有意义的随机字母数字,看不出是哪个软件
  • CPU 占用长期 90% 上下
  • 描述、发布者两栏都是空的
  • 「打开文件所在的位置」——目录也是一串随机字母

排骨当时第一反应是模组内部的程序出问题了。但是!Mod 从来不会常驻一个占 90% CPU 的进程。

二、杀掉进程,它又回来了

右键点开「打开文件所在的位置」,看了一眼那个目录——一串乱码字母,一看就不是什么正经软件该待的地方。然后以管理员身份把它结束掉,游戏立刻恢复正常,一点不卡了。

当时以为完事了。

没过多久,它又跑起来了。

而且——进程名跟刚才一模一样,一个字都没变。

到这排骨才发现不对劲:

随机进程名 + 结束之后自动重启 = 有持久化机制的恶意程序。

正常软件不会有这种特征。杀掉之后还能自己回来,只有两种可能:一是它把自己加进了开机启动项;二是还有别的进程在守着它,发现它死了就重新拉起来。

(名字不变:说明重新起来的还是同一份文件、被同一套机制拉起来的,不是每次现生成一个新名字。所以删掉眼前这个进程没有意义。)

两种情况都不是手工删一删能解决的。从这里开始,这就不是「清理软件」,而是「应急响应」了。

先断网再删文件是首要的(因为我的电脑上并没有什么太贵重的资料,所以也没急着断)。

判断依据:一个长期占满 CPU 的不明程序,最常见的用途是挖矿;而它带了完整的网络模块,那还有另一种可能——在往外传东西。

情况 不断网的后果
挖矿木马 继续偷电费和显卡寿命
窃密木马 继续把浏览器密码、Cookie、聊天记录往外发
远控木马 攻击者可能已经在机器上敲命令了

所以当时的选择是:拔网线 / 关掉 Wi-Fi,结束可疑进程让机器先安静下来,然后不删任何文件、不重启——因为文件本身是证据。

第三条特别重要:「删掉就万事大吉」的想法,是应急响应里最贵的念头。 文件删了,你就永远不知道它从哪来、干了什么、有没有同伴、你的密码是不是已经出去了。

想留证据又想让它闭嘴,正确做法是挂起进程而不是结束进程:

# 挂起进程(保留内存现场,程序不再执行)
Suspend-Process -Id <PID>

结束进程会清掉它占用的内存,挂起不会。内存里往往藏着解密后的配置、C2 地址这些静态文件里看不到的东西。排骨当时不知道这个,直接结束了,等于亲手丢掉了现场和证据。

所以上面那句"结束可疑进程"是排骨当时的实际选择,也是本篇要写出来的错误示范:当时的做法是结束,正确的做法是挂起。 这两件事得分开看。

三、想装杀软救命

确认中毒后排骨立马去找杀毒软件。

然后就感觉到了深深的绝望。

360 的官网打不开,一开始以为是断网了,可其他网站都正常——只有安全软件的站进不去。排骨又去试了火绒,火绒的站能打开,安装包也下下来了,但是装完,运行不起来。

不是报错,就是安安静静地没反应。点了图标,进程起来一下,然后就没了。

此刻我意识到,是病毒干的。病毒干的事不止是藏起来,它还做另外两件事:堵住你求援的路,拆掉你能用的工具。

四、更改hosts

4.1 hosts 是什么

简单讲就是:「本地域名对照表」。

平时我们访问网站,流程是这样的:

浏览器输入 baidu.com
        ↓
问 DNS 服务器:baidu.com 的 IP 是多少?
        ↓
DNS 回答:1.2.3.4
        ↓
浏览器去访问 1.2.3.4

但如果 hosts 文件里写了这么一行:

0.0.0.0  baidu.com

流程就变成:

浏览器输入 baidu.com
        ↓
先查 hosts:本地写着 baidu.com 对应 0.0.0.0
        ↓
不问 DNS 了,直接访问 0.0.0.0
        ↓
0.0.0.0 是「无效地址」,连不上 → 网站打不开

关键在「优先」两个字:hosts 的优先级高于 DNS。 只要 hosts 里写了一行,你的电脑就再也不去问 DNS 了,DNS 说什么都没用。

文件位置:

C:\Windows\System32\drivers\etc\hosts

(etc 目录下还有个 hosts.ics,那是网络共享用的,不用管。)

4.2 恶意软件改 hosts 干嘛

这类木马改 hosts 的套路非常固定:塞进几十上百行,把 360、火绒这些国内杀软官网的域名全部指向 0.0.0.0 或者 127.0.0.1。 效果就是:

  • 下载不了杀软(官网打不开)
  • 在线查杀用不了(云查杀接口的域名也被拦了)
  • 系统更新打不上(微软的域名也拦了,补丁和安全情报都进不来)
  • 有些还会把安全论坛、分析平台的域名一起拦掉——让你连「去搜一下这是什么东西」都做不到

它这么阴的原因:它不攻击你的系统,它攻击你的信息获取能力。 你在网上一搜「电脑突然卡顿、进程随机名」,标准答案第一句一定是「先装个杀软全盘扫描」。可它偏偏让你装不上。

这就形成一个死循环:你得先杀掉病毒才能下载杀软,可你得先有杀软才能杀掉病毒。

4.3 打开一看

用记事本打开 hosts。

正常一份干净的 hosts,除掉文件头上那一大段以 # 开头的注释(那是系统自带的说明,不用管),真正生效的内容只有一两行,长这样:

# 127.0.0.1 localhost
# ::1 localhost

而排骨打开的时候,那一片杀软和微软的域名,齐刷刷全在里面,全被指向了无效地址。

![手工复现的 hosts 结构示意]
屏幕截图 2026-10-10 143222

(具体拦了哪些域名排骨当时没截图,上图是手工打的类似结构,域名做了替换。这就是为什么前面反复说要先截图——当时嫌麻烦没留,复盘时就得靠回忆。 所以上面列的那些拦截目标,是按这个手法的通用行为写的,不是当时那份 hosts 的逐条还原。)

4.4 清掉

我也没逐行判断,直接把恶意行清掉、留下系统默认的那两行注释。hosts 的合法自定义内容本来就极少,中了毒的情况下,一行一行清太麻烦,最后也不知道还漏没漏,所以直接一个"量大管饱"。

清完立刻见效,杀软官网能打开了。

⚠️ 有三个小问题:
第一,文件要先备份或者先截图。 hosts 里的内容本身就是重要证据——它拦了哪些域名,就等于告诉了你它怕什么,分析的时候很有用。
第二,改完先别放松。 恶意软件可以重新写回去。排骨这次是清完 hosts 立刻下杀软,没给它机会。
第三,如果文件存不进去或者一会儿又变回来,说明还有活着的进程在盯着它——那就先回去把进程挂起。

💡 补一条绕路方案: 如果你发现 hosts 改不动、或者改了又变回来,还有一条能绕开的路——用另一台干净的设备(手机、同学的电脑都行)从官网把安装包下好,再拿 U 盘或者数据线拷过来装。
它能拦你的域名解析,拦不了 U 盘。 土办法,但是管用。
ddb7b884f5ef2fb2a87a58cc7c58eb76

五、装上火绒,拿下样本

hosts 清了之后,重新下载安装火绒。这次能正常跑起来了。

装完第一件事:先确认实时防护开着,然后全盘扫描。

这类白签名 + DLL 侧加载的木马,纯手工清理极易残留,因为:

  • 它用了有效的数字签名,静态特征看着「合法」
  • 有多个目录、多条启动项互为备份,删一个还有别的
  • 文件名每次都不一样,按文件名做规则根本拦不住

所以顺序上排骨的建议是:先让杀软全盘扫一遍把能抓的都抓走(同时它会自动隔离留证据),再用 Autoruns 这类工具手工复核漏网的,而不是反过来。

扫描结果和后续的清理复查这里先不展开(下篇会拿它当分析素材),先给一句结论:扫完之后还有残留,而且残留不止一处。

5.1 隔离区就是样本库

火绒扫完,被判定为恶意的文件会进隔离区,文件名就是样本的 SHA1——文件名本身就带着身份标识,导出来直接对应得上。

很多人的做法是「扫完了,点一下清理,收工」。但那样一来,样本就永久消失了,你也就永远没法回答「它到底是什么」这个问题。更麻烦的是,样本一旦没了,连「杀软到底有没有杀干净」都没法验证。

所以排骨做的是:从隔离区把样本还原出来,另外存到一个专门的目录里,留着做分析。(因为手快,部分样本已经没了……)

⚠️ 提取样本也有纪律:

  1. 提取样本时断网,别去双击它
  2. 存到专门的隔离目录,用压缩包加密码(惯例密码 infected)封起来,很多杀软会直接拦下未加密的恶意文件
  3. 有条件就扔进虚拟机做,别在装着自己各种账号的物理机上分析
  4. 分析过程里绝对不执行样本

六、善后,以及那个 zip 到底从哪来

清到一半排骨意识到一个比「删干净」更重要的问题:它到底是怎么进来的?

不知道根源在哪,清干净了也没用——因为你不知道下一次该怎么防。

6.1 用 .lnk 反查时间线

入手点是 Windows 一个目录:

%APPDATA%\Microsoft\Windows\Recent\

这就是「快速访问」里那些最近文件记录的来源。Windows 会给每一个被打开过的文件在这里留一个 .lnk 快捷方式,而 .lnk 里面嵌着完整的原始路径。

这意味着:哪怕文件本体已经被删了,这里还能还原出「你当时打开的是哪个文件、在哪个目录」。

排骨就是用这个方法找到了源头:

项 值
投毒文件 C:\Users\Ray\Downloads\install.g.0.10.zip
打开时间 2026-09-11 17:32:41
首批落地 2026-09-11 17:33:24(间隔 43 秒)
文件现状 zip 本体已被删除,全盘搜索无结果

43 秒。 从双击那个压缩包,到第一个恶意文件落地,中间只隔了 43 秒。而那 43 秒里排骨在干嘛?大概率是在解压、在找安装程序、在犹豫要不要点——而它已经在装了。

时间线对得这么死,入口就没有第二种解释了。

6.2 那个 zip 是哪来的

这是整件事里排骨最想讲清楚的一段。

排骨那天在搜索 DeepSeek harness。搜出来的结果里,排在最前面的是一条广告,点进去的站点看着跟官网一模一样。真正的官网,被挤在广告下面。

于是排骨点了上面那个,下了它的「官方安装包」。

那个文件叫 install.g.0.10.zip,命名仿照的就是官方安装包的格式,看不出任何问题。下完当时感觉不对,只把安装包删了,没做进一步检查——但删掉文件并不等于删掉痕迹,真正把这条线索续上的是 6.1 节的 .lnk 方法:文件本体确实找不回来了,找回来的是它的原始路径和打开时间。 这也是本篇排骨觉得最有价值的一次补救。

跟游戏没有半点关系。 当时确实在玩泰拉瑞亚,但那只是让排骨最早发现异常的场景,感染和游戏无关。真正的原因是:

广告位投毒 + 仿冒官网。攻击者不攻击你的电脑,攻击你对搜索结果的信任。

这件事真正吓人的地方在于:它不是「下载破解软件」「逛资源站」这种有明显风险的行为。 搜一个正经工具、点第一条结果,是所有人每天都在做的事。排骨当时唯一的「错」,就是没往下翻一屏去核对真正的官网域名。

所以这节的实用建议只有一条:

做法 说明
看到「广告」标记就往下翻 搜索引擎会把广告位排在最前,而且标记有时候很不显眼
核对域名,不要核对页面长相 抄页面是最容易的事,域名抄不了
重要工具直接从收藏夹或手动输域名 绕过搜索引擎这一环
下完先看安装包大小和签名 官方安装包通常有数字签名

6.3 清理和收尾

杀软扫完、手工复查完,事情其实还只做了一半。排骨当时列的清单:

事项 做了什么
清除残留 杀软扫不到的边角:空目录、伪装文件、标记文件
删除恶意启动项 ⚠️ 注意别删到系统真项,见下
检查有没有被留后门 计划任务、系统服务、WMI 永久事件订阅
全改密码 + 开两步验证 见下
评估要不要重装 见下

先说启动项那个坑,这是排骨差点犯的致命错误:

恶意软件的注册表项名会伪装成安全软件组件,比如带上 Tencent、Alibaba、SecurityHealth 这种字眼。而 Windows 自己确实有一个真的启动项叫 SecurityHealth(指向 C:\WINDOWS\system32\SecurityHealthSystray.exe)。

看见带 SecurityHealth 就删,会把系统自己的安全中心启动项删掉。 判断标准只有一个:指向哪个路径。

手动查:

# 看当前用户和全局的 Run 启动项
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"
Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run"
  • 指向 C:\WINDOWS\system32\ → 系统组件,正常
  • 指向 C:\Program Files\ 下一串乱码字母的目录 → 高度可疑
  • 指向 C:\Users\Public\ 或 C:\ProgramData\ 下的随机目录 → 基本就是恶意

然后说改密码,这条优先级最高。

为什么:这类木马带了完整的网络通信模块(WS2_32.dll、WININET.dll、urlmon.dll 都在它的加载列表里),而它在机器里待了整整三天。所以必须按已经泄露来假设,而且有个关键要求——改密码要用另一台干净的设备,别用中毒的机器:你在中毒机器上敲的每一个新密码,它都能顺手抄走。

改的优先级:邮箱(它是所有账号的找回入口,丢了等于全丢)→ 网银 / 支付 → 微信 / QQ → Steam(有库存和交易)→ GitHub 等开发账号 → 学校教务系统。

改完立刻开两步验证(2FA)。 密码泄露了还有救,因为攻击者不一定解得开 2FA;密码泄露 + 没开 2FA,那就是直接送。

最后是「要不要重装」。 排骨当时的判断是建议重装,理由三条:

  1. 木马带有效的代码签名,说明对方不是随便玩玩的水平
  2. 落地目录不止一个,组件冗余,手工清理无法保证彻底
  3. 杀软被禁用过,无法确认在它控制期间还干了什么

重装前注意顺序:先备份重要资料到移动硬盘 → 用干净机器扫一遍备份 → 再恢复。 顺序反了,等于把病毒一起搬进新系统。

七、复盘

关于这到底是个什么东西。 排骨当时只有两条证据:CPU 常年在 90% 以上,以及它加载了完整的网络模块。这两条能推出「高度疑似挖矿」,但推不出更多。后来把样本哈希送去多引擎平台,才拿到更可靠的方向。

屏幕截图 2026-09-28 203155

屏幕截图 2026-09-28 202808

结果是 8 / 28 引擎报毒,其中微软的命名 Trojan:Win64/CoinMiner、安天的 Trojan[Miner] 都直接指向 CoinMiner 类;但没有一家给出统一的家族名——卡巴斯基判的是 not-a-virus:HEUR:RiskTool(风险工具),Avast / AVG 只给了泛化名 MalwareX-gen,GDATA 是 Gen:Variant.Application,而平台自己的家族标签是 AGEN。

⚠️ 这里排骨要纠正自己一个说法:一开始排骨写的是"五家引擎命名一致",这是错的。实际是 8 家报毒、命名各不相同。而且安天那条检出名是 Trojan[Miner]/Linux.CoinMine...——一个 Linux 家族的命名出现在 Windows PE 上,说明引擎在做泛化匹配,不能当成精准定性。多引擎结果只能给方向,给不了定论。

但这个方向来得太晚,对当时的处置没什么帮助。真正救了排骨的是最土的两件事:断网,和翻 hosts。

哪里慢了。 发现环节慢了半天——一直往「画面设置」方向查,直到想起这游戏吃 CPU 才转向。准备环节不及格——没装第三方杀软,而且 Defender 被停用这件事,当晚其实是通过搜索 windowsdefender--enablertp- 发现的,只是发现了也没能把它恢复起来(服务已被停、恶意进程还在守着)。清除环节也不彻底,杀软扫完还有残留,还有一个落地目录是几天后复查才发现的。唯一算合格的是抑制:断网够快。

哪里做对了。 三件事:断网没犹豫;没急着删文件(虽然还是漏了挂起进程这一手);坚持找入口——如果只满足于「病毒删掉了」,那 43 秒的时间线和那个假官网就永远不会被发现,下次还会中。

如果只记三句话:

第一句:卡顿、风扇狂转、进程随机名——先看 CPU 占用前几名,别一上来就调画面。

第二句:出事的第一个动作是断网,不是删文件。

第三句:杀软装不上、官网打不开,先去翻 C:\Windows\System32\drivers\etc\hosts。

最后加一句排骨自己的体会。 这次真正让排骨后怕的不是病毒多厉害,而是入口有多普通——搜一个正经工具、点第一条结果,这是排骨平时闭着眼睛就在做的事。攻击者把力气花在「让你自己走进去」,而不是攻破什么系统。

感谢您能看完我这一篇没什么太大用处的牢骚话,当时因为急着清毒,许多东西都忘了取证,现在就连样本都是残缺的,后面我会尽可能想办法还原出来,单独出一份正式的应急响应报告。
05af8d999e45f2139a0443637ae82a1d

参考

posted @ 2026-10-10 22:51  半扇排骨  阅读(16)  评论(0)    收藏  举报