快捷搜索:  网络  渗透  后门  CVE  扫描  木马  黑客  as

行使OAM加密缺点漏洞组织任意用户身份测试

SEC Consult 团队发现了 Oracle Access Manager (OAM) 上的一种故意思的加密格式,本文中,我们将演示怎么样用这类加密方式的微小特性改变来对实际产品的安全性产生影响。终极,行使这类安全性影响漏洞,可以组织任意身份验证令牌,来假冒任意用户完成对 OAM 功能的恶意损坏。

利用OAM加密瑕玷漏洞构造任意用户身份测试

Oracle Access Manager (OAM) 是甲骨文 Oracle Fusion Middleware 中间件系列的首要部件,它首要用于解决种种 Web 应用环境的身份验证,如其在 Web 服务器应用程序中内置的走访认证组件 Oracle WebGate。当某用户对服务器上的受限资源提议走访要求后,要求会被转发到 OAM 的验证终端。随后,由 OAM 该终端来对用户身份进行验证,验证明现以后,再把要求转发给服务器中相应的 Web 应用。由于所有验证都由 OAM 的一个核心应用来完成,因此,用户只要 OAM 验证一次即可任意走访 OAM 的所有受限资源(单点登录情形下)。

在某研究阐发中,我们发现,OAM 的加密格式存在严重漏洞隐患,行使该漏洞,我们能组织绕过 WebGate 的会话令牌,假冒合法用户并走访任意受限资源。此外,我们还能完成用户 cookie 伪造,假冒 OAM 任意合法用户。

触及漏洞的 Oracle 产品

当前市面普遍在用的两个支持版本 11g 以及 12c 都受到该漏洞影响。本文中,我们只对 12c 版本作出测试。通过简单的 Google 搜索可以发现,大批知名企业公司网站都部署有 OAM 产品,其中不乏 Oracle 公司本身,这些还仅只是暴露在互联网上的一部分。

我们于 2017 年底把该漏洞通报给 Oracle 后,漏洞补丁于今年 4 月底才发布。在此,我们希翼 OAM 用户能及时更新补丁,以堵塞漏洞。此外,也建议 OAM 治理员阐发历史日记记录,识别出前期攻击线索。行使该漏洞的攻击,由于 padding 加添尝试 (javax.crypto.BadPaddingException),会导致大批的解密失败记录。建议受影响用户请及时更新 Oracle 在 4 月发布的症结补丁,具体修复建议,请点此查看我们给出的  修复指南。

漏洞手艺阐发

下列手艺阐发需要一定加密解密以及 Padding Oracle 手艺基础,你可以直接到文章底部观看 Demo 视频。在手艺层面来说,在 OAM 身份验证阶段,会发生下列一系列过程:

用户对受限资源提议走访要求

Web 服务器中的 OAM Webgate 组件验证该要求后,再把其转发给 OAM,以后会生成一个在 URL 参数中传递的加密新闻 (「encquery」)

用户再根据用户名暗码在 OAM 上进行验证

通过成功的登录信息「encreply」,OAM 将用户转向到 Web 服务器上

Web 服务器将用户转向到最初要求的受限资源上,并在 Cookie (「OAMAuthnCookie」) 中生成一个加密验证令牌

用户凭此 Cookie 中的令牌成为合法身份,并具备后续任意验证权限通过

为防篡改,WEB黑客,加密新闻「encquery」、「encreply」以及 OAMAuthnCookie 的值受加密维护,如许,当 OAM 或 WebGate 接收到这些值时,即使来自用户,也能确保其未被篡改。OAM 使用一种单一加密格式来加密所有这些新闻,而且 OAM 以及 WebGate 同享这类加密方式的密钥。

加密格式

结合之前的阐发,可以看出,漏洞缘故起因在于加密格式的完成方式上,创建加密新闻的算法在处理键值配对时,使用了同享的密钥,并生成了一个 base64 编码的输出串,该加密格式的目的在于提供完备性以及安全性。下列为其工作机制:

输入情势:

 salt=<salt> <key>=<value> [...] validate=<base64 hash> 

其中,salt 是一个随机生成值,而验证性参数 validate 一组固定的 MD5 哈希;以后,该字符串被使用分组暗码方式被加密。

漏洞阐发

在阐发这类加密格式时,我们起首想到的是,其中所使用的加密算法 (即哈希以及 CBC 分组暗码) 都是用于确保真实性目的的。可以假设,因为不知晓同享密钥,因此攻击也不可能发生。

有暗码基础的人可能会注意到,CBC 加密模式会有懦弱性,譬如可以使用 Padding 加添方式对它进行损坏。一种经典的 padding oracle 攻击需要加密输入以及 padding oracle 情势的字符加添。Padding oracle 会揭破在解密时,提供的加密字符串是否具有有用的加添。

