Post

BurpSuite 인증서 설치(안드로이드 9이상)

오랜만에 안드로이드 앱 분석을 하는데 안드로이드 인증서 관련하여 한번 정리를 해봐야겠다.

예전에 앱 모의해킹 프로젝트때 안드로이드 9환경에서 처음하면서 삽질을 많이 했었는데 요즘에는 관련하여 관련 글이 많이 올라와 있는 것 같다.
그땐.. 시스템 앱? 프리로드 앱? 처럼 특정 단말기에서만 동작하는 환경이었기에 참 힘들었던 기억이 있다.
이번 테스트는 갤럭시 노트8에서 진행하였고 안드로이드 버전은 9이다.
BurpSuite에서 제공하는 인증서는 10년 이상의 사용기간을 갖고 있는데, 안드로이드 7 이상에서 사용하기위해서는 약 30개월???(이 부분은 따로 확인해봐야겠다.. 관련 문서를 본지 오래됨!) 최대 만료 기간 제한이 있다.
그래서 기본적으로 제공하는 인증서가 아니라, 내가 사용할 안드로이드에서 적용가능한 인증서를 만들고 BurpSuite에 Import하고 안드로이드에 적용하면 BurpSuite로 패킷 캡처가 가능하다.

인증서 생성


openssl을 이용하여 720일 만료기간의 2048bit의 RSA 알고리즘의 키를 생성한다.
openssl req -x509 -days 720 -nodes -newkey rsa:2048 -outform der -keyout cacert.key -out cacert.der cacert.der

BurpSuite에 인증서 Import 하기


BurpSuite에 Import하기 위해 아래 2개의 파일로 변환하기 때문에 생성한 개인키를 DER형태로 변환한다.
openssl rsa -in cacert.key -inform pem -out cacert.key.der -outform der cacert.key.der

openssl pkcs8 -topk8 -in cacert.key.der -inform der -out cacert.pkcs8 -outform der -nocrypt
cacert.pkcs8

BurpSuite에 Import하기 위해 Proxy settings - Import / export CA Certificate를 클릭한다. import

ImportCertificate and Private key in DER Format을 선택 후 변환한 2개의 파일을 선택하여 Import한다.

import2 import3

Android의 시스템 인증서로 등록


처음에 생성한 인증서파일을 cacert.der을 PEM형태로 변환한다.
openssl x509 -inform DER -in cacert.der -out cacert.pem

pem

PEM 포맷의 인증서의 Hash를 확인 후 파일명을 .0으로 변경한다.

openssl x509 -inform PEM -subject_hash_old -in cacert.pem
mv cacert.pem ca7f7512.0

hash

변경한 인증서(ca7f7512.0)를 안드로이드의 시스템 인증서 경로로 복사한다.
adb push ca7f7512.0 /data/local/tmp/
adb shell su -c 'mount -o rw,remount /system'
adb shell -su -c 'cp /data/local/tmp/ca7f7512.0 /system/etc/security/cacerts/ca7f7512.0'
hash2

해당 경로에 복사된 것을 확인 후 재부팅한다. reboot

작동확인?!


안드로이드의 인증서 목록에서 확인한 결과, 인증서가 시스템 인증서로 잘 설치된 것을 확인할 수 있다. burpsuite

재부팅 후 브라우저를 통해서 확인하면 아래와 같이 BurpSuite에서 Intercept되는 것을 확인할 수 있다. android

This post is licensed under CC BY 4.0 by the author.