Android 앱 SSL 트래픽 복호화

Jan 03 2023
이 기사는 Omry Zur Intro와 협력하여 작성되었습니다. Android 앱(APK)에서 SSL(HTTPS) 암호화 트래픽을 캡처하는 것은 보안 연구원에게 유용한 도구가 될 수 있습니다. 연구원은 이 트래픽을 분석하여 앱의 잠재적 취약성과 보안 약점을 식별할 수 있습니다.

이 기사는 Omry Zur 와 공동으로 작성되었습니다.

소개

Android 앱(APK)에서 SSL(HTTPS) 암호화 트래픽을 캡처하는 것은 보안 연구원에게 유용한 도구가 될 수 있습니다. 연구원은 이 트래픽을 분석 하여 앱의 잠재적 취약성과 보안 약점 을 식별할 수 있습니다 . 이 기사에서는 보안 연구원의 관점에서 Android 앱에서 SSL 트래픽을 캡처하는 데 사용할 수 있는 다양한 기술과 도구를 단계별로 시연합니다. 이러한 기술을 사용하여 앱에 대한 심층 조사를 수행하고 앱과 해당 서버 간의 통신을 이해할 수 있습니다. 이 문서에 설명된 단계를 따르면 보안 연구원은 Android 앱에서 SSL 트래픽을 쉽게 캡처하고 분석을 시작할 수 있습니다.

모바일 애플리케이션의 SSL 트래픽

SSL (Secure Sockets Layer)은 인터넷을 통해 클라이언트와 서버 간의 통신을 암호화하는 데 널리 사용되는 보안 프로토콜입니다. 두 당사자 간에 전송되는 중요한 데이터를 제3자가 가로채서 보는 것을 방지하도록 설계 되었습니다 . SSL은 일반적으로 온라인으로 전송되는 금융 거래, 로그인 자격 증명 및 기타 중요한 정보를 보호하는 데 사용됩니다.

애플리케이션의 맥락에서 SSL은 종종 앱과 서버 간의 통신을 보호 하는 데 사용됩니다 . 이는 금융 앱, 건강 앱 및 소셜 미디어 앱과 같이 민감한 데이터를 처리하는 앱에 특히 중요합니다. SSL을 사용하여 앱과 서버 간의 통신을 암호화함으로써 개발자는 승인되지 않은 당사자가 사용자 데이터에 액세스하지 못하도록 보호할 수 있습니다.

그러나 보안 연구원은 앱 이 서버와 통신하는 방법을 이해하고 잠재적인 취약점을 식별 하기 위해 앱에서 SSL 트래픽을 캡처하고 분석하는 데 관심이 있을 수 있습니다 . 이제 단계별로 이 작업을 수행하는 방법을 자세히 살펴보겠습니다.

0단계 - 툴링 및 설치

데모를 시작하기 전에 필요한 도구와 설치가 제대로 되어 있는지 확인하는 것이 중요합니다. 이 단계에서는 Android 앱에서 SSL 트래픽을 캡처하는 데 필요한 도구를 다룹니다.

먼저 네트워크 트래픽을 가로채고 수정할 수 있는 Fiddler 와 같은 웹 디버깅 프록시 가 필요합니다. 이 도구를 사용하면 Android 앱에서 SSL 트래픽을 캡처하고 분석할 수 있습니다.

다음 으로 Android Studio 의 AVD(Virtual Device Manager) 와 같은 Android 데스크톱 에뮬레이터 가 필요합니다 . 이렇게 하면 데스크톱의 시뮬레이션된 환경에서 Android 앱을 실행할 수 있습니다.

또한 앱의 패키지 파일을 디컴파일하고 수정하는 데 사용할 수 있는 apktool 과 같은 APK 편집 도구 가 필요 합니다. 이렇게 하면 SSL 트래픽을 캡처하는 데 필요한 SSL 디버깅 활성화와 같이 앱의 구성을 변경할 수 있습니다.

이러한 도구가 준비되면 데모를 시작할 준비가 된 것입니다.

1단계 - APKPure에서 APK 다운로드

이 단계에서는 SSL 트래픽을 캡처하려는 Android 앱을 다운로드합니다. Google Play 스토어와 같은 Android 앱이나 APKPure 와 같은 대체 앱 스토어를 다운로드할 수 있는 많은 소스가 있습니다 . 이 예에서는 APKPure를 사용하여 앱을 다운로드합니다.

이렇게 하려면 APKPure 웹사이트로 이동하여 다운로드하려는 앱을 검색합니다.

APKPure에서 APK 다운로드

다운로드가 완료되면 앱의 APK 파일이 컴퓨터에 저장됩니다. 다음 단계에서는 이 APK 파일을 사용하여 Android 에뮬레이터에 앱을 설치합니다.

2단계 - 에뮬레이터 구성

이제 앱에서 SSL 트래픽 캡처를 준비하도록 Android 에뮬레이터를 구성해 보겠습니다.

먼저 Android Studio를 열고 Virtual Device Manager(AVD) 로 이동 합니다.

