1
2
3
4
5
6
           _ _              ___  ______ 
          (_) |            / _ \ | ___ \
 _ __ ___  _| |_ _ __ ___ / /_\ \| |_/ /
| '_ ` _ \| | __| '_ ` _ \|  _  ||  __/ 
| | | | | | | |_| | | | | | | | || |    
|_| |_| |_|_|\__|_| |_| |_\_| |_/\_| 2.1

개요

AP기반의 mitm용 도구인 mitmAP를 소개합니다. mitmAP는 AP를 만들어 해당 AP에 접속하여 발생하는 브라우저 통신에 대해서 도청을하며, 추가적으로 SSL Strip도 제공합니다.

이런 경우 SSL Strip을 할 수 있습니다.

  • https 페이지에 유저가 siteurl.com 혹은 http://siteurl.com으로 요청하는 경우. (https 리다이렉트 SSL Strip)
  • HTTP Response에 문자열로 https이 넘어오는 경우.

이런 경우에 SSL Strip을 할 수 없습니다.

  • 유저가 직접 https://siteurl 로 접근하는 경우.
  • 브라우저에서 preload HSTS 설정 혹은 한번 방문하여 HSTS가 load되어 http로 접근하여도 https로 강제로 이동하는 경우.
  • 응용프로그램, 앱 등등에서 https://siteurl를 하드 코딩 했을 경우.

기능

  • SSLstrip2
  • Driftnet
  • Tshark
  • Full featured access point, with configurable speed limit
  • mitmproxy
  • Wireshark
  • DNS Spoofing
  • Saving results to file

요구사항

  • 칼리 리눅스 또는 라즈베리안의 Root 권한이 필요합니다.

  • AP를 직접 터트려야 하기 때문에 무선 랜카드가 최소 1개 이상 필요합니다.

    https://wireless.wiki.kernel.org/en/users/Drivers 랜카드 드라이버가 여기에 존재해야 합니다.

  • Python3에 의존성이 있습니다.

사용법

1
2
3
git clone https://github.com/xdavidhu/mitmAP

sudo python3 mitmAP.py

Kali Linux -> “sudo python3 mitmAP.py” Raspberry PI -> “sudo python3 mitmAP_rpi.py”

1
2
3
4
5
6
7
8
9
10
           _ _              ___  ______ 
          (_) |            / _ \ | ___ \
 _ __ ___  _| |_ _ __ ___ / /_\ \| |_/ /
| '_ ` _ \| | __| '_ ` _ \|  _  ||  __/ 
| | | | | | | |_| | | | | | | | || |    
|_| |_| |_|_|\__|_| |_| |_\_| |_/\_| 2.1
             by David Schutz (@xdavidhu)

[?] Install/Update dependencies? Y/n: Y
[I] Checking/Installing dependencies, please wait...

첫번째 실행떄는 dependencies 설치에 “y”를 선택해야 합니다. 이 과정에서 5-10분정도 소요됨.

참고! 첫번째 실행시 y를 해도 빠르게 넘어간다면 kali liunx의 패키지 Repositories가 제대로 설정이 되어있지 않은것 입니다. http://docs.kali.org/general-use/kali-linux-sources-list-repositories 를 참고하여 /etc/apt/sources.list Repositories를 설정해줍니다.

1
[?] Please enter the name of your wireless interface (for the AP): wlan0

AP로 작동할 interface를 입력합니다. 기본적으로 랜카드를 하나 쓰면 wlan0

1
[?] Please enter the name of your internet connected interface: eth0

인터넷에 접속할 interface를 입력합니다.

1
2
3
4
[I] Backing up NetworkManager.cfg...
[I] Editing NetworkManager.cfg...
[I] Restarting NetworkManager...
[?] Use SSLSTRIP 2.0? Y/n: Y

SSL Strip 2.0를 사용합니다. 2.0은 HSTS 우회를 제공합니다. 하지만 HSTS를 서브도메인 전체 설정으로 load 되어있으면 불가능합니다.

1
2
3
4
5
6
[?] Capture unencrypted images with DRIFTNET? Y/n: n
[I] Backing up /etc/dnsmasq.conf...
cp: cannot stat '/etc/dnsmasq.conf': No such file or directory
[I] Creating new /etc/dnsmasq.conf...
[I] Deleting old config file...
[I] Writing config file...

DRIFTNET는 통신 상의 데이터들 중 이미지를 따로 모아주는 툴입니다. 이미지가 중요하게 작용할 때 사용하시면 됩니다. DRIFTNET의 자세한 설명 - http://www.ex-parrot.com/~chris/driftnet/

1
[?] Create new HOSTAPD config file at '/etc/hostapd/hostapd.conf' Y/n: 

AP를 만들기 위한 설정파일를 새로 만듭니다. 2번쨰 실행부터는 n로 설정하면, 아래에서 설정할 값들을 사용합니다.

1
Please enter the SSID for the AP: nisam-mitm

AP의 SSID명을 적어줍니다.

1
?] Please enter the channel for the AP: 13

1, 5, 9, 13 채널 중 하나를 선택합니다.

1, 5, 9, 13 채널 중 하나를 사용하는 이유 wifi는 채널 하나 당 5MHz, 총 13개의 채널을 사용 (대한민국 기준) 802.11(wifi) 표준은 간섭을 피하기 위해 최소 20MHz의 대역폭을 가지도록 되어있음 채널을 4개 간격으로(20/5) 떨어뜨려서 쓰면 원활한 통신 가능.

1
2
[?] Enable WPA2 encryption? y/N: y
[?] Please enter the WPA2 passphrase for the AP: 1234567890

상황에 맞춰서 WPA2 또는 공개로 설정해서 사용합니다. 현재는 테스트를 위해 WPA2를 적용했습니다.

1
[?] Set speed limit for the clients? Y/n: n

속도 제한은 필요하면 설정하세요.

1
[?] Start WIRESHARK on wlan0? Y/n: Y

Y로 설정하면 WIRESHARK가 자동으로 켜지고 wlan0에 자동으로 붙어줍니다.

1
[?] Spoof DNS manually? y/N: N

DNS 변조는 자동으로 진행하게 합니다.

이제 AP에 접속한 뒤, 마음껏 mitm 해보세요!