모바일 분석 자동화 도구

스마트폰 2018.04.06 18:08 Posted by TEAMCR@K

김진무 선임컨설턴트

TeamCr@k(해킹보안그룹)

namejin88@a3security.com

(A.K.A nam3z1p)



 모바일 진단 시 항상 필요없는 반복 작업에 시간 쓰는 경우를 주변에서 많이 목격했었습니다. 그래서 그 동안 모바일 프로젝트를 진행하면서 만들었던 배치파일 및 파이썬 코드를 이용해서 윈도우에서 사용가능한 자동화 도구를 만들게 되었습니다. 환경은 C#을 기본으로 ironpython 라이브러리를 이용하여 프로그래밍 하였고 현재 아주 잘 만들어진 frida 모듈을 가져다 사용하였습니다.


 본 도구는 클릭 한방으로 모든 진단이 완료되는 자동화 도구가 아닌 수동으로 분석하는 모의해커들에게 조금이라도 쓸데없는 시간이 낭비되지 않도록 조금 도와주는 도구입니다. 


※ 참고로 아래 글에 사용된 도구의 소스코드는 github를 통해 다운로드 받으실 수 있습니다.

$ git clone http://github.com/nam3z1p/HUA2T_TeamCrak.git



파일정보(실행파일 해시값)

File: HUA2T_TeamCr@k.7z.001

  - MD5: 23e868ecbe44b6fa8959d30a83f6873d

File: HUA2T_TeamCr@k.7z.002

  - MD5: 8df8594965567b7cb372444f95eef2f4

File: HUA2T_TeamCr@k.7z.003

  - MD5: 13033303b6e4e2f8569d3f7f9bbbf114


HUA2T_TeamCr@k.7z.001

HUA2T_TeamCr@k.7z.002

HUA2T_TeamCr@k.7z.003



개요)

1. 환경구성

2. 기능소개

3. 사용방법



1. 환경구성

구성)

 - Windows7 x64

 - 루팅된 갤럭시 노트 2 (안드로이드 4.4)

 - USB 디버깅 허용


설치)

 - adb, jre, python-2.7.14


2. 기능소개


 1. Auto_Tool

    - Decompile(디컴파일)

    - Siging Compile(컴파일 후 사이닝)

    - Re-Install(설치 및 재설치)


 2. HashCheck

    - 원본 파일과 변조된 파일의 해시값을 비교

 3. ScreenShot

    - Device의 현재 화면을 캡쳐

 4. FileExtract

    - File 또는 Directory를 지정하여 이미지(png, jpg, jpeg) 추출

 5. MemoryDump

    - Frida 모듈을 이용해서 Mobile, Emulator에서 Memory, Data 추출

 6. FunctionHook

    - Frida 모듈을 이용하여 Android, iOS, Windows API 후킹


 7. RootingBypass

    - http://teamcrak.tistory.com/378에서 사용한 기법을 이용해서 Android Rooting Bypass



3. 사용방법


아래 그림 1, 2는 HUA2T_TeamCr@k 도구 폴더와 Main UI 입니다. 

<그림 1> HUA2T_TeamCr@k 폴더 내부



<그림 2> HUA2T_TeamCr@k Main UI



3.1 Auto_Tool


 * apktool version up 방법은 Lib/ 폴더에 apktool 파일을 삭제하고 최신버전으로 다시 복사해서 넣으시면 됩니다. (현재 Lib/apktool_2.2.3.jar 버전입니다.)


 - Decompile(디컴파일) 



FileOpen을 통해 Input_File에 존재하는 APK 파일을 선택합니다.

<그림 3> APK 파일 선택



Decompile 옵션을 선택하고 COMMAND 버튼을 클릭 시 진행 과정이 출력됩니다.

<그림 4> Decompile 진행



Decompile이 완료되면 Output_Decompile 폴더에 APK 파일명으로 폴더가 생성됩니다.

<그림 5> APK 파일명으로 폴더 생성



 - Siging Compile(컴파일 후 사이닝)



Sign-Compile 옵션을 선택하고 COMMAND 버튼을 클릭 시 진행 과정이 출력됩니다.

<그림 6> Sign-Compile 진행



Compile & Signing이 완료되면 Output_SignedFile 폴더에 Signed_APK 파일명으로 파일이 생성됩니다.

<그림 7> Signed_APK 파일명으로 파일 생성



 - Re-Install(설치 및 재설치)



DeviceList 버튼을 클릭하여 현재 연결된 Device 목록 불러와 선택합니다.

<그림 8> 연결된 Device 선택



Re-Install 옵션을 선택하고 COMMAND 버튼을 클릭 시 진행 과정이 출력됩니다. 동일하게 Signing된 APK 파일을 재설치할 경우 덮어쓰기가 가능합니다.

<그림 9> Signed_APK 파일 설치



3.2. HashCheck



FileOpen을 통해 Original_File과 Signed_File을 선택하고 HASHCHECK 버튼 클릭 시 MD5, SHA-1, SHA-256으로 해시값이 출력됩니다.

<그림 10> 해시값 출력


3.3. ScreenShot



DeviceList 버튼으로 Device를 선택하고 Default 또는 Resize(사이즈 직접 입력)로 Capture 버튼을 클릭 시 왼쪽에 Capture된 화면이 출력됩니다.

<그림 11> 화면 Capture 시도


Capture가 완료되면 ScreenShot 폴더에 image_[i].jpg로 이미지 파일이 생성됩니다.

<그림 12> 이미지 파일 생성


3.4. FileExtract



FileOpen 또는 DirectoryOpen으로 Extract할 파일 또는 디렉터리를 선택하고 Extract 버튼 클릭 시 이미지가 추출됩니다.

<그림 13> 이미지 추출



