Hlavní navigace

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?

19. 12. 2011 13:02

JiUch (neregistrovaný)

To je ale blbost. Ten virus uz se siri, takze lidi musi vedet, jak se proti nemu branit. A i kdybys to ted smazal tak uz je stejne pozde, protoze to je v Google cache a hodne lidi to stejne cetlo.

19. 12. 2011 15:17

Kde je v citovaném odstavci to napomáhání?

Navíc článek, který virus popisuje a navrhuje způsob, jak se bránit rozhodně nikdo nemůže hodnotit jako napomáhání šíření viru.

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Root.cz: Telegram spustil anonymní blog Telegraph

Telegram spustil anonymní blog Telegraph

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

DigiZone.cz: Sat novinky: Fransat UHD Demo

Sat novinky: Fransat UHD Demo

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

120na80.cz: Vitaminová abeceda

Vitaminová abeceda

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu