Hlavní navigace

Mitmproxy: útok na šifrované spojení snadno a rychle

19. 1. 2015
Doba čtení: 5 minut

Sdílet

Šifrování pomocí TLS se stále více stává standardem v komunikaci na Internetu. Zabránění odposlechu je ve většině případů žádoucí, mohou se ale objevit případy, kdy například chceme analyzovat chování neznámé aplikace a šifrování nám brání. Nástroj mitmproxy dokáže v takové analýze velmi dobře pomoci.

Pro odposlech šifrované komunikace metodou člověk uprostřed (Man in the Middle) je zapotřebí splnit dva základní požadavky. Především je potřeba dostat se mezi klienta a server. Dále je potřeba získat falešné certifikáty serverů, kterými se bude odposlouchávací proxy server autentizovat klientům. Mitmproxy zvládne obojí ve velice uživatelsky přívětivé podobě a jako bonus pomůže i s analýzou HTTP(S) komunikace, která je dnes asi nejrozšířenější.

Jedná se na první pohled o obyčejný HTTP proxy server, podporující protokoly HTTP a HTTPS. Veškerý obsah komunikace je ale zaznamenáván. Je-li použit protokol HTTPS, mitmproxy ukončí šifrované spojení na sobě a naváže druhé samostatné šifrované spojení k cílovému serveru, takže dokáže zaznamenat v otevřené formě i obsah šifrované komunikace. Přitom zvládá za letu generovat falešné certifikáty, kterými se prokazuje klientům tak, aby byly vystaveny na stejné jméno jako pravé certifikáty.

Seriál vznikl za přispění Národního CSIRT týmu České republiky CSIRT.CZ, který provozuje sdružení CZ.NIC, správce české národní domény. CSIRT.CZ je bezpečnostní tým pro koordinaci řešení bezpečnostních incidentů v počítačových sítích provozovaných v České republice. Cílem jeho členů je pomáhat provozovatelům internetových sítí v České republice zřizovat jejich vlastní bezpečnostní týmy a bezpečnostní infrastrukturu, řešit bezpečnostní incidenty a tím zlepšovat bezpečnost jejich sítí i globálního internetu. Více informací na www.csirt.cz.

csirt.cz

Instalace a konfigurace

Mitmproxy je napsaný v Pythonu 2.7. Pokud jej nenajdete v balíčcích své distribuce, můžete jej jednoduše nainstalovat ručně zadáním pip install mitmproxy, případně i s použitím virtuálního prostředí virtualenv bez nutnosti rootovských oprávnění:

$ virtualenv -p python2 venv
$ source ./venv/bin/activate
(venv)$ pip install mitmproxy 

Po spuštění příkazem mitmproxy bez dalších parametrů se spustí odposlouchávací proxy server na portu 8080. Zároveň se objeví TUI rozhraní s výpisem zachycených spojení.

Pokud aplikace nebo zařízení, jejíž provoz nás zajímá, podporuje nastavení proxy serveru, máme hotovo, jednoduše nastavíme adresu počítače, na kterém běží mitmproxy, jako adresu proxy serveru pro protokoly HTTP i HTTPS. Pokud není možné použít nastavení proxy, je možné nakonfigurovat mitmproxy i do transparentního režimu, konfigurace však bude poněkud složitější a bude nutné mitmproxy provozovat na nějakém routeru v cestě mezi klientem a serverem.

Instalace kořenového certifikátu

Bez znalosti privátního klíče skutečného serveru samozřejmě není možné provést nedetekovatelný útok. V tuto chvíli se tedy budou všechny HTTPS stránky tvářit jako podvržené. To samo o sobě může sloužit jako dobrý test robustnosti nejrůznějších aplikací a zařízení. Programátoři totiž až příliš často zapomínají implementovat korektní kontrolu důvěryhodnosti certifikátů. Nicméně, abychom mohli analyzovat i provoz aplikací, které kontrolu provádějí, je třeba do zkoumaného zařízení nainstalovat kořenový certifikát mitmproxy, kterým jsou podepsány všechny podvržené certifikáty serverů. Kořenový certifikát je při prvním spuštění vygenerován v adresáři ~/.mitmproxy. Pro snadnou instalaci je možné jej získat ze stránky mitm.it, která je vždy lokálně podvržena právě běžícím mitmproxy serverem a nabízí kořenový certifikát v různých formátech pro různé platformy.

Po instalaci certifikátu bychom měli být schopni používat web stejně jako obvykle, pouze všechny HTTPS certifikáty budou mít najednou společného vydavatele. Teoreticky je možné do podvržených certifikátů vložit maximum z původních, včetně identifikace držitele a případně i příznaku rozšířené validace. Dřívější verze mitmproxy se tak i chovaly, verze 0.11.3, aktuální v době psaní tohoto článku, však přebírá pouze obecné jméno a alternativní DNS jména.