이미지 추출이 완료되면 Extract_File/Extract_Output/[파일명 or 폴더명]으로 폴더에 추출된 이미지 파일이 생성됩니다.

<그림 14> 추출된 이미지 파일 생성



3.5. MemoryDump

  FridaServer Start 버튼으로 실행 안될 경우 루팅된 폰에 ADB Shell[2000] 권한 획득이 안되서 그러는 겁니다.  FridaServer Start 버튼 연타로 계속 누르면 루팅된 폰에서 ADB Shell[2000] 권한 요청이 나오고 실행하면 잘 됩니다. 

 만약 잘 안될 경우는 CMD Usage Manual 클릭하시고 메뉴얼을 참조해서 adb로 직접 실행해주시면 잘 작동합니다.


DeviceList 버튼으로 Device를 선택하고 FridaServer Install & Start로 Frida를 실행합니다.

<그림 15> FridaServer Install & Start



ProcessList 버튼을 클릭하여 현재 실행중인 Process를 선택하고 Memory Dump 버튼 클릭합니다.

<그림 16> 실행중인 프로세스 Memory Dump



Memory Dump가 완료되면 Dump/Memory_Dump/[Process명] 폴더에 추출된 dump 파일과 string.txt 파일이 생성됩니다.

<그림 17> 추출된 dump 및 string 파일 생성



strings.txt 파일에는 Dump 파일들의 string 값이 저장되어 있습니다.

<그림 18> 추출된 이미지 파일 생성



위와 동일한 방법으로 Data Dump 클릭 시 data/data/[프로세스명]에 저장되어있는 파일을 추출합니다.

<그림 19> 실행중인 프로세스 Data Dump



Data Dump가 완료되면 추출된 파일은 Dump/Data_Dump/[Process명] 폴더에 저장됩니다.

<그림 20> 추출된 dump 파일 생성



3.6. FunctionHook

  아래 내용은 Windows 계산기로 후킹한 이미지들 입니다. 하지만 동일한 방법으로 Mobile 옵션을 선택하고 Android_testhook.js, iOS_testhook.js  파일 이용 시 Mobile API Hooking이 가능합니다. 샘플코드를 확인하시면 됩니다. 자세한 내용은 생략하겠습니다.



Windows 옵션을 선택하고 ProcessList으로 실행중인 clac.exe 프로세스를 확인합니다.

<그림 21> Windows 옵션으로 실행중인 calc.exe 프로세스 확인



JsFileOpen으로 Lib/hookcode에 저장되어있는 window_testkook.js Sample 코드를 선택합니다.

<그림 22> window_testhook.js 파일 선택



window_testhook.js 소스코드는 아래와 같고 USER32.DLL에 존재하는 SetWindowTextW API를 Hooking해서 출력해주는 코드입니다.

<그림 23> window_testhook.js 소스코드



js파일과 실행중인 calc.exe process를 선택하고 Hooking Start 버튼을 클릭합니다.

<그림 24> calc.exe Hooking Start



계산기에 숫자 입력 시 Hooking되어 콘솔에 출력됩니다.

<그림 25> calc.exe Hooking 콘솔 출력



3.7. RootingBypass

  기본 원리는 ptrace로 zygote에 접근 후 zygote로 target 프로세스에 attach하고 syscall을 변조하여 Rooting Bypass 합니다. 


 * 이 기능을 실행할 때 잘 안될 경우는 아래와 같습니다.

   - ptrace가 정상적으로 초기화되지 않을 경우 (종료할 때 Ctrl+C 꼭 눌려주세요.)

   - ptrace가 다중의 detect_pid를 가지는 경우 (종료했다가 여러번 시도해보시길 바랍니다.)

   - 계속 문제가 발생할 경우 진단 루팅 단말기를 다시 시작하면 process가 초기화되어서 잘 

     작동합니다..

 

아무래도 좀 다루기 힘든 ptrace로 작성되었기 때문에 잔잔 문제가 많이 발생할 수 있습니다. 추 후 계속 업데이트 예정입니다.


 RootingBypass는 C언어 기반으로 만들었으며 http://teamcrak.tistory.com/378에서 사용한 기법을 이용해서 구현하였습니다. 

<그림 26> RootingBypass 소스코드



FridaServer를 실행하지 않았다면 시작전에 MemoryDump Tab으로 이동하여 FridaServer를 실행해줍니다. 

<그림 27> FridaServer Start



루팅된 단말기에 RootingBypass 바이너리를 설치합니다. (/data/local/tmp/에 설치됩니다.)

<그림 28> RootingBypass Install



루팅을 우회할 프로세스를 선택하고 RootingBypass Start 버튼을 클릭합니다.

<그림 29> RootingBypass Start



루팅이 우회되는 과정입니다. (종료할때는 Ctrl+C로 시그널을 날려주시면 초기화가 진행되고 그 후 종료해주시면 됩니다.)

<그림 30> Rooting Bypass



정상적으로 루팅이 우회되어 실행이 가능하였습니다.

   

<그림 31> Rooting Bypass 확인



 이 도구는 모바일 애플리케이션 진단 시 반복되는 작업들을 자동화하여 좀 더 간편하게 진단하기 위해 제작되었으며, 오픈소스를 이용하였습니다.


 저희 TeamCr@k은 체크리스트 기반의 취약점 진단이나 모바일 모의해킹 프로젝트 수행 시 애플리케이션 분석 및 변조 등을 이 도구를 활용하고 있습니다. 저희처럼 애플리케이션 진단 또는 모바일 모의해킹을 수행하는 분들이나 이 분야를 공부하시는 분들은 이 도구를 활용해 보시면 좋을 것 같습니다.


감사합니다.


참조)

http://teamcrak.tistory.com/378

https://www.frida.re/

https://github.com/Nightbringer21/fridump