mitmproxy를 이용한 HTTP/HTTPS 트래픽 확인

개발을 하다보면 실제 네트워크 요청이 어떻게 이루어지고 있는지 확인해야할 필요가 있습니다. 내가 원하는 헤더와 파라미터로 전송되었는지, 응답에 포함된 헤더는 무엇인지등 상황은 많습니다. 직접 만들고 있는 어플리케이션에서는 디버깅 툴을 이용하거나 print 등을 이용해서 출력해서 확인하기도 하지만 이런것이 불가능한 상황도 있고 매번 지웠다 추가했다 하는것도 귀찮은 일입니다.

이렇게 다른 앱이나 혹은 디버깅을 직접 할 수 없는 상황에서 프록시 서버를 이용해 네트워크 트래픽을 분석하는 경우가 많이 있습니다. Wireshark, Charles Proxy 등이 많이 알려져 있는데요. 오늘 제가 소개할 툴은 mitmproxy 입니다. Wireshark, Charles 같은 경우 미려한 GUI를 제공하지만 설치하기도 번거롭고 네트워크 트래픽만 보려는데 메뉴도 많아서 복잡한데 mitmproxy는 터미널에서 간단하게 실행되고 사용하기도 쉽습니다.

설치

python이 설치되어 있다면 아래 명령어를 이용해 설치합니다.

$ pip install mitmproxy

Mac 사용자라면 홈페이지에서 맥용 바이너리를 직접 받는편이 쉽습니다. 바이너리 압축을 풀면 실행파일이 2개 나오는데 이중 mitmpxoy를 다음과 같이 실행만 하면 끝입니다. 쉽죠?

$ ./mitmproxy

설정

mitmproxy를 실행하면 전체가 까만색에 하단에는 파란색 상태바만 보이는 화면을 보게 됩니다. 이게 실행된겁니다 ^^ 하단 파란색 상태바의 우측에 [*:8080] 는 현재 컴퓨터의 8080 포트로 프록시 서버를 실행했다는 의미입니다.

mitmproxy_launsh

mitmproxy 실행화면

mitmproxy를 실행한 상태에서 네트워크 트래픽을 확인하기 위한 디바이스의 네트워크 설정에 프록시 서버 설정을 합니다. ip 주소는 mitmproxy가 실행중인 컴퓨터의 ip, 포트는 위에서 확인한 8080 포트를 입력합니다.

SSL 인증서가 적용된 네트워크 트래픽을 확인하기 위해서는 추가 작업이 필요합니다. 네트워크 트래픽을 확인하기 원하는 디바이스의 브라우저에서 http://mitm.it 을 입력후 OS에 맞는 이미지를 선택해 SSL 인증서를 설치합니다.(프록시 설정이 되있지 않은 상태에서는 mitm.it 에 접속할 수 없습니다.

iOS 기기에 인증서 설치하기

iOS 기기에 인증서 설치하기

SSL 인증서가 디바이스에 설치되어 있지 않은경우 HTTPS 를 사용하는 앱에서 다음과 같은 오류가 발생하고 트래픽 확인도 불가능합니다.

SSL 인증서 미설치시 오류

SSL 인증서 미설치시 오류

iOS 용 크롬의 경우는 SSL 인증서 미설치시 주소창 옆에 잠금 아이콘이 빨간색으로 나오면서 잘못된 인증서임을 알립니다.

인증서 미 설치시 사파리 알림창

인증서 미 설치시 사파리 알림창

인증서 설치 전후 URL 주소창

인증서 설치 전후 URL 주소창

사용 방법

mitmproxy의 기본 사용방법은 간단합니다. HTTP/HTTPS 트래픽이 화면에 표시되고  j/k 키를 이용해 커서를 상하로 이동해서 트래픽을 선택하고 상세히 확인하고 싶은 트래픽에서 엔터키를 입력하면 요청/응답/상세 탭으로 구분된 페이지로 이동하고 다시 목록으로 가려면 q키를 입력합니다.

mitmproxy 트래픽 목록

mitmproxy 트래픽 목록

상세화면에서 요청/응답/상세 탭의 이동은 h/l 키를 이용합니다.

mitmproxy 상세 화면

mitmproxy 상세 화면

이외에도 mitmproxy는 같은 요청을 다시 보내거나 트래픽을 변조하는등 다양한 기능을 가지고 있습니다. 저 같은경우는 위에 나온 가장 기본적인 방법만 주로 사용하고 있습니다.

mitmproxy를 사용한다고 모든 네트워크 트래픽을 볼 수 있는것은 아닙니다. HTTP/HTTPS 트래픽만 확인 가능하고 페이스북/애플 등 몇몇 앱들의 경우에는 트래픽 확인이 되지 않는데 이유는 정확히 모르겠습니다. 아마도 보안조치를 취해서 그런것이 아닐까 생각하고 있습니다.

또한 iOS와 달리 Mac에서는 인증서를 설치하더라도 mitmproxy를 프록시 서버로 설정하는 경우 HTST를 적용한 일부 웹사이트는 사용이 불가능합니다. HTST는 HTTPS에 보안을 좀더 강화한것으로 정확한 동작방식은 저도 아직 이해를 못해서 위키링크로 대체합니다. HTST가 적용된 대표적인 서비스로 Google, GitHub 등이 있습니다. 그런 이유로 mitmproxy를 사용하면서는 구글 검색과 깃헙 사용을 못해요 ㅜㅜ iOS에서는 잘되는데 맥에서는 왜 안되는지 이유를 잘 모르겠습니다.

HTST가 적용되지 않은 사이트는 위험하지만 페이지 접근 가능

HTST가 적용되지 않은 사이트는 위험하지만 페이지 접근 가능

HTST가 적용된 사이트는 접근 불가능

HTST가 적용된 사이트는 접근 불가능

게시글의 아마존, iTunes 링크들을 통해 구매를 하시면 제휴(Affiliate) 프로그램에 의해 저에게 일정 금액이 적립될 수 있습니다. ^_____^

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.