Kaip nulaužė mano kompą

Pamokanti istorija apie tai, kaip mano kompas šiandien sudalyvavo DDOS atakose prieš craigslist.org, pagal populiarumą 56-ą svetainę pasaulyje.

Mano kompas buvo nulaužtas
Mano kompas buvo nulaužtas

Šiandien ryte pastebėjau, kad puslapiai lėtai atsidarinėja. Kartais net neužkraudavo puslapio, nes nutrūkdavo ryšys. Tačiau po kokios minutės vėl viskas veikdavo sklandžiai, taip kaip ir priklauso.

Pradėjau aiškintis, kas vyksta. Pasileidęs tcpdump‘ą praskanavau savo srautą. Pamačiau, kad iš mano kompo eina nepaliaujamas TCP SYN paketų srautas į 199.83.133.119 IP adreso 80 portą. Pasižiūrėjau su whois – kažkoks IP adresas Amerikoje. Jame hostinamas craigslist.org.  Po minutės jau srautas eina į kitą IP adresą 223.4.150.39, kažkur Kinijoje, kuriame irgi hostinamas craigslist.org.

Pasižiūrėjau su netstat -A inet -ntp koks procesas siunčia tuos paketus. Iš pradžių man pasirodė, kad tai Google Chrome’as. Buvau atsidaręs Chrome apie 20 tabų, todėl iš pradžių nieko labai katastrofiško ir neįtariau. Nes šiais laikais yra normalu, kad naršyklė pati bendrauja su visokiomis svetainėmis, pati panorėjusi, be žmogaus įsikišimo, pati atnaujina reklamas ir pan. Nenormalu buvo tik didelis SYN kiekis.

Nuėjau googlinti kodėl chrome’as siunčia tiek daug užklausų. Nieko doro neišgooglinau, be to, begooglinant internetas pradėjo geriau veikti, pamiršau tą problemą ir susiradau kitos veiklos.

Bet problema niekur nedingo ir vėl ėmė pasireikšti. Tada ėmiau knisti giliau. Paskaičiavau, kad mano kompas SYN paketus siunčia galingais pliūpsniais – ne mažiau kaip po keletą milijonų paketų per minutę! Norėjau pamatuoti tiksliau, bet conntrack sesijų skaičiavimas „cat /proc/net/ip_conntrack“ taip užstabdė kompą, kad teko nutraukti skaičiavimą. Supratau, kad čia jau vyksta rimti dalykai! Vyko kuo tikriausia SYN DDOS ataka visame savo gražume!

Mano kompas nulaužtas! Išpylė šaltas prakaitas. Kompas buvo nulaužtas, paverstas zombiu ir dabar, valdomas piktavalių, atakavo nekaltus interneto gyventojus. Ką dabar daryti? Karštligiškai bandžiau surikiuoti mintis ir nuspręsti ko griebtis.

Veiksmų planas buvo toks:

  1. išsiaiškinti, kaip mano kompas buvo valdomas
  2. išsiaiškinti, pro kur piktavaliai pateko
  3. nukirsti nuotolinį kompo valdymą
  4. išvalyti visą brudą iš kompo

Kompiuterių saugumo teorija sako, kad negalima nutraukti zombio valdymo ir pradėti valyti kenkėjiško kodo neišsiaiškinus, kokiu būdu kompas buvo užvaldytas. Todėl 2 punktas eina anksčiau už 3 ir 4.

Pirma užduotis nebuvo sunki. Komanda „w“ neparodė nieko įdomaus. Vadinasi hakeris tiesiogiai nebuvo prisijungęs per ssh. Tai gerai. Komandos “ps auxw” outpute pamačiau keletą keistų dalykų, bet jų tyrimas užstrigo ir toliau niekur nenuvedė. Tik vėliau, kai peržiūrinėjau savo logus, pamačiau, kad komandos outpute blogoji komanda matėsi, tik aš tada to nežinojau. Ji atrodė visiškai nekaltai: „grep “A”“. Pasirodo, kad paleistas iš naujo kenkėjiškas kodas kaskart keičia pavadinimą procesų sąraše. Vieną kartą jis būna „grep“, kitą – „who“, trečią vėl kitaip pavadintas.  Pavadinimus jis ima iš mano bash_history. Tikrai puikiai užsimaskavęs!

Suzombėjusio kompo valdymo sesiją radau su „lsof -n“. Pastebėjau keletą neįprastų eilučių:

Kas tas ebvfrzevi? Įtariau, kad tai ir yra tas kenkėjiškas kodas. Google’o paieška nedavė nei vieno rezultato. Matyt, tai random stringas. Peržiūrėjęs /etc aplanką, radau kai ką įdomaus:

Šis žodis buvo paminėtas keliuose skriptuose. Failas /etc/rc1.d/S01ebvfrzevir atrodė taip:

Skriptas paleisdavo programos failą /boot/ebvfrzevir. Šis failas jau buvo ištrintas iš failų sistemos (žinoma, jis iki šiol buvo ram’e), bet ten tupėjo kitas failas nauju randominiu pavadinimu:

