Ovih dana redakcijski server je zaražen Dharma ransomware-om koji je šifrovao sve podatke. Napad je bio uspešan zato što gomilu stvari nismo radili kako je trebalo, ali (osim vremena) nismo izgubili ništa zato što jednu stvar jesmo radili kako je trebalo. Backup
Kolege je, kada su u ponedeljak došli na posao, sačekalo neprijatno iznenađenje: nisu mogli da pristupe datotekama na serveru naše lokalne mreže. Fajlovi poznatih imena su i dalje postojali na share-ovanim diskovima, ali je svakome od njih dodata ekstenzija .qwex a sadržaj je bio neupotrebljiv. Pokušaj lokalnog prijavljivanja na server ispisivao je baner na kome piše da su podaci šifrovani od strane Backdata@qq.com ransomware virusa i da ćemo morati da platimo nespecificiranu sumu u Bitcoin-ima da bi podaci bili dešifrovani. Nazdravlje.
Hibrid – štetočina
Za početak je trebalo upoznati neprijatelja, pa smo prelistali sajtove i našli razmerno malo informacija. Backdata@qq.com je novi ransomware (do nas uvek stižu nove stvari... čime u ovom specijalnom slučaju i nismo bili tako zadovoljni), koji je prvi put primećen krajem januara ove godine. To je hibrid dva ransomware-a: Dharma i Crysis. Kada je izvorni kod ovih programa „procurio“, kriminalci su požurili da ih iskombinuju praveći tako još efikasniji alat za krađu podataka.
Stvari se događaju tako što se štetni kod probije na računar a onda generiše par tajni ključ / javni ključ za šifrovanje RSA algoritmom. Svi fajlovi se šifruju javnim ključem, dok tajni ključ, neophodan za dešifrovanje, ostaje kod onih koji su softver „ubrizgali“ na vaš server. Od žrtava traže da im pišu na adresu backdata@qq.com (u našem slučaju je ponuđena i alternativna adresa dta@cock.li) kako bi saznali koliko će Bitcoin-a morati da plate da bi dobili alat koji otključava podatke i sve vraća u prethodno stanje. „Ljubazni“ kriminalci čak nude i da vam probno dekriptuju jedan od fajlova, kako bi dokazali da to mogu da urade i da im zaista treba dati novac. Iznos zavisi od „značaja podataka“ i toga koliko se žrtva brzo javila.
Teško mi je da shvatim kako te stvari već mesecima mogu da funkcionišu. Adresa backdata@qq.com je vrlo konkretan trag, sajt qq.com je registrovan u Kini, i ne vidim zašto Interpol ne može da pohapsi ljude koji na ovaj način otimaju novac, ili makar da im blokira adresu koju koriste. Ovde se ne radi o hakerima za koje možemo imati simpatija, već o kriminalcima koji treba što pre da završe iza rešetaka.
FBI statistike kažu da 40% ucenjenih plati, i da su tokom 2017. godine cyber kriminalci na ovaj način inkasirali preko 5 milijardi dolara. Ne sumnjam u podatke, ali zašto bi neko platio ovakvu ucenu? Posluje se s razbojnicima i propalicama, i ko može garantovati da će oni otključati podatke pošto dobiju pare? Tražiće još, i još, i najzad, kad para više ne bude, naprosto uništiti tajne ključeve. Čovek mora da bude zbilja očajan da bi ušao u takvu igru. Srećom, mi nismo bili očajni – postojao je backup. I to raznovrsan.
Svaki backup je priča za sebe
Redakcijski backup podataka je organizovan u više nivoa. Prvi i najbitniji je da server u 5 ujutru svakoga dana automatski uradi inkrementalni backup podataka na QNAP NAS uređaj. Zvuči kao savršeno obezbeđenje, ali realizacija nije bila baš idealna. Problem je u tome što server ima pristup share-u na NAS-u, dakle neko ko je „osvojio“ server mogao bi sasvim lako da obriše backup ili da i njega kriptuje. Srećna je okolnost da nije korišćen klasičan share nego oblik ip-adresaime, pa se ransomware time nije bavio.
Prva stvar koju sam uradio kada sam saznao za napad (dobro, druga stvar; najpre smo se otkačili s Interneta da bismo sprečili još veću štetu) bio je da proverim postojanje ovog backup-a. Ulogovao sam se na NAS i ustanovio da postoji ogroman kontejner (gotovo 4 TB) koji je u internom Windows Server formatu i ne može se tek tako mount-ovati. Trenutak zadnjeg pristupa bio je nedelja u 5.11 am, što znači da backup koji je trebalo da bude pokušan u ponedeljak u 5.00 am, nije ni izvršen; potencijalno dobra vest, pošto je u ponedeljak server već bio zagađen kriptovanim fajlovima. Windows Server, doduše, čuva i stare verzije datoteka, ali samo u okviru raspoloživog prostora. Količina podataka na serveru je vremenom rasla, a diskove na QNAP-u baš i nismo redovno povećavali, tako da je postojeći prostor bio poprilično pun. Sve u svemu, postojala je nada da je ovaj glavni backup upotrebljiv, ali nisam želeo da ga istražujem sa potencijalno zaraženih računara. Zato sam prosto isključio QNAP s mreže i ostavio ga na miru.
Drugi backup radimo jednom nedeljno, kada se na jednoj stanici u mreži pokrene niz batch programa koji običnom „DOS“ komandom robocopy (doskora je korišćen xcopy) kopiraju datoteke s bitnih foldera na serveru (bitno je praktično sve osim starih brojeva „PC“-ja, koje posebno skladištimo) na lokalni disk stanice. Čim sam proverio ovu stanicu i video da su fajlovi na njoj živi i zdravi, prestao sam da brinem: pošto je taj backup urađen u utorak popodne, izgubili bismo ono što je rađeno u sredu, četvrtak i petak, što je neprijatno ali nije nikakva tragedija – u dane upravo nakon izlaska broja i tako se mnogo ne radi. Doduše, bilo bi problemčića s ovim backup-om pošto se fajlovi tu samo dodaju, a ono što je obrisano na serveru se ne briše na kopiji, što znači da bi nam se vratilo (i) razno „đubre“ koje smo prethodnih par meseci brisali. Ali dobro, od viška ne boli glava. Ili barem ne boli previše.
Najzad, povremeno pravimo „jedan-na-jedan“ kopiju svega što se nalazi na serveru na eksterne hard-diskove, pa jedan disk ostaje u kasi a drugi nosim kući. Kao i kod svih poslova koji zahtevaju manuelno angažovanje, ova operacija se ne radi baš često, pa je prethodni put obavljena (malo) pre Nove godine. Taj backup, kao i kopije starih brojeva na DVD-ovima koje i dalje redovno pravimo, ostali su kao neka rezerva. Strategija je bila da koristim glavni backup, ako je čitav, a ako nije da vratim sve na stanje od decembra, pa da sa nedeljnog backup-a prekopiram ono što je nastalo kasnije. Umiren time što imam jasnu strategiju, prešao sam na oporavak samog servera.
Radikalne mere
Prijavljivanje na server kroz RDC (Remote Desktop Connection) nije radilo iz nepoznatih razloga, dok lokalno prijavljivanje na taj računar nije radilo iz lako objašnjivih razloga: monitor na serveru, koji nije bio uključivan godinama, bio je mrtav – nerad ubija. Trebalo je naći drugi monitor sa VGA portom, a onda i tastaturu koju bi čovek želeo da dodirne prstima umesto one prljavštine koja je stajala u test sobi. Najzad smo uspeli da se logujemo koristeći neki od administratorskih naloga (neki drugi nisu radili) i pogledamo naokolo. Osim poruke da treba platiti za otključavanje fajlova, sve je delovalo prilično obično, osim što je RAID s podacima bio popunjen do poslednjeg bajta. Pokretanje programa je sporadično uspevalo.
Instalirali smo Melwarebytes i pustili ga da testira disk. Naravno, našao je štetne sadržaje koje može da ukloni. Kazali smo mu da to i uradi, a za to vreme isti test pokrenuli na svim stanicama u Redakciji. Tamo je sve bilo ok, što su potvrdili i drugi antivirus programi – napadnut je samo server.
Melwarebytes je ubrzo „očistio“ server, ali na njemu mnogo toga nije bilo u redu. Kao da su falili neki shortcut-i, da su neke aplikacije asocirane s pogrešnim ekstenzijama. Uopšte gledano, server nije bio u radnom stanju. Što zapravo nije promenilo ništa – sve i da je funkcionisao savršeno, nisam mogao računati s tim da na njemu nije ostao neki pritajeni malware. Pošto na serveru nemamo posebno bitne samostalne aplikacije, odlučio sam se za radikalno rešenje – preformatirati diskove i ponovo instalirati Windows Server. Pre toga sam prekopirao logove da bih kasnije istraživao kako je došlo do zaraze.
Instalacija je trajala desetak minuta, a kasniji update više sati. To vreme je dobro došlo za obezbeđivanje mreže. Naime, već godinama na našem „digitalnom pragu“ stoji Linksys ruter s dva WAN interfejsa (SBB optika kao glavni i ADSL kao backup Internet link). To je baš mator uređaj, ima mu desetak godina, ali radio je posao... Još prošle godine smo kupili MikroTik kojim ćemo ga zameniti, ali konfigurisanje novog rutera je ozbiljan posao koji smo nekako uvek ostavljali „za sutra“ (odnosno, u našem slučaju, „to ćemo kad završimo broj“). Ova havarija je bila konačni povod za tranziciju.
Samo onaj ko je programirao MikroTik ruter zna koliko je to drugačije od svega „normalnog“. Iako sam postavljao već nekoliko ovakvih uređaja, uvek naiđem na probleme i čudim se nekim stvarima... Recimo, pri konfigurisanju naše optike i zadavanju (statičke) IP adrese „pozdravljao“ sam MikroTik biranim rečima zato što se ono što svi mi bedni normalci zovemo default gateway tamo zove network, a za subnet masku uopšte ne postoji polje, nego se treba setiti da se ona zadaje glupom notacijom sa kosom crtom (npr. 109.110.111.112/30).
Najzad je pristup Internetu proradio, a onda me je iznenadio niz redova koji su samo leteli kroz log fajl (pogledajte sliku). Neko nas napada kao besan gađajući lozinke na ruteru. Da li su to oni „majstori“ što su nam poturili ransomware pa sada pokušavaju da nam „pomognu“ još malo? Adrese su uglavnom iz Ukrajine, što ne znači mnogo pošto se hakeri svakako kriju iza nekoliko nivoa IP adresa... ovo je „samo“ napad neke bot mreže koja gađa lozinke. Odmah sam pozatvarao sve portove, a naročito telnet, ssh i winbox, pa je napad prestao.
(Ne)uspešni restore
Pošto je pristup Internetu obezbeđen a server reinstaliran, došlo je vreme da prekrstim prste i otvorim glavni backup. Dragička – podaci u njemu izgledaju sasvim normalno. Probe radi uradio sam restore nekoliko foldera, proverio ih, binarno uporedio s fajlovima na drugom backup-u i delovalo je savršeno. Sve će, dakle, biti u redu, pa je samo trebalo pokrenuti pun restore. On može da se radi u file režimu ili u volume režimu, pri čemu je druga varijanta brža. Pa dobro, i tako mi treba da oporavim čitav disk – izabrao sam volume režim, video da se brojač polako pomera i da će za čitav oporavak biti potrebno dvadesetak sati, pa sam pustio server da radi i otišao na spavanje. Bio je to dug dan.
Sledećeg jutra (podneva) dočekala me je loša vest – Voja Gašić je proveravao šta se dešava i primetio da je restore „pukao“ posle oko 12 sati i da nije oporavio ništa; volumen je nečitljiv i može samo da se formatira. Odmah sam pomislio da je kontejner s backup-om oštećen, da u njemu ima još virusa i šta ne... Srećom, stvar je bila mnogo gluplja: kada sam postavio MikroTik i uključio uređaje u mrežu, QNAP je dobio neku IP adresu iz naše klase. Posle sam hteo da budem pametan pa sam uređajima dodeljivao statičke IP adrese. QNAP je umesto 192.168.9.194 postao 192.168.9.24. Kada je posle 12 sati DHCP lease istekao, adresa QNAP-a u lokalnoj mreži se promenila i Windows Server Backup je izgubio vezu s njim. Eto dobrog načina da izgubite 12 sati. No šta se može, pokrenuo sam restore ponovo, ovoga puta u fajl režimu, i posle „samo“ 20 sati svi podaci su bili na mestu.
Podaci su, dakle, spaseni ali to još ne znači da su potrebni servisi raspoloživi. U našem slučaju, nedostajao je AB Soft-ov ERP softver koji koristimo za knjigovodstvo i praćenje poslovanja. Ta instalacija prevazilazi naše kompetencije, ali srećom kompanija AB Soft ima odličnu službu podrške, pa je Nebojša Grujić, čak i bez potrebe da posećuje Redakciju, uspeo da sve postavi u ranije stanje, tako da ni jedno knjiženje ne bude izgubljeno. Dobro, nije to baš glatko išlo, malo smo pogrešno instalirali SQL Server, trebalo je postavljati neke share-ove i tako dalje, ali je važno da nam je ostao čitav vikend za kompletiranje PDV evidencije i predaju prijave na vreme (u zadnjem trenutku, naravno).
Digitalna forenzika
Stanje smo, dakle, sanirali ali treba odgovoriti na ključno pitanje kako je do zaraze uopšte došlo, ne samo iz radoznalosti nego da bismo sprečili naredne napade te vrste. Literatura kaže da se ovakvi „pokloni“ najčešće dobijaju neopreznim klikom na neku datoteku dobijenu uz poruku, pa bi bilo najlakše reći da je „neko iz marketinga kliknuo gde ne treba“ ali je u ovom slučaju jasno da u nedelju nije bilo nikoga u Redakciji da klikće po fajlovima. Drugi potencijalni pravac zaraze je kroz RDC (Remote Desktop Connection) port. To je već zvučalo kao realna mogućnost pošto je RDC port servera bio otvoren...
Lako je sada reći da je RDC port (3389) jedna od glavnih sigurnosnih rupa Windows sveta i kritikovati Microsoft što već decenijama ne čini ništa da ga bolje obezbedi – svi smo to znali, a opet smo port držali otvoren da bismo po potrebi mogli od kuće da pristupimo serveru. Da bismo malo unapredili bezbednost, port 3389 zapravo nije bio otvoren, nego smo na njega prosledili neki slučajno izabrani port (mislim 43389) ali je to očito slaba zaštita od botova koji gađaju sve portove redom. Čak i uz tu „neurednost“, server verovatno ne bi stradao (update-ovi su redovno instalirani), da lozinke nisu bile loše.
Mi smo mala Redakcija i nikad nismo pokušavali da postavimo neki interni sistem bezbednosti – osim finansijskih podataka koji su izdvojeni na Vesninom računaru, svi imaju pristup svemu i ne vidim kako bismo funkcionisali da nije tako. Dakle, nema nekih posebno zadatih prava pristupa, kvota i ograničenja, što možda i ne bi bilo tako strašno da su ljudi zadavali koliko-toliko sigurne lozinke. Ali nisu. Windows Server po default-u zahteva da lozinke budu veoma složene, ali je to ograničenje davno isključeno jer je nerviralo ljude, što su mnogi posle iskoristili da zadaju trivijalnu lozinku, možda i jednaku korisničkom imenu. Da se lakše zapamti... Čak i ljudi koji godinama rade s računarima i trebalo bi da su stekli makar osnovne bezbednosne navike čim nabave novi telefon dolaze da im promenim lozinku za e-mail (tu već lozinke nisu trivijalne), jer staru nisu zapamtili, nisu je zapisali, ne znaju gde su je zapisali... Potpuno nipodaštavanje bezbednosti koje autori virusa veoma efektno koriste.
Jedno od osnovnih bezbednosnih pravila kaže da treba redovno pratiti šta je zapisano u sistemskim logovima jer se tako primeti ili makar nasluti svaki napad. Ja sam gledao log rutera (Linksys je prilično star uređaj pa su logovi prilično elementarni) i tamo nije bilo ničeg sumnjivog. Nije mi palo na pamet da gledam logove servera, a tamo bih video da je od 21. marta „nešto“ počelo da pokušava logovanje na server gađajući razne username-ove i na hiljade lozinki. Uglavnom je gađan Administrator, gde je lozinka bila netrivijalna i tu lozinku očito nisu pogodili, ali su gađana i neka druga imena i najzad je 10. aprila pogođen password jedne koleginice koji je bio sličan username-u. U tom trenutku napad je prestao i haker je čekao nedelju.
Šta smo naučili
Kako već kaže onaj stari vic, Englezi uče u Oksfordu i Kembridžu a svi ostali uče na svojim greškama. Iskoristite priliku da učite na našim greškama i tako smanjite verovatnoću da se slična neprijatnost dogodi i vama.
1. RDC (3389) port na Windows-u ne sme da bude otvoren za ceo svet. Preusmeren ili ne, on predstavlja preveliku opasnost. Zato pristup treba eventualno omogućiti samo saradnicima koji imaju statičke IP adrese, a za sve ostale konfigurisati VPN, dobro ga obezbediti i koristiti kao jedini ulaz u mrežu.
2. Operativni sistem treba da bude update-ovan na najnoviju reviziju.
3. Treba sistemski zahtevati da lozinke budu složene i ne obazirati se na to što se kolege (pa čak i menadžment) bune da im je teško da ih zapamte. Najzad će ih zapamtiti, što ne treba da vas spreči da povremeno zahtevate da se lozinke promene.
4. Korisniku Administrator treba zadati veoma složenu lozinku, a poželjno je i preimenovati ga u neko drugo ime (možda na srpskom?), tako da napadač mora da gađa kako username tako i password administratora.
5. Veoma je poželjno da definišete Control Panel / Administrative Tools / Local Security Policy / Account policies / Account lockout policy. Stavite da posle, recimo, 3 neuspešna pokušaja pogađanja lozinke username bude blokiran na 5 minuta, što će ojaditi svakog bota koji pokušava da pogodi lozinku. Doduše, može se desiti da, tokom nekog većeg napada na sistem, i regularni korisnik ne može da se prijavi jer mu je username blokiran, ali do takvih stvari valjda neće prečesto dolaziti. Šteta što je postoji neki sistemski način da se zabrani bilo kakav saobraćaj s neke IP adrese ako je s nje došlo X pogrešnih pokušaja logovanja, zbog čega kolege koje se bave sistem administracijom preporučuju posebne alate kao što je TSplus.
6. Kad ste već u editoru sigurnosnih polisa, posetite i sekciju Local Policies / Audit Policy pa zatražite da se beleže uspešna i neuspešna logovanja (Audit logon events: Success, Failure i Audit account logon events: Success, Failure). Dobro je da beležite i razne druge sistemske događaje.
7. Samo beleženje događaja u mreži nije dovoljno: treba pažljivo proveravati logove, ne samo na ruteru nego i na serverima. Dobro je osmisliti mogućnost da se kopije logova čuvaju negde van mreže.
8. Backup treba da bude redovan, automatski i višestepeni.
9. Tokom backup-a server ne treba da kopira podatke na eksterni uređaj – bolje je da eksterni uređaj kopira podatke sa servera, a da server nema nikakva prava na tom uređaju. S druge strane, uređaj treba da ima samo prava čitanja podataka na serveru, za slučaj da neko hakuje backup uređaj.
10. Bolje je da se kopiraju fajlovi nego da čitav backup bude u nekoj složenoj strukturi čije malo oštećenje može da uništi sve podatke.
11. Treba čuvati i ranije verzije fajlova, dakle predvideti dovoljan prostor za backup, ali i način da se kasnije izdvoje fajlovi koji su na serveru obrisani, a na backup-u sačuvani.
12. Obavezno mora da postoji zadnja rezerva u vidu backup-a koji je off-line, a poželjno i čuvan na nekoj udaljenoj lokaciji (off-site). Cloud backup je takođe dobra ideja, ako je količina podataka umerena a upload komponenta Internet linka izdašna.
Corpus delicti
Problem ransomware koncepta je u vremenu potrebnom da se veliki broj fajlova kriptuje. Autori se trude da to vreme bude što kraće („naš“ virus je za otprilike 7.5 sati kriptovao čitav disk, a kasnije je bilo potrebno preko 19 sati da se stare datoteke samo vrate iz backup-a, pa sad vi vidite ko piše efikasniji softver, Microsoft ili kriminalci) ali su svakako u pitanju sati i sati. Ako bi kriptovanje počelo dok ljudi koriste server, vrlo brzo bi neko primetio neupotrebljiv fajl i digao uzbunu, pa bi čitav proces bio surovo prekinut čupanjem utikača iz struje, a gubici bi bili minimalni.
Zato je „naš gost“ mirno sačekao nedelju, s pravom verujući da mu to daje dosta slobodnog vremena. Na osnovu trenutaka kada je izvršavao pojedine komande i neravnomernih pauza između njih, rekao bih da je to radio čovek, a ne neki bot. Ulogovao se na server, malo pogledao okolo, zatim prekopirao jedan fajl čudnog imena na desktop i pokrenuo ga. Fajl je verovatno kompajliran posebno za nas, tako da ga antivirus softver nije detektovao. Nakon toga napadač je prekinuo vezu i pustio softver da radi svoj posao. Na kraju je ovaj program startovao drugi program koji je obrisao prvi program, dok je taj drugi program – trivijalan EXE – ostao na desktop-u.
Pošto nije uspe da hakuje administratorski nalog, napadač nije imao ozbiljniji pristup sistemskom SSD-u, tako da nije mogao da obriše logove i možda instalira još neke štetne sadržaje. Ali je imao pun pristup RAID strukturi s podacima, što je iskoristio „do zadnjeg bajta“.
Šta reći posle čitave ove neželjene avanture... Mislili smo da mi znamo šta radimo i da se havarije ovakvih razmera dešavaju samo drugima. Pusti snovi... ono što se dešava drugima uvek može da se desi i vama, a kad se već desi, treba naučiti lekciju i iskoristiti priliku da podignete bezbednost svog sistema na sledeći nivo, znajući da sistem nikada neće biti potpuno bezbedan. Zato je redovan i kvalitetan backup poslednja linija odbrane onoga od čega u današnje vreme potpuno zavisite – integriteta vaših podataka.