-
[안드로이드] 안드로이드용 Radamsa 빌드하기# 시스템 해킹 공부중 2020. 2. 19. 03:08
Radamsa는 [그림 1]과 같이 입력이 들어오면, 입력에 대한 적절한 Mutation 값을 출력시키는 간단해 보이지만 강력한 퍼저이다. 퍼저 자체로 타겟 프로그램에 입력을 넣거나, 크래시 모니터링을 하지않기 때문에 해당 드라이버 프로그램을 만들어줘야하는 번거로움이 있지만, 다양하게 퍼저를 적용해서 테스팅을 해볼 수 있다는 장점이 있다.
공식적으로 radamsa는
- GNU/Linux
- OpenBSD
- FreeBSD
- Mac OS X
- Windows (using Cygwin)
해당 OS만 지원을 하고 있으며, 자세한 내용은 아래 공식페이지에서 확인하면 된다.
공식 gitlab : https://gitlab.com/akihe/radamsa
또한 radamsa가 소개되어있는 블로그도 있으니, 궁금하다면 참고해서 읽어보면 된다.
https://cpuu.postype.com/post/2069373
여튼 이러한 radamsa를 안드로이드에서 사용할 수 있도록 포팅(porting)을 한 개발자가 있는데 해당 포스트에서는, 포팅된 radamsa를 빌드하고 사용하는 방법을 알아본다. (Windows 10 x64 기준)
1. NDK 설치
radamsa-android를 빌드하기 위해선 ndk-build라는 툴을 이용해야한다. NDK(Native Development Kit)는 안드로이드에서 C/C++을 사용할 수 있도록 해주는 도구 모음으로, 앱 개발시 C/C++이 필요한 경우 반드시 설치를 해야하는 도구이다. 그 도구중 하나로 ndk-build라는 툴이 있기 때문에 우선 우리는 NDK를 먼저 설치해줘야 한다.
우선 Android Studio를 실행시킨 다음, [Tools - SDK Manager]를 클릭해서 SDK Manager를 띄운다.
이어서 [SDK Tools]를 클릭한 다음 NDK에 체크를 해주고 아래쪽에 Apply 버튼을 눌러주면 NDK가 설치된다.
[C:\Users\사용자계정\AppData\Local\Android\Sdk\ndk-bundle\] 경로로 가보면 ndk-build.cmd 파일이 존재하는걸 확인할 수 있다.
환경변수 PATH에 해당 경로를 추가해주면 radamsa-android를 빌드할 준비는 끝난다.
2. Radamsa Build
URL : https://github.com/anestisb/radamsa-android
위 링크로 접속한 다음, Clone을 받던지, 압축파일을 받아서 압축을 해제한다.
압축을 해제하고 [jni] 디렉토리로 들어가보면, [그림 6]과 같이 세 개의 파일이 있는데, 우리가 수정해야할 파일은 "Application.mk" 파일이다
Application.mk 파일에서는 빌드에 필요한 정보들을 기입해두게 된다. APP_PLATFORM은 minSdkVersion과 같다. "android-23" 이라고 적어둘 경우, 최소 안드로이드 API 23(Android 6.0/Marshmallow) 이상에서 동작할 수 있도록 빌드하라는 것이다. 따라서 radamsa를 동작시킬 안드로이드 디바이스의 안드로이드 버전을 확인한 후, 그에 맞게 수정해줘야 한다. APP_ABI 는 타겟 디바이스에 맞게 아키텍쳐를 지정해주면 된다. 한 개를 지정할 수 있고, 여러 개를 지정할 수 있다.
이어서 명령프롬프트(cmd)를 실행시킨 다음, [jni] 디렉토리로 이동한 뒤에 "ndk-build" 명령어를 입력하면 우리가 Application.mk 에 입력한대로 빌드가 되는 것을 확인할 수 있다.
빌드가 다 되면, libs 라는 디렉토리에 우리가 설정했던 아키텍쳐별로 디렉토리가 생성되어 있으며, 해당 디렉토리에는 [그림 10]과 같이 바이너리가 생성되어 있다.
3. radamsa 실행
[그림 11]은 확대해서 보길 추천한다. 사용한 명령어들을 순서대로 설명하자면
adb -s [Device_ID] push [binary] [/path/to/android/device] -> 우리가 컴파일한 바이너리를 안드로이드 디바이스에 push한다. 이 때 [/data/local/tmp] 경로는 일반 계정으로도 접근할 수 있으므로, 해당 경로로 push 하는 것을 추천한다.
adb -s [Device_ID] shell -> 안드로이드 디바이스의 쉘(Shell)을 실행시킨다.
쉘을 실행시켜서, 해당 경로로 이동해보면 "radamsa" 바이너리가 존재하는 것을 확인할 수 있다. 하지만 처음에는 실행권한이 없기 때문에 chmod 명령어로 실행권한을 부여해야한다. 이어서 radamsa를 실행시켜보면 [그림 11]과 같이 정상적으로 동작하는 것을 확인할 수 있다.
이제 원하는 형태로 radamsa를 실행시켜서, 뮤테이션된 인풋값을 타겟에 전달하고 모니터링하는 도구를 설계해서 사용하면 된다.
'# 시스템 해킹 공부중' 카테고리의 다른 글
[안드로이드] OWASP Mobile Top 10 2016 - 내 맘대로 번역 (0) 2020.03.18 [리버싱] lighthouse + DynamoRIO - 프로그램 실행 흐름 확인 (1) 2020.02.26 [안드로이드] ApkStudio로 앱 디컴파일&리패키징하기 (2) 2020.02.16 [안드로이드] 안드로이드 앱 실시간 패킷 캡쳐 및 분석 with mitmproxy, Wireshark (6) 2019.10.09 pwntools gdb.attach 사용법 - python process debugging (2) 2019.08.05