Android

안드로이드 취약점 분석 오류 모음

우제혁 2023. 12. 28. 16:59

Read-only file system 이슈

frida-server 파일을 adb 내부에서 옮겨야할때 옮길수없다는 mount 오류가 발생할수 있는데 이때는 다음과 같은 명령어로 상위 디렉토리인 /에 rw 권한을 부여해준다. 오류가 발생할시 /system으로 좀더 정확하게 하는것도 방법이다.

 

 

mount -o rw,remount /

 

이후 파일을 옯겼으면 다시 ro로 변경해주자.

mount -o ro,remount /

 

mount -o rw,remount / 로 해결이 되지 않는다면?

 

알고보니 안드로이드 에뮬레이터는 read-only로 실행되고 있었고 이를 해결하기 위해 다음과 같이 진행 했다.

  1. 애뮬레이터가 설치된 경로로 들어간다 ex) ~/Library/Android/sdk/emulator
  2. -writable-system 의 설정을 주고 에뮬레이터를 직접 실행한다.

애뮬레이터 경로에서 cmd를 실행한뒤 다음명령어를 통해 실행한다.

emulator @Pixel_6_Pro_API_33 -writable-system

  1. 이후 다른곳에서 나왔던 것처럼 루트 권한을 주고 remount를 해준뒤 꼭 remount를 해줘야한다
adb root
adb disable-verity
adb reboot
adb remount
adb shell
mount -o rw,remount /system

 

 

 

인증서& 프록시 이슈

  1. 피들러와 버프스위트의 인증서는 다르며 각 인증서마다 해쉬값이 정해져있다.
    • 피들러 : 269953fb.0
    • 버프 스위트 : 9a5ba575.0
  2. 크롬 브라우저는 추가 인증서 문제로 프록시가 잘 적용되지 않을 수 있다 따라서 삼성 브라우저같은 다른 브라우저로 확인을 해본다.
  3. 안드로이드 인증서를 확인할때 피들러와 버프 스위트는 서로 시스템 인증서 이름이 다르다.
  4. 로컬에 인터넷이 연결되어있다면 핫스팟으로 연결이 가능한데 이때 대부분 프록시 설정 ip의 끝부분이 1 또는 2이다.

와이파이는 같은 와이파이를 사용해야하며 로컬 ip의 주소로 설정해준다.


frida-server 이슈

  1. frida의 버전이 16.2 보다 높으면 frda-ps -U가 안되기에 그보다 낮은 버전을 install해줘야한다.
    - pip install frida==15.x.x
    - ps상태가 do_wait 으로 계속된다.
  2. swap이슈로 timeout 오류가 발생하는데 frida-server가 잘 실행되고 있는지 확인하자
  3. Unable to connect to the frida server: need Gadget to attach on jailed Android 에러

 

Android 10 이상부터 존재하는 USAP 기능(빠른 앱 실행 기능)을 비활성화 하면 해결된다. adb shell안에서 작동 시키자

a50:/ #  setprop persist.device_config.runtime_native.usap_pool_enabled false

 

 

➕ frida -U -f [페키지 이름] 으로 프리다가 잘 붙는지 확인을 먼저해보면서 오류를 해결하자.


Android emulater(intel) 앱설치 이슈

 

💡 adb install 이슈가 있었다.

알고보니까 어찌어찌 설치하더라도 앱마다 실행 가능한 아키텍처를 확인해야하는 것을 알게 되었다.

 

사용하는 기기의 아키텍처는 다음 명령어로 확인 할수 있다

-이는 frida server를 설치할때도 유용하다.

>adb shell>getprop ro.product.cpu.abi fh

 

intel은 대부분 86x를 지원하는데 사용하려했던 앱는 arm만 지원하는것을 apk lib에서 확인 할 수 있었다.(Mac 은 arm임)

 

 

 

 


frida를 못 잡는 이슈

💡 frida python time에러및 제대로 swan이 되지 않을때 직접 js파일로 만들어서 이를 불러서 실행하는 방법을 사용했더니 해결이 되었다.

 

패키지명으로 실행

  1. frida-ps -U 를 통해서 패키지의 이름을 파악한다.
    (이때 frida-ps -U 이 명령어는 frida-server가 실행되고 있어야 한다.)
  2. frida -U -l "keyhook.js" 궁수의전설 처럼 frida -U -I [파일 경로] [패키지] 를 해준다.

pid 지정 실행

하지만 한글이 있어 가끔 잘 swan이 붙지 않을때는 pid 를 정해주는 방법도 있다.

  1. frida -U -l "keyhook.js" -p 7450

➕ 이때 frida-ps -U를 해줬을때 목록에 뜨지 않는다면 아무리 시도해도 되지 않는다…

 

keyhook.js는 본인이 직접 작성한 js 파일이다.


앱이 강제 종료되는 이슈

➕ 가끔 앱에서 충돌이 있어서 예상치 않게 종료되었다면서 막 종료 버튼이 뜨는 경우가 있었다

이럴때마다 디바이스를 다시 재부팅 해주면서 귀찮게 다시 frida server 세팅해주는 경우가 많았다.

 

  1. 이럴때는 인내심을 가지고 종료 경고창이 계속 뜰때 홈버튼을 사용해서 alert가 안뜨게 만들어 주고
  2. 인터넷도 들어가보고 세팅도 한번 들어가주고 약간의 인내를 가지고 이것저것 해준다. (약 2분..? 길면 5분..?)
  3. 정신을 차리고 다시 돌아오는 앱을 사용한다.

다음을 참고해도 좋다

안드로이드 앱 튕김, 충돌 문제 해결 방법

앱의 데이터를 다 지우니까 좀 나아진것같았다

하지만 예전처럼 나아지지는 않는다…

 

해결

adb에서 다음과 같은 명령어를 입력한다.

setprop persist.device_config.runtime_native.usap_pool_enabled false