Stránky sdružení CZ.NIC s podvrženým certifikátem, které je správně detekováno červeným zámečkem rozšíření TLSA validator.

S instalací kořenového certifikátu je spojena jedna poněkud kontroverzní bezpečnostní funkce operačního systému Android. Ten od verze 4.4 KitKat při instalaci jakéhokoli uživatelského kořenového certifikátu zobrazuje v oznamovací oblasti upozornění, že síť může být monitorována. Tohoto upozornění se není možné zbavit jinak než odstraněním uživatelsky přidaného kořenového certifikátu.

Kontroverzní na této funkci je to, že existují případy, kdy instalace uživatelského kořenového certifikátu naopak zvyšuje bezpečnost zařízení. Příkladem může být třeba oveřování identity RADIUS serverů při připojení ke korporátním Wi-Fi sítím. Uživatel si tedy musí vybrat, buď nebude certifikát RADIUS serveru kontrolovat vůbec a vystaví se nebezpečí odcizení přihlašovacích údajů, nebo za účelem kontroly nainstaluje kořenový certifikát, za což se mu Android odvděčí trvale svítícím upozorněním o monitorované síti.

Základní ovládání

Textové uživatelské rozhraní mitmproxy přehledně zobrazuje jednotlivé požadavky, které proxy serverem prošly. Klávesou F je možné zapnout či vypnout automatické posouvání kurzoru na poslední požadavek. Stisknutím klávesy Enter se požadavek otevře na celou obrazovku, ve které jsou vidět jak hlavičky, tak i data požadavku nebo odpovědi (přepínáme tabulátorem). Pomocí klávesy r je možné celý požadavek odeslat znovu a sledovat, zda se odpověď serveru bude lišit.

Zobrazení požadavku a odpovědi (komunikace aplikace Glympse)

Měníme data na drátě

Snadné je i pozměňování dat během průchodu proxy serverem. První možnost připomíná použití breakpointu z nástrojů pro ladění programů. Příkazem i vložíme filtr na události, které nás zajímají. Například pro všechny odpovědi, jejichž tělo obsahuje slovo Linux, zadáme filtr jako ~bs Linux. Objeví-li se nyní požadavek, splňující kritéria filtru, zobrazí se červeným písmem a je na cestě od klienta a/nebo k němu zdržen. Nyní jej můžeme otevřít a prozkoumat, případně klávesou e libovolně editovat. Následně jej akceptujeme a pošleme dále klávesou a. Jediné riziko podobného postupu je příliš krátké čekání klienta, který může požadavek vzdát dřív, než jej stihneme editovat.

Druhou možností je systematické nahrazování částí komunikace pomocí regulárních výrazů. To je možné buď přepínačem při spuštění, nebo pomocí vestavěného editoru po stisknutí klávesy R. Jde vždy o trojici: filtrovací výraz, regulární vzor a náhrada. Chceme-li například ve veškerém webovém obsahu nahradit slovo „Windows“ za slovo „Linux“, použijeme přepínač

$ mitmproxy --replace '/~s/Windows/Linux' 

Lepivé sušenky

Další velmi zajímovou funkcí mitmproxy je podpora Sitcky cookies. Po aktivaci této funkce klávesou t a zadáním filtrovacího vzoru jsou ke všem následujícím požadavkům automaticky přilepeny cookies z dřívějších požadavků. Je tedy možné například provést autentizaci obyčejným webovým prohlížečem (skrze mitmproxy) a následně testovat interakci s obsahem pouze pro přihlášené pomocí nástrojů jako cURL. Pro služby, které používají HTTP autentizaci, pracuje obdobným způsobem funkce Sticky auth.

UX DAy - tip 2

Ne vždy se daří

Mitmproxy je bezesporu mocný nástroj zejména pro auditování nejrůznějších uzavřených komunikačních protokolů. Jednoduchým způsobem je také možné použít je k automatizaci opakujících se činností, jako například přihlašování ke Captive portálům.

Trochu obtížnější je analýza komunikace mobilních aplikací na systému Android. Novější verze sice obsahují globální nastavení proxy serveru, aplikace však mají možnost toto nastavení nerespektovat a komunikovat přímo. Pak nezbývá než používat mitmproxy v transparentním režimu. Některé aplikace také zjevně používají nějaký certificate pinning, takže i s importovaným kořenovým certifikátem odmítnou podvržený certifikát přijmout. Analýza takového provozu by tedy nepochybně vyžadovala úpravu kódu dotyčné aplikace.

Byl pro vás článek přínosný?

Autor článku

Ondřej Caletka vystudoval obor Telekomunikační technika na ČVUT a dnes pracuje ve vzdělávacím oddělení RIPE NCC, mezinárodní asociaci koordinující internetové sítě.