1.xz后门手法“NOBUS”
通过Filippo Valsorda(1)和amlweems(2)的分析,我们可以看到这个xz后门程序使用了以下技术来实现NOBUS效果:
1. 使用硬编码的ED448公钥:后门程序中硬编码了一个特定的ED448公钥,用于验证触发后门的数据的签名。只有拥有对应私钥的攻击者才能生成有效的签名,从而使用这个后门。其他人即使获得了后门程序,也无法使用它。
2. 将签名与目标主机的公钥绑定:ED448签名是根据头部的一部分、命令的一部分以及目标主机SSH公钥的哈希值计算的。这意味着攻击者生成的数据只能在特定的目标主机上触发后门,无法在其他主机上重放。
3. 解密有效载荷需要ED448公钥:触发后门的数据中包含一个经过ChaCha20加密的有效载荷,而ChaCha20的密钥是ED448公钥的前32字节。同样,只有拥有对应私钥的攻击者才能正确加密有效载荷。
4. 命令字节的检查:后门会检查数据头部的三个魔术值生成的命令字节,只有命令字节不大于3时才会执行后门代码。这相当于一个简单的"口令",只有知道如何构造头部的攻击者才能通过这个检查。
综上所述,这个后门使用了非对称加密、数字签名与目标主机绑定、对称加密以及简单的口令等多重技术,确保了只有拥有特定 ED448私钥的攻击者才能在特定目标主机上触发后门并执行命令,而其他人即使掌握了后门程序和触发数据也无法使用,从而很好地实现了NOBUS效果。这体现了后门程序开发者较强的密码学技能和逆向工程对抗能力。
额外的解释:
1. 通过挂钩RSA_public_decrypt函数,该函数会验证服务器主机密钥的签名,签名使用的是一个固定的Ed448密钥。如果验证通过,就会将一个有效载荷传递给system()函数执行。
2. 这个后门可以实现远程代码执行,而不是身份验证绕过。而且这个后门是有限制的,不能重放攻击。
3. 有效载荷是从传递给RSA_public_decrypt函数的N值(公钥)中提取出来的,会先检查一个简单的指纹,然后用一个固定的ChaCha20密钥解密,最后再进行Ed448签名验证。
4. RSA_public_decrypt 是一个用于签名验证的函数(名字有点奇怪)。RSA 签名验证与 RSA 加密是同一个操作。
5. 在进行身份验证之前,攻击者可以通过使用OpenSSH证书来控制传递给RSA_public_decrypt的公钥。
2.NSA的NOBUS指导原则
2013年,前NSA局长Michael Hayden在一次会议上表示“这个世界的进攻和防守都取决于漏洞问题”。接着 Hayden 阐述了NOBUS(Nobody But Us)的概念,即如果NSA认为其他人无法利用某个漏洞,它会放任漏洞不修,以助于自身的间谍活动。
NOBUS作为NSA网络间谍行动(CNE)的指导原则,而这种指导原则反映在漏洞、后门和植入物的设计上。
1.Stuxnet事件表明,NSA可能储备了大量零日漏洞。
2.NSA在Dual EC加密标准中植入的后门就是一个典型的NOBUS后门。
3.TAO在植入物设计上,会为每个目标生成一个新的公钥。
参考资料:
1.https://bsky.app/profile/filippo.abyssdomain.expert/post/3kowjkx2njy2b
2.https://github.com/amlweems/xzbot
3.https://twitter.com/matthew_d_green/status/1433470109742518273