Jak działa atak “Man in the middle”? Dlaczego jest on bardzo niebezpieczny? Jak go wykorzystać w praktyce i rozwiązać problem bez modyfikacji aplikacji produkcyjnej?
Problem
W dniu dzisiejszym chciałem przedstawić Wam rozwiązanie do problemu, jaki mnie ostatnio spotkał w pracy. Telewizorowa aplikacja SPA (produkcyjna) w pewnym momencie ma problem z pobieraniem plików. Podczas uruchomienia pobiera pliki z niepoprawnego adresu - nie ma sensu zapuszczać się w detale tego problemu, bo to nie jest celem tego artykułu.
Aby rozwiązać problem w celu debugowania chciałbym móc zaserwować kod aplikacji z mojego komputera, a nie z produkcyjnej lokalizacji, ale jak to mam zrobić, skoro aplikacja jest wgrana do telewizora i nie ma możliwości jej podmiany, bez upgrade-u? Przecież nie mogę na produkcję wrzuć wersji developerskiej!
Rozwiązanie
Rozwiązanie polega na wpięciu się w ruch między routerem, do którego podłączony jest telewizor a samo urządzenie. Ze względu na fakt, że do tego routera wpięte jest mnóstwo urządzeń, wolę delikatnie zmienić architekturę i postawić swoje źródło dostępu do internetu (mój telefon).
Dzięki temu będę mógł wpiąć się komputerem pomiędzy telewizor a telefon za pomocą 2 portów jakie mam w komputerze:
USB
- do którego podłączę telefonThunderbolt-Ethernet
(dongle) - do którego podłączę telewizor za pomocą kabla sieciowego
W skrócie: Należy przechwycić ruch i móc go zmienić w locie.
Jak działa Man in the middle
?
Technika MITM polega na przechwyceniu ruchu poprzez wpięcie urządzenia pomiędzy “ofiarę” (w moim przypadku telewizor), a internet (w moim przypadku telefon).
Ruch w obie strony możemy śledzić za pomocą narzędzia Wireshark
.
Niebezpieczne jest to, że response odpowiedzi może być modyfikowany.
Tym samym OFIARA
nie dostrzeże żadnej różnicy (jeśli ruch nie jest szyfrowany)
kiedy dostanie zmodyfikowaną odpowiedź.
Bądź czujny!
Nie podłączajcie się do niezabezpieczonych sieci Wi-Fi. Istnieje potencjalne ryzyko, że ktoś może przechwytywać ruch (pakiety) i go modyfikować, a Wy się o tym nie dowiecie.
Konfiguracja
1. Telewizor albo inne urządzenie, np. inny telefon (OFIARA)
Podłączyć urządzenie kablem sieciowym (lub za pomocą Wi-Fi) do komputera.
Jeśli nie ma wejścia to skorzystaj z przejściówki np. Thunderbolt → Ethernet
2. Telefon
Udostępnić internet z telefonu na jeden z trzech sposobów:
- Podłączyć telefon do komputera za pomocą
kabla USB
- Wyłącz Wi-Fi
- Włącz Udostępnianie:
iPhone
:Hotspot osobisty
Android
:Przenośny hotspot Wi-Fi
- albo za pomocą
Bluetooth
- ostatecznie możesz spróbować za pomocą
Wi-Fi
, ale ten typ połączenie nie jest rekomendowany przeze mnie
Przetestuj stan!
Od teraz komputer powinien korzystać z telefonu jako źródła internetu.
Sprawdź, czy na komputerze, że możesz wejść na dowolny adres w przeglądarce.
3. Komputer (ATAKUJĄCY)
Poniższy opis dotyczy komputera typu MacBook.
Na innych komputerach proces również jest możliwy, jednak oprogramowanie trzeba inaczej skonfigurować.
- Jeśli nie używasz Wi-Fi to wyłącz je, aby nie zaburzyć protokołu DNS.
-
Udostępnić połączenie:
-
Udostępnić internet wchodząc do:
Preferencje systemowe
→Udostępnianie
-
Przejść do sekcji
Udostępnianie internetu
- W menu
Udostępniaj swoje połączenie
→iPhone USB
- W menu
Komputerom przez
→Thunderbolt Ethernet
- W menu
-
Włączyć
Udostępnianie internetu
Przetestuj stan!
Od teraz telewizor
OFIARA
powinien korzystać z komputera jako źródła internetu.
Sprawdź, czy na telewizorze, że możesz wejść na dowolny adres w przeglądarce.
-
-
Przekierować ruch z
DOMENA.pl
na komputer atakującego- Sprawdzenie jaki adres IP jest na interfejsie
Thunderbolt - Ethernet
-
Wpisanie do pliku
/etc/hosts
następujących rekordów192.168.2.1 DOMENA.pl 192.168.2.1 www.DOMENA.pl
Aby edytować ten plik należy być administratorem.
- Sprawdzenie jaki adres IP jest na interfejsie
-
Przekierować ruch z
DOMENA.pl
na customową usługę (wraz z portem)Stworzyć nowy
vhost
wpisując do pliku/usr/local/etc/nginx/nginx.conf
lub dodaje do katalogu/usr/local/etc/nginx/servers/
, plik np.domena.pl.conf
:server { listen 80; server_name DOMENA.pl www.DOMENA.pl; #rewrite ^/$ http://0.0.0.0:3000 redirect; location / { proxy_pass http://0.0.0.0:3000; } }
Uwaga
W pliku konfiguracyjnym dla
nginx
, wcięciem jest tabulacja.Zrestartować
nginx
za pomocą poleceniaCopy + Paste
sudo nginx -s reload
Przetestuj stan!
Od teraz wchodząc na komputerze na adres
DOMENA.pl
powinieneś stracić możliwość wyświetlenia jej zawartości. -
Zainstalować serwer DNS na komputerze atakującego, aby urządzenie ofiary rozwiązywało adres tak jak atakujący sobie tego zażyczy:
Aby zainstalować narzędzie
dnsmasq
należy uruchomić polecenie:Copy + Paste
brew install dnsmasq
Następnie należy uruchomić serwer z podniesionymi uprawnieniami:
Copy + Paste
sudo dnsmasq
Następnie należy odświeżyć DNS-y:
Copy + Paste
sudo killall -HUP mDNSResponder
-
Stworzyć serwer w Node.js, aby mieć kontrolę nad ruchem HTTP.
-
Stworzyć plik
server.js
w dowolnym miejscu w systemie:const express = require('express'); const morgan = require('morgan'); const app = express(); const PORT = 3000; app.use(morgan('dev')); app.all('*', (req, res) => { res.json({ express: true }); }); app.listen(PORT, () => { console.log(`Server started: http://0.0.0.0:${PORT}`); });
-
Zainstalować zależności:
Copy + Paste
npm install express morgan
-
Uruchomić serwer za pomocą polecenia:
Copy + Paste
node server.js
Przetestuj stan!
Od teraz na komputerze wchodząc na adres
DOMENA.pl
powinieneś otrzymać odpowiedźexpress: true
.
Sprawdź stan wchodząc w przeglądarce naDOMENA.pl
-
Testy
Jak przetestować działanie?
- Zmienić adres
DOMENA.pl
na nasz konkretny host (bez parametrów), który chcemy modyfikować ze swojego komputera. - Uruchomić telewizor i wejść do aplikacji.
- Aplikacja uruchomiona z dowolnymi parametrami na wybranej domenie, będzie
otrzymywać to, co zwraca serwer uruchomiony w
Node.js
.
Troubleshooting
-
-bash: dnsmasq: command not found
Problem polega na tym, że powłoka nie znajduje takiego pliku w żadnym z katalogów zdefiniowanych w zmiennej środowiskowej
$PATH
.Aby rozwiązać problem uruchom:
Copy + Paste
brew doctor
a następnie uruchom:
Copy + Paste
echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.bash_profile
Zrestartować powłokę za pomocą polecenia:
Copy + Paste
source ~/.bash_profile
-
Urządzenie (
OFIARA
) nie potrafi rozwiązać adresuJeśli na telewizorze występuje problem z komunikacją do nadpisywanego adresu, należy zrestartować
dnsmasq
.Znajdź
id
procesu za pomocą polecenia:Copy + Paste
ps aux | grep dnsmasq
Zabij proces o
id
, który pojawić się w poprzednim wyniku w drugiej kolumnie:kill -9 NUMER
Pytania?
Jeśli macie pytania odnośnie zastosowanej techniki napiszcie w komentarzu.
Z przyjemnością porozmawiam więcej na ten temat.