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中添加

posted @ 2021-01-14 16:32  淡然吖  阅读(2051)  评论(0编辑  收藏  举报