Tech

http프록시로 mitmproxy를 사용해보자.

ENTER TECH 2022. 3. 7. 09:00

 

 

 

안녕하세요, 

카카오엔터테인먼트에서 백엔드 개발을 하고 있는 Andy입니다. 

 

오늘 제가 공유드릴 주제는 'https 프록시로 mitmproxy를 써보자.'인데요~

mitmproxy가 사용해보니 너무 좋아서 다른 분들도 많이 활용해보시길 바라는 마음으로 시작해보겠습니다.

 

 


 

http 프록시로 익숙한 찰스를 써보려고 했지만, 구매가 까다롭다고 하여 요 녀석(mitmproxy)을 써보기로 했습니다.

 

📍 준비물

안드로이드 스튜디오, 안드로이드 SDK

 

💬 준비물들은 안드로이드 가상 디바이스를 만들기 위해서 필요합니다.

      가상 디바이스를 만들고 나서 앱을 빌드한 다음부터는 emualtor 명령어로 켜면 됩니다. 

 

⚠️ 주의

      안드로이드 가상 디바이스를 만들 때는 play store 딱지가 없는 녀석으로 해야 proxy설정이 가능합니다.
      SDK타겟을 8이하로 해도 된다고 합니다.

 

 

 

 

📍 mitmproxy 사용해보기 

 

◾️ mitmproxy란?

mitmproxy charles proxy와 비슷한 오픈소스 HTTP/HTTPS Proxy입니다.

 

◾️ 왜 사용할까?

mitmproxy는 오픈소스입니다. 그리고... 무엇보다 무료입니다..(👀) 여러 환경에서 설치도 간단합니다.
또한 파이썬을 조금만 할 줄 안다면 다양한 기능들을 파이썬 스크립트로 구현하여 사용할 수 있습니다.

 

◾️ 작업 순서

 

1. 설치 

 

2. 프록시 서버 실행

- 둘다 옵션 '-p 포트번호'를 사용할 수 있습니다. 기본값은 '8080'.

- mitmweb의 경우, 옵션 '--web-port'를 사용할 수 있습니다. 기본값은 '8081'.

- 인증서 오류 발생 시 '--ssl-insecure' 옵션을 사용해봅시다.  ('mitmweb --ssl-insecure')

 

 

3. 기기의 와이파이 설정에서 프록시 설정 

❕ 띄워놓은 프록시 서버와 동일한 네트워크여야 합니다. 

             

 - iOS : 설정 앱 > Wi-Fi > 연결된 네트워크의 SSID 오른쪽 i 버튼 > 프록시 구성 > '수동' 체크하고 아래와 같이 채움

 

 

- Android : Wi-Fi > 접속한 와이파이명에서 길게 터치 > 네트워크 설정 관리 > 프록시 구성 > '수동' 체크하고 아래와 같이 채움

 

 

- Mac : 시스템 환경설정 > 네트워크 > (연결된 network) 고급 > 프록시 > 웹 프록시(HTTP)와 보안 웹 프록시(HTTPS)의 서버정보(IP, Port) 설정 > 확인 > 적용

 

 

4. 정상적인 HTTPS 통신을 위해 인증서 설정

- iOS

   : safari 앱을 열고 `mitm.it`로 접속 > 애플 버튼을 눌러 인증서 설치 > 홈으로 나와 아래 진행

   : 설정 앱 > 일반 > 정보 > 인증서 신뢰 설정 > 'mitmproxy on'

 

- Android
   : chrome 앱 열고 'mitm.it'로 접속 > 안드로이드 버튼 눌러서 인증서 설치 > 아무 이름이나 입력 후 저장 > 완료

 

 - Mac
   : 'mitm.it'로 접속 > 'Apple' 버튼을 눌러 다운로드 > 실행해서 추가
   : 키체인 접근 > mitmproxy 더블클릭 > 신뢰 > 이 인증서 사용 시 "항상 신뢰"로 변경 후 닫기 > 암호입력
    ❕ HSTS가 적용된 사이트(google, github...)는 접근 불가

 

 

5. 정상적으로 동작하는지 확인 

❕다음 등의 사이트가 정상적으로 동작하는지 확인합니다.

 

📍 안드로이드 에뮬레이터에 proxy 설정하기

 

◾️ 안드 에뮬레이터에서 설정 (번거로우니 안 하는 게 좋을 듯)

◾️ Network details → 연필 아이콘 클릭 → Advanced Options → Proxy → ip와 port 설정 후 저장

 

◾️ 에뮬레이터가 실행 중 일 때 adb로 세팅할 수 있음. (📝 여기 참고 )

 

◾️ 프록시 설정 해제

 

📍 mitm 인증서 설치

굉장히 귀찮고 주의할 점이 많으니 차근차근 진행합시다. 👀

 

1. 안드로이드 SDK의 emulator, adb 명령어를 사용할 수 있게 패스에 추가합니다.

저는 아래와 같이 진행했습니다.

 

 

일단 에뮬레이터 시작 시 -writable-system 옵션을 꼭 넣어줘야 합니다. 그리고 adb root 명령을 사용할 수 있어야 하는데, 위에서 안드로이드 가상 디바이스를 만들 때 play store 딱지가 있으면 adb root를 사용할 수 없으니 주의!

 

 

2. 인증서 이름을 바꿉니다.

mitmproxy를 설치하면 ~/.mitmproxy 디렉토리 아래에 가짜 인증서가 들어 있습니다.

아래 명령을 실행해서 인증서를 카피하면 c8750f0d.0 같은 이름의 파일이 생깁니다.

 

3. 인증서를 안드로이드 디바이스에 넣습니다.

 

순서대로 아래와 같이 실행해줍니다.

  • AVD의 리스트를 확인하자 : emulator -list-avds (없으면 AVD 매니저에서 만들어야 함)
  • 인증서를 복사할 AVD를 시작하자: emulator -avd <avd_name> -writable-system (-show-kernel 커널로그 보기)
  • abd를 root계정으로 재시작 : adb root
  • 보안 부팅 비활성화: adb shell avbctl disable-verification
  • 디바이스 재부팅 : adb reboot
  • adb root 계정으로 재시작 : adb root
  • adb리마운트 : adb remount
  • 2단계에서 만든 인증서를 카피하자 : adb push <인증서 경로> /system/etc/security/cacerts
  • 인증서 권한 설정 : adb shell chmod 664 /system/etc/security/cacerts/<인증서 파일명>
  • 디바이스 재시작 : adb reboot

 

여기까지 하면 mitmproxy로 로그가 남습니다.

 

📍 유용한 단축키

F(대문자) : 프록시로 중간에 가로챈 요청을 자동으로 위로 올라가게 합니다. 기본 옵션은 off여서 F를 눌러주면 동작합니다.
스페이스 : Flow의 커서가 중간에 있을 때, 다음 페이지로 가는 키가 여러 개 있는데 스페이스를 치면 바로 다음 페이지로 이동합니다. (기본 페이징 사이즈는 30)

 

 

여기까지 제가 준비한 내용입니다.

이 글을 읽어주시는 분들에게 유용한 정보이길 바랍니다.

 

감사합니다.