Paanalizavau tą failą. Komanda: „strings /boot/eficjtmfpd“ parodė keletą įdomių dalykų (pilnas outputas čia:):

Iš viso buvo įhardcodinti 4 IP adresai:

103.25.9.229
127.0.0.1
114.114.114.114
8.8.8.8

3 yra aiškūs. 127.0.0.1 – localhost, 8.8.8.8 – Google DNS, 114.114.114.114 – populiarus Kinijos DNS.  Ketvirtasis adresas 103.25.9.229 buvo neaiškiausias. Tai Kinijos IP. Internete paminėta, kad iš jo laužiamasi, paieška rodė, kad jame hostinama keletas labai įtartino turinio puslapių. Kaip ten bebūtų, mano kompas su juo neužmegzdavo ryšio. Tai nebuvo valdymo serveris, bent jau šiuo metu.

Paprastai kenkėjiškos progamos mėgsta cron failus, todėl juos peržiūrėjau. /etc/crontab faile radau eilutę, kuri paleidžia trojaną kas 3 minutes:

Trojano paleidimo failas /etc/cron.hourly/cron.sh atrodo taip:

Visos šios eilutės matyti strings outpute. Beje, siųsdamas TCP SYN paketus trojanas naudojo įhardcodintą HTML headerį su UserAgent’u TencentTraveler. Pasirodo, kad tas TencentTraveler  yra kažkokia populiari kiniška naršyklė. Matyt, trojanas sukurtas Kinijoje. Labai jau daug sąsajų su šia šalimi.

Iš „lsof -n“ outputo mačiau, kad mano kompą užvaldžiusio serverio IP adresas buvo 67.198.136.11, o portas 2821. Kai pamačiau valdymo serverio IP’ą, pasidarė ramiau ant širdies. Dabar, kai galiu jį matyti, galiu jį ir nukirsti. Bet kaip jis pas mane įlindo?

Antrajai užduočiai skubiai susiinstaliavau rkhunter. Paleidau jį tikrinti, bet jis nieko įtartino nerado.

Peržiūrėjau /var/log/syslog failą, bet jame taip pat nieko įtartino neradau.

Peržiūrėjau /var/log/auth.log failą ir šįkart čia suradau kai ką įdomaus.

Tokiomis eilutės buvo užpildytas visas logas. Mane paprasčiausiai bruteforcino. Šimtus tūkstančių kartų per dieną. Nežinia kiek dienų. Mano slaptažodis buvo žodis iš lietuviško žodyno. Žinojau, kad didžiulė klaida naudoti žodį iš žodyno, bet kažkaip buvau tikras, kad lietuviškų žodynų hakeriai neturi, todėl dėl brute force paprastai nesijaudindavau. Bet, savo siaubui, savo loguose pamačiau štai ką:

Hakeriai buvo čia! Jie atspėjo mano slaptažodį! Siaubas! Pasijutau gana šlykščiai, tarsi svetimas žmogus padirbtu raktu būtų atsirakinęs mano namus ir darytų juose ką tik panorėjęs.

Peržiūrėjau senesnius logus. Pirmasis sėkmingas prisijungimas buvo lapkričio 17 dieną.

Nors lapkričio 17 d. buvo prisijungta 11 kartų, nuo lapkričio 18 d. iki lapkričio 23 buvo 5 dienų pertrauka. Bet manau, kad pagrindinę veiklą hakeriai pradėjo tik šiandien, nes SYN flood’as taip apkraudavo tinklą, kad tikrai būčiau pastebėjęs sulėtėjusį tinklą.

Akivaizdu, kad piktavaliai labai nesistengė paslėpti savo pėdsakų, nes radau juos palyginti nesunkiai. Bent jau manęs tai tikrai taip lengvai nebūtų radę. O ir pats įsilaužimo būdas leidžia manyti, kad juos dominau ne aš asmeniškai. Aš paprasčiausiai tapau masinio nulaužinėjimo auka. Mano kompas įstojo į daugiatūkstantinę paklusnių zombių armiją.

Ką gi, žengiame į trečią tyrimo veiksmų etapą. Reikia nukirsti zombį valdančią ranką. Užkomentavau kenkėjišką eilutę crontabe ir nukirtau sesijos su 67.198.136.11 procesą. Deja, taip lengvai trojanas nepasidavė. Tą pačią akimirką buvo užmegzta nauja sesija, crontabo eilutė buvo atkomentuota, o /boot/ aplanke esantis failas pergeneruotas ir paleistas iš naujo! Dar kartą nukilinau naują procesą ir vėl zombių valdovas tučtuojau atstatė ryšį. Kas sakė, kad vergijos pančius sutraukyti bus lengva?

Zombio pančius pavyko nusimesti tik su iptables užblokavus 2821 portą:

Iš karto  pakeičiau root’o slaptažodį ir apskritai uždraudžiau jungtis prie root’o per ssh.

