前言
目前市面上不少安全扫描apk并评估的公司会针对以下这项进行扫描
防御原理和攻击原理,看最下面的参考,别人写的很好,我就没必要再累述了
未使用编译器堆栈保护技术
风险描述:
为了检测栈中的溢出引入了Stack Canaries漏洞缓解技术。在所有函数调用发生时,向栈帧内压入一个额外的被称作canary的随机数,当栈中发生溢出时canary将被首先覆盖,之后才是EBP和返回地址。在函数返回之前,系统将执行一个额外的安全验证操作,将栈帧中原先存放的canary和.data中副本的值进行比较,如果两者不吻合,说明发生了栈溢出
危害描述:
不使用Stack Canaries栈保护技术,发生栈溢出时系统并不会对程序进行保护
修复建议:
使用NDK编译so时,在Android.mk文件中添加:
LOCAL_CFLAGS := -Wall -O2 -U_FORTIFY_SOURCE -fstack-protector-all
如果是使用cmake编译则在CMakeLists.txt文件中添加
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-all")
缺点
增加很多额外栈空间,增加程序体积
参考:
1.gcc栈溢出保护机制:stack-protector - ArnoldLu - 博客园
2.GCC 中的编译器堆栈保护技术_yuanbinquan的博客-CSDN博客_堆栈保护