본문 바로가기
seCurity

[Android] Android 진단 시, 웹 프록시(burpsuite) 사용을 위한 인증서 설치 자동화 스크립트 (Android 7.0 이상 버전 포함)

by every7hing 2021. 1. 25.
반응형

 

지난 시간에 Android 7.0 이상 버전에서 사용 가능한 Custom Certificate File을 생성하고, 그것을 Web Proxy Tool과 Android 단말기에 적용하는 방법에 대해서 알아보았습니다.

 

그런데, Android 단말기가 바뀔 때마다 매번 동일한 방법으로 반복을 해줘야하는 것은 정말 귀찮은 일입니다. 그래서 인증서 생성 부터 Android 단말기에 설치하는 일련의 작업들을 자동화 하는 스크립트를 작성해보았습니다. (웹 프록시 툴에 *.p12파일을 적용하는 것은 제외)

 

웹 프록시 툴에 적용하는 방법과 기본적인 사항들에 대해서 궁금하신 분들은 이전 글을 미리 읽어보시는 걸 추천드립니다.

2021/01/25 - [seCurity] - [Android] Android 7.0 이상 웹 프록시 사용을 위한 인증서 설치 방법

 

[Android] Android 7.0 이상 웹 프록시 사용을 위한 인증서 설치 방법

웹 테스팅을 할 때는 상관이 없지만, 모바일 진단을 하다보면 모바일 단말과 Proxy Tool들의 설정을 매번 해줘야하는 것이 여간 번거로운 일이 아닙니다. 특히, Android 7.0 이상으로 넘어오면서 인증

amogg.tistory.com

 

아래 스크립트를 사용 전에 확인해야할 사항들에 대해서 나열해보겠습니다.

  • ADB Binary Path
  • Openssl Binary Path
  • Openssl Config File Path
  • Android Device Connection Using ADB (with Root Permission)

 

그리고, 스크립트로 생성되는 파일은 다음과 같으며, 속성도 다음과 같습니다.

  • ca.key
  • ca.pem (install in Android Device)
  • ca.p12 (import to Web Proxy Tool)
  • 유효기간은 30일로 설정
  • 기본 패스워드는 "1"로 설정

 

 

CertForAndroid.py

# -*- coding: utf-8 -*-
import envoy

ADB_PATH = r"[input_your_path]/adb.exe"
OPENSSL_PATH = r"[input_your_path]/openssl.exe"
OPENSSL_CONFIG_PATH = r"[input_your_path]/openssl.cnf"

def makeCertificate():
    cmd = OPENSSL_PATH + " genrsa -out ca.key 2048"
    res = envoy.run(cmd)

    if "Generating RSA private key" in res.std_err:
        cmd = OPENSSL_PATH + " req -days 30 -key ca.key -x509 -new -nodes -sha256 -out ca.pem -passin pass:1 -subj /C=KR/ST=1/L=1/O=1/OU=1/CN=MYCERT/emailAddress=1 -config " + OPENSSL_CONFIG_PATH
        res = envoy.run(cmd)
        #print(res.std_err)

        if "problems making Certificate Request" not in res.std_err:
            cmd = OPENSSL_PATH + " pkcs12 -out ca.p12 -inkey ca.key -export -in ca.pem -passin pass:1 -passout pass:1"
            res = envoy.run(cmd)
            #print(res.std_err)

def getSubjectHash():
    cmd = OPENSSL_PATH + " x509 -inform PEM -subject_hash_old -in ca.pem -passin pass:1"
    res = envoy.run(cmd)
    return str(res.std_out.split("\n")[0])

def installCertificateToDevice(sHash):
    cmd = ADB_PATH + " push ca.pem /sdcard/"  
    res = envoy.run(cmd, timeout=5)
    cmd = ADB_PATH + " shell 'mount -o remount,rw /system;cp /sdcard/ca.pem /system/etc/security/cacerts/" + sHash + ".0;chmod 644 /system/etc/security/cacerts/" + sHash + ".0;reboot'"
    res = envoy.run(cmd, timeout=5)
    #print(res.std_err)

def main():
    makeCertificate()
    sHash = getSubjectHash()
    installCertificateToDevice(sHash)

if __name__ == "__main__":
    main()

 

위 스크립트가 정상적으로 동작이 완료되면, 연결된 Android 단말기 내, 인증서 설치가 완료된 것입니다. 이 후, 웹 프록시 툴에도 ca.p12 파일을 import 하면 됩니다.

 

반응형

댓글