이번에 대학 학생 모임에서 세미나 발표 준비를 하면서 공부했던 내용에 대한 포스팅입니다.
비록 시연부분에서 실패해서 발표는 다른 내용으로 했지만 공부한 내용들이 있기 때문에 블로그에 남김니다.
What is Framaroot?
Framaroot는 여러 Device들에 맞는 여러 Rooting Exploit을 포함하고 있는 Rooting 어플입니다.
Superuser와 su 프로그램이 포함되어 있으며, 이들은 Android 2~4 버전에서 동작합니다.
자세한 내용은 http://forum.xda-developers.com/showthread.php?t=2130276 를 참고하시면 됩니다.
여러가지 Exploit이 있지만 제 폰인 Vega Iron에서는 Gandalf라는 Exploit으로 Rooting을 성공하여
Gandalf Exploit에 대해서 분석하겠습니다.
Gandalf Exploit
이 Exploit이 사용하는 취약점에 대해 간단히 소개하자면, Camera Driver에서 mmap 함수를 이용하여 물리 메모리에 접근할 때 제대로 제한을 걸지 않아 Kernel space까지 접근이 가능합니다.
(CVE-2013-2595, Qualcomm Gandalf camera driver)
Analysis
일단, Framaroot의 apk파일의 내용을 정적 분석을 통해 확인하겠습니다.
방법은 .apk 파일 정적 분석 방법과 .apk 파일 정적 분석 방법2을 따라하시면 됩니다.
AndroidManifest.xml의 내용입니다.
<?xml version="1.0" encoding="utf-8"?> <manifest android:versioncode="1" android:versionname="1.8.0" package="com.alephzain.framaroot" xmlns:android="http://schemas.android.com/apk/res/android"> <uses-permission android:name="android.permission.CAMERA"> <application android:theme="@style/AppTheme" android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:allowbackup="true"> <activity android:label="@string/app_name" android:name="com.alephzain.framaroot.FramaActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"> <category android:name="android.intent.category.LAUNCHER"> </category></action></intent-filter> </activity> <activity android:label="@string/app_name" android:name="com.alephzain.framaroot.FramaAdbActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"> </action></intent-filter> </activity> </application> </uses-permission></manifest>
보시면 이 apk의 버전은 1.8.0이며, com.alephzain.framaroot로 Package되어 있습니다.
취약점을 사용하기 위해서인지 android.permission.CAMERA로 카메라에 대한 권한을 요청하고 있으며, FramaActivity에서 프로그램이 시작하는 것을 확인할 수 있습니다.
다음은 Jd-gui를 통해 본 Java Source Code입니다. 직접 보시면 아시겠지만, 여기서는 Rooting에 관한 주요 Code가 보이지 않습니다.
Code 초반에 보시면 System.loadLibrary("framalib"); 를 보실 수 있습니다. 주요 내용이 JNI를 통해 제공되고 있는 듯 합니다. 해당 내용은 Framaroot-1.8.0\lib\armeabi에 있는 libframalib.so 파일에 있습니다.
libframalib.so 파일
리버싱 툴인 IDA를 통해 내용을 확인 할 수 있습니다.
문자열 검색을 통해 /proc/kallsyms, setresuid 와 같은 Linux와 관련된 내용이 있는 것을 확인할 수 있습니다.
IDA에는 Hex-ray plugin을 통해 C code를 볼 수 있으나, 이 파일은 C code로 바뀌지 않아 어떻게 Rooting을 하는지 제대로 분석하기가 힘들었습니다. 우연히 Exploit의 Code를 구하게 되어 다음 포스팅에서 소개하도록 하겠습니다.