Sa pagpalambo sa software, kita nagsalig sa kaugalingon ug ikatulo nga partido nga mga sangkap o artifact. Ang usa ka flexible nga Dependency Management hinungdanon alang sa modernong software. Ang mga package manager sama sa NPM, Maven, pip or NuGet kasagarang gigamit sa pagtino sa mga dependency sa software. Kini nga mga himan gidisenyo nga gikonsiderar ang kasayon ug kadali sa paggamit, dili ang seguridad.
Ang problema
Ang problema kay ang pagka-flexible ug kadali sa paggamit para sa mga developers nagtawag sa mga kontrabida, kinsa nakakita sa mga software dependencies nga dili mapugngan nga madanihon para sa ilang negosyo. Ang resulta: ang mga kontrabida misunod sa tanang posibleng agianan sa pag-atake nga gipakita dinhi. Tinubdan: “Backstabber's Knife Collection: A Review of Open Source Software Supply Chain Attacks”
Niini nga post, atong hisgotan ang paggamit sa mga deklarasyon sa open version, sa diwa nga ang na-download nga bersyon dili pirmi apan kinahanglan nga nahisakop sa usa ka piho nga range. Sa panahon sa pagtukod, ang pinakataas nga kasamtangang bersyon nga compatible sa gitakdang range sa bersyon ang pilion ug i-download/i-install sa package manager.
Atong iilustrar ang mga open declaration sa mga dependencies declaration para sa lain-laing package manager:
-
- NPM: package.json
{
...
"mga dependency": {
...
"modawat": ">=1.3.8",
"lodash": "~4.16.0",
...
},
...
}
Ang pinakadako nga kasamtangang bersyon nga dili moubos sa 1.3.8 para sa accepts package ang i-install, ingon man ang pinakadako nga 'patch' update para sa lodash sa 4.16.x range.
-
- Maven: pom.xml
...
...
komon-io
komon-io
PAGBUHIYA
...
...
Ang katapusang magamit nga release para sa commons-io (jar file) idugang isip dependency.
-
- Pip: setup.py
...
pag-setup(
...
install_requires=['peppercorn', 'launchpadlib'],
...
)
...
Ang ingon nga mga open version scheme adunay maayo ug dili maayo nga bahin. Ang maayo kay ang mas bag-ong mga bersyon kasagaran adunay mga pagpaayo sa functional ug kalidad, mga pag-ayo sa bug, ug mga patch sa seguridad, nga awtomatikong gi-upgrade. Palihug timan-i nga alang sa kadaghanan sa mga proyekto sa tinuod nga kalibutan, ang mga pag-ayo wala gi-backport sa miaging mga menor de edad nga pagpagawas, gawas tingali sa mga grabe nga kahuyangan sa seguridad. Ang mga bukas nga bersyon maayo usab nga gamiton sa mga librarya, aron makunhuran ang gidaghanon sa mga bersyon nga kinahanglan i-install kung ang tanan nga mga dependency nasulbad na.
Apan ang mga open version range adunay dili maayong bahin. Wala ka mahibalo kung unsang mga bersyon ang i-install sa panahon sa pagtukod, ug ang mga pagtukod dili masubli. Ug aduna usay mangitngit dapig sa mga bukas nga bersyon. Kon ang usa ka dili maayong aktor makahimo sa pagmantala sa usa ka malisyosong component sa publikong repository nga adunay taas nga bersyon nga compatible sa imong bukas nga range, ang imong sunod nga build maglakip sa malisyosong component, tingali gani mopatuman sa malware sa mga installation script nga mahimong awtomatikong ipatuman. Ang pag-obfuscate sa attack payload usa ka matang sa arte.
Kini nailhan nga ang Kakulang sa Pag-pin sa Bersyon isyu.
Ang mga dautang aktor kanunay nga naningkamot sa pagbutang sa mga malisyosong bersyon sa mga sikat nga open-source nga pakete. Mahimo silang makakuha og access sa mga yawe para sa mga repositoryo sa pakete sa usa ka sekreto nga leak; kanunay silang mogamit og social engineering o magtago sa usa ka nested malisyosong dependency sa usa ka daw mapuslanon nga butang. pull requestBisan ang pipila ka mga awtor mismo usa ka adlaw nakahukom nga ang kalibutan dili patas ug gipaak ang ilang mga kliyente mga protesta sa ilang kaugalingong mga pakete!
Karon handurawa nga nagtrabaho ka sa usa ka organisasyon nga naggamit og internal nga mga sangkap ug mga open-source nga sangkap.
Kon ang usa ka dili maayong aktor nahibalo sa ngalan sa maong internal nga mga sangkap, mahimo niyang i-publish ang usa ka sangkap nga parehas og ngalan sa publikong repositoryo. Daghang mga package manager ang unang makakuha sa publikong mga sangkap, ug kon ang bersyon husto nga napili ug ang bersyon sa imong gideklarar nga dependency bukas, boom! Kini nga isyu ginganlan og Kalibog sa Pagsalig.
Atong ipakita ang usa ka ehemplo. Pananglit sa atong NPM project, kita adunay dependency sa usa ka private component:
-
- NPM: package.json
{
"ngalan": "akong-proyekto",
...
"mga dependency": {...
“akong-pribado-nga-dep”: “>=1.0.0”,...
}
...
}
Ang tig-atake mahimong maghimo og high major nga bersyon sa my-private-dep (sama sa 99.0.0) ug i-publish kini sa public npm repository, nga adunay kaugalingong peke nga account (ang tig-atake dili kinahanglan nga mobuhat bisan unsa sa akong organisasyon). Ang NPM package manager mo-install sa malisyosong dependency, kasagaran adunay makadaot nga mga resulta.
Ang solusyon
Aron malikayan kini nga mga isyu sa among proseso sa pagtukod og software, kinahanglan natong sundon ang estrikto nga mga lagda kon unsaon pagdeklarar ang mga bersyon sa component, nga nagdepende sa teknolohiya nga gigamit. Ang importante mao nga ang usa ka piho nga bersyon sa usa ka pakete, kung mapublikar na sa usa ka repository, kinahanglan nga dili mausab (aron malikayan ang paglapas sa mga dependent, dili lang alang sa mga hinungdan sa seguridad).
Ang kinatibuk-ang ideya mao ang pag-focus (pin) nga mga bersyon, kanunay nga gisusi nga ang naayos nga mga bersyon sa mga sangkap (lakip ang TANANG transitive dependencies) walay malware, ug kini posible salamat sa mga lockfile nga gitanyag sa daghang mga package manager. Atong tan-awon kon giunsa paglihok ang version pinning para sa lain-laing mga package manager. Adunay delikado nga tradeoff tali sa kanunay nga pag-update sa bersyon alang sa pag-ayo sa nahibal-an nga mga kahuyangan ug pag-pin sa bersyon aron malikayan ang mga dili-deterministic nga pagtukod ug potensyal nga mga pag-atake sa supply chain.
-
- NPM:
Ang mga npm o yarn package manager mogamit og lain-laing mga lockfile (npm-shrinkwrap.json / package-lock.json o yarn.lock, matag usa) nga naglista sa mga fixed nga bersyon para sa tanang dependencies, direkta ug dili direkta. Ang mga lockfile kinahanglan nga ubos sa version control, kay kon dili, ang ubang mga developer / build node mahimong matapos sa lain-laing mga bersyon. Likayi ang npm install gawas kon anaa sa development kinahanglan nimo nga i-update ang mga dependencies (pananglitan aron ma-install ang mga security fixes). Gamita ang mas deterministic nga npm ci (Clean Install) sa kinatibuk-an, aron ang package manager mogamit sa lockfile o mo-terminate nga adunay error kon walay lockfile, o dili kini motakdo sa package.json. Kon ang mga bersyon nga gilista gisusi alang sa malware, ang lockfile mosiguro nga walay daotan nga mahitabo sa panahon sa pagtukod.Alang sa mga internal nga sangkap, girekomenda nga maghimo usa ka Sakop sa NPM gidumala sa organisasyon (sama sa @myorg), ug gamiton kana nga sakup sa dependency (sama sa @myorg/my-private-dep), nga mahimo ra nga adunay pribado nga visibility. Kini nagbabag kalibog sa pagsalig mga pag-atake, tungod kay ang miyembro lamang sa organisasyon nga adunay write access ang maka-publish sa mga pakete ubos sa maong sakup.
- NPM:
-
- Maven:
Ang Maven / Gradle walay mga lockfile (apan tan-awa kini nga artikulo sa StackOverflow).Ang mga version ranges dili kaayo gigamit sa Maven/Gradle sama sa ubang mga ecosystem. Likayi lang mga sakup sa bersyon ug LATEST o RELEASE meta-versions. Ang dili direkta nga mga bersyon kinahanglan usab nga susihon. Ang Mga Bersyon sa Maven Plugin usa ka maayong himan para sa pagkontrol sa bersyon.
Palihug timan-i nga ang Maven kanunay adunay konsepto sa sakup sa organisasyon (ang groupId nga bahin sa dependency), ug ang kalibog sa dependency daw dili gyud problema alang niana nga ekosistema.
- Maven:
-
- Pip:
Sa Python adunay lain-laing mga himan para sa pagdumala sa mga lockfile:- pipenv, nga nagmugna og Pipfile.lock lockfile.
- balak, nga nagmugna og balak.lock.
- pagyelo sa tubo, sugo nga nagmugna og requirements.txt nga molihok isip lockfile. Susiha kon ang tanang dependency naggamit og fixed nga mga bersyon gamit ang == operator. Dayon ang pip install -r requirements.txt mogamit sa fixed nga mga dependency.
- Pip:
Pahinumdumi nga ang mga lockfile sa ibabaw kinahanglan nga naa sa ilalum sa version control, ug nga ang build command nga gipili kinahanglan nga mogamit sa lockfile.
Ang naandan nga package repository nga gigamit sa pip (PyPI) walay mga naming scope, ug kini daling maapektuhan sa mga dependency confusion attack. Paglikay sa kalibog sa pagsalig sa ekosistema sa python dili sayon, ug ang ubang mga awtor nagrekomendar sa paggamit og internal repository aron magsilbing proxy para sa mga public dependencies nga gikuha gikan sa PyPI, apan kuhaon una ang private dependencies gikan sa internal repository (ang -index-url kinahanglan nga motudlo sa internal repository, dili sa PyPI, ug ang –extra-index-url kinahanglan nga tangtangon).
Pipila ka tinuod nga mga pag-atake
Pag-atake sa GetcookiesAng aktor nga si dustin87 midugang og indirect dependency ngadto sa sikat nga npm mailparser package ngadto sa usa ka malisyosong package nga adunay RCE backdoor (gCOMMANDhDATAi):
JSON.stringify(req.headers).replace(/g([a-f0-9]{4})h((?:[a-f0-9]{2})+)i/gi, (o, p, v) => {}) Bisan wala na gigamit (walay mga tigsusi!), ang mailparser nakadawat gihapon og mga 64,000 ka senemanang pag-download. Kini usa ka kaso sa hapit-miss nga pag-atake, tungod kay ang RCE wala gyud magamit.cised.
Gipatik ang NPM kini nga post nga adunay mga detalye bahin sa pag-atake sa getcookies.
Kalibog sa Pagsalig:
Nadiskobrehan ni Alex Birsan niadtong 2021 ang isyu sa pagkalibog sa pagsalig ug nagpatik og post nga giulohan og "Giunsa Nako Pag-hack sa Apple, Microsoft ug Dosena nga Ubang mga Kompanya".
Hinumdumi nga para sa npm ang organization scope sama sa @myorg kinahanglan nga ireserba, ug ang internal packages kinahanglan nga usbon aron magamit ang scope.
Sa pip, ang common public registry nga PyPI walay scopes/namespaces. Ang matag private package mahimong adunay public package squat nga parehas og ngalan sa internal package, apan walay sulod, ug basin makamugna og error kon gamiton, aron mailhan kini kon aksidente kining makuha.
Node-ipc:
Ang tag-iya sa pakete, sa dihang nagsugod ang gubat sa Russia-Ukraine, nag-inject og malisyosong code para sa pagtangtang sa mga random nga file, sa dihang na-install sa mga host sa Russia ug Belarus. Ang file nga ssl-geospec.js naghimo sa ingon nga geographic distinction:
Makapainteres nga ang ubang mga pakete migamit og mga open version para sa node-ipc dependency, sama sa sikat nga Vue.js framework, ug ang mga maintainer niini nakadawat og dinalian nga apela aron i-pin ang node-ipc dependency sa luwas nga bersyon.
Kini ang post adunay dugang detalye niining pagsabotahe, nga mas layo pa kay sa uban Mga gamit sa protesta isyu.
Panapos nga Pulong
Ang mga bukas nga bersyon kinahanglan dili gayud gamiton sa mga gihiusang proyekto sa software. Gihimo nila nga dili masubli ang mga build, ug ang mga tig-atake mahimong mopahimulos niini ug makahimo sa pag-inject sa malware pinaagi sa mga pag-atake sa mga dependency tree sama sa nahisgutang dependency confusion.
Mga sayop nga pag-configure sama sa bukas nga mga bersyon, kakulang sa pag-pin sa bersyon, o wala masusi nga mga internal nga sangkap kinahanglan likayan. Ang una nga butang mao ang pag-ila sa ingon nga mga isyu, tingali bisan ang pagbabag sa build kung kini makit-an, ug pag-standardize sa usa ka protocol alang sa aksyon.
Awtomatikong pag-ila sa mga depekto ug sayop nga mga pag-configure sa mga dependency, pagreport sa mga kadudahang dependency nga mahimong huyang sa piho nga mga pag-atake sa supply-chain sama sa kalibog sa pagsalig, tanan nga adunay mga himan sa pag-ayo nga magamit, usa sa mga nag-unang katuyoan sa Plataporma sa Xygeni.
| Para magbasa pa |
| Ohm M., Plate H., Sykosch A., Meier M.: “Koleksyon sa Kutsilyo ni Backstabber: Usa ka Pagrepaso sa mga Pag-atake sa Open Source Software Supply Chain”. DIMVA 2020. Mga Nota sa Lecture sa Siyensiya sa Kompyuter, vol 12223. Springer – 2020 (tinubdan sa numero sa kahoy sa dependency attack.) |
| @adam-npm: “Gikataho nga malisyosong module: getcookies“. npm Blog (gi-archive) – Mayo 2, 2018. |
| Alex Birsan: “Giunsa Nako Pag-hack sa Apple, Microsoft ug Dosena nga Ubang mga Kompanya"Medium – Pebrero 9, 2021." |
| Ax Sharma: “DAKONG pagsabotahe: Ang bantog nga pakete sa npm nagtangtang sa mga file aron iprotesta ang gubat sa Ukraine"BleepingComputer – Marso 17, 2022 |





