김진무 선임컨설턴트
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
개요)
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
<그림 11> 화면 Capture 시도
Capture가 완료되면 ScreenShot 폴더에 image_[i].jpg로 이미지 파일이 생성됩니다.
<그림 12> 이미지 파일 생성
3.4. FileExtract
<그림 13> 이미지 추출
이미지 추출이 완료되면 Extract_File/Extract_Output/[파일명 or 폴더명]으로 폴더에 추출된 이미지 파일이 생성됩니다.
<그림 14> 추출된 이미지 파일 생성
3.5. MemoryDump
<그림 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