AVD(가상 장치 관리자)

AVD Manager에서 다음 단계에 따라 새 가상 기기를 생성 합니다.

  • " 가상 장치 만들기 " 버튼을 클릭하여 " 하드웨어 선택" 대화 상자를 엽니다.
  • "하드웨어 선택" 대화 상자에서 원하는 Android 장치 모델을 선택하고 "다음"을 클릭합니다.
  • 하드웨어 모델 선택
  • "시스템 이미지" 대화 상자에서 원하는 Android OS 버전 을 선택하고 "다음"을 클릭합니다. 실행하려는 앱과 호환되는 최신 Android 버전 을 선택하는 것이 좋습니다 .
  • 안드로이드 OS 버전 선택
  • 가상 장치의 구성을 검토하고 " 마침 "을 클릭하여 생성하십시오.
  • 선택한 구성 검토

이제 에뮬레이터가 설정되었으므로 앱을 설치하고 SSL 트래픽 캡처를 시작할 준비가 되었습니다.

3단계 — 에뮬레이터에 APK 설치

목록의 다음은 에뮬레이터에서 SSL 트래픽을 캡처하려는 Android 앱을 설치하는 것입니다. 이렇게 하려면 APK 파일을 에뮬레이터 창으로 끌어다 놓으십시오 . 그러면 에뮬레이터에 앱이 설치됩니다. 앱이 설치되면 에뮬레이터의 홈 화면에서 실행합니다 .

앱이 에뮬레이터에 설치되고 실행되면 실제 Android 기기에서와 마찬가지로 사용할 수 있습니다. 다음으로 앱에서 SSL 트래픽을 캡처하는 방법을 보여드리겠습니다.

4단계 - 에뮬레이터와 함께 작동하도록 프록시 구성

다음 섹션에서는 에뮬레이터와 함께 작동 하도록 웹 디버깅 프록시 를 구성하고 앱에서 SSL 트래픽 캡처를 시작합니다.

먼저 컴퓨터의 IP 주소를 찾아야 합니다 . 이렇게 하려면 명령 프롬프트를 열고 다음을 입력하십시오.

> ipconfig

ipconfig 출력

그런 다음 Fiddler를 열고 " 도구 " 메뉴로 이동한 다음 " Fiddler 옵션 "을 선택합니다. Fiddler 옵션 창에서 " 연결 " 탭 으로 이동하여 " 원격 컴퓨터 연결 허용 " 옵션이 선택되어 있는지 확인합니다. 이렇게 하면 에뮬레이터가 Fiddler에 연결하고 이를 통해 트래픽을 보낼 수 있습니다.

원격 컴퓨터가 구성에 연결하도록 허용

같은 창에서 " HTTPS " 탭으로 이동하여 " Decrypt HTTPS 트래픽 " 옵션을 선택합니다. 이렇게 하면 Fiddler가 앱의 SSL 트래픽을 포함하여 HTTPS 트래픽을 캡처하고 해독할 수 있습니다.

HTTPS 트래픽 구성 해독

이제 Fiddler를 프록시로 사용하도록 에뮬레이터를 구성 해야 합니다 . 이렇게 하려면 에뮬레이터 설정을 열고 " 네트워크 " 섹션으로 이동합니다. "네트워크" 설정에서 " 수동 프록시 구성 "을 선택하고 컴퓨터의 IP 주소와 Fiddler 프록시의 기본 포트(일반적으로 8888)를 입력합니다. 이렇게 하면 Fiddler를 통해 에뮬레이터의 모든 네트워크 트래픽을 라우팅하여 이를 캡처하고 분석할 수 있습니다.

수동 프록시 구성

계속하려면 에뮬레이터의 Wi-Fi 설정 을 열고 연결된 Wi-Fi 네트워크 옆 에 있는 톱니바퀴 아이콘 을 클릭 하세요.

안드로이드 와이파이 설정

해당 네트워크의 설정 에서 " 프록시 " 드롭다운 의 " 수동 "을 선택 하고 에뮬레이터의 프록시 설정에 입력한 것과 동일한 IP 주소와 포트 를 입력합니다. 이렇게 하면 앱의 SSL 트래픽을 포함한 모든 네트워크 트래픽이 프록시를 통해 라우팅됩니다.

프록시 설정

프록시를 구성한 후 에뮬레이터 의 콜드 부팅을 수행 하여 변경 사항을 적용해야 합니다. 이렇게 하려면 장치 관리자로 이동 하여 에뮬레이터 의 " Cold Boot Now " 버튼을 클릭합니다. 그러면 에뮬레이터가 다시 시작되고 새 프록시 설정이 적용됩니다.

에뮬레이터가 다시 시작되면 앱을 실행하고 평소처럼 사용합니다. 이제 프록시가 앱에서 암호화된 SSL 트래픽을 캡처해야 합니다.

Sanity Check: 이것이 작동하는지 확인하려면 에뮬레이터에서 웹사이트를 탐색하고 트래픽이 프록시에 의해 캡처되고 있는지 확인하십시오.

앱에서 암호화된 SSL 트래픽

