Letos na podzim to bude 5 let, co virus Skynet obohatil děravé firmwary zařízení z produkce Ubiquiti, které si získalo oblibu spousty síťařů po celém světě. Tento virus zneužíval bezpečnostní díry díky špatné konfiguraci lighttpd, který se stará o web rozhraní. Tato bezpečnostní díra mu umožňovala do zařízení nahrát vlastní skripty, pomocí kterých se dál mohl šířit a provádět odposlech části provozu, který zařízením procházel.
V polovině tohoto měsíce proletěla médii zpráva, že Ubiquiti má opět nového mazlíka. Virus napadá novější generaci zařízení a nese zvučné jméno “Motherfucker” (ra-ta-ta-ta!!!). Můžeme se jen domnívat, proč tvůrce použil takový název. Možná jím vyjadřuje charakteristiku své osobnosti 🙂 nebo chování viru samotného, protože z hlediska potomek-matka (virus a zařízení, které ho v sobě nosí) kód viru s hostitelským zařízením opravdu nakonec určitým způsobem “vyjebe” 🙂
I naše síť měla tu čest tento virus poznat, takže několik infikovaných zařízení se vyskytlo i v naší síti. Vzhledem k tomu, že nevyužíváme jenom zařízení Ubiquiti a pravděpodobně i díky odlišné infrastruktuře sítě a opatření, které nám zůstalo z dob Skynetu, se viru nedařilo šířit tak rychle, takže způsobené škody byly prakticky minimální. Nechci se tahat za tričko, ale třeba narozdíl od naší blízké konkurence, kde někteří zákazníci byli bez internetu déle než týden, naši zákazníci prakticky nepoznali, že se něco děje. No ale dost už plácání se po zádech 🙂 a raději se podíváme na to, co virus dělá.
Nepůjdu příliš do velkých podrobností, ty je možné najít na internetu. Takže, v první fázi se do zařízení nahraje krátký kód, kterým si virus otevře plný administrátorský přístup přes ssh. Následně se připojí přes ssh, stáhne zbývající část kódu, připraví si skript “po spuštění”, zapíše se do flash aby přežil i vypnutí nebo restart a následně restatuje zařízení. Zařízení nastartuje a začne normálně pracovat jako předtím. Při startu se spustí hlavní obslužný skript viru, zapne firewall na porty 80 a 443 (zablokuje přístup do nastavení) a začne postupně spouštět ostatní svoje podprocesy, které mají zajistit šíření viru sítí. Podle určité síťové masky prohledá ostatní IP adresy kolem sebe jestli nepatří stejně zranitelnému zařízení Ubiquiti, které se následně pokusí infikovat podle předchozího scénáře.
Obslužný skript replikace je geniálně stručný, ale velice efektivní, díky čemuž je i v rozsáhlejší podsíti, osazené zařízeními Ubiquiti, schopný provést lavinovým systémem infikaci všech zranitelných zařízení. Stačí mu prakticky pouze jedno zařízení s veřejnou IP adresou, aby se dostal i do vnitřní sítě, kterou pak zaviruje. Podle některých článků na internetu panuje názor, že virus blokuje přístup na porty 80 a 443 proto, aby se nedalo dostat do nastavení zařízení. Můj názor je, že firewall na tyto porty slouží jako jednoduchá “značka”, aby replikační proces neztrácel čas pokusem o infikaci zařízení, kde už virus je.
Z tohoto je zřejmé, že replikace je hlavní úloha viru. Jako bonus si při ní vytváří dočasný soubor se seznamem IP adres které našel, patří zranitelným zařízením, ale nepodařilo se mu z nějakého důvodu je infikovat. Tento seznam následně použije v procesu spuštěném jednou za 66 666 sekund, kde se pokusí u zařízení ze seznamu provést reset do továrního nastavení spuštěním resetovacího skriptu přes webové rozhraní a tím ho defacto vyřadit z provozu. Po uplynutí 666 666 sekund pak virus provede na vlastním hostiteli změnu konfiguračního souboru, konkrétně nastaví název sítě (ssid) na “motherfucker”, mód rozhraní wifi na “Master” (režim AccessPoint), konfiguraci uloží do flash a zařízení vypne. Po zapnutí se ve skenování okolních bezdrátových sítí takové zařízení ukazuje pod názvem “motherfucker”. Pokud doteď zařízení fungovalo jako klient pro připojení zákazníka k internetu, zákazník je bez internetu a jeho zařízení jako šířitel viru prakticky končí.
Tady mi přijde docela zvláštní, že tvůrce viru nevyužil příležitost, která se mu ovládnutím tolika zařízení naskytla. Mohl například odposlouchávat veškerý provoz, který zařízením prochází, podvrhovat falešné webové stránky a využít zařízení k phisingu, atp. Možnosti nejsou zrovna malé. Možná ale, že autor viru je jedním z těch “hodných” hackerů 🙂 a cílem bylo jen ukázat na nebezpečí chyby ve firmwaru, o které se vědělo poměrně dlouho, aniž by s tím výrobce cokoliv dělal. A vzhledem k tomu, že to nebylo poprvé, Ubiquiti si takovou lekci rozhodně zaslouží.
Až mi otrnulo a když jsem měl jistotu, že naše síť je v bezpečí, přišlo mi líto, že jsem si virus z některého z napadených zařízení nezkopíroval pro studijní účely 🙂
Mohl jsem si ho sice stáhnout z internetu, kódy se objevily i na diskusním fóru Ubiquiti, ale to už není ono, chtěl jsem mít virus z “první ruky” a v aktuální verzi 🙂 a zároveň mě zajímalo, jestli pořád hrozí infikace z internetu. Jelikož doma pro připojení k internetu využívám na záložní přípojce i zařízení Ubiquiti (zkouším na sobě všechno, co montujeme zákazníkům), nahrál jsem do něj zpátky zranitelný firmware, dal jsem si veřejnou IP adresu a nastavil si na routeru před ním logování provozu, abych měl přehledný záznam, kdy a jak k infikaci došlo.
Nemusel jsem čekat dlouho. Přibližně 3 minuty po zapnutí veřejné IP adresy jsem zaznamenal první přístup na web rozhraní zařízení z adresy 37.48.15.134. Za dalších 17 minut začala komunikace z adresy 61.228.94.93, nejdřív přístup na web rozhraní, poté se připojila k zařízení přes ssh. Za dalších 25 minut nový přístup z adresy 141.170.6.198, opět nejprve na web rozhraní, poté ssh a následně došlo k restartu mého zařízení. Po připojení do zařízení jsem v něm našel adresář s nainstalovaným virem, takže jsem si ho mohl stáhnout 🙂 . Od zapnutí veřejné IP adresy do zavirování zařízení tak uplynulo přibližně 50 minut.
Domnívám se, že přístup z první IP adresy nic neznamenal, naše veřejné adresy jsou denně vystaveny různým pokusům o připojení a přihlášení na ftp, ssh, telnet, http. Proč k zavirování nedošlo už z druhé adresy, ale až ze třetí netuším. Domníval jsem se původně, že druhá adresa provedla infikaci a restartovala zařízení třetí adrese “pod rukama”, oba útočníci se totiž mohli v zařízení potkat současně, protože k zablokování web rozhraní dochází až po restartu a spuštění viru z perzistentní paměti. Ale je mezi nimi dost velký časový rozestup, takže tuto myšlenku jsem zavrhl.
Teď mě napadá, že bych se mohl podívat do logu provozu, který ze zákona musíme zaznamenávat (provozní a lokalizační údaje musí zaznamenávat každý poskytovatel internetu), kde bych mohl o komunikaci zjistit víc, včetně celkového objemu dat.
Jak se někdy budu nudit, udělám to 🙂 a kdyby ne, nevadí, moje prvotní zvědavost byla uspokojena 😀
Palec hore
Zase první, ty nikdy nezklameš 🙂