android2022. 6. 30. 15:16

Android 12 Wifi driver에서 발생한 cfi_check fail 대한 회피 방법

 

결론부터 살펴보면 아래와 같이 cfi crash 발생하는 모듈의 Android.mk 또는 bp

LOCAL_SANITIZE LOCAL_SANITIZE_BLOCKLIST 등록하시면 됩니다.

(bp 경우, 별도의 방법 참조  : https://source.android.com/devices/tech/debug/cfi )

 

//wpa_blacklist.txt

fun:*driver_cmd*

 

 include $(CLEAR_VARS)
 LOCAL_MODULE := wpa_supplicant
+LOCAL_SANITIZE := cfi
+LOCAL_SANITIZE_BLOCKLIST := wpa_blacklist.txt


 include $(CLEAR_VARS)
+LOCAL_SANITIZE := cfi
+LOCAL_SANITIZE_BLOCKLIST := wpa_blacklist.txt
 LOCAL_MODULE := libwpa_hidl

 

실제로 wpa_supplicant libwpa_hidl 사이에서 따로 빌드된 Realtek static library 특정 함수를 호출(indirect call)하면서 발생하는 것으로 추측됩니다.

로그상의 crash로그를 보면 driver_cmd symbol 나타내고 있습니다.

 

따라서 해당 오류를 회피하기 위해 wpa_blacklist driver_cmd 함수에 대한 예외를 등록하면 컴파일 타임에 참조하게 되어 cfi_check 무사히 넘어갈 있습니다.

 

참조:

#Cfi 관련 포스트 1 (취약점에서 어떻게 cfi 동작하는지 + 컴파일 옵션)

https://www.redhat.com/en/blog/fighting-exploits-control-flow-integrity-cfi-clang

#Cfi 관련 포스트 2 (cfi컴파일 옵션에 대한 설명)

https://clang.llvm.org/docs/ControlFlowIntegrity.html#ignorelist

'android' 카테고리의 다른 글

logcat option 활용  (0) 2022.10.25
dumpsys package 참조  (0) 2022.09.11
sendevent로 Linux keyevent 전송 방법  (0) 2022.04.01
RecyclerView  (0) 2022.03.07
Fragment간 데이터 주고 받기  (0) 2022.03.07
Posted by easy16