패킷 ID(#) 옆에 있는 자물쇠 아이콘은 트래픽이 SSL 프로토콜로 암호화되었음을 나타 냅니다 . 따라서 요청과 응답만 볼 수 있지만 내용(본문)은 볼 수 없습니다.

5단계 - Fiddler의 루트 인증서를 설치하여 해독된 트래픽 보기

다음 단계는 에뮬레이터에 Fiddler의 루트 인증서를 설치 하여 앱에서 SSL 트래픽을 해독할 수 있도록 하는 것입니다.

먼저 에뮬레이터에서 웹 브라우저를 열고 " http://ipv4.fiddler:8888 " 로 이동 합니다. 그러면 Fiddler의 웹 인터페이스가 열립니다. 여기에서 " FiddlerRoot 인증서 " 링크를 클릭 하여 루트 인증서를 다운로드합니다.

Fiddler의 웹 인터페이스

그런 다음 에뮬레이터 설정으로 이동하여 " 인증서 설치 "를 검색합니다 . " 인증 기관(CA) 인증서 " 설정에서 " 어쨌든 설치 " 를 클릭하고 방금 다운로드 한 Fiddler 루트 인증서를 선택합니다 . 이렇게 하면 에뮬레이터에 인증서가 설치되어 Fiddler에서 발급한 SSL 인증서를 신뢰할 수 있습니다.

인증서 프로세스 설치

인증서를 설치한 후 Fiddler의 앱에서 해독된 SSL 트래픽을 볼 수 있어야 합니다.

해독된 SSL 트래픽
멋진 밈

불행히도 이것이 항상 가능한 것은 아니며 , 특히 최신 버전의 Android에서는 더욱 그렇습니다. Android 11부터 앱 개발자가 명시적으로 허용 하지 않는 한 사용자가 설치한 앱에서 사용자 인증서가 허용되지 않습니다 . 즉, 에뮬레이터에 Fiddler 루트 인증서를 설치한 경우에도 앱 개발자가 사용자 인증서 지원을 활성화하지 않으면 앱에서 해독된 SSL 트래픽을 볼 수 없습니다 .

Android Nougat의 보안 변경 사항에 대한 추가 정보:

6단계 - 사용자 인증서를 수락하도록 APK 편집

이 단계에서는 사용자 인증서를 허용 하고 Fiddler가 앱에서 해독된 SSL 트래픽을 캡처할 수 있도록 앱의 APK 파일을 편집합니다 . 이 프로세스에는 다음과 같은 몇 가지 작업이 포함됩니다.

  • APKTool 을 사용 하여 APK 를 디컴파일합니다 . 이렇게 하면 APK에서 파일과 리소스가 추출되어 편집할 수 있습니다.
  • .\apktool.bat d .\Wolt.apk
    

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="false" />
        <domain-config>
            <domain includeSubdomains="true">verygoodproxy.com</domain>
        </domain-config>
    </network-security-config>
    

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <!--allow user certificates start-->
        <base-config>
            <trust-anchors>
                <certificates src="system" />
                <certificates src="user" />
            </trust-anchors>
        </base-config>
        <!--allow user certificates end-->
        <domain-config>
            <domain includeSubdomains="true">verygoodproxy.com</domain>
        </domain-config>
    </network-security-config>
    

    <application ... android:networkSecurityConfig="@null" ...>
    

    <application ... android:networkSecurityConfig="@xml/network_security_config" ...>
    

    cd .\Wolt\
    ..\apktool.bat b -f
    

    다시 컴파일된 APK

APK 파일 정렬에는 내부 구조와 레이아웃을 최적화하여 Android 기기에 보다 효율적 이고 빠르게 설치할 수 있도록 합니다. 이는 Android SDK에 포함된 " zipalign " 이라는 도구를 사용하여 수행됩니다 . APK 파일을 정렬하면 성능이 향상되고 기기에서 차지하는 저장 공간을 줄일 수 있습니다.

반면에 APK 파일에 서명하려면 파일에 디지털 서명을 추가하여 진위와 무결성을 확인해야 합니다 . 이는 Android가 기기에 설치되기 위해 모든 앱에 서명이 필요하기 때문에 필요합니다. APK 파일에 서명할 때 개인 키를 사용하여 파일에 포함된 서명을 만듭니다. 그런 다음 해당 공개 키를 사용하여 이 서명을 확인하여 APK가 변조되지 않았는지 확인할 수 있습니다.

해당 절차에 대한 추가 정보:

  • " zipalign "(일반적으로 C:\Program Files (x86)\APK Editor Studio\tools 에 있음)을 사용 하여 새 APK 파일을 정렬합니다 .
  • zipalign.exe -p -v 4 .\Wolt-patched.apk Wolt-patched-aligned.apk
    

    cd ..
    keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
    

    apksigner.bat sign --ks .\my-release-key.keystore --in .\Wolt-patched-aligned.apk --out .\Wolt-patched-aligned-signed.apk
    

    해독된 SSL(HTTPS) 트래픽
아주 좋아요