Oracle Database身份验证协议安全限制绕过漏洞(CVE-2012-3137)
1 |
|
漏洞概述:
Oracle是一款广泛被使用的商业数据库。
Oracle O5LOGON认证协议存在漏洞,这个漏洞可以使攻击者离线暴力破解Oracle数据库密码,
从而访问受保护的Oracle数据库中的数据。要利用这个漏洞攻击者只需要知道一个合法的
数据库用户名和一个正确的数据库名(SID),不需要使用中间人攻击。
Martinez Fayo 在2010年5月向Oracle报告了这个问题,Oracle在2011年的中期通过patch
set 11.2.0.3修复了这个漏洞,使用了新版本的协议。但是Oracle没有在 11.1和11.2 中
修复这个问题,因此这些版本仍然存在漏洞。
由于漏洞发生在认证阶段的早期,获取需要的数据后马上断开连接,不会在Oracle数据库
里留下登录日志,因此这个漏洞被称为 “stealth password cracking vulnerability”
细节:
O5LOGON 过程
1 |
|
和这个漏洞相关的两个报文,包含了需要的信息, 如下:
(1) Server -> client
1 |
|
(2) server <- client
1 |
|
1 |
|
Oracle O5LOGON 协议介绍
Oracle 11g password hash 算法为, 用户名 sys, 密码 nsfocus
1 |
|
可以在Oracle数据中查询:
1 |
|
- client 发送用户名给server
2 server 判断是否是可用的用户名,如果用户名可用,进入下一步。 - Server 加密AUTH_SESSKEY, 取出 salt
使用AES192 CBC 加密AUTH_SESSKEY, key为oralce数据库中的20字节的password hash和4个
零(192bit)。
Server 将加密的AUTH_SESSKEY和AUTH_VFR_DATA 发送给Client
AUTH_VFR_DATA 为saltClient计算password hash (通过用户输入的密码), 使用Client计算的password hash
(加上4个零)为key 使用AES192 CBC算法加密Client AUTH_SESSKEYClient 计算 Combine_SessKey
将解密的Server AUTH_SESSKEY 和 Client AUTH_SESSKEY的第17个字节开始的24个字节做异
或,将异或结果的前16字节做MD5, 后8字节做MD5, 得到Combine_SessKeyClient 使用 Combine_SessKey 加密用户输入的密码明文,得到 AUTH_PASSWORD
使用算法为AES192 CBCClient 将加密的Client AUTH_SESSKEY和加密的AUTH_PASSWORD 发送给 Server
Server 使用数据库中的 password hash 解密 Client AUTH_SESSKEY
Server 尝试解密AUTH_PASSWORD 解密成功则认证通过
参看:
http://www.oxid.it/downloads/oracle_tns_aes192_check.txt
这个漏洞是生成server sesskey 时,在末尾添加了8个0x08, 因为salt已知(由服务器返回
),因此我们只需尝试计算SHA-1的password hash,然后利用这个password hash 去解密
server sesskey, 只要末尾是8个0x08 则说明这是正确的server sesskey,此时使用的密
码为正确的密码,原因是
AES 192 加密块长度为128 bit (16 byte), 分组加密如果明文内容不是块长度的整数倍时
需要填充。填充部分的内容为差的字节数,比如11字节的明文,需要在末尾填充5个0x5
从汇编代码里分析server session key 的生成过程,分析的程序为 Oracle.exe 11.2.0.1.0
oracle.exe调用 oran11.ztvo5ke 加密session key
oran11.ztvo5ke -> oracrypt11.ztceenc -> orancrypt11.ztcen
1 |
|
sess_key.type == 0x1492 ( AES 192 )
plaintext 24 + 16 = 40
1 |
|
ztceenc 运行前后的情况
1 |
|
AES 192 加密40字节的明文,需要填充 8个 0x08
11.1
1 |
|
11.2
1 |
|
1 |
|
1 |
|
exploit (POC)
o5logoncrack.c
1 |
|
参考链接
- http://threatpost.com/en_us/blogs/flaw-oracle-logon-protocol-leads-easy-password-cracking-092012
- http://www.soonerorlater.hu/index.khtml?article_id=512
- http://marcel.vandewaters.nl/oracle/security/cryptographic-flaws-in-oracle-database-authentication-protocol
- http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2012-3137
- http://www.openwall.com/lists/john-users/2012/09/28/1
- http://marcel.vandewaters.nl/oracle/security/password-hashes