词条 | Padding Oracle |
释义 | 什么叫Padding OraclePadding在这里的含义是“填充”,因为对于加密算法来说,它们是基于等长的“数据块”进行操作的(如对于RC2,DES或TripleDES算法来说这个长度是8字节,而对于Rijndael算法来说则是16、24或32字节)。但是,我们的输入数据长度是不规则的,因此必然需要进行“填充”才能形成完整的“块”。“填充”时比较常用的是PKCS #5规则,简单地说,便是根据最后一个数据块所缺少的长度来选择填充的内容。 例如,数据块长度要求是8字节,如果输入的最后一个数据块只有5个字节的数据,那么则在最后补充三个字节的0x3。如果输入的最后一个数据块正好为8字节长,则在最后补充一个完整的长为8字节的数据块,每个字节填0x8。使用这个规则,我们便可以根据填充的内容来得知填充的长度,以便在解密后去除填充的字节。 在解密时,如果算法发现解密后得到的结果,它的填充方式不符合规则,那么表示输入数据有问题,对于解密的类库来说,往往便会抛出一个异常,提示Padding不正确。Oracle在这里便是“提示”的意思,和甲骨文公司没有任何关系 如何进行Padding Oracle Attack如果输入的密文不合法,类库则会抛出异常,这便是一种提示。攻击者可以不断地提供密文,让解密程序给出提示,不断修正,最终得到的所需要的结果。这里的一个关键在于,攻击者所需要的提示仅仅是“解密成功与否”这样一个二元信息,例如它在一个Web程序中可能只是“200 - OK”及“500 - Internal Server Error”这样的表现形式,而不需要其他任何详细信息。 例如,现代流行的Web框架大都是开源的,因此它的加密方式完全透明(当然这点其实并不是必须的,只是大有帮助而已),对于攻击者来说唯一不知道的便是密钥。于是攻击者便可以根据这个加密方式设计有针对性的密文,最终得到密钥(及IV等信息)。在很多时候,一个网站都会使用同样的密钥和IV,于是只需从一个漏洞,便可以在网站的其他方面进行破坏,或解密信息,或绕开验证。 在具体操作上还可以有许多方式进行辅助,在Juliano Rizzo和Thai Duong的《Practical Padding Oracle Attacks》(及此)论文(下文称PPOA)中便提到了很多方式,例如使用Google搜索异常的关键字(这说明许多站点都把异常信息输出在页面上),检查代码,从外表检查一些BASE64形式的字符串,猜测常见的分割符,如“--”,“|”或是“:”等等。PPOA认为,如今Padding Oracle漏洞与SQL注入,脚本注入等漏洞一样无处不在,论文中还详细讨论了利用这个漏洞来攻击eBay拉丁美洲站点,CAPTCHA等应用,以及在JSF(包括Apache MyFaces和Sun Mojarra实现),Ruby on Rails等Web框架中的漏洞——奇怪的是其中反而没有提到ASP NET。 |
随便看 |
|
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。