2020. 2. 2. 15:01ㆍ2020/Android App Hacking
CSipSimple 앱 파일에 내포되어 있는 취약점 분석
drozer 툴을 활용해 제 3자의 입장에서 해당 앱에 어떤 기능을 사용할 수 있고 어떤 데이터에 접근이 가능한지 확인한다.
#1 drozer, CSipSimple installation (파일들은 github, google에서 구할 수 있음)
$ adb install drozer.apk
$ adb install CSipSimple.apk
#2 Connection
디바이스에서 drozer앱을 실행시킨 뒤 31415포트를 열어 listening을 시작한다.
$ adb forward tcp:31415 tcp:31415
$ drozer console connect
[ Drozer Command ]
1. dz> list
2. dz> run app.package.info [PackageName]
3. dz> run app.package.attackSurface [PackageName]
4. dz> run app.activity.info -a [PackageName]
5. dz> run app.activity.start --component [PackageName] [ActivityName]
6. dz> run app.provider.info -a [PackageName]
7. dz> run app.provider.finduri -a [PackageName]
8. dz> run app.provider.query | read | write [ContentURI]
9. dz> run app.service.info -a [PackageName]
10. dz> run app.service.start --component [PackageName] [ServiceName]
11. dz> run app.broadcast.info -a [PackageName]
12. dz> run app.broadcast.send --component [PackageName] [BroadcastReceiverName]
* --extra string varibleName varibleValue --extra ... (브로드 캐스트 신호전송 시에 변수가 존재하는 경우)
13. dz> run scanner.provider.finduirs -a [PackageName]
14. dz> run scanner.provider.injection -a [PackageName]
#3 Investigation
3번 명령어 -> CSipSimple앱에 존재하는 취약점을 파악 -> 2개의 노출된 content providers 등등
8번 명령어를 통해 content provider들을 실행시키려 하였지만 권한이 없어서 실행할 수 없다.(Permission Denial: require android.permission.CONFIGURE_SIP)
해당 권한은 CSipSimple앱 소스코드의 Manifest.xml파일에 permission태그를 통해 설정한 허가 권한에 포함된다. 안드로이드 앱들은 다음과 같은 권한을 선언하고 해당 권한을 가진 앱에게 정보나 기능들을 제공한다. (through content providers)
#4 Manipulation
Decompile CSipSimple -> Manifest.xml 분석 -> 권한 부여와 관련된 코드 확인.
Decompile Drozer -> Drozer Manifest.xml파일에 필요 권한들을 삽입하는 수정 -> Repackage & Signning -> Install
Decompile & Compile(Repackage) Methods $ apktool d CsipSimple.apk $ apktool b CSipSimple (<--Directory) $ apktool d drozer.apk $ apktool b drozer (<--Directory) |
CSipSimple앱의 Content provider들을 사용하기 위해 Drozer가 필요한 코드들은 CONFIGURE_SIP권한이 필요하다. 해당 권한 소스 코드를 Drozer-Manifest.xml에 추가하고 String.xml에 선언된 변수 또한 Drozer-String.xml에 추가한다.
Signing the App
$ [signner.batPath] -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore [keystorePath] [AppPath] [alias_name]
Install the app on the device
#5 Test
8번 명령어: run app.provider.query [Content] -> Permission Denial 발생 X
#6 보충
dz에 내포된 스캐너를 통해서 사용할 수 있는 Contet providers들을 확인해서 일일이 실행하고 필요한 권한이 있으면 한 번에 Manifest.xml에 추가한 뒤 drozer을 리패키징한 뒤 취약점 분석을 진행할 수 있다.
#7 결론
CSipSimple앱 입장에서 제 3자인 Drozer앱이 노출되어 있는 CSipSimple앱의 content providers들로 인해 데이터가 노출되어 지고 있음을 확인할 수 있었다. 대응방안으로는 manifest.xml에서 content provider태그들의 외부 노출을 제한(exported="false")하는 것과 또는 permission태그를 통한 권한 선언시에 동일한 시그니처 값을 통한 권한 인증 등의 방식을 추가해 보안을 강화할 수 있다.
* apktool을 사용해 앱을 Repackage 할 때 -o을 통해 저장장소를 지정해주었다 ($apktool b [DirectoryRelatedApp] -o [dir]) 알 수 없는 이유로 해당 장소에 apk파일이 compile되지 않았고 대신 build하려고 한 디렉토리의 dist폴더에 저장되어 있음. (path: AppDirectory/dist/App.apk)
'2020 > Android App Hacking' 카테고리의 다른 글
안드로이드 앱 조작(Tampering) 및 역공학(Reverse Engineering) #2 (0) | 2020.02.03 |
---|---|
안드로이드 앱 조작(Tampering) 및 역공학(Reverse Engineering) #1 (0) | 2020.02.02 |
Santoku: Drozer (4) | 2020.02.01 |
Santoku: Bypass SSL Pinning using Frida (1) | 2020.02.01 |
Smali Code (0) | 2020.02.01 |