Android 未使用编译器堆栈保护技术解决方法
-
风险描述
为了检测栈中的溢出,引入了Stack Canaries漏洞缓解技术。在所有函数调用发生时,向栈帧内压入一个额外的被称作canary的随机数,当栈中发生溢出时,canary将被首先覆盖,之后才是EBP和返回地址。在函数返回之前,系统将执行一个额外的安全验证操作,将栈帧中原先存放的canary和.data中副本的值进行比较,如果两者不吻合,说明发生了栈溢出。
-
危害描述
不使用Stack Canaries栈保护技术,发生栈溢出时系统并不会对程序进行保护。
-
修复建议
使用NDK编译so时,在Android.mk文件中添加:LOCAL_CFLAGS := -Wall -O2 -U_FORTIFY_SOURCE -fstack-protector-all
-
ndk { //选择要添加的对应cpu类型的.so库。 abiFilters 'armeabi', 'armeabi-v7a' cFlags "-Wall -O2 -U_FORTIFY_SOURCE -fstack-protector-all" }
在项目app的build.gradle中添加