Dabar valdymas iš C&C serverio užblokuotas, bet kenkėjiškas kodas vis dar tūno manyje. Saugumo teorija sako, kad apkrėstos sistemos neįmanoma visiškai išvalyti, nebent atliekami sudėtingi binary compare testai. Dar ji sako, kad sistemos saugumo neįmanoma patikrinti naudojantis pačioje sistemoje esančiais įrankiais. Todėl teks likusį savaitgalį paaukoti perinstaliuojant sistemą.

Vėliau dar nuėjau į google ir įrašiau savo root slaptažodį, tą mielą lietuvišką žodį iš lietuviško žodyno. Paiešką taip suformulavau, kad nerodytų lietuviškų puslapių. Koks buvo mano nustebimas, kai Google’as vis tiek rado 660 000 lenkiškų, čekiškų bei kitokių puslapių su manuoju žodžiu, už kurio aš slėpiau savo root’ą! Tas lietuviškas žodis buvo ne toks jau ir lietuviškas.

Taip pat pagooglinau plačiau apie craigslist.org atakas. Pasirodo, jie yra atakuojami jau visą savaitę, pirmadienį buvo užvaldytas netgi jų DNS adresas. Šiandien trūkinėjo jų ryšys visą dieną. Dalis kaltės tenka ir man.

Taigi, ką aš šiandien išmokau iš savo klaidų?

  • Būtina naudoti saugius slaptažodžius. Slaptažodžiai iš žodyno yra iš prigimties nesaugūs, netgi jei tai ir ne angliški žodžiai.
  • Nereikia leisti remote root access’o. „su“ ir „sudo“ komandos buvo sugalvotos ne be reikalo.
  • Nereikia panikuoti. Pirma mano reakcija buvo visiška panika, bet kai suradau C&C serverio IP adresą, toliau jau viską dariau labai šaltakraujiškai. Galų gale kenkėją išanalizavau ir neutralizavau visai sėkmingai.
  • Per vartotojo neapdairumą kiekvienas kompiuteris gali būti paverstas zombiu – galingu ginklu zombių valdovo rankose. Jei nesirūpini savo saugumu, vadinasi tu kenki visuomenei.
  • Diena buvo įdomi, bet geriau tokių dienų tegu būna mažiau.

Siūlau jums mokytis iš manųjų klaidų linksmuoju būdu, kad paskui nereikėtų mokytis iš savų liūdnuoju būdu. :)

ATNAUJINTA 2014-12-01: Šiek tiek giliau pamėsinėjau kaip veikia tas kenkėjiškas kodas. Nieko įspūdingo neradau, bet vis tiek buvo įdomu: ccie.lt/hacking/kaip-nulauze-mano-kompiuteri2

9 thoughts on “Kaip nulaužė mano kompą

    1. Taip, kompiuteris turėjo išorinį IP. Kaip namų kompui gal neįprasta būti ne už NAT’o, bet kai netrukus ateis IPv6, tuoj visi turėsime tik išorinius IP.

  1. Paskaičiau tavo įrašą, bei pasižiūrėjau į savo media serveriuko “access log”, pasirodo irgi panašūs IP adresiukai bandė jėga prasibraut. Tai tyliai ramiai, maršrutizatoriui port forward’ą išmečiau :)

  2. Vienas žodis aišku nesaugus, bet jeigu naudoti frazę, tai pavargs jie brutaforcinti. Ir tai rekomenduojama jau keletas metų, bet pas mus vis dar madoje reikalauti keisti slaptažodį kas mėnesį ir būtinai panaudoti pagonių rašmenis.

    1. Frazės bruteforcinimas užtruktų ilgiau, bet nedaug ilgiau. Slaptažodį momof3g8kids nulaužė per kelias minutes (offline), nes jis sudarytas iš frazės “mom of 3 great kids” http://arstechnica.com/security/2013/05/how-crackers-make-minced-meat-out-of-your-passwords/.

      O dėl slaptažodžių keitimo kas mėnesį tai visiškai pritariu. Visiškai beprasmis laiko gaišimas. Toks slaptažodžių keitimas apsaugo tik tuo atveju, kai kažkas nulaužia slaptažodį, laukia visą mėnesį ir tik tada bando su tuo nulaužtu slaptažodžiu jungtis. Taip nebūna. Su nulaužtu slaptažodžiu jungiamasi jau po kelių sekundžių, o ne po mėnesio.

      Prieš kelis mėnesius mokėjimai.lt manęs paprašė pakeisti slaptažodį. Parašiau jų suportui, kad toks prašymas yra so last year, nusiunčiau nuorodą į Microsoft Security Research tyrimą. Neseniai vėl paprašė pakeisti. Po to išsiaiškinau, kad PCI reikalauja, kad slaptažodžiai būtų keičiami ne vėliau kaip kas 90 dienų. Ką gi, tas PCI yra so last year. Tiems, kas skaito krebsonsecurity.com, akivaizdu, kad PCI bankų nuo nieko neapsaugo.

  3. “Koks buvo mano nustebimas, kai Google’as vis tiek rado 660 000 lenkiškų, čekiškų bei kitokių puslapių su manuoju žodžiu, už kurio aš slėpiau savo root’ą!”

    Bet ir protas slaptažodžiui naudoti žodį “kurwa”.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">