Tikai 13 stundu laikā npm reģistru pārpludināja 36 ļaunprātīgas pakotnes, uzdodoties par populārās Strapi CMS leģitīmiem rīkiem. Tas nebija nejaušs digitālā vandālisma akts; tas bija aprēķināts, sistēmisks mēģinājums infiltrēties kritiski svarīgās datubāzu vidēs. Līdz brīdim, kad SafeDep drošības pētnieki identificēja kampaņu, draudu izpildītāji jau bija izveidojuši sarežģītu atbalsta punktu, izmantojot dabisko uzticību, ko izstrādātāji velta atvērtā pirmkoda ekosistēmām.
No riska perspektīvas šis incidents izgaismo bīstamu realitāti mūsdienu programmatūras izstrādē: mūsu piegādes ķēdes ir tikai tik stipras, cik to vājākā atkarība. Uzbrucēji izmantoja četrus viltus kontus — umarbek1233, kekylf12, tikeqemif26 un umar_bektembiev1 —, lai izplatītu pakotnes, kas no pirmā acu uzmetiena šķita nobrieduši kopienas spraudņi. Tomēr aizkulisēs šīs pakotnes bija izstrādātas kā digitālais Trojas zirgs, kas saturēja lietderīgās slodzes (payloads), kas spēj kompromitēt Redis un PostgreSQL instances.
Uzbrucēji izmantoja gudru nosaukumu piešķiršanas konvenciju, lai apietu aizņemtu izstrādātāju mentālos filtrus. Pievienojot savām pakotnēm prefiksu strapi-plugin- un tādus izplatītus funkcionālos terminus kā cron, database vai health, tie atdarināja oficiālās Strapi ekosistēmas nosaukumu struktūru. Interesanti, ka visām 36 pakotnēm viņi arī fiksēja versijas numuru 3.6.8. Tā bija apzināta izvēle, lai programmatūra izskatītos pēc nobrieduša, stabila laidiena, nevis aizdomīga jauna augšupielāde.
Mana pieredze, analizējot draudu izlūkošanas ziņojumus, rāda, ka šāda veida "typosquatting-līdzīga" uzvedība kļūst arvien izplatītāka. Uzbrucēji zina, ka izstrādātāji bieži vispirms meklē funkcionalitāti un tikai pēc tam pārbauda izdevēju. Lai gan oficiālie Strapi spraudņi ir stingri ierobežoti @strapi/ vārdtelpā, obligātas vārdtelpas trūkums kopienas spraudņiem rada plaisu, kuru ļaunprātīgi dalībnieki labprāt aizpilda.
Arhitektūras līmenī galvenā šeit izmantotā ievainojamība nav kļūda pašā Strapi vai npm, bet gan npm dzīves cikla funkcija. Katra no 36 pakotnēm saturēja postinstall.js skriptu. Npm ekosistēmā pēcinstalācijas skripts tiek izpildīts automātiski, tiklīdz pakotne ir lejupielādēta, un tā lietderīgās slodzes aktivizēšanai nav nepieciešama nekāda lietotāja mijiedarbība.
Līdz ar to ļaunprātīgais kods darbojas ar tādām pašām privilēģijām kā lietotājam, kurš veic instalēšanu. Lokālajā izstrādes vidē tas varētu nozīmēt piekļuvi personīgajiem failiem un vides mainīgajiem. Tomēr regulatīvajā kontekstā, kur datu integritāte ir vissvarīgākā, reālās briesmas slēpjas CI/CD konveijeros un Docker konteineros. Ja automatizēts būvēšanas process ielādē kādu no šīm pakotnēm, skripts faktiski iegūst root piekļuvi šajā konteinerizētajā vidē, ļaujot tam izvērsties un uzbrukt iekšējai infrastruktūrai.
Tas, kas padara šo konkrēto kampaņu īpaši detalizētu un bīstamu, ir tās koncentrēšanās uz datu slāni. Lietderīgās slodzes nebija vispārīgas; tās bija īpaši pielāgotas Redis un PostgreSQL izmantošanai. Tiklīdz tika aktivizēts postinstall skripts, tas mēģināja:
Būtībā uzbrucēji meklēja "valstības atslēgas". Datubāzes bieži vien ir lietojumprogrammas arhitektūras jutīgākā daļa, kas satur visu, sākot no lietotāju PII (personu identificējošas informācijas) līdz patentētai biznesa loģikai. Mērķējot uz Redis un PostgreSQL, uzbrucēju mērķis bija pārvērst vienkāršu pakotnes instalēšanu pilna mēroga datu aizsardzības pārkāpumā.
Raugoties uz draudu ainavu, mums jāatzīst, ka, neskaitot ielāpu uzstādīšanu, cilvēciskais faktors joprojām ir nozīmīgs mainīgais. Es atceros gadījumu datu noplūdes izmeklēšanas laikā, kad vecākais izstrādātājs nejauši ieviesa ļaunprātīgu atkarību, jo strādāja vēlu un nepārbaudīja pakotnes mājaslapu. Tas notiek ar labākajiem no mums, taču automatizētu uzbrukumu pasaulē mēs vairs nevaram atļauties šādas kļūmes.
No galalietotāja viedokļa šāda pārkāpuma ietekme bieži vien ir neredzama, līdz ir par vēlu. Citiem vārdiem sakot, kompromitēta atkarība ir kā lēna sūce kuģa korpusā; jūs varat nepamanīt ūdens celšanos, līdz dzinēji sabojājas. Šajā gadījumā "dzinēji" ir jūsu datubāzes, un "ūdens" ir neautorizēta piekļuve jūsu kritiski svarīgajiem datiem.
Galu galā atbildība par programmatūras piegādes ķēdes drošību gulstas gan uz platformām, gan uz izstrādātājiem, kuri tās izmanto. Kamēr npm strādā, lai noņemtu šīs pakotnes pēc ziņojuma saņemšanas, 13 stundu pieejamības logs bija vairāk nekā pietiekams laiks, lai automatizētās sistēmas uzņemtu ļaunprātīgo kodu.
Lai izveidotu noturīgāku aizsardzību, apsveriet šādus praktiskus soļus:
@strapi/ vārdtelpā. Esiet īpaši skeptiski pret pakotnēm bez vārdtelpas, kurām trūkst apraksta, repozitorija vai mājaslapas.--ignore-scripts, palaižot npm install vidēs, kurās jūs pilnībā neuzticaties katrai atkarībai. Tas novērš postinstall skriptu automātisku palaišanu.npm audit un izmantojiet package-lock.json, lai nodrošinētu, ka jūsu atkarību koks ir paredzams un nav ticis izmainīts.Kā pretpasākumu nākotnes uzbrukumiem mums katra trešās puses atkarība ir jāuztver kā potenciāls risks. Pieņemot nulles uzticības (zero-trust) pieeju mūsu pakotņu pārvaldniekiem, mēs varam pārvērst savus izstrādes konveijerus par spēcīgu aizsardzību, nevis atvērtām durvīm ekspluatācijai.
Avoti:



Mūsu end-to-end šifrētais e-pasta un mākoņdatu glabāšanas risinājums nodrošina visefektīvākos līdzekļus drošai datu apmaiņai, garantējot jūsu datu drošību un konfidencialitāti.
/ Izveidot bezmaksas kontu