2008年8月26日星期二

Debian OpenSSL Predictable PRNG Bruteforce SSH Exploit分析

针对攻击方式的一些分析:
今天早上在milw0rm上看到攻击代码,因此对该问题进行分析和攻击测试:
比较详细的文档在:
http://metasploit.com/users/hdm/tools/debian-openssl/
http://itsecurity.net/
造成该漏洞的原因:
Debian系统开发时,为了照顾到一些兼容性,因此在Openssl packege的md_rand.c中,将

 MD_Update(&m,buf,j);
[ .. ]
MD_Update(&m,buf,j); /* purify complains */

如上代码去掉了。
这导致的问题就是,OpenSSL PRNG(pseudo-random number generator),所产生的随机数不够随机,该随机数就是当前的process id。作为linux系统来说最大的进程数为32,768(milw0rm上的文档写的是65535),总之这个随机数完全是数量有限的。可以通过 brute force的方式,将所有的密钥对算出来。
http://sugar.metasploit.com/debian_ssh_rsa_2048_x86.tar.bz2 这个文件就是采用2048位rsa加密的一共32768对密钥对都在这里边。
现在面临的问题是,我怎么知道目标机器是否存在该漏洞,和对应的是哪对密钥?
首先存在该问题的是Debian这个分支的linux,我使用的ubuntu就在这个分支中。
另外,在进行ssh登录时,我们对fingerprint_key这串字符串是有印象的,fingerprint是和密钥对一一对应的。
http://demo21.ovh.com/bb9d29f8820e8f8078e2e45e90360972P/debian_ssh_scan_v3.tar.bz2
这个工具是首先将密钥对应的fingerprint都计算出来,通过脚步对目标机器的fingerprint进行比对,就能知道目标机器是存在问题。
./debian_ssh_scan_v3.py ubuntu.desk
98304 fingerprints loaded.
ubuntu.desk:22 sshd fingerprint 54676741313a1814deb9ead6a9b06032 VULNERABLE (RSA 2048 bit key, pid 10236)
然后我们就能在debian_ssh_rsa_2048_x86.tar.bz2中找到密钥对,我比较过,和我ubuntu上的/etc/ssh/ssh_host_rsa_key 和ssh_host_rsa_key.pub内容是一样。
那么如何攻击呢?
我们能得到目标机器的密钥对,但是并不代表就能得到控制权,至少在我的ubuntu上是这样的。
以ssh -l root -i /tmp/54676741313a1814deb9ead6a9b06032-10236 ubuntu.desk为例,使用-i命令指定所使用的私钥,结果是仍然需要密码。原因ubuntu上sshd在收到使用key进行challenge的 请求后,会在/root/.ssh/authorized_keys里找对应的公钥(pub key),但是这个操作就需要手动实现了:cp /etc/ssh/ssh_host_rsa_key.pub /root/.ssh/authorized_keys

不知道debian平台上的效果如何?

没有评论: