Redundant dynamic Canary Zhilong Wang Jun Zhu
Redundant dynamic Canary Zhilong Wang Jun Zhu
己有工作 同一进程使 fork时候更 用相同的 可以被暴力 新子进程TLS canary,存 破解 放于TLS 内canary 子进程中新老 栈桢返回崩溃 是否多见? fork时更新 效率较低 TLS和已有函 子进程返回 数栈帧的 时候时崩溃 canary
已有工作 同一进程使 用相同的 canary,存 放于TLS 可以被暴力 破解 fork时候更 新子进程TLS 内canary 子进程返回 时候时崩溃 fork时更新 TLS和已有函 数栈帧的 canary 效率较低 子进程中新老 栈桢返回崩溃 是否多见?
针对子进程新老栈桢返回情况是否多见的调研 常见的编程惯例是:fork+exit或者fork+exec函数组,其基于的现实依据是"实际 应用中,单纯让程序分叉意义不大,新增一个子程序,很可能是为了让子进程单独执行 一段代码,实现与主进程不同的功能,并且在执行结束退出子进程”。 已查看的服务器程序ngnix/sshd中,均采取fork+exec方式
常见的编程惯例是:fork + _exit 或者 fork + exec函数组,其基于的现实依据是”实际 应用中, 单纯让程序分叉意义不大, 新增一个子程序, 很可能是为了让子进程单独执行 一段代码, 实现与主进程不同的功能, 并且在执行结束退出子进程”。 已查看的服务器程序ngnix/sshd中,均采取fork + exec方式。 针对子进程新老栈桢返回情况是否多见的调研
DynaGuard针对子进程是否会返回到父进程栈桢的看法: 在一般意义下,RAF SSP无法保证程序的正确性。因为它假定一个子进程不会合法地 重复使用继承的栈桢并进行函数退出检查
在一般意义下,RAF SSP无法保证程序的正确性。因为它假定一个子进程不会合法地 重复使用继承的栈桢并进行函数退出检查。 DynaGuard针对子进程是否会返回到父进程栈桢的看法:
Redundant dynamic Canaryl的意义与优势: 意义: 提出一种在一般意义下能保证程序正确性的更加健壮的栈保护技术 优势: 更加简洁地设计思路,改动小,性能开销小
意义: 提出一种在一般意义下能保证程序正确性的更加健壮的栈保护技术 优势: 更加简洁地设计思路,改动小,性能开销小 Redundant dynamic Canary的意义与优势:
实现方法 防止暴力破解 效率 正确性 stack guard 返回地址之前插入 最高 canary Preventing brute fork时候更新子线程 高 force attacks canary dynamic guard 记录父进程的函数 低 栈帧的canary位置, fork时更新。 Dynamic Canary 对程序中的canary建 低 Randomization 立链表,动态更新 所有canary Redundantdynamic 使用动态冗余的 高 Canary canary,变换插入值, 不变比对值
实现方法 防止暴力破解 效率 正确性 stack guard 返回地址之前插入 canary 最高 Preventing brute force attacks fork时候更新子线程 canary 高 dynamic guard 记录父进程的函数 栈帧的canary位置, fork时更新。 低 Dynamic Canary Randomization 对程序中的canary建 立链表,动态更新 所有canary 低 Redundant dynamic Canary 使用动态冗余的 canary,变换插入值, 不变比对值 高
实现思路 设计一个可以随时更新TLS内canaryl的值,但是又不影响已经存在的函数栈帧返回时 canaryl的比对。 这要求我们canary存在冗余,这种冗余使得canary可以不断的变化,但是包含有不变 的信息,该不变的信息用于我们在返回时进行比对
设计一个可以随时更新TLS内canary的值,但是又不影响已经存在的函数栈帧返回时 canary的比对。 这要求我们canary存在冗余,这种冗余使得canary可以不断的变化,但是包含有不变 的信息,该不变的信息用于我们在返回时进行比对。 实现思路
2byte canary A ret_aaddress C XOR 2 byte random num B B C
ret_aaddress B C 2byte canary A 2 byte random num B C XOR
2byte canary A ret_aaddress 比对 B XOR A
ret_aaddress B C 2byte canary A XOR A 比对
2byte canary A ret_aaddress C XOR 2 byte random num B B update B when fork a new process!
ret_aaddress B C 2byte canary A 2 byte random num B C XOR update B when fork a new process!