-
風險描述
為了檢測棧中的溢出,引入了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中添加