Android nougat 이상 emulator에서 mitmproxy 사용하기

Jungwook Park
kjcoop
Published in
5 min readAug 31, 2019

Android Oreo (8.1/api level 27) Google play service 없는 emulator 기준으로 확인하였습니다.

Android nougat (api level 24) 이상에서는 보안 정책 변경으로 인해 사용자 인증서를 설치하더라도 앱에서 이를 명시적으로 허용하지 않으면 이를 이용할 수 없다.

mitmproxy 는 proxy 설정을 통해 http 및 https 트래픽을 볼 수 있는 프로그램으로 http/https 네트워크 패킷을 확인하기 편리한 프로그램이다.

  1. mitmproxy를 통해 https 패킷을 확인하기 위해서는 사용자 인증서를 반드시 설치해야한다.
  2. Android nougat 이상에서는 보안 정책 변경으로 인해 사용자 인증서를 설치하더라도 명시적으로 허용하지 않은 앱 (아마도 대부분)의 패킷을 확인할 수 없다.
  3. 따라서 사용자 인증서를 시스템 인증서로 교체하면 대부분의 앱(Certificate pinning 처리를 하지 않은 경우)의 패킷을 mitmproxy를 통해 확인할 수 있다.
  • mitmproxy를 설치하고 실행한다.
  • Avd 를 생성한다. 이 때 google play service 를 사용할 수 있는 avd 는 root 권한을 얻을 수 없어 system 파티션을 수정할 수 없기 때문에 google play service 없는 avd를 생성한다.
avd without google play service
  • mitmproxy에서 설정했던 대로 Proxy 설정을 한다.
avd proxy settings
  • Avd에서 http://mitm.it 에 접속해서 mitmproxy 인증서를 설치한다. 이때 Credential use 는 Vpn and apps 로 설치한다.
  • Avd 의 Settings > Security & location > Advances > Encryption & Credentials > User credentials 메뉴에서 mitmproxy 사용자 인증서를 확인할 수 있다.
mitmproxy certification under user certification
  • avd 를 종료한다.
  • system 인증서를 설치하기 위해서는 system 파티션을 수정해야 하기 때문에 avd 를 -writable-system 옵션 추가하여 실행한다.

아래 명령어로 avd 목록을 확인하고

emulator -list-avds
  • writable-system 옵션을 추가하여 실행한다. Pixel_API_27 는 각자 생성한 avd에 따라 다르다.
emulator -avd Pixel_API_27 -writable-system
  • system 파티션을 수정하기 위해 avd 를 remount 한다
adb root
adb remount
  • 사용자 인증서를 저장하는 위치는 /data/misc/user/0/cacerts-added 이며 시스템 인증서 위치는 /system/etc/security/cacerts/ 이다. 따라서 /data/misc/user/0/cacerts-added 에 저장되어 있는 인증서를 /system/etc/security/cacerts/ 에 복사하면 된다.
adb shell ls /data/misc/user/0/cacerts-added

위 명령으로 인증서 파일을 확인하고

adb shell mv /data/misc/user/0/cacerts-added/c8750f0d.0 /system/etc/security/cacerts/

명령 등으로 mitmproxy 사용자 인증서를 시스템 인증서 directory로 복사한다. c8750f0d.0 는 사용자 인증서에 따라 다르다.

  • Avd 를 재부팅한다.
  • Avd 의 Settings > Security & location > Advances > Encryption & Credentials > Trusted credentials 메뉴에서 mitmproxy 사용자 인증서를 확인할 수 있다.
mitmproxy certification under trusted certification

위 과정을 거쳐 mitmproxy 프로그램을 통해 많은 앱들의 https 패킷을 확인할 수 있다.

sytem 파티션을 수정한 avd 의 경우 -writable-system 옵션 없이 실행하면 수정 내용이 원래대로 복원된다.

따라서 수정 내용을 유지하고 싶은 경우 -writable-system 옵션을 매번 사용하여 avd를 실행해야 한다.

--

--