🛡️ 第三章 计算机病毒与间谍软件
📄 一句话概括

反病毒软件判断一个东西是不是坏东西,只有三条路:看它长得像不像已知的坏东西(特征)、像不像坏东西该有的样子(启发式)、干的事像不像坏东西(行为);而蜜罐与沙盒是两条更特别的思路——不判断,造一个局让它自己露出来。

📝 本节和前面几节的关系

上一节(防御计算机病毒的标准做法)算清了特征库的时间差:每天有 637 个新变种落在那段窗口里。这一节回答的就是那段窗口靠什么顶住——也就是反病毒软件除了【对清单】之外还能做什么。

蜜罐还和第二章的防守思路呼应:外部入侵的检测和防御 讲的是误报比漏报更致命(告警多得没人看等于零),而蜜罐是唯一一种误报接近零的检测手段,原因很简单:没有任何正常业务会去碰它。

一、三条判断路线

路线 它在问什么 优点 致命弱点
特征(比对清单) 这个文件长得像某个已知坏东西吗 快、准、几乎不误报 只认识见过的;改一个字节就可能绕过
启发式(看像不像) 这段代码具备坏东西的典型特征吗(能自我复制、要拿系统权限…) 能抓同一家族的变种 容易误报(正常程序也常干这些事)
行为(看做了什么) 它实际干了什么(改启动项、批量加密文件、连陌生地址) 不依赖长相,新样本也拦得住 要等它动(有时已经晚了);对合法工具的滥用难判

三条路不是互斥的,现代软件三样都用。但三样的权重已经变了——这正是上一节 Demo 里那个 60%~70% 对 99% 的差距来源。

二、蜜罐:放一个没人该碰的东西

蜜罐(honeypot)= 一个专门摆出来给人碰的假目标。

它的逻辑极其朴素:

正常用户和正常系统,没有任何理由去访问这个东西。所以只要有人碰它,那就是敌情。

这带来一个别的技术给不了的性质:误报几乎为零。普通检测手段每天要花大量精力区分【这是攻击还是正常业务】,而蜜罐从设计上就不需要这个区分。

常见的几种诱饵:

诱饵 放在哪 碰到说明什么
一个没人用的管理员账号 目录服务里 有人在喷洒口令 / 枚举账号
一份叫【薪资表_备份】的假凭据文件 共享盘里 攻击者已经进到内部文件区
一台假文件服务器 内网段上 有人在横向移动
一个假的密钥/口令 代码仓库、配置文件里 有人在自动收集凭据(几分钟内就会有反应)

注意最后一行:把假凭据放进代码仓库,是性价比最高的一种——成本几分钟,而自动化的凭据收集器会在很短时间内撞上来。

三、沙盒:把文件放进一个假机器里跑一遍

沙盒(sandbox)= 一个隔离的、用完就扔的假机器,把可疑文件放进去运行,观察它做什么。

它解决的是特征与启发式的共同盲区:没见过的样本没有清单可对,但它的动作是可以观察的。

所以沙盒的输出不是【是不是病毒】,而是一份行为报告:它连了哪个地址、写了哪些文件、改了哪些注册表项、起了哪些进程。这份报告的价值在于——它记录的是行为,而行为比长相更难伪装。

但沙盒有一个结构性弱点:它是自动化的、批量跑的,因此它很规律;而规律就是可以被识别的特征。 一个样本只要在动手之前先确认【我是不是在一个沙盒里】,就能决定什么都不做——于是沙盒给出【干净】的结论。

四、动手 Demo:五个样本进沙盒,三个诱饵放在网里

samples = [
    ("X2", "先 sleep 20 分钟,再开始加密文件", "没动"),
    ("X3", "检测到 CPU 只有 1 核就主动退出", "没动"),
    ("X4", "检测到网卡 MAC 前缀 08:00:27 就退出", "没动"),
    ("X5", "检测到鼠标 60 秒没动就退出", "没动"),
]

实跑输出:

一、沙盒:把文件放进一个假机器里跑一遍,看它干什么
  分析窗口(行业常见):5 ~ 20 分钟

  样本  它做了什么                                沙盒里    判定
  ----------------------------------------------------------------------------------------------
  X1    一运行就联网下载第二阶段载荷              动了      抓到:外连 + 落盘
  X2    先 sleep 20 分钟,再开始加密文件          没动      漏:跑满了也没超过窗口
  X3    检测到 CPU 只有 1 核就主动退出            没动      漏:认定这不是真机器
  X4    检测到网卡 MAC 前缀 08:00:27 就退出       没动      漏:VirtualBox 的固定指纹
  X5    检测到鼠标 60 秒没动就退出                没动      漏:真人才会动鼠标

  五个样本,沙盒认定【干净】的会有 4 个。
  → 【沙盒报告说干净,不等于文件干净】。
  近 80% 的恶意样本至少带一种规避行为;约 40% 的分析
  在商业沙盒里会【提前终止】。
  → 正确读法:静态看一眼(是不是调了 Sleep、是不是查了
    虚拟机指纹),再决定信不信这份动态报告。

二、蜜罐:放一个【谁都不该碰】的东西,碰了就是敌情
  三个诱饵:
          正常业务应该碰几次  实际被碰  说明
  ----------------------------------------------------------------------------------------------
  诱饵 1  0 次                2 次      口令喷洒 + 枚举
  诱饵 2  0 次                1 次      已经进到内部文件区
  诱饵 3  0 次                3 次      横向移动

  正常业务碰了 0 次,攻击者碰了 6 次。
  → 这 6 条告警【全是真警】,误报 0。

