Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
debian-ssh — Debian OpenSSL 可预测的伪随机数生成器 (CVE-2008-0166) | Kitploit
工具/GitHubGitHub/g0tmi1k/debian-ssh
侦察密码攻击漏洞分析漏洞利用信息收集密码学渗透测试
GitHubg0tmi1k/debian-ssh

debian-ssh

Debian OpenSSL 可预测的伪随机数生成器 (CVE-2008-0166)

查看仓库
4101093年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

Debian OpenSSL 可预测 PRNG


链接

原始 URL:http://metasploit.com/users/hdm/tools/debian-openssl/(镜像)

漏洞利用:

  • https://www.exploit-db.com/exploits/5622/ (Perl)
  • https://www.exploit-db.com/exploits/5720/ (Python)
  • https://www.exploit-db.com/exploits/5632/ (Ruby)

推荐工具:Crowbar(能够暴力破解 SSH 密钥)

测试方法:ssh-vulnkey & dowkd.pl

CVE(CVE-2008-0166):

  • http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-0166
  • https://security-tracker.debian.org/tracker/CVE-2008-0166
  • https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2008-0166
  • https://www.cvedetails.com/cve/CVE-2008-0166

信息

漏洞

2008年5月13日,Debian 项目宣布,Luciano Bello 在他们分发的 OpenSSL 包中发现了一个有趣的漏洞。这个漏洞是由于从 md_rand.c 中删除了以下代码行造成的:

root@kitploit:~
	MD_Update(&m,buf,j);
	[ .. ]
	MD_Update(&m,buf,j); /* purify 报错 */

这些行被移除是因为它们导致 Valgrind 和 Purify 工具在链接 OpenSSL 的任何代码中产生关于未初始化数据使用的警告。你可以在这里看到一份向 OpenSSL 团队提交的报告。删除这段代码的副作用是削弱了 OpenSSL PRNG 的种子生成过程。没有使用随机数据来初始化种子,唯一使用的"随机"值是当前进程 ID。在 Linux 平台上,默认最大进程 ID 是 32,768,导致所有 PRNG 操作中使用的种子值非常有限。

影响

2006年9月至2008年5月13日期间在基于 Debian 的系统(Ubuntu、Kubuntu 等)上生成的所有 SSL 和 SSH 密钥可能受到影响。对于 SSL 密钥,所有已生成的证书都需要重新创建并发送给证书颁发机构签名。在基于 Debian 的系统上生成的任何证书颁发机构密钥都需要重新生成并吊销。所有允许用户使用 SSH 和公钥认证访问服务器的系统管理员都需要审计这些密钥,检查是否有任何密钥是在易受攻击的系统上创建的。任何依赖 OpenSSL PRNG 来保护传输数据的工具可能容易受到离线攻击。任何使用有缺陷系统生成的主机密钥的 SSH 服务器都可能遭受流量解密,并且中间人攻击对用户来说将是不可见的。这个漏洞很糟糕,因为即使没有使用 Debian 软件的系统也需要进行审计,以防使用了在 Debian 系统上创建的密钥。Debian 和 Ubuntu 项目发布了一套用于识别易受攻击密钥的工具。你可以在下面的参考资料部分找到它们。

玩具

Debian 和 Ubuntu 发布的黑名单展示了密钥空间究竟有多小。在创建新的 OpenSSH 密钥时,对于给定的架构、密钥大小和密钥类型,只有 32,767 种可能的结果。原因是 PRNG 使用的唯一"随机"数据是进程 ID。为了生成与这些黑名单匹配的实际密钥,我们需要一个包含目标平台正确二进制文件的系统,以及一种使用特定进程 ID 生成密钥的方法。为了解决进程 ID 问题,我编写了一个共享库,可以预加载,它返回用户为 getpid() libc 调用指定的值。

下一步是构建一个 chroot 环境,其中包含来自易受攻击系统的实际二进制文件和库。我从本地网络上的一个 Ubuntu 系统获取了快照。你可以在这里找到完整的 chroot 环境10。为了使用特定类型、位数和进程 ID 生成 OpenSSH 密钥,我编写了一个可在 chroot 环境中执行的 shell 脚本。你可以在这里找到这个 shell 脚本11。该脚本被放置在提取的 Ubuntu 文件系统的根目录中。为了生成密钥,使用以下命令行调用该脚本:

root@kitploit:~
# chroot ubunturoot /dokeygen.sh 1 -t dsa -b 1024 -f /tmp/dsa_1024_1