简单地说,分组加密需要加添才能加密任意长度的新闻。而且,分组加密只能处理固定大小信息 (如 16 字节)。要是我们想要加密如 25 字节长的新闻,我们将加密前 16 字节,然后留下 9 字节。由于分组加密不能处理 9 字节的输入,我们则需要附加 7 个加添字节。完成的典型要领是添加加添字节,其中每一个字节包含加添字节的数量 (如 PKCS#7 加添中定义的)。例如在这类情形下添加的长度为 7 字节,则每一个字节值为 7 或 0×7。当正好不需要加添时,将追加完备的加添块,此时为加添块为 16 字节,每一个字节包含值 16。

Padding oracle attack 攻击在此不是本文的重点,我们只要要找到一种要领来确定在解密时,加密字符串是否具有适量的 padding 加添。利用OAM加密瑕玷漏洞构造任意用户身份测试

要确定 Padding oracle attack 攻击是否可行,我们需要观察体系对消除加添的不同反应,如对没法正确消除加添的新闻,以及可以正确消除加添但随后未通过检查新闻(如消除加添文本不能被正确解析时)。当我们之条件到的 encquery 参数尝试这两种测试用例时,OAM 两次都以「体系错误」响应,因此我们不能清楚区域别出这两种情形。当这类情形下,OAM 会显示「体系错误」,因此,为了区别正确加添的新闻以及错误加添的新闻,其中一种要领就是,使我们在攻击中使用的所有正确加添的新闻看起来完全合法。很显著,当 OAM 遇到有用新闻时,它就不会报错,反之,要是体系消除加添失败,我们也会看到错误新闻。

组织 Padding Oracle 攻击

究竟证实,OAM 会忽略掉任何附加到解密新闻的中的垃圾字符,如一些空格,我们可以尝试创建一个在末尾带有空格字符的有用新闻。然后,我们再添加进入测试加添有用性的块。

具有有用加添的解密新闻以下所示:

 <valid message> <decryption of tested blocks>07070707070707  

这里,OAM 会起首检查加添,然后解析有用新闻,忽略掉新闻的其余部分。

具有无效加添的解密新闻以下所示:

 <valid message> <decryption of tested blocks>8BA09FB1ABC543 

OAM 会检查加添有用性,并抛出体系错误。

Space: The Final Frontier 统统与空格符有关。

那么,怎么样用暴力破解的方式来确定有用新闻后面跟的是空格符呢?

起首,我们要创建一个长度可被分组长度单位整除的有用新闻,在此,需要找到一种影响明文的要领,使其生成的密文餍足该标准。究竟证实,加密要求 encquery 中包含了用户要求的最初受维护的 URL 链接,我们能拿获这类由不同长度 URL 下的 encquery 值:

http://example.com/protected/?

http://example.com/protected/?a

http://example.com/protected/?aa

http://example.com/protected/?aaa

一旦 encquery 的长度增添了 16 字节,我们就知道加密新闻的长度可被 16 整除,且最后一个分组块由加添字节组成:

|---------------|---------------|

< valid msg>PPPP

< valid msg >PPP

< valid msg  >PP

< valid msg   >P

< valid msg    >PPPPPPPPPPPPPPPP

如许,我们可以把最后一个分组块丢弃,并继续使用不包含加添的加密字符串,然后,我们确保下面的分组块在第一个地位中包含空格字符。

我们可以创建一个不包含 padding 加添的有用加密新闻,但我们选择的分组块和原始新闻的最后两个块要保持加添有用。在不故意影响解密后的效果文本,我们可以任意选择加密新闻中的分组块。然则,我们可以继续尝试随机加密块,直到明文块相符我们的需要。

|---------------|---------------|---------------|---------------|

< valid msg    >< brute force  >< last 2 blocks of orig. msg   >

要是解密的有用新闻后面没有空格符,则该新闻无效,并显示「体系错误」。我们将继续使用随机分组块组织新闻,直到终极被 OAM 接受。然后我们发现,我们选择的解密分组块有时地在第一个字节中包含了一个空格符:

|---------------|---------------|---------------|---------------|

< valid msg    > <random data  >< last 2 blocks of orig. msg   >

在此步骤以后,攻击就变得很简单了:我们只要使用我们构建的新闻,作为要测试有用加添的分组块的前缀。要是加添不正确,则体系消除加添步骤将失效,从而导致体系错误新闻。要是加添正确,OAM 将正确地接收加添新闻,最先解析有用新闻,并且体系不报错

|---------------|---------------|---------------|---------------|---------------|---------------|

< valid msg    > <random block >< last 2 blocks of orig. msg   >< some text        ><pad valid?>

组合攻击

Padding oracle 允许我们解密任意新闻,由于所有加密新闻 ( encquery、enceply、oamauthnokoie ) 都使用相同的密钥加密,因此我们可以解密这些新闻中的任何一个。

这里很少有人知晓,Padding Oracle 攻击也能够用于加密新闻,因此,要是我们组织一个有用的身份验证 cookie 并用我们的 Padding Oracle 攻击对其进行加密,我们就可以将它作为合法新闻传递给 Web 服务器。究竟上,攻击就如许就毫无心识地产生了,因为加密字符串中的 validate 值是一个简单的散列,而不是 HMAC 算法产生的,所以我们可以不需任何密钥简单地对它进行计算破解。目前,我们已经开发出了该漏洞的攻击行使脚本,但出于安全考虑,暂不地下发布。

DEMO

下列视频中,我们演示了行使该漏洞,在受限资源以及应用中,攻击者可以假冒包括 admin 在内的任意用户。 

*参考来源:Sec-consult,FreeBuf 小编 clouds 编译,

您可能还会对下面的文章感兴趣: