SSH galinės durys
Piktavališkas arba pažeistas prižiūrėtojas įterpė kenkėjišką elgseną bibliotekoje, pavadintoje liblzma, „xz“ glaudinimo įrankių ir bibliotekų dalis, dėl kurios SSH tinkle atsirado galinės durys. Tai pažangi programinės įrangos tiekimo grandinės ataka, nes biblioteka buvo sąmoningai modifikuota, kad būtų pritaikyta galinėms durims, naudojant obfuskavimo ir slapto programavimo metodus, kad atakos informacija būtų paslėpta nuo recenzentų.
Ji buvo aptikta ir atskleista neseniai (kovo 29 d.), o atakos valdymas tebevyksta. Tačiau ji buvo greitai suvaldyta, nes, regis, paveikė tik riboto rinkinio aplinkų (DEB ir RPM paketų, skirtų x86_64 architektūrai ir sukurtų naudojant GCC) išankstines versijas. Šiaip ar taip, CVE buvo duotas CVSS bazinis balas iš 10, kuris skirtas svarbiausiems kibernetinio saugumo pažeidžiamumams. Jei jis patektų į stabilias versijas, poveikis būtų didžiulis.
Techninė atakos analizė, įskaitant „xz backdoor“ išsamiai paaiškinta, buvo analizuojamas kitur. Šiame įraše daugiausia dėmesio bus skiriama išpuolio laiko juostai, kaip jį buvo galima aptikti, kaip incidentas buvo tvarkomas iki šiol ir kokias pamokas galima padaryti iš išpuolio.
Ilga galinių durų uodega tęsėsi ir po pirmojo pataisymo. 2025 m. rugpjūtį, praėjus daugiau nei metams po CVE-2024-3094 atskleidimo, „Binarly“ saugumo tyrėjai aptiko galines duris vis dar esančiose keliolikoje „Debian Docker“ atvaizdų, paskelbtų „Docker Hub“, o „Debian“ komanda atsisakė jas pašalinti, laikydama jas istoriniais kūrimo artefaktais, o ne aktyvia rizika. Atskirai, OpenSSF ir „OpenJS“ netrukus po XZ incidento paskelbė bendrą įspėjimą, kad panašūs socialinės inžinerijos perėmimo bandymai jau buvo nukreipti į „JavaScript“ projektus, o tai rodo, kad čia panaudotas palaikytojų pasitikėjimo atakos modelis yra pakartotinai naudojamas kitur.
Kaip buvo suleistas XZ galinis dangtelis
Pastaba: „Git“ saugykla yra git.tukaani.org. Tačiau, taip pat buvo „GitHub“ talpinama saugykla (šiuo metu užblokuota), kur „GitHub“ paskyra skelbė pakeitimus, kurie vėliau buvo integruoti į „Git“ saugyklą.
Viena galinių durų dalis, regis, yra tik paskirstytuose 5.6.0 ir 5.6.1 versijų tarball failuose, o ne „git“ saugyklose ir priklauso nuo viena eilutė faile „build-to-host.m4“ „autoconf“ naudotą makro failą. Kita dalis buvo dviejuose tariamuose testo failuose. blogas-3-korrumpuotas_lzma2.xz bei geras-didelis_suspaustas.lzma
tai buvo commitdaužyti „GitHub“ paskyros „Jia Tan“ (JiaT75) viduje xz saugykla vasario 23 d. Tai buvo nekaltas pakeitimas – pridėti testų failus (tariamai suspaustus .lzma ir .xz blokus). Įdomu tai, kad testų failai nebuvo naudojami bandymuose! .m4 failo eilutė įterpia užmaskuotą scenarijų (įtrauktą į tarball), kuris bus vykdomas konfigūracijos pabaigoje, jei sutampa tam tikros sąlygos. Ji modifikuoja Makefile failą liblzma biblioteka, kurioje yra kodas, išgaunantis duomenis iš .xz failo, kuris po deobfuskacijos baigiasi šiame scenarijuje, iškviečiamas konfigūracijos pabaigoje. Jis nusprendžia, ar modifikuoti kūrimo procesą, kad būtų įterptas kodas: tik GCC ir GCC sąsajoje, Debian arba rpm aplinkoje ir tik x86_64 Linux sistemoje. Kai sutampa, įterptas kodas pertraukia vykdymą pakeisdamas du ifunc resolverius, todėl tam tikri iškvietimai pakeičiami. Dėl to simbolių lentelės yra analizuojamos atmintyje (tai užima laiko, o tai ir lėmė aptikimą, kaip paaiškinta vėliau).
Tada viskas pasidaro įdomu: užpakalinės durys į dinaminį susiejimo įrankį įdiegia audito kabliuką, laukdamos, kol atkeliaus RSA_public_decrypt funkcijos simbolis, kuris nukreipiamas į tašką užpakalinių durų kode, kuris savo ruožtu iškviečia atgalinį kodą. libcrypto, tikriausiai norint atlikti įprastą autentifikavimą. Ir naudingoji apkrova aktyvuojama, jei vykdoma programa turi proceso pavadinimą /usr/sbin/sshdBuvo aišku, kad taikinys buvo SSH serveriai. Tradiciškai sshd serveriai, tokie kaip OpenSSH, nebuvo susieti su liblzma, bet sshd yra dažnai lopytas kad būtų palaikomas „systemd-notify“, jog kitos paslaugos galėtų būti paleistos, kai veikia „sshd“. Tada „liblzma“ netiesiogiai įkeliama naudojant systemd, uždarant ratą.
Užpakalinės durys dar nėra iki galo išanalizuotos, bet atrodo, kad yra leidžia nuotoliniu būdu vykdyti komandas (RCE) su sshd demono privilegijomis, veikiantis išankstinio autentifikavimo kontekste. Informacija iš nuotolinio sertifikato, kai sutampa su galinių durų funkcija, yra iššifruojama naudojant „ChaCha20“, o sėkmingai iššifravus, perduodama į sistema()Taigi, tai iš esmės yra uždaras RCE, daug blogesnis nei paprastas viešojo rakto apėjimas.
Vėlesnėje 5.6.1 versijos tarball versijoje buvo dedamos papildomos pastangos paslėpti pėdsakus, dar labiau supainiojant simbolių pavadinimus ir bandant ištaisyti pastebėtas klaidas. prailginimo mechanizmas Taip pat buvo įdiegta sistema, kurioje buvo ieškoma papildomų bandomųjų failų, ieškant tam tikrų parašų, kuriuos būtų galima pridėti prie galinių durų.
Ši gana sudėtinga ataka gali likti nepastebėta, kol nebus pasiektos stabilios „Linux“ distribucijos. Laimei, kai kurie žmonės mėgsta tikrinti, kodėl nutinka neįprasti dalykai.
XZ galinių durų atakos atradimas
Dažnai įskiepytas kenkėjiškas elgesys išaiškėja atsitiktinai ar netyčia. Geras pavyzdys buvo įspėjimas apie nebenaudojimą („Kam rūpi įspėjimai?“), kuris lėmė atradimą įvykių srauto ataka 2018 m. spalio mėn. Kitas yra vartotojas, kuris perspėjo Codecov 2021 m. balandžio mėn. jų „bash“ įkėlimo scenarijus neperžengė kontrolinės sumos reikalavimų („Kas tikrina artefaktų vientisumą naudodamas kontrolines sumas“?). Anomalijos ir keisti simptomai naudojant ssh logins (login(sunaudoja daug procesoriaus apkrovų ir padidina prabėgusį laiką, atsiranda „valgrind“ klaidų) sužadino smalsumą Andresas Freundas, budrus „PostgreSQL“ kūrėjas, bet ne saugumo analitikas (kaip jis teigė). Po tam tikrų tyrimų su „OpenSSH“ „Debian Sid“ aplinkoje, jis padarė išvadą, kad atsako laiko problema priklauso nuo bibliotekos, liblzma, Dalis xz-utils Glaudinimo biblioteka. Priežastis: „„Upstream xz“ saugykla ir „xz“ tarball'ai buvo užblokuoti„Ši diagnostika buvo tokia tiksli!“ 2024 m. kovo 29 d. Andresas paskelbė pirmąją analizę „Openwall“ svetainėje: „„xz/liblzma“ srovių galinės durys, dėl kurių pažeidžiamas SSH serveris„Faktas: XZ Utils 5.6.0 ir 5.6.1 tarball'uose yra užpakalinės durys. Šiuos tarball'us sukūrė ir pasirašė anksčiau minėta Jia Tan paskyra.“ He paskelbta Mastodone vėliau tą pačią dieną, pripažindamas, kad atradimas buvo atsitiktinis ir jam reikėjo daug sutapimų. Verta perskaityti kitų vartotojų komentarus. „GitHub“ vartotojas tas pats (dar žinomas kaip Samas Jamesas) paskelbė puikų straipsnį DUK apie „xz-utils“ galines duris kur buvo apibendrintas išpuolis, pateikiant nuorodas į daugiau nuodugnias analizes atakos naudingosios apkrovos. Šios analizės buvo techniškai sultingos ir padėjo mums geriau suprasti labai detaliai atliktą injekciją:- xz/liblzma: Bash etapo obfuskacijos paaiškinimasPuiki deobfuskacijos, atliekamos injekcijos scenarijaus pagalba, analizė, suskirstyta į keturis „etapus“.
- Filippo Valsordos mėlynojo dangaus siūlas Pačios „užpakalinių durų“ analizė RSA_public_decrypt faile, kuri parodo jų pobūdį: RCE, ne autentifikavimo apėjimas, ir uždaras (priima autoriaus privatų raktą, o jei ne, grįžta prie įprasto veikimo) / neatlygintinas. Autorius ketino likti nepastebėtas, kad išvengtų aptikimo!
- XZ užpakalinių durų analizė, atlikta @smx-smx (vykdoma) – Papildoma galinių durų analizė (beveik pasiklydau pačioje pradžioje 😀)
- xz užpakalinių durų dokumentacijos wiki, dar viena 5.6.1 injekcijos scenarijaus analizė.
Kaip buvo elgiamasi su incidentu
Andreaso Freundo atskleidimas buvo atsargus, nes, jo paties žodžiais tariant:„Atsižvelgiant į akivaizdų aukščiau esančio sluoksnio įsitraukimą, apie aukščiau esančio sluoksnio klaidą nepranešiau. Kadangi iš pradžių maniau, kad tai būdinga „Debian“ problema, išsiunčiau preliminaresnę ataskaitą adresu security@...ian.org. Vėliau apie problemą pranešiau adresu distros@.“ CISA buvo informuotas paskirstymo pranešimu.“
Kas yra puolamas?
Arba „GitHub JiaT75“ paskyra buvo pažeista (atminkite, kad „GitHub“ neseniai įvedė privalomą 2FA), arba fizinis paskyros savininkas perėjo į tamsiąją pusę. Tačiau yra svarių priežasčių manyti apie pažangią nuolatinę grėsmę (APT), galbūt valstybės remiamą, dėl techninio atakos sudėtingumo. Tolesnis kibernetinio saugumo agentūrų ir teisėsaugos tyrimas parodys… Šis įrašas „YCombinator Hacker“ naujienose apie Jia Tan nušviečia „kas“ ir jo veiklą. Rekomenduojama! Pateikia daug informacijos apie tai, kaip blogiukai bando apgauti kitus vartotojus, naudodami socialinę inžineriją.„Labai erzina – tariamas galinių durų autorius kelias savaites bendravo su manimi (rwmj), bandydamas įtraukti „xz 5.6.x“ į „Fedora 40“ ir „41“ dėl „puikių naujų funkcijų“. Mes netgi bendradarbiavome su juo, kad išspręstume „valgrind“ problemą (kuri, kaip paaiškėjo, dabar buvo sukelta jo pridėtų galinių durų). Vakar vakare turėjome skubėti išspręsti problemą po netyčinio embargo pažeidimo. Jis jau 2 metus dalyvauja „xz“ projekte, prideda visokius dvejetainius testavimo failus, ir, tiesą sakant, atsižvelgiant į tokį sudėtingumo lygį, įtarčiau net senesnes „xz“ versijas, kol nebus įrodyta kitaip.“
Jia Tan ėmėsi priemonių, kad nebūtų sekamas: atrodo, kad prisijungimui buvo naudojamas VPN (vpn.singapore.witopia.net) – kas savaime yra gerai. Ir daugelis pakeitimų, regis, yra paremti laikinais, vienkartiniais el. laiškais (šiuo atveju iš „ProtonMail“), raginančiais sujungti pakeitimus.
Aktorius gali ketinti eiti dar giliau, iki pat „Linux“ branduolio, kaip prisidėjęs prie xy įterptoji projektas. Pradinė analizė šiandien nerado jokių persileidimo požymių.
Pastaba: dar vienas Žemo profilio XZ bendradarbis „Hansas Jansenas“ („GitHub“ naudotojas „hansjans162“) yra tikrinamaJos paskyra „Debian“ sistemoje dabar yra užblokuotasJis atliko daug „Debian Games“ atnaujinimų, kad paslėptų tą, kurio norėjo „debian/xz-utils“, atnaujinimą į „Upstream 5.6.1“, kad paspartintų „backdoor“ platinimą. debian/nestabili.
Kol kas galime tik pasakyti, kad tai (kol kas nenustatytas) APT, naudojantis skirtingas paskyras, mažiausiai dvejus metus dirbantis šioje kampanijoje ir kantriai siekiantis įdiegti RCE SSH.
Šio straipsnio rašymo metu „Jia Tan“ tapatybė lieka nepatvirtinta. Viešai nebuvo patvirtintas joks patikimas priskyrimas konkrečiam asmeniui, organizacijai ar valstybės veikėjui, o tai tik dar kartą patvirtina, kokia veiksminga buvo šio asmens operatyvinė drausmė.
Ar buvo galima išvengti XZ galinių durų atakos?
Gana sunku.
Pirma, dalis įterpto galinio durų elemento pateko į suspaustus testo failus, kurie nebuvo naudojami testuose. Žvelgiant atgal, tai galėjo sukelti (triukšmingų) aliarmų, bet kam rūpi tikrinti, ar visi testo failai yra naudojami tikruose testuose realiame pasaulyje? Antra, dalis įterpto galinio durų elemento pateko į makrokomandų failus išleidimo tarball formatu, ir sunku rankiniu būdu patikrinti, ar nėra skirtumų su laukiamais tarball. Automatizavimas taip pat yra sudėtingas, nes laukiamą paties kompiliavimo rezultatą (visiems, kas žino, kaip veikia „automake“ / „autoconf“) sunku modeliuoti, kad būtų galima analizuoti, ar tikrasis tarball atitinka lūkesčius. Kai kurie tai iškėlė as „Neatitikimas tarp „tarball“ failų ir „git“ medžio yra funkcija, o ne klaida.“Dvejetainių tarballų kilmė iš jų šaltinio kodo yra neišspręsta problema.
Vartotojo reputacija? Na, remiantis ankstesniais duomenimis, „JiaTan75 GitHub“ paskyra nedarė nesąžiningų dalykų. commits. Jis buvo sustabdytas tik sukaupus įrodymų, bet iki kovo 29 d. tai buvo įprastas vartotojas, vykdantis įprastą veiklą. Na, nelabai įprasta. Vėliau commits (tai, tai, taiir tai (kuris pakoregavo spragų kodą) bandė ištaisyti „valgrind“ klaidas ir gedimus kai kuriose konfigūracijose dėl skirtumų, susijusių su „backdoor“ numatytu steko išdėstymu. Commit Apžvalgos galėtų tai aptikti, bet kas turi kantrybės analizuoti dvejetainio testo failo pakeitimus arba tikrąją GCC atributų keitimo C šaltinio kode motyvaciją?
Ar reikėtų kelti pavojaus signalą, kai SSH login užtrunka 800 ms, o ne 300 ms? Tikriausiai tik itin apdairūs žmonės tai pastebėtų. Ciceronas sakė, „Neskubumas būdingas jaunystei, apdairumas – senatvei.“
„IFUNC“ infrastruktūrą 2023 m. birželį įdiegė „Hans Jansen“ ir „Jia Tan“. Tai pirmasis commit Pridedama „ifunc“ palaikymas į „crc64_fast.c“ (vėliau panaudota užpakalinių durų funkcijai įterpti). Mėnesiai prieš įterpiant užpakalinių durų dvejetainius failus į testinius failus!
Pastaba: Autorius ir commitČia nuomonės skiriasi, bet tai normalu: projekto prižiūrėtojas yra Lasse Collinas, kuris sujungė pakeitimus. Jis netgi dėkoja „Hansui Jansenui“...
Iki Andreso Freundo įrašo ir „RedHat“ sukurto CVE niekas nekėlė susirūpinimo. Jei matote įrankių kaskadą, kuri tai aptiktų, jie dabar aptinka paveiktą komponentą. ex post facto.
Tikriausiai geriausia prevencija atsirado dėl „Linux“ distribucijų pobūdžio ir to, kaip nestabilios, pažangiausios versijos į stabilias distribucijas patenka tik po tam tikro proceso.
Pamokos, išmoktos iš XZ bBackdoor atakos
Pastebėjome, kaip sunku aptikti tyčinis Užpakalinės durys. Užpakalines duris reikėtų laikyti vidine grėsme, nes jas įdiegia vidiniai darbuotojai arba jos įdiegiamos per pažeistas vidines paskyras. Ir šiais žmonėmis dažniausiai pasitikima. O kai užpakalinės durys įdiegiamos į paskirstytą artefaktą, jį sunkiau aptikti.
Kai kurie autoriai, pavyzdžiui, Kevinas Beaumontas parodė į sistema, kuris atveria didelį trečiųjų šalių paslaugų atakų paviršių „backdoor“. Tuo piktnaudžiauja piktadarys. „Systemd“ turi daug dėmesio, bet XZ yra mažai žinoma biblioteka aukštesniuose lygmenyse. „Kai srovių srautas užterštas, visi geria užnuodytą vandenį pasroviuose“.
Nesusijęs pakeitimo prašymas sistemoje, skirtas dinamiškai įkeliamos glaudinimo bibliotekos, kuris pašalintų galines duris, jau buvo integruotas į sistemą, bet dar nepristatytas. Papildomos priklausomybės, kurias įveda „libsystemd“, gali būti pažeidžiamumų šaltinis., ir vakar šis prašymas buvo atidarytas.
A komentuoti skiltyje „xz: Išjunkite ifunc, kad išspręstumėte problemą“ commit pateikė aiškią įžvalgą, į ką reikėtų sutelkti dėmesį, jei norime užkirsti kelią tokiai veiklai (paryškinimas mano):
„Pamoka, kurią turėtume išmokti kaip bendruomenė, yra labiau užtikrinti saugumą“ software supply chain security holistiniu požiūriu, audituojant ne tik šaltinio kodą, bet ir kitas kūrimo sistemas. Kaip „SolarWinds“ įsilaužimas, kai užpuolikai modifikavo „SolarWinds“ uždarojo kodo stebėjimo programinės įrangos atnaujinimus.“
DUK
Ar XZ galinės durys vis dar kelia pavojų šiandien?
Dažniausiai suvaldyta, bet ne visiškai išnykusi. 2025 m. rugpjūtį tyrėjai aptiko, kad galinės durys vis dar yra keliose „Debian Docker Hub“ atvaizduose, kuriuos „Debian“ laikė neaktyviais istoriniais artefaktais. Komandos turėtų patikrinti, ar jos nekuria pagal pasenusius, netaisytus bazinius atvaizdus, o ne manyti, kad 2024 m. pataisa visiškai uždarė duris.