这将生成一个新的 OpenSSH 1024 位 DSA 密钥,其中 getpid() 的值始终返回数字"1"。现在我们有了第一个预生成的 SSH 密钥。如果我们对所有 PID 重复此过程,直到 32,767,然后对 2048 位 RSA 密钥重复,我们就覆盖了运行有缺陷 OpenSSL 库的 x86 系统的有效密钥范围。有了这个密钥集,我们可以攻陷任何在 authorized_keys 文件中列有易受攻击密钥的用户帐户。如果 SSH 服务器使用了易受攻击的主机密钥,这个密钥集也可用于解密之前捕获的 SSH 会话。预生成的 1024 位 DSA 和 2048 位 RSA 密钥集(x86)的链接见下面的下载部分。

关于这些密钥的有趣之处在于它们如何与进程 ID 绑定。由于大多数基于 Debian 的系统使用顺序进程 ID 值(从系统启动开始递增,并在需要时回绕),给定密钥的进程 ID 也可以指示该密钥在系统启动后多久生成。如果我们反过来看,我们可以根据正在攻击的目标确定在暴力破解期间使用哪些密钥。当尝试猜测启动时生成的密钥(如 SSH 主机密钥)时,PID 值小于 200 的密钥将是暴力破解的最佳选择。当攻击用户生成的密钥时,我们可以假设大多数有效的用户密钥是在进程 ID 大于 500 且小于 10,000 时创建的。这种优化可以显著加快通过 SSH 协议对远程用户帐户的暴力破解攻击。

在不久的将来,此站点将更新,包含一个暴力破解工具,可快速获取任何允许使用易受攻击密钥进行公钥认证的 SSH 帐户的访问权限。下面数据文件中的密钥使用以下命名约定:

root@kitploit:~
 / 算法 / 位数 / 指纹-进程ID
   和
 / 算法 / 位数 / 指纹-进程ID.pub

要获取任何公钥的私钥文件,你需要知道密钥指纹。获取指纹的最简单方法是通过以下命令:

root@kitploit:~
 $ ssh-keygen -l -f targetkey.pub
 2048 c6:7b:14:fa:ae:b6:89:e6:67:17:ee:04:17:b0:ec:4e targetkey.pub

如果在编辑器中查看公钥,我们还可以推断密钥类型是 RSA。要定位此公钥的私钥,我们需要解压数据文件,并查找名为以下内容的文件:

root@kitploit:~
 rsa/2048/**c67b14faaeb689e66717ee0417b0ec4e-26670**

在上面的示例中,指纹以十六进制表示,去掉了冒号,进程 ID 显示为"26670"。如果我们想使用此公钥认证到易受攻击的系统,我们将运行以下命令:

root@kitploit:~
 $ ssh -i rsa/2048/c67b14faaeb689e66717ee0417b0ec4e-26670 root@targetmachine

常见问题

问:生成这些密钥花了多长时间?

答:我使用了 31 个主频为 2.33Ghz 的 Xeon 核心。生成了 x86 的 1024 位 DSA 和 2048 位 RSA 密钥,耗时两小时。4096 位 RSA 密钥大约用了 6 小时。8192 位 RSA 密钥的生成按当前速度需要大约 100 小时,很可能在完成之前停止。


问:你会分享你将密钥生成分布到多个处理器上的代码吗?

答:不会。代码是为这个特定集群硬编码的,而且写得很糟糕,不值得清理。


问:使用这些密钥破解 SSH 用户帐户需要多长时间?

答:这取决于网络速度和 SSH 服务器的配置。应该有可能在几个小时内尝试所有 32,767 个 DSA-1024 和 RSA-2048 密钥,但要注意目标服务器上的反暴力破解脚本。


问:我使用 16384 位 RSA 密钥,它们能被破解吗?

答:是的,只是时间和处理能力的问题。生成所有 32,767 个 8192 位 RSA 密钥大约需要 3100 小时的 CPU 时间(按我现在使用的 31 个核心需要 100 小时)。我猜想 16384 位 RSA 密钥集需要接近 100,000 小时的 CPU 时间。需要注意的是,大多数密钥都在一个更小的范围内,基于进程 ID 种子,并且不需要生成整个集合就能覆盖大多数用户密钥(大多数密钥在前 3,000 个进程 ID 内)。

版权所有 © 2008 H D Moore


下载工具