안드로이드 7 이상 Burp 인증서 설치

2021. 3. 22. 23:15모바일 앱 해킹 및 보안/Android

Android 7.0 버전 이상에서는 기존의 Burp 인증서 설치대로 진행하면 아래처럼 오류가 발생합니다. 해당 버전 이상부터는 인증서 저장 위치가 시스템 및 사용자 권한별로 분리되면서 이전처럼 sdcard 디렉터리 아래에 인증서를 설치하면 Burp 사용 시 TLS Connection Failed 에러가 발생하니 시스템 디렉터리에 인증서를 설치해야 합니다.

또한, 기본적으로 Burp 인증서는 20년 이상의 만료 기간을 가지는데, 이번 구글 안드로이드 시스템 인증서 같은 경우 최장 39개월 만료 기간으로 설정이 되어 있습니다. 그래서 39개월 기간보단 짧은 인증서를 임의로 생성해야 합니다.

 

20년 이상의 Burp 인증서 오류

아래 방법을 이용하면 안드로이드 7.0 버전 이상에서도 Burp를 통해 패킷을 캡처할 수 있습니다.

먼저 아래 방법을 간단히 설명하면, 임의의 사용자 인증서를 생성하고, 해당 인증서를 Android 시스템 디렉터리에 업로드하여 재부팅하면 Android 7.0 버전 이상에서 Burp를 사용할 수 있습니다.

 

1. 임의의 사용자 인증서 생성

 

360일 만료기간 및 2048 bit RSA 암호화 알고리즘을 이용하여 "server.key" 개인키를 생성합니다.

Country Name, State or Province Name 등 아래 빨간색 네모 안의 질의 답변은 아무거나 입력해도 무방합니다. 

openssl req -x509 -days 360 -nodes -newkey rsa:2048 -outform der -keyout server.key -out ca.der

개인키 생성

"server.key" 개인키를 DER 파일로 변환합니다.

openssl rsa -in server.key -inform pem -out server.key.der -outform der

개인키를 pkcs8 포맷으로 변환(1)

"server.key.der" 파일을 pkcs8 포맷으로 변환합니다.

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

개인키를 pkcs8 포맷으로 변환(2)

Proxy > Options > Proxy Listeners > Import / export CA certificate > Import에서 "Certificate and private key in DER format" 버튼을 클릭합니다.

Import Burp 인증서(1)

 

위에서 생성한 ca.der 및 server.key.pkcs8.der 파일을 삽입합니다. 

Import Burp 인증서(2)

Proxy > Options > Proxy Listeners > Import / export CA certificate > Export에서 "Certificate in DER format" 버튼을 클릭합니다.

Export Burp 인증서(1)

export 할 파일 경로 및 파일명(burp.der)을 지정합니다. 

Export Burp 인증서(2)

 

2. Android 시스템 디렉터리에 업로드

 

위에서 export한 burp.der 파일을 burp.pem 파일로 변환합니다.

openssl x509 -inform DER -in burp.der -out burp.pem

DER를 PEM 으로 변환

burp.pem 파일의 hash 값을 추출합니다.

openssl x509 -inform PEM -subject_hash_old -in burp.pem

파일명을 위한 hash 확인

burp.pem의 이름을 위에서 추출한 hash 값(a962c71d)과 확장자 0으로 변경합니다. 

확장자명 hash.0으로 변환

Android 시스템 디렉토리에 a962c71d.0 파일을 업로드 후 재부팅합니다.

nox_adb devices
nox_adb root
nox_adb push a962c71d.0 /mnt/sdcard/Download/
nox_adb shell
mount -o rw,remount /system
mv /mnt/sdcard/Download/a962c71d.0 /system/etc/security/cacerts/a962c71d.0
reboot

시스템 디렉토리 업로드

ls 명령어를 통해 /system 디렉터리 하위에 해당 파일이 업로드 된 것을 확인합니다.

업로드 성공

설정 > 보안 > 신뢰할 수 있는 자격증명에서 생성한 사용자 인증서가 성공적으로 설치된 것을 확인합니다.

사용자 인증서 설치 완료

해당 인증서의 만료기간이 360일로 설정된 것을 확인합니다.

만료기간 변경 완료

설치된 사용자 인증서를 통해 SSL 통신이 성공적으로 이루어집니다. 

SSL 통신 연결 성공