ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [안드로이드] 안드로이드 앱 실시간 패킷 캡쳐 및 분석 with mitmproxy, Wireshark
    # 시스템 해킹 공부중 2019. 10. 9. 20:21

    안드로이드 앱에서 발생하는 패킷을 분석하는 방법은 다양하다. 

     

    [그림1] packet caputre applications

    [그림1]의 왼쪽부터 Packet Capture, Debug Proxy, tPacketCapture 라는 어플리케이션으로 안드로이드 어플리케이션에서 발생하는 패킷들을 캡쳐해서 보여준다. 이 외에도 다양한 앱과 도구들이 존재하고, 앱에 따라 안드로이드 기기의 루팅이 필요한 경우도 있고, 인터페이스나, 제공하는 데이터의 형태 역시 다르다. 다양한 도구와 그 소개를 보고싶다면 아래 링크를 타고 가면 확인할 수 있다. 

    7 Best Wireshark Alternatives for Android (Updated) 2019

     

    7 Best Wireshark Alternatives for Android (Updated) 2019

    Are you looking for best Wireshark alternatives for Android phones? Check out these top 7 apps like Wireshark to analyze network. (FREE)

    techonation.com

     

    개인적으로 몇 개 써봤는데, 간단하게 패킷을 확인할 때는 좋지만, 다량의 패킷을 분석하기엔 조금 불편함이 있었다. 그리고 저장된 pcap 파일을 컴퓨터로 빼내는 것 역시 여간 귀찮은게 아니었기 때문에 조금 익숙한 wireshark 를 활용한 방법을 찾아보게 되었고, 그 방법에 대해 기록한다. 

     

    1. mitmproxy 소개 

    mitmproxy는 클라이언트와 서버 중간에 위치하여 지나가는 패킷을 확인할 수 있는데, mitmproxy의 특징은 http 패킷 뿐만 아니라 https 패킷까지 복호화해서 확인할 수 있다는 점이다. 

    [그림2] mitmproxy overview

     

    간단하게 원리를 살펴보면, HTTPS 로 통신을 할 경우, 서버는 클라이언트에게 암호화 Key가 포함된 인증서를 전송한다. 클라이언트는 받은 인증서가 신뢰할만한 인증서인지 판단한 뒤, 인증서를 설치하고 인증서에 있는 key를 이용해서 암호화 하여, 서버와 통신한다. 

     

    mitmproxy는 이런 클라이언트와 서버 사이에 위치하여, 자체 인증서를 클라이언트에 설치하게 하고, 클라이언트는이 인증서의 key를 이용해서 암호화하여 mitmproxy와 통신한다. mitmproxy는 서버에서 받은 key를 이용해서 데이터를 암호화하여 서버와 통신한다. 이러면 mitmproxy는 클라이언트와 서버 사이에서 오가는 패킷을 볼 수 있게 된다. 이를 활용해서 안드로이드 기기에서 발생하는 패킷을 PC의 wireshark 로 분석하는 방법을 소개한다. 안드로이드 뿐만 아니라 아이폰과 같은 다른 기기에서도 프록시 설정만 해주면 똑같이 패킷을 분석할 수 있기 때문에 참고해서 활용하면 된다.

     

    중요한 점은 패킷을 분석하려는 대상이 되는 기기와 mitmproxy가 설치되어있는 기기는 같은 네트워크상에 있어야 한다. 즉, 두 기기가 같은 공유기에 연결되어 있어야 한다. 

     

    2. mitmproxy 설치

    mitmproxy는 공식 홈페이지에서 OS별 설치방법이 잘 설명되어 있다. 윈도우의 경우 홈페이지에 접속해서 메인 페이지에 있는 download 버튼을 누르면 설치파일을 받을 수 있다. 

     

    [그림3] mitmproxy install

    mitmproxy homepage : https://mitmproxy.org/

     

    mitmproxy - an interactive HTTPS proxy

    Mitmproxy powers a number of notable open-source projects: pathod, mitmproxy's sister project to craft malformed HTTP/1, HTTP/2 and WebSocket requests. netograph, a privacy analysis and measurement service. tamper, a Chrome extension that lets you edit rem

    mitmproxy.org

     

    mitmproxy는 여러 OS를 지원하는데 본 글에서는 윈도우 기준으로 작성한다. 다른 OS에 대해서는 아래 링크를 참조하면 된다. 

    mitmproxy installation docs : https://docs.mitmproxy.org/stable/overview-installation/

     

    Installation

    Edit on GitHub #  Installation Please follow the steps for your operating system. The recommended way to install mitmproxy on macOS is to use Homebrew: Alternatively you can download the binary-packages from our releases page. The recommended way to instal

    docs.mitmproxy.org

     

    [그림4] mitmproxy

    mitmproxy를 설치하고, mitmproxy ui를 실행하면 프록시 서버(커맨드 창)와 웹 서버(브라우저)가 실행된다. 프록시서버는 8080포트를 사용하며, 웹 서버는 8081을 사용하게 되는데 클라이언트와의 데이터 송수신은 프록시서버를 통해서 이뤄진다. 웹서버는 프록시 서버로 받은 패킷의 상세 정보를 웹페이지 형태로 편리하게 볼 수 있도록 mitmproxy에서 제공하는 기능이다. 

     

    3. 안드로이드 프록시 설정 및 인증서 설치

    [그림5] android proxy

    안드로이드에서 연결된 와이파이를 2초 정도 꾹 누르고 있으면, [그림5]와 같은 팝업 메뉴가 뜨고, 네트워크 구성 변경을 눌러준다. 

     

    [그림6] android proxy

    고급 옵션 표시에 체크를 한 다음, 프록시를 수동으로 맞춰준다. 

     

    [그림7] android proxy

    그리고 아래에 프록시 호스트 이름은 mitmproxy가 설치된 컴퓨터의 ip주소, 포트번호는 8080으로 맞추고 저장하면 된다. 다른 옵션은 건들지 않아도 된다. 

     

    [그림8] mitm.it

    이렇게 프록시 설정을 해주고, 브라우저를 열어서 mitm.it 로 접속하면 [그림8]과 같은 화면이 뜨는데, 반드시 컴퓨터에서 mitmproxy를 실행하고, 안드로이드에서 프록시 설정을 한 뒤, 접속해야한다. 그렇지 않으면 [그림8]과 같은 화면이 뜨지 않는다. 그리고 패킷 분석을 하려는 대상 기기의 환경에 맞게 클릭해서 mitmproxy 인증서를 다운받아준다. 

     

    [그림9] mitmproxy certificate

    안드로이드에선 다운받은 pem 파일을 그냥 터치해서 실행시키면 인증서가 등록된다. 다른 OS에서는 각자 인증서를 등록하는 방법에 맞게 인증서를 기기에 등록해준다. 여기까지 완료 했으면 mitmproxy를 사용할 수 있다. 앱을 실행하면 모든 패킷은 PC의 mitmproxy로 전송되어 패킷을 분석할 수 있다. mitmproxy만 사용해도 간단한 패킷을 분석할 수 있지만, mitmproxy에서는 패킷을 pcap 으로 export 할 수 없고, wireshark의 편리한 기능들을 이용하면 패킷 분석이 조금 더 용이하기 때문에 활용해보도록 한다. 

     

    4. Wireshark로 패킷 캡쳐하기

    Wireshark가 없는 경우 아래 링크에서 installer 를 받아서 설치하면 된다. 

    wireshark download page : https://www.wireshark.org/download.html

     

    Wireshark · Download

    Riverbed is Wireshark's primary sponsor and provides our funding. They also make great products that fully integrate with Wireshark. I have a lot of traffic... ANSWER: SteelCentral™ Packet Analyzer PE • Visually rich, powerful LAN analyzer • Quickly access

    www.wireshark.org

    [그림10] environment variable

    Wireshark 에서 https 패킷을 복호화 하기 위해서 몇 가지 설정을 해 줘야 한다. 우선 [제어판-시스템-고급 시스템 설정-환경변수] 순으로 들어가서 [그림10]과 같이 변수 이름을 SSLKEYLOGFILE 로 주고, 변수 값은 원하는 경로로 넣어주면 된다. 이 경로에 브라우저의 SSL Key 로그 파일이 저장된다. 이 로그 파일은 브라우저에서 https 패킷을 복호화 하기 위해 사용한 key 값을 기록해둔다. (Chrome과 Firefox에서만 지원하는 기능이다) wireshark 에서는 이 로그 파일을 이용해서, 캡쳐한 https 패킷을 복호화 한다. 환경변수를 설정해준 다음, mitmproxy를 재실행해주면 변수 값에 넣었던 경로에 로그파일이 생성된다. 

     

    [그림11] wireshark setting

    Wireshark를 실행하고, [Edit - Preference - Protocols - TLS] 순으로 들어가서 (Pre)-Master-Secret log filename 에 방금 환경변수에 설정했던 로그 파일을 선택해주면 된다. 

     

    [그림12] wireshark

    Wireshark로 패킷을 캡쳐하면 정상적으로 안드로이드 앱에서 발생하는 패킷들이 캡쳐되는 것을 확인할 수 있다. wireshark는 안드로이드의 패킷만 캡쳐하는게 아니라 캡쳐하고 있는 인터페이스에서 발생하는 모든 패킷을 캡쳐하기 때문에 노이즈가 발생하는데 필터를 걸어주면 쉽게 해결된다. 

    ip.src == [Android Device IP] || (ip.dst == [Android Device IP] && tcp.srcport == 8080)

    위와 같이 wireshark에 필터를 걸면 깔끔하게 안드로이드에서 송/수신 되는 패킷을 분석할 수 있다. 

     

    그리고 이렇게 필터된 패킷을 따로 저장하고 싶을 경우, 우선 캡쳐를 중지한 다음 [Edit- Mark All Displayed] 를 선택하면 필터된 패킷에 마킹이 된다. 그리고 이어서 [File - Export Specified Packets]를 선택하면 마킹된 패킷만 저장할 수 있다.

     

    [그림13] wireshark packet export

    [그림13]과 같이 Marked packets 에 체크를 해주고 저장하면, 필터된 패킷만 저장할 수 있다. 

    [수정] 그냥 필터걸어준 다음, [File - Export Specified Packets] 누르고, [그림13]에 있는 Displayed 에만 체크 하면, 따로 마크를 하지 않아도 현재 와이어샤크에 보이는 패킷들만 저장된다. 이렇게 저장할 땐 Maked packets에 체크하지말고, All Packets에 체크를 해야 한다. 

     

    분명 안드로이드 패킷 분석을 위한 앱들을 사용하면, 앱 단위로 발생하는 패킷을 분석하거나 안드로이드 기기만으로 패킷을 분석할 수 있다는 장점이 있다. 하지만 루팅이 필요한 경우가 있고, 캡쳐한 패킷을 따로 저장하거나 다량의 패킷을 분석하기에는 불편할 수 있기 때문에 mitmproxy를 활용하면 원하는 환경에서 분석할 수 있어서 편리하다. 무엇보다 실시간으로 발생하는 패킷을 확인할 수 있다는 점이 큰 장점인 것 같다.

    댓글

Designed by Tistory.