Chcete skutečně ovládat PC? Programujte ho, pochopte základy textových konzolí a ponořte se do tajů síťové komunikace a odposlechů, neboť právě internetu patří budoucnost.
Na sklonku loňského roku vyšlo najevo, že je reklamní systém v chytrých televizorech LG připravený k tomu, aby odesílal na server společnosti různé zajímavé informace o zařízení – třeba názvy souborů na připojených médiích (typicky USB disky). Systém tehdy nicméně ještě nebyl plně funkční, čili televizor sice informaci odesílal, ale na adresu, na které nikdo neposlouchal.
Dokladem této činnosti televizoru byl výstup z programu Wireshark, který slouží k monitorování provozu na síťových kartách počítače, případně na jiných síťových prvcích, které umějí údaje o svém provozu přeposílat na jiný počítač.
Odhalený pokus o odeslání názvu souborů na USB skrze chytrý televizor na server výrobce. Výstup Wiresharku může být pro začátečníka matoucí, stačí ale použít filtry.
Wireshark po spuštění a výběru síťového zařízení (ethernet, Wi-Fi apod.) vyplní obrazovku seznamem veškeré zaznamenané aktivity na všech internetových protokolech. Aby se v tom člověk vyznal, musí rozumět alespoň elementárním základům komunikace na internetu a pak filtrování.
Kouzlo Wiresharku totiž nespočívá v tom, že na vás vyplivne nepřehledné množství stovek a tisíců přenosů mezi vaším počítačem a zařízeními v síti, ale v tom, že podobný guláš dat můžete filtrovat s pomocí hromady parametrů.
Stačí vybrat síťové rozhraní a spustit monitorování – okno programu se zahltí seznamem probíhající komunikace
Po programování počítače a jeho ovládání pomocí textové konzole tedy pokračujeme v našem miniseriálu a podíváme se na to, jak ve Wiresharku provést alespoň základní monitoring a analýzu toho, co vám protéká přes síťovou kartu počítače.
Jak odposlouchávat komunikaci HTTP
Dejme tomu, že chcete ve výstupu vidět pouze HTTP komunikaci mezi počítačem a sítí. Chcete tedy vidět všechny dotazy, které na tomto protokolu provádí spuštěný prohlížeč a jiné programy v počítači.
Do filtrovacího pole stačí zadat formuli:
http
Ve Wiresharku jsem nastavil filtr na HTTP komunikaci a v prohlížeči navštívil web Avmania.cz. Nyní mohu přehledně sledovat veškerou komunikaci na daném protokolu mezi prohlížečem a webovým serverem.
Jak odposlouchávat komunikaci FTP
Monitorování HTTP je tedy snadné, co když ale budete chtít pouze vypsat komunikaci, která probíhá na nějakém konkrétním portu TCP? V takovém případě je třeba zadat třeba:
tcp.port == 21
Na portu 21 zpravidla probíhá komunikace protokolu FTP, čili pokud se během spuštěného monitorování pokusíte připojit k nějakému serveru FTP, ve Wiresharku se okamžitě začne vypisovat celá komunikace. Namísto filtru podle portu v tomto případě můžete použít i zkratku ftp.
V příkazové řádce se přihlašuji k běžnému nešifrovanému serveru FTP, login a heslo tedy letí sítí a Wireshark je může snadno zachytit
Kombinuji, kombinuješ, kombinujeme
Dejme tomu, že budete chtít tyto filtry kombinovat. V takovém případě můžete použít mnoho operátorů – nejčastěji and (&&), or (||) nebo třeba negaci vyjádřenou tradičně vykřičníkem a slovem not.
Pokud tedy budete chtít změť ve Wiresharku omezit pouze na výpis HTTP a FTP komunikace, stačí napsat:
http or ftp, případně http || ftp
Editor pokročilých filtrů nabízí výběr ze stovek všemožných protokolů v celé šíři referenčního modelu ISO/OSI
Anebo ještě trošku jinak. Co když webový server poslouchá na portu 8000 a vy chcete vyseparovat pouze HTTP komunikaci na tomto portu? Pomůže filtr:
tcp.port == 8000 and http, případně tcp.port == 8000 && http
Negaci by šlo použít třeba takto:
tcp.port == 80 && !http
Případně pro mnohé srozumitelněji:
tcp.port == 80 and not http
Zobrazí se tedy pouze ta komunikace, která protéká na TCP portu 80 ale zároveň se nejedná o komunikaci na protokolu HTTP.
No dobrá, co když vám ale nejde o porty, ale chcete filtrovat IP adresy? Ani to samozřejmě není žádný problém, pokud tedy chcete získat jen seznam jednosměrné komunikace mezi počítačem a třeba IP adresou 173.194.116.23, zadejte:
ip.dst == 173.194.116.23
Případně obecněji pro obousměrnou komunikaci (ať už je daná IP adresa zdroj, či cíl):
ip.addr == 173.194.116.23
SSL
Stále větší množství komunikace protéká šifrovaným spojením SSL typicky na portu 443, můžete ho tedy zobrazit pomocí filtru:
tcp.port == 443
Bez privátního klíče daného serveru nicméně uvidíte jen údaje o zakódované komunikaci, nikoliv obsah třeba vyplněných formulářů. Pomocí aktuální chyby Heartbleed nicméně lze (sic komplikovaně) získat i tyto privátní klíče, a pak byste tedy mohli odposlouchávat i cizí komunikaci.
Data jsou šifrovaná (HTTPS) a já nemám klíč...
Jak odposlouchávat domácí síť
Jak už jsem napsal výše, do Wiresharku na vašem počítači lze odesílat i údaje o provozu na jiném síťovém zařízení. Toho lze využít pro sledování komunikace jiného počítače v domácí lokální síti. Stačí k tomu jediné – Wi-Fi router, který to umí.
Když jsem tedy zkoumal, co všechno na internet odesílá zapůjčený chytrý televizor od Samsungu, jednoduše jsem jej připojil do domácí Wi-Fi sítě a na Wi-Fi routeru spustil monitoring provozu s přeposíláním komunikace na IP adresu počítače, na kterém byl spuštěný Wireshark. Tuto mocnou funkci zvládnou poměrně elegantně třeba routery od Mikrotiku (systém RouterOS), případně ty kompatibilní s komunitními systémy typu OpenWrt a DD-Wrt (stačí použít Google). Nakonec to často zvládnou i ostatní routery, které umožňují pokročilou a plnohodnotnou správu třeba skrze telnet/SSH a tedy už linuxový terminál.
Odposlouchávat komunikaci a přeposílat ji do PC s Wiresharkem umí třeba systém RouterOS dodávaný s routery Mikrotik.
Pokud podobný router nemáte po ruce, můžete pomocí mnoha programů – třeba Connectify – přepnout do režimu hotspotu vlastní počítač a veškerá bezdrátová komunikace pak poteče přímo přes vás.
Jakmile začne Wireshark zachytávat nejen komunikaci mezi hlavním počítačem a internetem, ale také mezi jiným počítačem v lokální síti a internetem, vhod přijde další filtr, který zobrazí pouze komunikaci ze zařízení s lokální IP adresou 192.168.1.3. Pokud by tuto IP adresu měl onen chytrý televizor, jeho jednosměrnou komunikaci zobrazím takto:
ip.src == 192.168.1.3
Takový televizor nicméně bude neustále rekognoskovat terén a bude hledat v lokální síti DLNA zařízení. Pokud tedy budete chtít vyfiltrovat jen přehlednou HTTP komunikaci, opět se nabízí třeba:
ip.src == 192.168.1.3 and http
Nebo obecněji:
ip.addr == 192.168.1.3 and http
Hledáme hesla a odeslané formuláře
Takto tedy vypadá základní tvorba filtrů. Wireshark jich ve skutečnosti nabízí stovky a v záznamu komunikace tedy s trochou zkušeností najdete cokoliv. Filtrovat můžete nejen protokoly TCP/IP, ale prakticky všechny od těch nízkoúrovňových až po ty nejvyšší, které jsou často postavené právě nad protokolem HTTP.
Většina zajímavé komunikace nicméně běží na HTTP, takže si pojďme ukázat, jak ve výpisu zobrazit pouze tu komunikaci, při které dochází k odeslání nějakého formuláře v nešifrované podobě – tedy bez HTTPS spojení.
Podobného kousku docílíte filtrem:
http.request.method == POST
Pak už stačí u zjištěné komunikace rozevřít blok s údaji a dozvíte se přesný textový řetězec, který webový prohlížeč odeslal na cílový server. Tímto způsobem, ať už ve Wiresharku, nebo jiném zachytávači paketů, pak může údaj z formuláře zachytit každý router po cestě mezi vámi a cílem. Právě z tohoto důvodu je naprosto klíčové, aby se všechny důležité formuláře odesílaly pomocí standardního šifrovaného spojení (HTTPS), ačkoliv nedávné zveřejnění chyby Heartbleed jasně ukázalo, že i tato technika může mít své mezery.
Velké weby by dnes pro přihlašování měly používat výhradně šifrované spojení, u těch maličkých pro pár registrovaných uživatelů to ale zase takové pravidlo není. Pokud tedy nastavím filtr na HTTP dotaz POST a na podobném webu vyplním nějaký přihlašovací formulář, hned se dozvím hodnoty políček z formuláře včetně loginu a hesla jako na obrázku výše.
Všimněte si, že tvorba filtrů se řídí objektovým pravidlem, kdy různé stupně filtru odděluji tečkou. Nejprve jsem tedy filtr omezil na komunikaci skrze protokol HTTP, dále mě zajímá REQUEST, tedy dotaz, a konečně jeho metoda POST.
Wireshark při psaní filtru za každou tečkou zobrazí v našeptávači všechny možnosti, čili i začátečník brzy pozná, co všechno může použít. Pokud ho budou zajímat HTTP dotazy typu GET (tedy ta zbývající drtivá většina), prostě napíše:
http.request.method == GET
Filtr HTTP toho samozřejmě nabízí mnohem více, takže podobným způsobem můžete třeba zobrazit pouze tu komunikaci, která obsahuje nějakou konkrétní sušenku cookie.
Filtr by mohl vypadat takto:
http.cookie contains "userinfo"
Použil jsem nový operátor contains, který se hodí pro případy, kdy chcete zobrazit pouze ty záznamy, ve kterých vybrané pole obsahuje nějakou konkrétní hodnotu.
Nakonec ještě jeden filtr opět z rodiny HTTP. Dejme tomu, že budete chtít zobrazit pouze spojení na konkrétní webovou doménu. Poslouží k tomu filtr http.host:
http.host == "www.zive.cz"
Nyní se ve Wiresharku začne vypisovat pouze HTTP komunikace počítače s webovou doménou www.zive.cz.
Nyní vidím jen HTTP komunikaci mezi mým počítačem a serverem na doméně www.zive.cz
Fiddler: Když je Wireshark příliš velké sousto
Občas nepotřebujete odposlouchávat celý počítač, případně okolní LAN, ale chcete odposlouchávat jen HTTP komunikaci konkrétního programu na počítači. Tuto práci na Windows může zvládnout program Fiddler.
Na studium toho, jak komunikují programy na vašem PC, se hodí specializovaný Fiddler
Po spuštění přehledně vypíše seznam HTTP komunikace, přičemž v pravém panelu vždy uvidíte detaily včetně obsahu. Pokud budete chtít sledovat konkrétní program – třeba spuštěný webový prohlížeč, stačí v ovládací liště klepnout na ikonu terčíku a myší označit konkrétní okno programu. Pak se začne vypisovat pouze jeho komunikace.
Fiddler toho ale umí mnohem více a ve spojení s univerzálním Wiresharkem odvede veškerou špinavou práci. S pomocí těchto programů můžete studovat třeba to, co všechno i v klidu odesílá k Wi-Fi připojený telefon, jak probíhá komunikace některých programů (pokud není chráněná SSL) a jakým způsobem se vlastně odposlouchává nešifrovaná (a při krádeži SSL klíčů i šifrovaná) síť.