Kibernetinis saugumas

„Šmėkla mašinoje“: kaip nematomas „Unicode“ persekioja „GitHub“ tiekimo grandines

Tyrėjai aptiko 151 kenkėjišką „GitHub“ paketą, kuriuose naudojamas nematomas „Unicode“ kodui paslėpti. Sužinokite, kaip veikia ši tiekimo grandinės ataka ir kaip apsaugoti savo kodą.
„Šmėkla mašinoje“: kaip nematomas „Unicode“ persekioja „GitHub“ tiekimo grandines

Tiekimo grandinės saugumas ilgą laiką buvo katės ir pelės žaidimas, tačiau nesenas „Aikido Security“ tyrėjų atradimas rodo, kad pelė rado būdą tapti nematoma. 2026 m. kovo 3–9 dienomis sudėtinga kampanija užplūdo „GitHub“ ir kitas pagrindines saugyklas 151 kenkėjišku paketu. Kitaip nei praeities „typosquatting“ atakos, kurios rėmėsi vartotojų daromomis klaidomis rašant bibliotekos pavadinimą, šie paketai naudojo nematomus „Unicode“ simbolius, kad paslėptų kenkėjišką logiką visų akivaizdoje.

Ši technika rodo reikšmingą evoliuciją tame, kaip užpuolikai naudojasi pasitikėjimu, būdingu atvirojo kodo ekosistemoms. Pasitelkdami simbolius, kurių žmogaus akis nemato, bet kuriuos kompiliatoriai ir interpretatoriai apdoroja itin tiksliai, grėsmių sukėlėjai sėkmingai apeina rankines kodo peržiūras ir tradicinius saugos skenerius.

Nematomumo mechanika

Šios atakos esmė yra „Unicode“ sudėtingumas – tarptautinis standartas, skirtas koduoti simbolius iš beveik visų rašto sistemų. Nors dauguma iš mūsų „Unicode“ įsivaizduojame kaip jaustukus ar raides su diakritiniais ženklais, standartas taip pat apima įvairius „nespausdinamus“ simbolius. Tai nulinio pločio tarpai, krypties keitimo ženklai ir jungiamieji simboliai, kurie ekrane neužima jokios vizualios vietos.

Kai programuotojas peržiūri pakeitimų užklausą (pull request) arba tikrina bibliotekos pradinį kodą, jų IDE arba teksto redaktorius paprastai šių simbolių visai neatvaizduoja. Tačiau „Python“ interpretatoriui ar „JavaScript“ varikliui šie simboliai yra atskiri duomenų taškai. Užpuolikas gali įterpti kenkėjišką turinį eilutėje arba komentare, kuris žmogui atrodo tuščias, tačiau vykdant kodą paleidžia komandą.

Pavyzdžiui, užpuolikas gali naudoti „Right-to-Left Override“ (U+202E) simbolį. Šis simbolis skirtas palaikyti tokias kalbas kaip arabų ar hebrajų, apverčiant po jo einančio teksto kryptį. Kenkėjiškame kontekste jis gali būti naudojamas tam, kad failas pavadinimu annoying_executable.exe.txt atrodytų kaip annoying_txt.exe, taip apgaunant vartotoją paleisti programą, kurią jis laiko paprastu tekstiniu failu.

Kodėl tradicinė gynyba yra sutrikusi

Beveik dešimtmetį tiekimo grandinės saugumas buvo sutelktas į „typosquatting“ ir „priklausomybių painiavą“ (dependency confusion). Saugumo įrankiai buvo sukurti žymėti paketus, kurių pavadinimai panašūs į, pavyzdžiui, requesst vietoj requests. Šie įrankiai puikiai atpažįsta žinomus blogus šablonus, tačiau jiems sunku susidoroti su tuo, ko nėra.

Daugelis senųjų statinės analizės saugumo testavimo (SAST) įrankių remiasi reguliariosiomis išraiškomis (regex), kad surastų pažeidžiamumus. Jei regex nėra specialiai sukonfigūruotas ieškoti nespausdinamų „Unicode“ diapazonų, jis juos tiesiog praleis. Be to, kadangi šie simboliai yra galiojantys „Unicode“ ženklai, jie nebūtinai sukelia „sugadinto failo“ įspėjimus. Kodas išlieka sintaksiškai teisingas, net jei jo elgsena yra paslėpta.

Tiekimo grandinės atakų vektorių palyginimas

Norint suprasti šios naujos bangos rimtumą, naudinga ją palyginti su tradiciniais saugyklų nuodijimo metodais.

