FreeBSD.org 这次的入侵事件

• 本文约 1152 字,阅读大致需要 3 分钟 | Development | Security

我回国之前, FreeBSD 安全团队内部正在准备一项重要的安全公告,不过这次不是由于 FreeBSD 的代码本身,而是由于 FreeBSD 项目集群中的一部分受到了入侵。这份公告后来于 11 月 17 日正式 发表

经过事后分析,这次入侵,最早可以追溯到在今年大约9月的时候的一次针对某家公司的入侵。攻击者通过穷举的方式获得了这家公司一台机器的 root 账户,并获得了对应的 master.passwd 文件。根据事后的日志分析,攻击者应该是通过离线破解的方式得到了这台机器上所有用户的密码明文(旧式 FreeBSD 系统预设的散列方式是 salted MD5),并以这台机器为跳板扫描了一系列的其他系统,并找到了一位 committer 的未经保护的 ssh 私钥。这个私钥令攻击者获得了另外一台服务器的权限(其中包括一台机器上的 root 权限),并在那台服务器上进一步获得了另外一位 committer 的未经保护的 ssh 私钥。

那位 committer 的 ssh 私钥拥有 FreeBSD 用于联编预编译包的 Pointyhat 集群的 root 权限,而这个集群尽管和 FreeBSD.org 集群在一定程度上是隔离的,但在最初建立时,为了方便,以只读方式挂载了 FreeBSD.org 集群所有用户 /home 目录的 Filer。由于两组集群上都启用了内核审计机制 (audit),集群管理员发现,有人以 root 的身份访问了部分用户的 /home 目录,并很可能复制走了一些私钥文件。

至此,我们认为整个集群已出现了重大安全风险,应立即停止有风险的服务器的运行,并根据备份对全部文件进行审计。除了切断了大部分服务器的电源之外,扫描并停用了所有在 FreeBSD.org 集群上存有私钥的公钥的登录权限,对某些系统上运行的操作系统替换成了经过审计的 -CURRENT。

由于时间关系,不可能对每个二进制包都重新做审计,因此比较简便的办法,便是全部删去,从备份中恢复没有问题的,并重新联编其他的二进制包。为了尽快恢复服务,这次经过讨论还做出了准备提前淘汰 CVSup 的计划。

公众可见的变化包括:

我从这次事件中学到的教训是: