
APK recon의 지루한 과정을 자동화하는 도구
APK 파일의 리콘 과정을 자동화하는 도구입니다.
Slicer는 추출된 APK 파일의 경로를 입력 받아, 내보내기(exported)되어 있고 권한이 null이며 외부에서 트리거할 수 있는 모든 Activity, Receiver, Service를 반환합니다.
참고: APK는 jadx 또는 apktool을 통해 추출되어야 합니다.
왜?
약 3주 전(2020년 6월)에 버그바운티를 시작했고, 안드로이드 앱에 최선을 다해 노력해 왔습니다. 하지만 모든 앱에서 깊이 들어가기 전에 해야 할 특정 작업들이 있다는 것을 발견했습니다. 그래서 간단한 도구로 그 과정을 자동화하는 것이 좋겠다고 생각했습니다.
왜 drozer가 아닌가?
drozer는 완전히 다른 도구입니다. 접근 가능한 모든 컴포넌트를 찾아내긴 하지만, 계속해서 같은 명령어를 반복해서 실행하는 것에 지쳤습니다.
왜 drozer로 자동화하지 않나요?
사실 특정 drozer 명령을 실행하는 bash 스크립트를 작성해서 수동으로 실행할 필요가 없도록 했지만, 여전히 해야 할 지루한 작업들이 있었습니다. 예를 들어 strings.xml에서 다양한 API 키를 확인하고, Firebase DB가 공개적으로 접근 가능한지 또는 Google API 키에 사용량 제한이 설정되어 있는지 등을 테스트하는 작업 등이 있습니다.
모든 파일을 검색하지 않는 이유는?
grep이나 ripgrep과 같은 도구가 모든 파일을 검색하는 데 훨씬 빠를 것이라고 생각합니다. 따라서 특정 항목을 검색하고 싶다면 해당 도구를 사용하는 것이 좋습니다. 하지만 안드로이드 파일에서 항상 확인해야 할 사항이 있다고 생각되면 자유롭게 이슈를 열어주세요.
APK에서 android:allowbackup이 true로 설정되어 있는지 확인합니다.
APK에서 android:debuggable이 true로 설정되어 있는지 확인합니다.
내보내기(exported)되고 null 권한이 설정된 모든 Activity, Service, Broadcast Receiver를 반환합니다. 이는 두 가지 기준으로 결정됩니다:
android:exported=true가 있고 권한이 설정되지 않은 경우.Intent-filters가 정의되어 있는지 확인합니다. 정의되어 있다면 해당 컴포넌트는 기본적으로 내보내집니다(안드로이드 문서에 명시된 규칙).APK의 Firebase URL을 확인하여 .json 트릭을 테스트합니다.
myapp.firebaseio.com이면 https://myapp.firebaseio.com/.json이 무언가를 반환하는지 또는 권한 거부 오류가 발생하는지 확인합니다.Google API 키가 공개적으로 접근 가능한지 확인합니다.
strings.xml 및 에 있는 다른 API 키를 반환합니다.
git clone https://github.com/mzfr/slicer
cd slicerpython3 slicer.py -h사용법은 매우 간단합니다. 다음 옵션을 사용할 수 있습니다:
APK의 Manifest와 strings에서 정보 추출
사용법:
slicer [OPTION] [Extracted APK directory]
옵션:
-d, --dir jadx 출력 디렉토리 경로
-o, --output 출력 파일 이름(미구현)
output 플래그는 아직 구현하지 않았습니다. slicer 출력을 yaml 파일로 리디렉션하면 적절한 형식이 될 것이라고 생각하기 때문입니다.
python3 slicer.py -d path/to/extact/apk -c config.json
URL과 경로를 추출하는 데 사용된 extractor 모듈은 @ndelphit의 apkurlgrep에서 가져왔습니다.
이 도구에 구현된 모든 기능은 지난 몇 주 동안 배운 것들입니다. APK에서 확인해야 할 다른 사항이 있다고 생각되면 해당 기능에 대한 이슈를 열어주시면 기쁘게 구현하겠습니다 :)
원하신다면 커피 한 잔 사주실 수 있습니다:
AndroidManifest.xml/res/raw 및 res/xml 디렉토리에 있는 모든 파일 이름을 나열합니다.
모든 URL과 경로를 추출합니다.