Pro jednoduchost to vezmu z minulosti k současnosti. Představte si, že sedíte v internetové kavárně v roce 2000. A chtěli byste vědět co dělají na svých počítačích ostatní hosté. Bylo to vlastně docela jednoduché. Použili jste metodu útoku zvanou ARP spoofing. Váš počítač, za předpokladu, že byl dost výkonný a měl dostatečně rychlý přístup k síti, nahlásil ostatním počítačů „hej já jsem router, připojte se ke mě, dám vám IP a připojím vás k síti“. A jelikož počítačové sítě jsou založené na důvěře, tak se počítače připojili a vy jste mohli sledovat jaké informace si vyměňují se servery ke kterým jsou skrz vás připojené. Tehdy to byla sranda, drtivá většina informací se posílala v plaintextu (bez šifrování – snadno čitelná) a takový útok byl velmi nenáročný.
Původní návrh řešení
Jasně, tak budeme data šifrovat. Můj počítač pošle serveru http request, server pošle veřejný klíč a už si šifrujeme všechna data. Jenže to má samozřejmě háček. Základní princip útoku se vlastně moc nezměnil, jenom se malinko zkomplikoval. Teď už nestačí jenom číst data, která přes vás tečou. Protože nedávají žádný smysl, když jsou zašifrovaná. Co s tím? Jednoduché, prostě přijmete požadavek od počítače, odpovíte mu vlastním klíčem a stejný požadavek pošlete serveru a ten vám odpoví svým. A pak už je to jasné. Počítač pošle data, vy si rozšifrujete svým klíčem, přečtete, zašifrujete pro server jeho klíčem a odešlete dál. Takže nejvíc se celý proces zkomplikoval v tom, že musíte mít o něco málo výkonnější počítač ze kterého útočíte a rychlejší síťovou kartu. Pro hackera pravděpodobně dost nepatrná překážka. Takže až příště automaticky odkliknete varovnou obrazovku s hláškou „vaše připojení nemusí být bezpečné“, zamyslete se co posíláte za data a jestli vás někdo nemůže šmírovat.
Tyhle „zastaralé“ způsoby použití man in the middle útoku jdou samozřejmě škálovat nad rámec naší smyšlené kavárny. A to dvěma způsoby. Buďto můžete kompomitovat nějaký velký router u poskytovatele internetu, v datacentru nebo tak (ale to je dost nepravděpodobné, administrátoři jsou obvykle dost paranoidní na to aby si něco takového nechali líbit). Druhou variantou je výše zmíněný způsob komunikace kdy jdou data přes útočníka, tentokrát ale s podvrženým certifikátem A to je přesně to co se stalo Lenovu.
Z reálného světa
Lenovo Superfish
Už je to pár let, ale pořád je to děsivé. Výrobce počítačů Lenovo nainstaloval do svých zařízení software, který podepisoval certifikáty na počkání. Pro útočníky tak bylo možné tvářit se třeba jako google, seznam nebo třeba vaše banka. Takže místo toho abyste komunikovali s bankou, efektivně jste komunikovali jen s útočníkem a ten měl přístup ke všem datům které jste stáhli a poslali. Moc chytré. Tento útok byl označený kódovým názvem Superfish kdybyste si chtěli dohledat více informací. Třeba jestli váš počítač není zasažený. Protože se veškerý útok odehrává mimo něj, těžko na něj přijde jakýkoli ochranný software, který máte (dobře, tenhle případ je poněkud starý a antiviry už o tom nejspíš ví, ale věříte stoprocentně výrobci vašeho počítače a operačního systému?). A kdokoli může zmanipulovat jakoukoli stránku na kterou jdete. A to jenom proto, že si v kavárně všimne, že na vašem notebooku je napsáno Lenovo. A proč to Lenovo vlastně udělalo? Protože vám chtěli podstrčit vlastní reklamy.
Teorie v pozadí
Teoreticky je také možné to celé obejít. Výrobci operačních systémů, webových prohlížečů a obecně softwaru k němu přikládají i seznam důvěryhodných certifikačních autorit. A útočníkovi tím pádem stačí dostat se do takového seznamu a může si generovat certifikáty sám. V kombinaci s podvrženými DNS servery to je opravdu smrtelná kombinace. Takový útočník vás rovnou přesměruje svým DNS serverem k sobě > zpracuje váš dotaz > pošle vám svůj důvěryhodný certifikát > vaší zprávu zašifruje reálným certifikátem a pošle serveru a pak už komunikace probíha stejně jak jsem popsal výše.
DigiNotar
Pro zajímavost, došlo už i ke kompromitaci Nizozemské certifikační autority DigiNotar. Nějakým způsobem se podařilo vygenerovat certifikát pro Google a ten se nějak dostal do Íránu. A díky tomu se podařilo provést man in the middle útok na obrovské spoustě uživatelů. A všichni viděli zelený zámek s nápisem Google a netušili, že se cokoliv děje. Samozřejmě se na to přišlo, někdo nepřiměřeně paranoidní si rozkliknul detaily toho zeleného proužku a přišlo mu divné, že by Googlu podepisovala certifikát nějaká firma v Nizozemsku. Napsal to kamsi na fórum a celé to prasklo. Jenže naprostá většina uživatelů si toho nevšimla. Prostě se přihlásila do gmailu, všechno bylo fajn, ale jejich maily si četl někdo další (kromě příjemce a googlu samozřejmě). Toho útoku si kupodivu nevšiml ani google, který zřejmě měl pozorovat podivný nárůst provozu z jednoho místa. Firma z pochopitelných důvodů zbankrotovala, proč by ostatně někdo chtěl certifikát od firmy které nikdo nevěří.
Trocha konspirací navrch
Obecně se tak nějak tuší, že vlády dokážou udělat totéž. Jenomže jsou to vlády, takže legálně. Buďto můžou nařídit certifikační autoritě aby jim vygenerovala a podepsala vlastní certifikát a nebo ještě jednodušeji můžou od řečené autority dostat (ukrást?) privátní klíče, které používají k zamykání certifikátů a pak si vesele generovat certifikáty podle libosti. Pravděpodobně to je tak, že to je možné, ale používá se to jenom pokud není jiná možnost. Protože v okamžiku kdy by se to provalilo tak by nechali zbankrotovat velkou společnost/i a odkryli vlastní karty.