后门是绕过正常登录、供人再次进入的入口。本文说明它的原理,以及如何发现和防范(不涉及安装或使用方法)。
它从哪里来,为什么会一直存在
后门很少单独出现,它总是和首次入侵成对出现。攻击者先以某种方式获得据点,然后留下一条回来的路。麻烦之处就在这里:修复最初的漏洞,并不能结束对方的访问。
1. 首次入侵
利用漏洞或被盗凭据获得据点
2. 植入后门
留下一个绕过认证的入口
3. 反复回来
漏洞修复后仍然可以进入
4. 数据外传
与指令服务器通信,数据被传出
后门并不只是服务器被攻破后才被加上去的东西。2024 年曝光的 xz-utils 后门是另一种形式:一个花了很长时间取得维护者信任的人,把后门植入了一个广泛使用的压缩库的分发源码中(CVE-2024-3094)。也就是说,即使你自己的服务器从未被攻破,后门也可能随着你引入的组件一起进来。无论哪种形式,结论都一样:修复了漏洞不等于安全了。要检查是否留下了据点。
实例:植入在发布版和更新中的后门
本站介绍过的案例,加上一个广为人知的公开案例。
| 案例 | 植入位置 | 得到的教训 |
|---|---|---|
| XZ Utils(2024) | 压缩库的发布文件(CVE-2024-3094,CVSS 10.0) | 在大范围进入稳定版之前被发现,起因是一位工程师调查了一次原因不明的变慢 |
| SolarWinds Orion(2020) | 监控软件的正式更新 | 该公司提交给 SEC 的文件称,安装了受影响更新的客户不到 18,000 家。美国 CISA 发布紧急指令,要求联邦机构断开受影响的产品 |
| MOVEit Transfer(2023) | 通过漏洞进入的 Web 服务器(Web Shell) | 零日漏洞导致 Web Shell 被放置,其后端数据库中的数据被整批取走 |
三个案例中,用户都是按正规流程在使用正规产品。即使你自己的服务器从未被攻破,后门也可能藏在你引入的组件或更新里进来。
后门与相近术语的区别
| 术语 | 含义 | 与后门的关系 |
|---|---|---|
| 后门 | 绕过认证、供人再次进入的隐藏入口 | — |
| 漏洞 | 软件的缺陷,非预期的漏洞口 | 常被用于首次入侵,之后再放置后门 |
| 木马 | 伪装成有用软件的恶意软件 | 可能在内部带有后门 |
| RAT(远程访问木马) | 用于远程控制被感染设备的恶意软件 | 设备上后门的典型形式 |
| Web Shell | Web 服务器上的恶意操作脚本 | Web 服务器上后门的典型形式 |
与正当远程维护的区别
作为「远程操作机器的手段」,正当的远程维护和后门看起来很相似。区别在于是否受控。
正当的远程维护
管理员知道它的存在,它受认证和访问控制管理,并且会留在审计日志中。谁在什么时候做了什么都可以追溯。它是经过授权创建的。
后门
由攻击者偷偷植入,绕过认证,并被设计成不留下记录。是一个没人追踪、也没人控制的看不见的入口。
检测与防范
不是靠一项措施,而是三者结合:减少入口、让对方无法留下来、发现变化。
减少入口(阻止首次入侵)
不留下未打补丁的漏洞(及时更新依赖和框架),严格管理凭据和密钥、绝不重复使用,并把暴露面降到最小。没有首次入侵,就没有留下后门的机会。
让对方无法扎根(最小权限与隔离)
把权限范围收紧,把服务相互隔离,让被攻破时的损害停留在有限范围内。设计成一个组件被攻破也不会连带其他部分。
发现变化(完整性与通信监控)
留意不认识的可执行文件或脚本、意外的进程和 cron 条目,以及服务器向你不认识的目标发起的外发通信。EDR 等工具就是为了让异常变化显现出来。
审查依赖与供应链
审查你引入的东西,堵住被投毒的组件把后门带进来的路径。但要注意,签名证明的是来源,不是安全性——关于被投毒的版本通过正规发布流程发出的案例,见防范 npm 供应链攻击;机械化检查见 osv-scanner 入门。
如何检查自己的服务器(Linux 示例)
这些检查的目的是找出你不认识的东西。全部只读取,不会更改任何设置。
检查登录途径
查看每个用户的 ~/.ssh/authorized_keys 中是否有不认识的公钥,以及 /etc/passwd 中是否有陌生用户,或新增的 UID 为 0 的用户。
检查自动运行的内容
检查 crontab -l(每个用户)、/etc/cron.* 和 systemctl list-unit-files --state=enabled,看有没有不是你设置的定时任务或服务。
检查文件变更
用类似 find /var/www -type f -mtime -7 的命令找出 Web 根目录中最近更改的文件,看看有没有在你没部署时出现的脚本。用 debsums -c(Debian 系)或 rpm -Va(RHEL 系)检查软件包文件是否被篡改。
检查外发连接
用 ss -tnp 查看是否有进程从服务器连接未知的目标。定期连接同一个目标的通信,可能是 C2 通信。
如果发现了什么,不要只删除了事:断开网络、保留记录、重建,并更换所有凭据。
按「有人会进来」的前提来规划
后门危险的地方在于它很容易不被发现。正因如此,只依赖「把所有人挡在外面」是不现实的。能够做到「即使有人进来,也留不下据点,而且我们会很快发现」,才能防止事件拖成长期事件。
本站的观点:修复漏洞之后,要检查攻击者是否留下了驻留手段
事件响应中常见的疏漏是修复了漏洞就觉得结束了。我们的立场是:修复漏洞之后,必须继续检查是否还残留后门或来历不明的常驻进程。攻击者的目的从来不是来一次就走,而是留下来。只有切断这一点,响应才算完成。
出处(一手资料)
- NIST NVD, "CVE-2024-3094" — nvd.nist.gov(XZ Utils 后门,CVSS 10.0)
- SolarWinds Corporation, "Form 8-K"(2020 年 12 月 14 日)— sec.gov(受影响客户数)
- CISA, "Emergency Directive 21-01" — cisa.gov
- CISA 等机构,关于 MOVEit Transfer 漏洞 CVE-2023-34362 的联合通告(AA23-158A)— cisa.gov(Web Shell 的放置)
- MITRE ATT&CK, "Server Software Component: Web Shell (T1505.003)" — attack.mitre.org(检测角度)
接下来阅读
- 术语:什么是远程代码执行(RCE)/什么是 C2(命令与控制)
- 术语:什么是路径遍历(入口的一个例子)
- 案例:xz-utils 后门(植入在分发源码本身)
- 案例:防范 npm 供应链攻击
- 案例:AI 写的代码泄露了 API 密钥——真正的原因
FAQ
Q后门和正当的远程维护有什么区别?
从技术上看,两者可能很相似。决定性的区别在于:是否经过授权、是否有人知道它存在、是否留下记录。正当的远程访问是管理员知道的,并受认证、访问控制和审计日志的管理。后门则是偷偷植入的,绕过认证,并且被设计成不留痕迹。同样是远程操作机器的能力,区别在于是否可见、是否受控。
Q后门是怎样被植入的?
大多数是在首次入侵之后安装的,用作留下来的据点。入口通常是没有打补丁的漏洞(例如远程代码执行)、被盗的凭据或 SSH 密钥,或者构建时引入的被投毒依赖包。本站不讲解安装或操作方法。重要的是分层的目标:阻止首次入侵,并且在万一被入侵时让攻击者无法留下来。
Q怎样确认自己是否被植入了后门?
没有一项检查就能确认的办法。有效的做法是同时从几个角度观察:文件完整性监控(是否出现了不认识的可执行文件或脚本)、外发通信监控(服务器是否定期连接未知的目标)、检查意外的进程和 cron 条目,以及依赖审查。只靠其中一项很容易被绕过;组合起来,异常的变化就会显现出来。
Q后门(backdoor)这个词是什么意思?为什么叫「后门」?
意思是不走正门——即正常的登录(认证)——的入口。典型情况是攻击者入侵后植入的,但开发者留下的隐藏维护账号、产品里内置的固定密码,如果用户不知道也无法控制,也被称为后门。在密码学领域,这个词也指为了让政府等第三方能够解密而故意内置的机制。
QWeb Shell 是什么?和后门是一回事吗?
Web Shell 是放置在 Web 服务器上的恶意脚本,可以让人从浏览器等远程操作服务器。它是 Web 服务器上后门的典型形式。在 2023 年 MOVEit Transfer 的大规模泄露中,攻击者利用漏洞放置了 Web Shell,并从其后端的数据库窃取了数据。
Q发现后门后,删掉就可以了吗?
不够。后门可能不止一个,入侵时使用的凭据也可能已被盗。应把服务器从网络上断开,保留调查用的记录,从确认干净的状态重建,并更换所有凭据——密码、SSH 密钥、API 密钥。同时修复让攻击者进来的那个漏洞。