지피지기 백전백퇴

가상머신의 Guest OS의 패킷 훔쳐보기


요약

Host OS에서 mitmproxy를 구동하고, Guest OS에서 나가는 통신에 대해 mitmproxy를 거치도록 하면 Guest OS가 수행하는 모든 통신내역을 일단 볼 수 있다. 다만 https등의 보안 연결에 대해선 CA를 설정해줄 필요가 있다.

mitmproxy 설정

mitmproxy --mode transparent

libvirt 설정

손님 OS 설정 화면

보통 Guest OS의 경우 기본값으로 Bridge network를 사용하게 되어있을 것이다. 해당 Bridge network의 이름을 virtmanager에서 찾을 수 있다.

VirtManager 설정 화면

(위 스크린샷에서 virbr0이 바로 우리가 찾는 device 이름)

iproute 설정

이제 해당 bridge device로 들어오는 요청에 대해 proxy를 통하게 하면 된다.

sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i virbr0 -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A PREROUTING -i virbr0 -p tcp --dport 443 -j REDIRECT --to-port 8080

Guest OS에서 CA 설치

http 통신의 경우 이것만으로도 충분하지만, https 통신의 경우, mitmproxy가 요청을 중간에서 가로채서 열어보고 자체 CA로 다시 암호화해서 제공하는 방식으로 동작하기 때문에 Guest OS에서도 도청되고 있다는 사실을 알 수 있다. 보통은 이 자체 CA 또한 신뢰하는 루트 인증 기관으로 등록해서 “도청해도 괜찮다”라고 Guest OS를 설정해줘야 한다.

설정방법

간단히 말해 Guest OS의 브라우저에서 mitm.it를 입력하면 바로 CA 다운로드및 설치 설명서가 제공된다. 대단하구먼…

결론

되긴 되는데, 기실 이걸로 뭔가 대단한 것을 볼 수 있으리라는 기대는 접는게 좋다. 뭔가 제대로 막고싶은 애들이라면 자체 CA 목록을 갖고있다던가 자체 암호화를 한번 더 적용했다던가 하는 식으로 https 위에 추가적인 보안조치를 해 둔 경우가 많기 때문…