Analiza Ebury Linux malvera
Tim:
- Dario Belinić
- Filip Drašić
- Tomislav Novosel
Pozadina i zanimljivi info - Operacija Windigo
U veljači 2013. godine u cyber svijetu pojavio se malware koji za domaćine koristi (eng. Host) Linux operacijske sustave i na njegovu pojavu reagirale su mnoge security zajednice i nacionalni CERT-ovi europskih zemalja i SAD-a. Nakon toga je ubrzano osnovana grupa koja će obaviti analizu i izvještavati o broju infekcija diljem svijeta. Grupa se sastojala od ukupno tri organizacije, ESET-a, SNIC-a (Swedish National Infrastructure for Computing) i CERN-a (European Organization for Nuclear Research), uz veliku pomoć nacionalnih CERT timova. Od veljače 2013.-te do sada prijavljene su infekcije više tisuća računalnih sustava u više od 60 zemalja među kojima su Meksiko i Kanada. Od europskih zemalja infekcije su se pojavile u Njemačkoj, Italiji, Francuskoj, Velikoj Britaniji, Nizozemskoj, Ukrajini i Rusiji.
OPERACIJA WINDIGO
Windigo operacija se provodi već godinama. Smatra se da je primarni cilj te operacije novčani profit kroz sljedeće aktivnosti:
• Spam
• Inficiranje računala korisnika preko automatskih download-a kojih korisnici nisu svjesni
• Preusmjeravanje web prometa na oglašivačke mreže
Sljedeća slika prikazuje Windigo operaciju:
Malware koji igra ključnu ulogu u Windigo operaciji je:
• Linux/Ebury – izvršava se najčešće na Linux serverima. On pruža root backdoor shell napadačima i omogućuje krađu SSH autentifikacijskih podataka.
• Linux/Cdorked – izvršava se najčešće na Linux Web serverima. On je root backdoor prema serveru i distribuira Windows malware krajnjim korisnicima preko automatskih downloada za koje korisnici ne znaju.
• Linux/Onimiki – pokreće se na Linux DNS serverima. On razrješuje imena domena s određenim uzorkom za bilo koju IP adresu bez potrebe da se mijenja bilo kakva konfiguracija na strani servera.
• Perl/Calfbot – pokreće se na većini Perl podržanih platformi. To je spam bot lake kategorije napisan u Perl-u.
• Win32/Boaxxe.G – malware za prevare temeljen na klikanju.
• Win32/Glubteta.M – genreički proxy koje se pokreće na Windows računalima. Oba ova Windows malware-a distribuiraju se preko automatskih download-a bez znanja korisnika.
Kao što kaže naslov sa jedne od ESET-ovih web stranica:
„OPERACIJA WINDIGO: malware-om se napadalo preko 500 000 računala dnevno nakon što je 25 000 UNIX servera napadnuto backdoor trojancem“.
Baš ovaj backdoor trojanac, koji je omogućio ove napade, je Linux/Ebury.
Operacija Windigo traje od 2011. godine, pa i dan danas. Smatra se da je sav ovaj gore navedeni malware proizveden od jedne te iste grupe kojoj je cilj novčana zarada, a sudeći po broju zaraženih računala, to im i uspijeva. Linux/Ebury i Linux/Cdorked čak i dijele neke dijelove koda, kao što je objašnjeno i prikazano kasnije u tekstu. Da bi podaci za autentifikaciju bili ukradeni, glavnu ulogu igra Linux/Ebury kojeg ćemo i objasniti i analizirati na ovom wikiju. Pošto je detaljna analiza prezahtjevna, a nemamo ni potrebne resurse za to, koristit ćemo analize velikih firmi koje se bave sigurnosti IS-a, a koliko nam naše mogućnosti dopuštaju, napravit ćemo i analizu sami.
--Tonovosel 15:32, 28. prosinca 2014. (CET) --Filip.drasic 20:18, 30. prosinca 2014. (CET)
Ebury linux malware
Ebury je malware koji inficira domaćine bazirane na Linux operacijskim sustavima kao što su FreeBSD, Solaris, itd. U njih su uključene sve RPM bazirane Linux distribucije, poput Fedore, openSUSE, Linkat, Red Hat Linux i još mnogo drugih. Ebury se klasificira kao SSH rootkit/backdoor trojanac što znači da ima dvostruku "prirodu", odnosno djeluje kao rootkit ili kao backdoor trojanac ili pak istovremeno kao oba oblika malwarea. Rootkit malware je maliciozni kod koji se "penje" u sustavu do root nivoa (eng. privilege escalation) i omogućuju napadaču da dobije privilegije kao superuser ili kao admnistrator i time može preuzeti potpunu kontrolu nad sustavom, dok se backdoor malware smatra trojancem koji nosi neki koristan teret (eng. payload), odnosno prikriva se kao neki koristan proces, ali zapravo omogućuje napadaču ulazak na "stražnja vrata" i stvara mu ranjivost koju napadač tada koristi za napad.
Ebury za metu ima SSH korisnička imena i lozinke te privatne SSH ključeve. Napadači ga instaliraju na root-nivou već kompromitiranih poslužitelja tako da ili zamijene SSH povezane binary-je: ssh, sshd, ssh-add, itd., ili tako da promijene dijeljenu biblioteku libkeyutils koju koristi SSH protokol. Nakon što je Ebury postavljen na računalo, on počinje sakupljati SSH lozinke i privatne ključeve, te nakon što ih sakupi šalje ih na server koji je također kontroliran od strane napadača. Čak i ako se lozinka mijenja često, Ebury koristi svoju backdoor stranu "prirode" i omogućuje napadaču da iskoristi ranjivost i pristupi inficiranom računalu preko remote klijenta i radi štetu na tom računalu. Pošto napadač ima root privilegije i saznao je SSH lozinku i korisničko ime, on može pratiti promet, akcije i datoteke koje šaljete ili koje server šalje vama ako pristupate linux serveru pomoću remote linux klijenta, ili pak može mijenjati, brisati i premještati datoteke, odnosno potpuno preuzeti kontrolu nad vašim računalom.
--Tonovosel 16:56, 28. prosinca 2014. (CET) --Filip.drasic 15:59, 29. prosinca 2014. (CET)
Glavne značajke Ebury-ja
• Kradljivac podataka za autentifikaciju
• OpenSSH Backdoor
• Tajnost:
- Koristi UNIX kanale što više je moguće prilikom postavljanja backdoora kako bi izbjegao postavljanje datoteka u filesystemu
- Ne ostavlja zapise u loggovima kada se koristi backdoor
- Mijenja originalne potpise u upravitelju paketa za promijenjene datoteke
- Izbjegava izvlačenje podataka na vanjske napadačke servere kada je mrežno sučelje u slobodnom (promiscuous) modu
- Koristi POSIX dijeljene memorijske segmente (SHM-s) da bi pohranio ukradene autentifikacijske podatke
- Injektira kod u pokretačkom (runtime) modu u OpenSSH binary-je umjesto da modificira originalne OpenSSH datoteke na disku
- Mijenja konfiguraciju OpenSSH daemon programa u memoriji umjesto na disku
- Centralizira svoj backdoor u biblioteci libkeyutils.so umjesto u nekoj izvršnoj datoteci
--Tonovosel 16:52, 28. prosinca 2014. (CET)
--Filip.drasic 16:21, 29. prosinca 2014. (CET)
Načini na koje napadači inicijalno dolaze do root privilegija kako bi zarazili servere Ebury-jem
Postoji nekoliko načina:
• Podaci za prijavu sa korisničkog računa sa root privilegijama, ukradeni su sa Windows operacijskih sustava zaraženima sa nekim tipom infostealer-a, odnosno keylogger-a, i to kada se administrator prijavljuje sa te zaražene Windows mašine na još neinficirani server.
• Preko iskorištavanja ranjivosti u outdate-anom software-u koji je još u uporabi.
• Podaci za prijavu sa root privilegijama također se mogu ukrasti ako se sa zaraženog servera uspostavlja SSH sesija sa "čistim" serverom.
--Filip.drasic 21:30, 7. siječnja 2015. (CET)
Za što napadači koriste kompromitirane sustave?
Zaraženi sustavi se koriste za razne kriminalne aktivnosti: Napadači stječu root privilegije na zaraženom sustavu te mogu preuzeti potpunu kontrolu na sustavom uključujući i pristupanje, brisanje ili mijenjanje bilo koje vrste pohranjenih podataka ili u obradi, koja se nalazi u sustavu. Napadač može koristiti vaše inficirano računalo kao server za slanje masovnih SPAM poruka, preusmjeravati posjetitelje (ukoliko je računalo korišteno kao web server) na kompomitirane linkove koji sadrže maliciozni kod (eng. drive-by exploit - napadač koristi ranjivosti na plugin-ovima kao što su Java, Adobe Reader, Adobe Flash i tako injektira maliciozni kod na vaše računalo). Također može doći do osjetljivih korisničkih podataka, uključujući i račune za online transakcije, jer ukoliko se računalo koristi kao web server online shop-a, napadač krade podatke kao što su imena, adrese, kupovne navike, brojevi kreditnih kartica itd.
--Tonovosel 16:56, 28. prosinca 2014. (CET) --Filip.drasic 15:59, 29. prosinca 2014. (CET)
Statička analiza Ebury/Linux malware-a
Za izradu statičke analize koristili smo alat IDA (Interactive Disassambler) Pro 5.0 koji je freeware. On podržava analizu samo 32-bitnih binary-ja za sve platforme: Windows, DOS, UNIX, Mac, ali i za Java klase, .NET biblioteke, itd. Da bi se radila analiza 64-bitnih datoteka potrebno je kupiti noviji paket IDA software-a.
Datoteku Ebury malware-a našli smo na malwr.com web lokaciji. Tražili smo ju prema njezinom SHA256 sažetku: 5a7627820254abea2ae180e6ef5db029f2a612b510736723f0d94c2e49f09065. Tip datoteke je ELF 32-bit LSB shared object, i kao takav pogodan je za analizu u IDA-i. Verzija Linux/Ebury-ja je 1.3.2. Analizu smo radili na 32-bitnoj Windows XP virtualnoj mašini sa Service Pack-om 3. Windows je zbog arhitekture svoje jezgre otporan na ovakav oblik zločudnog koda, pa je zbog toga i najpogodniji za statičku analizu.
Alatom IDA Pro 5.0 statičku analizu možemo raditi na dva načina:
- Možemo analizirati datoteku kao binary
- i Kao ELF izvršnu datoteku
1. KAO BINARY
IDA nam omogućava da rastavimo datoteku na sastavne dijelove i onda proučavamo svaki zasebno. To je alat za reversni inženjering. Kada smo odabrali da datoteku želimo analizirati kao binary file, autoanaliza ne počinje sama jer treba ručno odrediti od kuda se želi započeti s analizom pošto binary nema standardno zadane entry pointove. U ovom slučaju nisam pokretao analizu jer je se ona pokreće automatski kada tu datoteku analiziramo kao ELF datoteku, pa je to obrađeno u sljedećom dijelu dokumenta. Postoji dosta pogleda koji nam daju informacije o malware-u, poput: IDA View-A, Hex View-A, Exports, Imports, Names, Functions, Strings, Structures, Enums. Svi ti pogledi i početni zaslon prikazani su na sljedećoj slici:
Pregledao sam Hex View-A, pogled na heksadecimalni zapis datoteke, i naletio na zanimljivi dio koji se nalazi na sljedećem screenshotu. Ovaj HEX zapis je bio najkorisniji i najviše nam je rekao o tome što bi datoteka mogla raditi, i naravno pokazao je da je datoteka maliciozna.
Sa lijeve strane su segmenti zapisa u heksadecimalnom obliku i njihovi redni brojevi, dok su sa desne strane uglavnom nečitljivi znakovi koji su najvjerojatnije kodirani u Base64 ili nekom drugom obliku sa određenim uzorcima. Između mnogo takvih nečitvljivih zapisa pronašao sam jedan dio koji je razumljiv i prikazan na slici.
Tu je dosta funkcija ali neke se posebno ističu:
keyctl varijacije: funkcija koja se koristi za kontrolu ključeva - može se vidjeti da se poziva mnogo puta u kombinaciji sa memorijskim lokacijama ključeva, instanciranjem ključeva, njihovim premještanjem, ažuriranjem, smještanjem na tzv. "keyring", vremenskim istekom, postavljanjem sesija, itd. Sve ovo izgleda kao da se želi manipulirati privatnim ključevima korisnika kako bi se oni mogli pročitati i poslati na vanjski server ili se želi omogućiti backdoor pristup serveru.
fseek: funckija za traženje datoteke
fopen: funkcija za otvaranje datoteke
fread: funkcija za čitanje datoteke
Pretpostavljam da sve ove funkcije služe za pronalaženje, otvaranje i čitanje datoteke libkeyutils.so.
keyutils.build_string.libc.so: ova funkcija kao što ESET-ova analiza predlaže, generira inficiranu verziju libkeyutils.so datoteke koju pak učitavaju sve OpenSSH izvršne datoteke tipa ssh, sshd i ssh-agent, i ona omogućava da se postavi backdoor.
2. KAO ELF DATOTEKA
Kada datoteku analiziramo specifično kao ELF datoteku, tada je moguća i autoanaliza te se ona sama pokreće. Zanimljivo je da kao rezultat autoanalize ne dobivamo isti Hex View kao kada datoteku rastavljamo kao binary. U ovo slučaju nema onog čitljivog koda koji je prikazan na gornjoj slici. Ali postoje i neke prednosti, ELF analizom dobivamo graf koji opisuje ponašanje programa. Taj graf pokazuje kamo se proslijeđuju koji parametri, na koju memorijsku lokaciju i kojom operacijom (npr. XOR). Graf je opisan u asembleru i kao takav je težak za čitanje. Slijedi prikaz složenosti grafa:
Kao što se može vidjeti graf je veoma složen. Međutim, u našoj verziji Ebury-ja 1.3.2 ne uspjevamo naći iste odjeljke u grafu kao što su oni prikazani u ESET-ovoj analizi. Najvjerojatnije je da se ove dvije verzije razlikuju i da su oni koristili neku stariju verziju.
No unatoč tome, u ELF analizi dobivamo kompletan popis funkcija koje se koriste za izvoz i uvoz podataka. Sve te funkcije se podudaraju s onima koje smo dobili Binary analizom u prvom koraku, tako da je ovo samo potvrda da se radi o zločundom komadu software-a. Screenshot slijedi:
Kao što se može vidjeti iz prozora Imports, sve od ovih gore funkcija iz 1. koraka analize su tu i djeluju nad datotekom libc.so.6, iz koje čitaju podatke koje inficirana datoteka libkeyutils.so treba. U kasnijoj verziji Linux/Ebury 1.5. inficirana datoteka libkeyutils.so se više ne veže na tu datoteku nego na datoteku libns2.so. U prozoru Exports vidimo sve varijante keyctl funkcije koje malware koristi kako bi došao do ključeva. To su opet sve funkcije iz 1. dijela analize.
U prozoru Functions vidimo da je ukupan zbroj funkcija koje Ebury poziva više nego dvostruko veći (139 zaokruženo crveno na screenshotu) od zbroja funckija iz Imports i Exports prozora. To nas upućuje na činjenicu da Ebury ima mnogo provjera kako bi održao svoju anonimnost i usppješno dohvatio i poslao podatke prema napadačkom serveru. Taj kompletan popis olakšava njegovo razumijevanje i način na koji djeluje u sustavu.
--Filip.drasic 18:39, 31. prosinca 2014. (CET)
Dinamička analiza Ebury/Linux malware-a
Odlučili smo napraviti i dinamičku analizu ove vsrte Linux malwarea koristeći neke od Linux utilitya kao što su GNUdebugger, strace, tcpdump i network traffic sniffer WIreshark. Pokušali smo zaraziti virtualni Ubuntu server, ali ELF datoteka malwarea je promijenjena na način da ne može kompromitirati sustav, a da sa druge strane bude pogodna za dublju analizu, odnosno da sadrži svoje glavne funkcije. Kasnije je ispod prikazano zašto se ELF file malwarea nije dao izvršiti unutar terminala Ubuntu servera.
Za dinamičku analizu Linux/Ebury malwarea podigli smo i konfigurirali virtualni Linux Ubuntu Server 10.04 32bit bez instalacije updatea kako bi sustav bio nepokrpan i ranjiv na dotični malware. Ebury smo preuzeli u obliku ELF datoteke (32-bit) sa stranice malwr.com, isti file kojeg smo koristili i za statičku analizu. Na vritualni Ubuntu server smo ga postavili pomoću SSH FTP File Transfer klijenta i pozicionirali se na direktorij u kojem se nalazi ELF file malwarea. Nad istim smo izvršili naredbu "file" kao što je na slici ispod.
Kao što se može vidjeti, to je ELF datoteka za Intel386 arhitekturu i 32-bitna je te je dinamically linked što znači da prilikom izvršavanja unutar sustava pozive prema svojim funkcijama obavlja dinamički.
Kako bi promijenili permisije nad ELF datotekom da ju je moguće izvršavati koristili smo slijedeću naredbu:
Nakon što smo promijenili permisije, upotrijebili smo naredbu "./*" gdje je * naziv datoteke i dobili kao feedback SIGSEV signal (segmentation fault), odnosno da je došlo do greške u izvršavanju programa. Kako bi provjerili gdje je program "pukao" pokušali smo sa GNUdebuggerom (gdb) koji na mje pokazao da u source kodu ne postoji funkcija "main". Na slici se vidi da program hoće ući u funkciju "main" koje nema. Nakon toga smo izvršili naredbu "bt" (backtrace) koja daje funkcije koje program snima na stog kada iz iste ulazi u druge funckije, te vidjeli da ni na stogu nema funkcije "main". Time smo zaključili da ELF datoteka nije pogodna za izvršavanje te da ne možemo napraviti dinamičku analizu malwarea.
Ovakav ozbiljan malware koji daje backdoor napadačima je sa namjerom pisan tako da ga je teško i praktički nemoguće dinamički analizirati, te ima ugrađene mehanizme da ga debugger unutar virtualnog OS-a ne može prepoznati, odnosno pokrenuti. To je ilustrirano na slici ispod.
Na slici su prikazani memorijski segmenti radne memorije unutar kojih se nalazi pokrenuti debugger (u ovom slučaju memorijske adrese nisu bitne) te maliciozni kod ozbiljnog zloćudnog virusa kojeg je teško dinamički analizirati jer ima mehanizme skrivanja pred primjerice debuggerom ili bilo kojim utilityem kojim se može pratiti komunikacija programa sa jezgrom OS-a i sl.
Strelica (1) ilustrira kretnju izvršavanja malicioznog koda ukoliko taj isti kod prepozna da je pokrenut pomoću debuggera, kod odmah skače na segment u memoriji koji je kriptiran (kriptiran od strane pisaca malicioznog koda) te pri tome debugger više ne zna pokrenuti tako kriptirani kod, time se virus štiti od analize. Istu stvar ilustrira i strelica (2). Ukoliko je virus siguran da nije na virtualnoj mašini, adresira memorijski segment koji nije kriptiran (strelica 3) gdje su smještene njegove vlastite funkcije za dekriptiranje i izvršavanje se prebacuje na segment koji je kriptiran (strelica 4). Ista kretnja se događa ukoliko je virus siguran da njegov kod nije pokrenut pomoću debuggera (strelice 5 i 6).
Kao još jedan pokazatelj teške i vremenski zahtjevne dinamičke analize ovog malwarea je i ovaj pregled funkcija i dijagrama toka poziva funkcija u alatu IDA disassembleru. Slika prikazuje da malware sadrži petlju što je vidljivo prema istom izlaznom i ulaznom toku te unuatr petlje malware premješta i poziva različite funkcije sa istim offsetom što može biti znak da su pisci ovog malwarea htjeli otežati analitičarima proučavanje ovakve vrste malwarea.
--Tonovosel 22:37, 13. siječnja 2015. (CET)
Analiza Linux/Ebury malware-a prema ESET-u
Linux/Ebury dolazi u dvije varijante, kao maliciozna biblioteka i kao zakrpa za glavni OpenSSH binary. Maliciozna datoteka je modificirana verzija datoteke libkeyutils.so. Ovu dijeljenu biblioteku učitavaju sve OpenSSH izvršne datoteke kao što su ssh, sshd i ssh-agent. U ovoj analizi biti će opisano kako funkcionira backdoor, kako su pozvane OpenSSH funkcionalnosti i kako se prikupljaju i izvlače lozinke na vanjske napadačke servere.
Poznate varijante
Iako je uobičajeno na Windows operacijskim sustavima, ovo je prvi puta da se maliciozna biblioteka viđa na POSIX operacijskim sustavima. Linux/Ebury koristi inovativne metode da prikači funkcije, otkrije adresni prostor ELF (Exetuable and Linkable Format) izvršne datoteke koja je učitala zaraženu biblioteku i piše zakrpe za njezin kod kod izvršavanja. Prve varijante su modificirale binary-je ostavljene na disku. Tri pridodane datoteke su ssh, sshd i ssh-add. Također su se koristile rpm naredbe da se ukloni potpis iz originalnih OpenSSH package-a: openssh-server, openssh-clients; i da se modificira RPM baza podataka tako da se ažuriraju hash-evi s onim vrijednostima malicioznih datoteka. S time se postiže da je rezultat naredbe 'rpm --verify openssh-servers' nepromijenjen. Međutim, rezultat naredbe 'rpm -qi openssh-servers' će jasno prikazati da ovom paketu nedostaju njegovi potpisi. Kasnije varijante Linux/Ebury-ja ne modificiraju direktno OpenSSH datoteke. Umjesto toga, dijeljena biblioteka koja se učitava u sve OpenSSH izvršne datoteke je promijenjena tako da utječe na izvršavanje programa. Ta biblioteka je već prije spomenuta libkeyutils.so, koja je obično veličine 10-15KB, dok je maliciozni kod koji se u nju upisuje veličine kojih 20KB, tak oda inficirana iznosi oko 30KB. Ovdje su dva primjera kako se implementira backdoor.
Prvi screenshot prikazuje nemodificiranu uz modificiranu i sivo obilježenu libkeyutils.so datoteku:
Izvor: eset.com
Drugi screenshot prikazuje libkeyutils.so zamijenjenu sa Linux/Ebury verzijom:
Izvor: eset.com
U libkeyutils.so je dodana i funkcija konstruktor kako bi se postigle drugačije funkcionalnosti malware-a, i ona se poziva kada se učita biblioteka. Ta funkcija detektira iz kojeg binry-ja je učitana, pokrpa originalni kod i prikači funkcije iz originalne import tablice. U najnovijim varijantama ovog malware-a, znakovi/string se skrivaju s jednostavnom XOR enkripcijom sa statičkim ključem. Poslije raspakiranja malware učitava razne funkcije koje su mu potrebne pozivima prema dlsym funkciji. Nakon toga Linux/Ebury otkriva originalni izvršni adresni prostor pozivom dlopen(NULL, RTLD_NOW) i preusmjerava vraćenog rukovatelja funkcije prema dlinfo(handle, RTLD_DI_LINKMAP, …). Ovo će raditi ako je ASLR (Address Space Layout Randomization) omogućen na sustavu. Ovime Ebury dobiva mogućnost šetanja kroz import tablicu ELF izvršne datoteke i zamjenjuje adresu originalne uvezene funkcije u memoriji. Rezultat ovog postupka je da kada programi ssh, sshd, ssh-add pozovu jednu od prikačenih funkcija, biti će preusmjereni na malicioznu libkeyutils.so biblioteku koja može zamijeniti originalno ponašanje programa.
Sljedeća slika prikazuje pozive prema dlopen i dlinfo da bi se pronašao adresni prostor glavnog programa i pristupilo informacijama u zaglavlju ELF-a:
Izvor: eset.com
Također su prikačene i funkcije za kreiranje loggova, pa kada god se korisit backdoor ništa se ne šalje sustavu za zapis loggova, pa nema nikakvih zapisa na disku o backdoor-u. Ako se backdoor ne koristi, zapis loggova će se odvijati normalno i funkcijski pozivi će biti preusmjereni originalnoj funkciji.
Ove funkcije su prikačene kada se inficirana biblioteka libkeyutils.so učita unutar sshd procesa:
• audit_log_user_message
• audit_log_acct_message
• hosts_access
• connect
• __syslog_chk
• write
• syslog
• popen
• hosts_access
• crypt
• pam_start
Druge funkcije poput pam_start i crypt koriste se za dobivanje lozinke kojom se korisnik autentificira. Pam_start funkcija će prikačiti dodatnu funkciju pam_authenticate da bi dohvatila lozinku. Funckija connect je prikačena tako da se kod korištenja naredbe Xbnd postavlja poziv prema socketu prije nego je izvršen pravi poziv prema funkciji connect.
Modifikacija runtime koda
Kad prikačivanje funkcija iz import tablice nije moguće, Linux/Ebury će modificirati segment koda tako da izmjeni određene dijelove programa da oni preusmjeravaju pozive instrukcijama u njegovoj implementaciji. Na sljedećoj slici je primjer gdje ssh program poziva svoju funkciju key_parse_private_pem i tijek izvršavanja je preusmjeren na maliciozni kod. Adresa je prikazana crveno zato što je to adresni prostor datoteke libkeyutils.so , izvan ssh-ova. Prikačena funkcija će pozvati originalnu implementaciju i zabilježiti privatni ključ u memoriju koja će se kasnije dohvaćati raznim operatorima.
Izvor: eset.com
Prije pokušaja promjene dijela koda, program postavlja rukovatelja koji pazi na segmentacijske greške koje bi mogao prouzrokovati. Detaljnije, rukovatelj će biti pozvan ako proces primi signal SIGSEGV ili SIGBUS. U takvom slučaju da se signal i ulovi, Ebury će prekinuti svoje specifične zadatke i dopustiti da OpenSSH radi svoj legitimni posao. Zanimljiv je način oporavka od segmentacijske greške. Prije počinjanja nečeg što bi potencijalno moglo prekinuti proces, poziva se funkcija sigsetjmp da napravi snimku/snapshot trenutnog stanja. Tada, ako se desi povreda pristupa koristi se siglongjmp da se povrati prijašnje stanje. Ova promjena, odnosno patchiranje koda je ograničeno, zato što su različiti dijelovi koda za ptachiranje nepromijenjivi i već upisani unutar libkeyutils.so trojanca. Zbog toga je njegova učinkovitost ograničena na određenu varijantu binary-ja koji je na meti napada. Svaka libkeyutils.so varijanta će raditi na 3 – 5 različitih OpenSSH verzija određene Linux distribucije.
Funkcionalnosti
Backdoor se aktivira slanjem posebno kreiranih podataka u identifikacijski string klijentske verzije SSH protokola. O identifikaciji verzije SSH protokola, SSH specifikacija (http://www.openssh.com/txt/ssh-rfc-v1.5.txt) kaže slijedeće :
Nakon što se otvori socket, poslužitelj šalje identifikacijski string u ovom obliku: "SSH-<protocolmajor>.<protocolminor>-<version>\n", gdje su <protocolmajor> i <protocolminor> integeri i određuju broj verzije protokola (a ne verziju distribucije softeware-a). <version> je oznaka koja govori o verziji protokola na strani servera (maksimalno 40 znakova); ona se ne interpretira na klijentskoj strani ali može biti korisna za debuggiranje.
Oznaka <version> može sadržavati bilo što i ne smije biti interpretirana na SSH serveru. U slučaju Linux/Ebury backdoor konekcije, oznaka <version> sadrži heksadecimalni string dužine 22 znaka ili više. Sadrži lozinku od 11 znakova koja se prvo kriptira sa klijentskom IP adresom i tada se kodira kao heksadecimalni string. Opcionalno se uz lozinku može kriptirati i kodirati i 4-bajtna naredba.
Ova enkripcijska metoda je potpuno jednaka onoj koja se koristi u malware-u Linux/Cdorked za kriptiranje njegovih konfiguracijskih naredbi (još jedan Linux malware za krađu autentifikacijskih podataka). Postupak je prikazan na slici:
Izvor: eset.com
Primijetite da prije nego što se napravi handshaking/rukovanje za enkripciju, šalje se identifikacija verzije protokola što omogućava da se uoči potencijalan napad preko mrežne analize. Primjer verzije SSH protokola za pokretanje root shell-a izgleda ovako:
SSH-2.0-fb54c28ba102cd73c1fe43
Jednom kada se potvrdi backdoor lozinka, sshd proces dozvoljava da bilo koja lozinka bude upotrijebljena prilikom autentifikacije lozinkom. Ako je jedno od: PermitRootLogin, PasswordAuthentication ili PermitEmptyPassword onemogućeno, neće biti potrebna lozinka za autentifikaciju i biti će sigurno da će ovaj napad gore proći. Također će se isključiti stvaranje loggova za uspješno započinjanje sesija. Jednostavno će sve izgledati kao da se ništa nije dogodilo. U verzijama 1.3.1 i novijima, SHA-1 suma lozinke, umjesto stringa od 11 znakova, se sada čuva u binary-ju. Ovo čini pogađanje lozinke dosta teškim osim ako nemate paket za hvatanje znakova prilikom uspješne prijave legitimnih korisnika. Što je još zanimljivije, lozinka je drugačija od varijante do varijante. To stručnjake navodi na razmišljanje da napadači imaju bazu podataka s popisom inficiranih servera i njihovim backdoor lozinkama, kako bi svaki backdoor mogli uspješno aktivirati.
Izvor: eset.com
Glavna svrha Linux/Ebury modula je krađa privatnih podataka o prijavi. Ti podaci se najvjerojatnije koriste kako bi se zarazilo još više servera. U Linux/Ebury-ju ne postoji kod koji bi širio taj malware, tako da backdoor najvjerojatnije pojedinačno šire napadači ili ga se instalira kroz maliciozne skripte.
--Filip.drasic 19:19, 30. prosinca 2014. (CET)
Krađa korisničkih podataka za autentifikaciju
Korisnički podaci presreću se na više lokacija, kada se tipkaju na tipkovnici ili kada ih koristi žrtva napada.
• Lozinka za uspješnu prijavu na inficiranom serveru: - Kada god se netko prijavi na sustav inficiran sa Linux/Ebury-jem, sshd program sprema lozinku i šalje ju napadački server za pohranu ukradenih lozinki.
• Bilo koji pokušaj prijave sa lozinkom na inficirani server: - Čak i ako je pokušaj prijave neuspješan, lozinka i korisničko ime bit će poslani napadačima. Oni će ipak biti drugačije formatirani kako bi omogućili napadačima da razlikuju pogrešne od točnih podataka za autentifikaciju.
• Lozinka za uspješnu prijavu na inficirani server: - Kada netko koristi ssh klijent za prijavu na inficirani server, Ebury će presresti lozinku i poslati je na napadački server za prikupljanje podataka.
• Lozinka (passphrase) za tajni ključ: - Kada ssh klijent sa inficiranog servera traži korisnika lozinku za tajni ljuč, ta će lozinka također biti poslana na server napdača.
• Nekriptirani privatni ključ: - Kada se koristi privatni ključ za autentificiranje na udaljenom serveru, nekriptirana verzija će biti uhvaćena Ebury-jem. Za razliku od lozinki, ključ neće biti poslan na napadački server. Umjesto toga, Ebury će spremiti memorijsku lokaciju tog tajnog ključa i čekati napadača da dohvati ključ Xcat naredbom.
• Privatni ključevi se dodaju OpenSSH agentu sa potprogramom ssh-add: - Ključeve dodane OpenSSH agentu također će presresti Ebury. Oboje, i nekriptirani tajni ključ i lozinka za korištenje tajnog ključa će na kraju biti zabilježeni.
Bez obzira na oblik autentifikacije, Ebury će uloviti sve potrebne podatke, poput korisničkog imena, IP adrese mete i njezin OpenSSH port za prisluškivanje, kako bi ih napadači mogli koristiti prema želji.
--Filip.drasic 16:55, 1. siječnja 2015. (CET)
Izvlačenje lozinke
Kada Linux/Ebury presretne lozinku, informacija se šalje na udaljen server preko DNS zahtjeva poslanog na određenu IP adresu. Malware kreira zahtjev za regularnim A zapisom koji će biti poslan na UDP port 53. Ime zahtjevane domene sadrži kriptiran i hekadecimalno kodiran sadržaj kao i IP adresu zapisanu u sljedećem formatu :
<heksadecimalno kodiran sadržaj>.<IP adresa>
Heksadecimalno kodiran sadržaj sadrži stavke opisane u predhodnom dijelu rada. Taj sadržaj je kriptiran logičkom funkcijom XOR sa statičkim ključem duljine 4 bajta 0x000d5345 prije nego se kodira hexsadecimalno. IP adresa uključena u upit ovisi o tipu ukradenih podataka. Ako su podaci za zaražen server onda se koristi IP adresa klijenta. U protivnom se koristi IP adresa zaraženog servera.
Izgleda da su autori malwarea odabrali da se šalju paketi koji izgledaju kao legitimni DNS upiti preko UDP porta 53 kako bi se izbjeglo da ih firewall blokira. Vrlo je često da se u postavkama firewalla podesi puštanje DNS upita stavljenjem ih u tzv. bijele liste (whitelist) jer njihovim blokiranjem može doći do remećenja rezolucije imena.
Postoje 2 metode kojima Linux/Ebury bira servere na koje se šalju DNS paketi:
- Može se postaviti ekplicitno operatorom pri slanju Xver naredbe.
- Korištenjem algoritma za generiranje imena domene dinamički. To ime domene se ispituje za svoj A i TXT zapis. TXT zapis se koristi za provjeru da je pod kontrolom operatora koji koristi javni kriptografski ključ.
--Darbelini 22:09, 18. siječnja 2015. (CET)
Dodatne naredbe
Onome tko je zarazio računalo su dostupne 3 naredbe za lakše upravljenje ugroženim serverom. Naredba je priložena backdoor lozinci prije nego je ona kriptirana. Kada backdoor identificira naredbu on ju iterpretira umjesto da pokreće shell. Naredbe koje backdoor moze procesirati su :
Xcat – ispisuje sve lozinke,zaporke i ključeve zapisane u zajedničkoj memoriji i izlazi.
Xver – ispisuje verziju instaliranog Linux/Ebury i izlazi. Xver može imati 4-bytni argument koji postavlja IP adresu servera izvlačenja na zadanu.
Xbnd – ima 4-bytni argument. Kod kreiranje tunela do udaljenog hosta, veže socket klijenta na zadanu IP adresu koju taj argument predstavlja.
--Darbelini 22:09, 18. siječnja 2015. (CET)
Praćenje verzije
Autori Linux/Ebury-a se drže dobre prake ostavljanja broja verzije unutra binary-a. To omogučava operatorima da znaju koja verzija je instalirana na kojem sustavu. To također omogućava i analitičarima malwarea da bolje shvate kronologiju događaja te lakšu analizu malwarea. Npr. od verzije Linux/Ebury-a 1.3.2 nadalje ne šalju se nikakve informacije na udaljeni server ukoliko je sučelje u slobodnom načinu rada. Sučelje se automatski stavlja u slobodan način rada kada neki od softwarea kao što su libpcap ili tcpdump zabilježavaju promet na mrežnom sučelju. Autori su ovo svojstvo dodali najvjerojatnije nakon izlaska članka koji govori kako se korištenjem takvih alata može ispitati zaraženost sustava Linux/Ebury-em.
--Darbelini 22:09, 18. siječnja 2015. (CET)
Indikatori ugroženosti
Ovdje ćemo prikazati dva različita načinja identificiranja prisustva Linux/Ebury SSH backdoora. Najlakši način provjere da li je server zaražen se oslanja na prisustvo svojstva koje malware dodaje u SSH binary. Drugi način zahtjeva pregled zajedničke memorije koju koristi malware. Naredbom ssh -G je dobro započeti provjeru zaraženosti sustava. Ta naredba se drugačije ponaša kod čistog sustava i sustava zaraženog Linux/Ebury-jem. Čist server će ispisivati :
ssh: illegal option -- G
dok će zaražen server ispisati tipičnu "usage" poruku. Da li je server ugrožen, možemo provjeriti naredbom :
$ ssh -G 2>&1 | grep -e illegal -e unknown > /dev/null && echo "System clean" || echo "System infected"
Linux/Ebury se oslanja na korištenje POSIX segmenta zajedničke memorije (SHMs) za komunikaciju između procesa. Trenutna verzija koristi velike segmente preko 3MB memorije s širokim dozvolama koje svima omogučavaju čitanje i pisanje u taj segment.
--Darbelini 22:09, 18. siječnja 2015. (CET)
Kako provjeriti je li sustav zaražen sa Ebury-jem?
Svaki malware, pa tako i Ebury, postoji u nekoliko verzija, jer napadači razvijaju malware isto kao što i klasični developeri razvijaju legalan software, u fazama, i stalno ga poboljšavaju. Prema tome postoji više načina na koje se to može otkriti. Neki od načina su prema verziji malware-a, drugi pak provjerom mrežnog prometa, odnosno provjerom paketa koji se šalju preko mrežnog sučelja prema van. Neki antivirusni programi su u mogućnosti detektirati Ebury, obično kao 'SSHDoor' ili 'Sshdkit', ali ClamAV ili alati kao što su chkrootkit ili rkhunter u svojim trenutnim verzijama nisu u mogućnosti otkriti Ebury. Također, alati poput debsums i rpm ne mogu otkriti prisustvo Ebury-a.
--Filip.drasic 15:52, 29. prosinca 2014. (CET) --Darbelini 22:09, 18. siječnja 2015. (CET)
Što učiniti s inficiranim sustavima?
Svaki sustav koji je kompromitiran, zbog pristupa rootu, ne može više biti smatran sigurnim niti mu se može vjerovati. Napadači su najvjerojatnije napravili izmjene u postavkama sigurnosti i/ili instalirali dodatni malware. Zbog toga se preporuča reinstalacija kompletnog sustava, a ne pokušavanje čišćenja istog. Svi podaci za prijavu koji se koriste za SSH konekcije i tajni SSH ključevi pohranjeni na poslužitelju moraju se smatrati kompromitiranima, jer također treba uzeti u obzir kada se ovaj malware otkrije da je sustav njime zaražen već tjednima, ako ne i mjesecima. Ako postoje još neki sustavi za koje ste odgovorni, preporuče se provjera jesu li i oni zaraženi. Kada se reinstalira sustav treba koristiti nove jake lozinke za sve korisničke račune i zamijeniti sve SSH ključeve sa autentifikacijom baziranom na ključevima. Posebno treba paziti da se ne nikada ne prijavljuje na reinstalirane sustave koristeći SSH sa sustava zaraženih sa Ebury-jem, jer će se u tom slučaju novi podaci za prijavu za nanovo instalirani sustav pobrati sa SSH odlaznom vezom i poslati na napadački server.
--Filip.drasic 15:31, 29. prosinca 2014. (CET)
Provjera za verzije Ebury-ja do 1.5
Ebury verzije do verzije 1.5 koriste segmente dijeljene memorije (SHMs – Shared Memory Segments) za međuprocesnu komunikaciju. Lista trenutno postojećih segmenata dijeljene memorije može biti dohvaćena pozivanjem naredbe „ipcs -m“ u root načinu u terminalu. Sve do verzije 1.3.5, maliciozni segmenti imaju veličinu minimalno 3MB i postavljenu dozvolu (666). Na primjer:
# ipcs -m ------ Shared Memory Segments --------
key shmid owner perms bytes nattch 65538 root 666 3283128 0
Sa naredbom "ipcs -m -p" možemo vidjeti memorijske segmente prema procesima koji su ih napravili te PID tih procesa:
# ipcs -m -p ------ Shared Memory Creator/Last-op PIDs --------
shmid owner cpid lpid 65538 root 15029 17377
Nakon toga sa naredbom "ps aux | grep <pid>" gdje je <pid> ID procesa možemo vidjeti procese, njihove ID-eve, direktorij i ostale opise:
# ps aux | grep <pid>
root 11531 0.0 0.0 103284 828 pts/0 S+ 16:40 0:00 grep 15029 root 15029 0.0 0.0 66300 1204 ? Ss Jan26 0:00 /usr/sbin/sshd
Ako pod upisanim <pid> koji koristi memorijski segment nešto veći od 3MB i proces se naziva sshd, to je jaki pokazatelj komprimitiranosti sustava.
Segmenti dijeljene memorije se kreiraju samo na prvom događaju izvlačenja podataka, tako da se vjerojatno neposredno nakon pokretanja sustava inficirani SHMs neće pokazati kao rezultat naredbe „ipcs -m“. Postoje također i legitimne aplikacije koje koriste SHM tako da stanje sustava prikazano gore ne mora nužno značiti da je sustav inficiran. Međutim, ako dođe obavijest od ISP-a ili strane koja nam iznajmljuje poslužitelj da je sustav inficiran, tada je SHM najvjerojatnije kreiran od strane Ebury-ja. U slučaju sumnje na Ebury, najbolje je pogledati malicioznu libkeyutils datoteku ili provjeravati mrežni promet kao dodatku pretragu. Sa verzijom 1.3.5 autori malware-a su postrožili dozvole SHM-a i postavili ih na (600). Također je i veličina segmenta u ovom slučaju dosta manja, tako da je od ove verzije Ebury još teže uočiti.
# ipcs -m ------ Shared Memory Segments --------
key shmid owner perms bytes nattch 0x0000091a 0 root 600 463084 0
Zamjena dijeljene biblioteke libkeyutils može se identificirati po njezinoj veličini. Legitimne verzije ove biblioteke obično su manje od 15kB, dok su maliciozne veće od 25kB. Da bi se Linux baziranim sustavima provjerila veličina ove datoteke može se pokrenuti naredba:
# find /lib* -type f -name libkeyutils.so* -exec ls -la {} \;
Ovisno o načinu kako su napadači instalirali malicioznu biblioteku, vidjet će se jedna ili više datoteka kao rezultat naredbe. Ako je bilo koja od dobivenih datoteka veća od 25kB, najvjerojatnije je i maliciozna. Primjer malicioznog rezultata:
-rwxr-xr-x 1 root root 27568 Dec 22 2014 /lib64/libkeyutils.so.1.3
Za SSH binary-je identificiranje malicioznih zamjena datoteka nije tako lako jer se veličine datoteka razlikuju ovisno o različitim distribucijama Linuxa i drugim operacijskim sustavima.
1.3.2.
--Filip.drasic 15:52, 29. prosinca 2014. (CET) --Tonovosel 21:19, 13. siječnja 2015. (CET)
Provjera za verziju 1.5
Na Linux baziranim sustavima, instalirana je dodatna dijeljena biblioteka je libns2.so i postojeća libkeyutils datoteka je patchirana tako da se poveže na ovu biblioteku libns2.so umjesto datoteke libc.so.6. Maliciozna datoteka libns2.so može se pronaći pokretanjem ove naredbe , koja ne bi trebala vratiti ništa na čistim sustavima:
# find /lib* -type f -name libns2.so /lib64/libns2.so
U verziji 1.5 Ebury koristi sockete Unix domene umjesto dijeljenih memorijskih segmenata za međuprocesnu komunikaciju. Maliciozni socket može se locirati korištenjem netstat-a kao što slijedi:
# netstat -nap | grep "@/proc/udevd" unix 2 [ ACC ] STREAM LISTENING 5597 2529/atd @/proc/udevd
I u ovom slučaju, ova naredba ne smije vratiti ništa na čistim sustavima. Postoje neki alati koji mogu detektirati Ebury, najčešće kao SSHDoor ili Sshdkit. Programi kao ClamAV ili alati poput chkrootkit ili rkhunter trenutno ne mogu prepoznati Ebury.
--Filip.drasic 15:36, 29. prosinca 2014. (CET)
Identificiranje inficiranih sustava provjerom mrežnog prometa
Kao što je već navedeno, Ebury koristi posebno sastavljene DNS pakete za izvlačenje prikupljenih podatak za prijavu na svoje servere. Sustavi inficirani sa Ebury-jem mogu se identificirati provjerom mrežnom prometa na ovaj način: Legitimni DNS paketi za DNS upite sa klijenta prema DNS serveru najčešće izgledaju ovako formatirani u tcpdump izlaznom formatu:
10:53:21.377449 IP [Client].20374 > [DNS server].53:
36027+ A? www.google.com. (32)
IP paketi poslani sa Ebury zaraženih sustava izgledaju kao DNS upiti za heksadecimalne stringove koje slijedi IP adresa:
21:44:24.506801 IP [Ebury infected system].42177 > [IP address].53:
4619+ A? 5742e5e76c1ab8c01b1defa5.[IP address]. (56)
Ako se uoči bilo koji paket sličan ovome u mrežnom prometu, sustav koji je poslao ovaj paket najvjerojatnije je zaražen sa Ebury-jem.
Kada se pokreće tcpdump za provjeru mrežnog prometa na zaraženoj mašini, treba pokrenuti tcpdump sa opcijom –p jer se tako sprečava tcpdump da pokrene mrežno sučelje u tzv. „promiscuous“ modu. Novije verzije Ebury-ja neće poslati prikupljene podatke na svoj server sve dok je mrežno sučelje u promiscuous modu.
Prema svemu ovome vidimo da je Linux/Ebury veoma složen malware te dosta inteligentno osmišljen kao bi se izbjeglo njegovo otkrivanje.
--Filip.drasic 15:46, 29. prosinca 2014. (CET)
Malware sličan Ebury Linux malwareu
Linux.sshdkit malware
U veljači 2013-te veliki broj infekcija je potaknuo rusku antivirusnu tvrtku Doctor Web da istraže kako trojanac kojeg su nazvali Linux.sshdkit napada Linux servere i krade SSH lozinke. Trojanac je u obliku biblioteke za 32-bitne i 64-bitne Linux operacijske sustave i na servere se mogao instalirati koristeći neke ranjivosti na samim serverima. Tadašnja verzija je bila 1.2.1.
Nakon uspješne instalacije trojanac ubacuje svoj kod u proces sshd koji sadrži rutine za autorizaciju. Nakon što ubaci svoj kod i nakon što je pokrenuta sesija, trojanac šalje login lozinku i korisničko ime na udaljeni server koristeći UDP protokol. IP adresa udaljenog zloćudnog servera je sadržana u samom source kodu trojanca. Svaka dva dana trojanac Linux.sshdkit generira novu IP adresu servera na kojem se sakupljaju ukradeni login podaci koristeći kompleksne rutine. Na donjoj slici je prikazan dijagram toka kako malware generira IP adresu zloćudnog servera koji služi kao drop-zone server. Specijalan algoritam malwarea generira dva DNS-a koristeći jednu rutinu, i ako se takva dva DNS-a odnose na istu IP adresu, koristeći drugu rutinu generira drugačiju IP adresu na koju malware tada šalje ukradene login podatke. Analitičari tvrtke Doctor Web iskoristili su propust kako bi oteli jedan od takvih zloćudnih servera i dodali potpis malwarea u svoju bazu virusa. Upozorili su administratore da provjere sustave za koje su odgovorni, te ako nađu datoteku /lib/libkeyutils*, to je znak infekcije sustava.
Izvor: drweb.com
--Tonovosel 14:42, 31. prosinca 2014. (CET)
Nova verzija Linux.sshdkit malwarea
Nedugo nakon što su analitičari otkrili malware pod naziovm Linux.ssdkit, pojavila se nova verzija malwarea kojeg su nazvali Linux.sshdkit.6. Malware je bio isto u obliku biblioteke za 32bit i 64 bit Linux bazirane servere, a jedina razlika je bila rutina kojom malware generira IP adresu zloćudnog servera kojem se šalju ukradeni login podaci. U novoj verziji rutina za generiranje IP adrese servera koristi tekstualni string koji je kriptiran 128-bitnim ključem i RSA kriptosustav što je otežalo analitičarima da presretnu ukradene login podatke i odrede IP adrese zloćudnih servera. Na donjoj slici je prikazan dijagram toka generiranja IP adrese koristeći RSA kriptosustav.
Izvor: drweb.com
--Tonovosel 14:42, 31. prosinca 2014. (CET)
Literatura
- https://www.cert-bund.de/ebury-faq
- http://www.theinquirer.net/inquirer/news/2234637/driveby-exploits-are-the-top-web-security-threat-says-enisa
- http://www.welivesecurity.com/2014/02/21/an-in-depth-analysis-of-linuxebury/
- http://www.symantec.com/security_response/writeup.jsp?docid=2001-062614-1754-99
- http://news.drweb.com/?i=3332&lng=en
- http://news.drweb.com/show/?i=3600&lng=en&c=5
- http://en.wikipedia.org/wiki/List_of_Linux_distributions#RPM-based
- http://www.linuxquestions.org/questions/linux-security-4/ebury-how-check-system-4175484467/
- http://kb.iweb.com/entries/47439816-Ebury-SSH-Rootkit
- http://tools.cisco.com/security/center/viewAlert.x?alertId=33687
- http://www.microsoft.com/security/portal/threat/encyclopedia/entry.aspx?Name=Backdoor:Linux/Ebury.A#tab=2
- http://www.wilderssecurity.com/threads/an-in-depth-analysis-of-linux-ebury.360457/
- http://www.openssh.com/txt/ssh-rfc-v1.5.txt
- http://www.welivesecurity.com/wp-content/uploads/2014/03/operation_windigo.pdf