Atakos metodas Pagrindinis mechanizmas Matomumas žmonėms Aptikimo sudėtingumas
Typosquatting Klaidingai parašyti paketų pavadinimai Didelis (atidžiai žiūrint) Mažas
Priklausomybių painiava Naudojimasis vidiniais ir viešaisiais pavadinimais Mažas Vidutinis
Nematomas Unicode Nespausdinami simboliai pradiniame kode Nulinis Didelis
Paskyros perėmimas Prižiūrėtojo prisijungimo duomenų vagystė Nėra Labai didelis

2026 m. kovo incidentas

„Aikido Security“ identifikuoti 151 paketai nebuvo tik koncepcijos įrodymai; tai buvo aktyvūs bandymai surinkti aplinkos kintamuosius, SSH raktus ir debesijos prisijungimo duomenis iš programuotojų mašinų. Kol tyrėjai pažymėjo kampaniją, kai kurie iš šių paketų jau buvo integruoti į automatizuotas kūrimo linijas, o tai pabrėžia greitį, kuriuo šios grėsmės plinta.

Ši konkreti kampanija išsiskiria didžiuliu paketų kiekiu, išleistu per šešių dienų laikotarpį. Tai rodo aukštą automatizavimo lygį užpuoliko pusėje, tikriausiai naudojant skriptus populiarių bibliotekų „šešėlinėms“ versijoms kurti ir nematomam turiniui įterpti į įprastas pagalbines funkcijas.

Kaip apsaugoti savo procesus

Užpuolikams pereinant prie nematomų grėsmių, programuotojai ir „DevOps“ inžinieriai privalo pritaikyti savo gynybos poziciją. Pasikliauti vizualia apžiūra nebeužtenka. Štai praktiniai žingsniai, kaip sumažinti nematomų kodo įterpimų riziką:

  • Įjunkite „Unicode“ įspėjimus IDE: Šiuolaikiniai redaktoriai, tokie kaip „VS Code“ ir „IntelliJ“, turi papildinius arba vietinius nustatymus, kurie išryškina „dviprasmiškus“ arba nespausdinamus simbolius. Įsitikinkite, kad jie įjungti visiems jūsų organizacijoje.
  • Įdiekite linterius su „Unicode“ patikromis: Naudokite linterius, kurie specialiai žymi ne ASCII simbolius pradiniame kode, nebent jie yra aiškiai leidžiami (pvz., lokalizacijos failuose).
  • Naudokite užrakto failus (lockfiles) ir fiksavimą: Visada naudokite package-lock.json, poetry.lock arba requirements.txt su konkrečiomis maišos reikšmėmis. Tai neleidžia jūsų kūrimo sistemai automatiškai įtraukti kenkėjiškos „naujausios“ priklausomybės versijos.
  • Audituokite savo CI/CD žurnalus: Ieškokite netikėtų išeinančių tinklo užklausų kūrimo proceso metu. Kenkėjiški paketai dažnai bando „paskambinti namo“ su pavogtais duomenimis iškart po įdiegimo.

Kelias į priekį

Šių 151 paketų atradimas yra rimtas priminimas, kad atvirojo kodo tiekimo grandinė yra gyva ekosistema su evoliucionuojančiais plėšrūnais. Perėjimas prie nematomų „Unicode“ atakų rodo, kad grėsmių sukėlėjai tolsta nuo socialinės inžinerijos ir pereina prie techninio maskavimo, kuris išnaudoja žmogaus suvokimo ribas.

Žengiant toliau į 2026 m., pramonė privalo pereiti prie „nulinio pasitikėjimo“ (Zero Trust) modelio priklausomybėms. Nebegalime daryti prielaidos, kad kodas yra saugus vien todėl, kad ekrane jis atrodo švarus. Patikra turi būti algoritminė, automatizuota ir pakankamai gili, kad pamatytų tai, ko žmogaus akis negali.

Šaltiniai

  • Aikido Security Research Blog: "The Rise of Invisible Malicious Packages"
  • Unicode Consortium: "UTR #36: Unicode Security Considerations"
  • GitHub Security Advisory Database
  • NIST Special Publication 800-204: "Security Strategies for Microservices-based Applications"
bg
bg
bg

Iki pasimatymo kitoje pusėje.

Pašto ir debesies saugojimo sprendimas suteikia galingiausias saugaus keitimosi duomenimis priemones, užtikrinančias jūsų duomenų saugumą ir privatumą.

/ Sukurti nemokamą paskyrą