攻击模型假定本文遵循如下几点假设:(1)目标系统受W④X防御方法保护,攻击者不能实施代码注入类攻击。但攻击者具备修改进程中可写内存的能力,攻击者也可以通过程序中的漏洞获得程序中的关键信息(如栈中返回地址值)。
(2)攻击者可以获得用于发动攻击的代码碎片,如可从动态加载的库函数中获取足够的代码碎片。并能通过各种漏洞(如缓冲区溢出、格式化字符串等)篡改进程中的控制流数据(如返回地址、GOT、指针函数地址等),从而将程序的控制流转移到程序中的任意代码处,实施ROP攻击。
(3)攻击者不能对操作系统及底层硬件环境发起攻击,即当前的可信计算基仅包括操作系统和硬件。
1.2密钥指定位多密钥加密方法是从一组程序启动时随机生成的密钥集中取出任一密钥用于返回地址值加密,而这一密钥也将用于返回地址值的解密,
·多密钥加密方法R【O]R[I】Rf2。]为了从密钥集中取得随机指定的密钥,可将地址中的,z位作为密钥指定位,并与一随机值进行哈希运算,用计算得到哈希值定位密钥。同时为了保证在解密时能引用相同的加密密钥,需要保证经过加密后的返回地址值相应的密钥指定位保持不变,在解密时利用相同的n位作为输入,经哈希运算后取得同一密钥。这里的加密算法采用异或运算,因此可对所有密钥相应的n位设置为O,则加密后可保证地址值的n位保持不变。
设在32位地址中,n位作为密钥指定位,密钥集R中共有2‘个密钥,为保证每个密钥都可被引用,可设置n>i。每个密钥相应的n位均设置为0。
密钥指定的哈希运算可以是地址中n位值与程序启动时生成的随机值r相加,再取2‘模,即用的值就可确定密钥。由于加密算法采用异或运算,因此在地址值加密后,n位的值不变。
设攻击者通过格式化字符串漏洞获取某一加密后的地址值,与本地相同的地址异或运算后获取一个密钥。由于ROP攻击中一般需要多个gadget实施攻击,不同的gadget的起始地址均不同,不同的地址可能匹配不同的密钥,因此攻击者不可能利用单一密钥伪装gadget的地址值以绕过多密钥防御方法。若密钥集有2‘个密钥,且一次ROP攻击需要后个gadget,攻击者在获得一个密钥情况下,除非后个都适应于该密钥,则攻击者可以破解多密钥方法。此时的成功攻击的概率为P。=(1/2‘)‘,若且2‘=32,则成功的概率仅为P.一9.09e一3。
倘若攻击者通过格式化字符串漏洞进一步获取多个加密后的地址值,从而获取密钥集中的部分密钥。但由于不清楚返回地址与密钥的匹配关系,只能通过猜测来构造合适的返回地址值,在此种情况下成功攻击的概率仍然为P,=(1/2‘)‘。在最坏的情况下,即使攻击者可以获得全部的密钥,但仍只能猜测返回地址值与密钥匹配关系来构造合适的恶意数据,成功攻击的概率仍为P,。从攻击者角度分析,攻击者需要推测出密钥与地址之间的匹配关系以实施成功的攻击。
密钥指定位n的大小与有效性成正比,即凡越大,意味着可以设置更多的密钥(即2‘的值越大),攻击者成功猜测的概率也就越低,系统安全性越高。
然而随着密钥指定位n的增大,由于部分地址中高比特位的值相似度较高,可能会造成哈希运算的值不够分散,会集中分布在某一区间内。而这种情况有可能会造成密钥集中某一段密钥会被大量使用,若攻击者使用这一段密钥,则会间接提高攻击者成功的概率。因此密钥指定位n的选择需要尽量避免地址中相似度较高的比特位,如地址高比特位。
1.3密钥迷惑位多个密钥可以防止单一密钥泄露后防御方法被绕过的问题,但是在最坏的情况下,攻击者可以获得全部的密钥,此时虽然攻击者不能从获得的密钥中直接推断出返回地址与密钥的匹配关系,但是有可能通过全部密钥中比特位为0的数量和位置,推测出密钥指定位。由于密钥指定所用的哈希算法较为简单,任意两组泄露的加密返回地址值就有可能被攻击者猜测出随机值r。而一旦密钥指定位凡和随机值r被攻击者所获得,则意味着密钥与地址之间的匹配关系被破解,多密钥加密方法也随即被破解。
为有效应对n位被猜测及随机值r被逆运算破解,防止返回地址与密钥之间的匹配关系被攻击者万方数据陈林博等:用多密钥加密方法防御面向返回编程的攻击所获知,可以通过在密钥指定位(即n位)的相邻两端增设零,用以迷惑攻击者,如图2所示。将新增加的设置为零的比特位称为密钥迷惑位,其本质是防止攻击者成功猜测聘的位置和大小。在增设密钥迷惑位后,用m。i。表示密钥中相同位为零的最小位的个数。攻击者在获取全部密钥后,需要在m。i。位中猜测出正确的连续n位大小,然后才能通过逆哈希运算获得随机值r。
增设密钥迷惑位为了进一步降低攻击者成功猜测n位的概率,增加攻击难度,可将连续的凡位用离散的n位来替换。通过在地址中随机指定离散的n位作为密钥指定位,相应增设的密钥迷惑位也将与密钥指定位一起离散分布在地址中,如图3所示。其中砒,]为密图3 离散的密钥指定位与密钥迷惑位进制科片瘫钥集中的密钥,m。、m:和m,代表在地址中分布的密钥指定位和密钥迷惑位的大小,因此m。。=m,+m,+m,。由于所有密钥中其他比特位存在都为零的可能性,因此m。i。的数量会有所增加。
需要注意的是,随着m。i。位的增加,攻击者猜测连续n位的难度也在增加。但是随着密钥中值为零的比特位相应增加(这等同于异或加密后的地址值中不变的位数也会增加),需要变化的比特位也相应减少。若m。i。位足够大,攻击者为提高成功率,可猜测地址中发生变化的32一m。i。位的值而非n位的信息(如n位的长度与位置)。这种攻击方法在m。i。足够大时能增加成功攻击的概率,假设极端情况下m。,。=31,地址中只有一位在加密时需要改变,攻击者只需要猜测唯一发生变化的比特位是0或l就能破解多密钥方法,而此时的密钥已经失去了意义。因此需要权衡考虑m。i。位的大小,本文第3节将分析这种攻击成功的概率,以确定最优的m。i。1立。