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?
Měšec.cz: 100% hypotékám zvoní umíráček

100% hypotékám zvoní umíráček

120na80.cz: Cestovní nevolnost. Co pomůže?

Cestovní nevolnost. Co pomůže?

120na80.cz: Fotografie z misí Lékařů bez hranic

Fotografie z misí Lékařů bez hranic

Podnikatel.cz: "Okurku" vyřeší slevové servery. Už jim věřte

"Okurku" vyřeší slevové servery. Už jim věřte

DigiZone.cz: Krajské televize na okraji zájmu?

Krajské televize na okraji zájmu?

120na80.cz: Krémy, nebo spreje na opalování?

Krémy, nebo spreje na opalování?

Lupa.cz: Vydavatelé jsou v háji, ale neumí si to připustit

Vydavatelé jsou v háji, ale neumí si to připustit

DigiZone.cz: Dabingové ceny znají letošní nominace

Dabingové ceny znají letošní nominace

DigiZone.cz: Kanály Novy na Slovensku oficiálně?

Kanály Novy na Slovensku oficiálně?

Měšec.cz: Vyplatí se spořit přes DPS?

Vyplatí se spořit přes DPS?

Lupa.cz: Text umírá, na webu zbude jen video

Text umírá, na webu zbude jen video

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

Ceny PHM v Evropě. Finty na úspory

DigiZone.cz: Nova stahuje bonus díl „Tvoje tvář má...“

Nova stahuje bonus díl „Tvoje tvář má...“

Vitalia.cz: Margit Slimáková nesnáší rajskou, Petr Fořt pizzu

Margit Slimáková nesnáší rajskou, Petr Fořt pizzu

Vitalia.cz: Jeďte do lázní, to je holistika

Jeďte do lázní, to je holistika

Měšec.cz: Rusové platí mobilem. Funguje to i v Česku

Rusové platí mobilem. Funguje to i v Česku

Lupa.cz: U Chomutova vyroste dotované datacentrum

U Chomutova vyroste dotované datacentrum

Vitalia.cz: Máte chutě? Nejezděte do světa, ale do Dobřichovic

Máte chutě? Nejezděte do světa, ale do Dobřichovic

DigiZone.cz: Soud zakázal šíření TV Markíza v ČR

Soud zakázal šíření TV Markíza v ČR

Podnikatel.cz: Zůstat na Heurece je čiré bláznovství

Zůstat na Heurece je čiré bláznovství