① 蜜罐与沙盒的共同点:都不靠【认长相】,而是【造一个局】。
② 两者的差别:沙盒是【把样本关起来观察】,蜜罐是
   【把自己摆出去当靶子】——一个在实验室里,一个在网里。
③ 蜜罐最值钱的位置是【内网】而不是边界:边界上的蜜罐记录到
   的主要是背景扫描噪声;内网里的蜜罐只在【已经出事】时响。
④ 蜜罐的纪律:高交互蜜罐是真的机器,必须单独隔离段、
   不能有回内网的路、外发要监控——否则它会变成攻击者的跳板,
   责任在你。

读这个输出:两半各有一句关键结论。

五、⚠️ 2026 现状

30 秒实验

今天做一件最小的事:在你自己的手机或电脑上,找一找【谁都不该碰】的东西有没有被碰过。

  1. 打开你的云盘或邮箱,看最近登录记录 / 设备列表(大部分服务都在【账号安全】里提供)。
  2. 找你不认识的设备或地点——那就是你的蜜罐在响。
  3. 如果有,立刻改密码 + 点【登出所有设备】(这一步能作废被盗的会话令牌)。

顺带一个可以马上做的诱饵:在一个你几乎不用的邮箱地址或一个旧账号上,故意不动它。如果它忽然收到一堆垃圾邮件,说明这个地址进了一份被倒卖的名单——这就是你自己的一个信号源。

这一节要带走的一句是:沙盒回答【它做了什么】,蜜罐回答【有人来了】——前者可能被躲过,后者躲不过,因为【碰到不该碰的东西】这件事没法解释成误会。

常见误区

  1. 错误:沙盒说文件干净,那就可以放心打开。——纠正:【干净】只代表【在被观察的那段时间里它选择了不做】。 一个会先确认自己是不是在沙盒里的样本,在沙盒里本来就是什么都不做的。近 80% 的样本带规避行为,约 40% 的分析会提前终止——这两个数字决定了沙盒报告属于【能证明它有罪,不能证明它无罪】。正确用法:沙盒报【恶意】就当成恶意;报【干净】时回去看静态特征。

  2. 错误:蜜罐就是一种杀毒手段。——纠正:蜜罐不拦人,它只报警。 它的产出是一条高置信度的告警(有人在探路),而不是【挡住了什么】。它是检测手段而不是防护手段——真正的【拦】还得靠防火墙、端点防护、权限控制。把蜜罐当成防线会失望;把它当成【最早的那一声响铃】才对。

  3. 错误:蜜罐摆得越逼真越好,干脆摆一台真服务器。——纠正:逼真度要跟隔离强度同步提高,否则是给自己埋雷。 高交互蜜罐是真的可被攻陷的机器:如果它和你的内网有路可通、或者它被当成跳板去攻击了别人,法律与责任都在你这边。正确的配置是:单独网段、没有回内网的路、外发全部监控与限流。逼真度是给攻击者看的,隔离度是给自己留的。

  4. 错误:我们单位小,用不上蜜罐。——纠正:小的场景反而最适合用最便宜的那种——放一个假的凭据文件、一个没人用的账号。它不需要额外设备、不需要授权采购,实现成本几乎是零,而它能抓到的恰恰是最难发现的那一类:已经在内部、正在慢慢横向移动的人(第二章的接管与后门,最终都要靠这种手段才看得见)。大厂买的是平台,小单位买的是那几个诱饵。

自测三问(点开对答案) 1. 为什么【特征】这条路一定要等到【有人见过】才能起作用?这个限制能消除吗? —— 因为**特征本质是一份指纹清单**,而**指纹必须先有人拿到样本、分析、提取**。这条链上每一环都要时间:样本被人捕获、被分析、指纹被写出来、被分发到你机器上。所以**这个限制不能消除,只能缩短**(这就是为什么后面有云查杀:把比对放到云端,省掉分发那一段)。**能消除的不是延迟,而是【只有特征这一条路】这个前提**——加上行为检测之后,那段窗口里还有人在值班。 2. 为什么说【不一致本身就是发现】?请用沙盒这个具体场景说一遍。 —— 因为**静态和动态回答的是两个不同的问题**:静态回答【这段代码具备哪些能力】(比如它调用了 Sleep、它查了虚拟机指纹),动态回答【它在这次运行里做了什么】。**如果静态看它明明具备做坏事的能力,动态却什么都没做**,那只有两种解释:**要么它确实是干净的**(少见),**要么它认出了自己在被观察**(常见)。这个疑点**只能靠两个结果放在一起看才发现**——只看动态那一份,你得到的结论是【干净】,是一个错误的安心。 3. 为什么蜜罐放在【内网】比放在【边界】更有价值? —— 因为**边界上的噪声是已知的、内网里的动静是未知的**。放在公网边的蜜罐,记录到的大部分是互联网上永不停止的背景扫描——**这些你自己也知道会来**,所以它提供的新信息很少。而放在内网的蜜罐,**正常业务从来不会去碰**,所以它一旦响,含义就非常明确:**已经有人进来了,而且正在找下一个落脚点**。对应到本课的脉络上,这正好覆盖了第二章 2-9、2-13 反复强调的那块盲区——**边界挡不住的那部分(内部横向移动),要靠内部的信号来看见**。

相关笔记