[하루한줄] Detecting Dynamic Loading in Android App

URL

Detecting Dynamic Loading in Android Applications With /proc/maps

Target

Android 10 API 29 이상 버전

Explain

Android application은 dynamic loading을 통해 run-time 도중 어느 시점에라도 코드를 메모리에 로드할 수 있습니다. API level 29부턴 이 dynamic loading을 악용해 apk의 정적 검사를 피해 가는 악성코드들을 막기 위해 apk에 속하지 않은 코드의 load를 막고 있습니다. 하지만 여전히 DexClassLoader에 의한 .dex 파일의 dynamic loading이 가능해 여전히 악용에 사용될 수 있습니다.

모든 프로세스는 각각 /proc/[PID]라는 디렉터리를 갖고, 그중 /proc/[PID]/maps라는 파일은 프로세스의 매핑된 메모리가 기록돼있습니다. 따라서 프로세스가 어떠한 파일에 접근하면 /proc/[PID]/maps에 기록이 남습니다. 이 기록을 통해 프로세스가 /data/data 디렉터리 속 .dex 접근 여부를 검사해 dynamic loading을 탐지할 수 있습니다.

Reference

https://developer.android.com/reference/dalvik/system/DexClassLoader

https://developer.android.com/about/versions/10/behavior-changes-10



본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.