Дар таҳияи нармафзор, мо ҳам ба ҷузъҳо ё артефактҳои худӣ ва ҳам ба тарафи сеюм такя мекунем. Идоракунии вобастагии чандир барои нармафзори муосир муҳим аст. Менеҷерони бастаҳо ба монанди NPM, Maven, Фишка or NuGet аксар вақт барои муайян кардани вобастагиҳои нармафзор истифода мешаванд. Ин абзорҳо бо дарназардошти қулайӣ ва осонии истифода, на бо дарназардошти амният, тарҳрезӣ шудаанд.
Масъала
Мушкилот дар он аст, ки чандирӣ ва осонии истифода барои таҳиягарон бадкоронро меноманд, ки вобастагии нармафзорро барои тиҷорати худ ҷолиб меҳисобанд. Натиҷа: бозигарони бад ҳамаи роҳҳои эҳтимолии ҳамларо, ки дар ин ҷо нишон дода шудаанд, пайгирӣ карданд. Манбаъ: “Backstabber's Knife Collection: A Review of Open Source Software Supply Chain Attacks”
Дар ин паём мо ба истифодаи эълонҳои версияҳои кушода тамаркуз хоҳем кард, ба маънои он ки версияи зеркашишуда собит нест, балки бояд ба диапазони муайян тааллуқ дошта бошад. Дар вақти сохтан, баландтарин версияи мавҷуда, ки бо диапазони версияи муайяншуда мувофиқ аст, аз ҷониби менеҷери бастаҳо интихоб ва зеркашӣ/насб карда мешавад.
Биёед эъломияҳои кушодаро дар эъломияҳои вобастагӣ барои мудирони бастаҳои гуногун нишон диҳем:
- NPM: бастаи.json
{
...
«вобастагиҳо»: {
...
«қабул мекунад»: «>=1.3.8»,
“lodash”: “~4.16.0”,
...
},
...
}
Бузургтарин версияи мавҷуда, ки аз 1.3.8 камтар нест, барои бастаи қабулшуда, инчунин бузургтарин навсозии "патч" барои lodash дар диапазони 4.16.x насб карда мешавад.
- Мавен: pom.xml
...
...
Commons-io
Commons-io
ОЗОД КАРДАН
...
...
Нусхаи охирини дастрас барои commons-io (файли jar) ҳамчун вобастагӣ илова карда мешавад.
- Қубур: setup.py
...
ташкил кардан(
...
install_requires=['peppercorn', 'launchpadlib'],
...
)
...
Чунин схемаҳои версияҳои кушода ҷанбаҳои хуб ва бад доранд. Чизи хуб дар он аст, ки версияҳои навтар одатан дорои беҳбудиҳои функсионалӣ ва сифатӣ, ислоҳи хатогиҳо ва часбҳои амниятӣ мебошанд, ки ба таври худкор навсозӣ мешаванд. Лутфан, дар хотир доред, ки барои аксари лоиҳаҳои воқеӣ, ислоҳот ба версияҳои хурди қаблӣ интиқол дода намешаванд, ба истиснои эҳтимолан барои осебпазириҳои фоҷиабори амниятӣ. Версияҳои кушода инчунин барои истифода дар китобхонаҳо хубанд, то шумораи версияҳоеро, ки ҳангоми ҳалли ҳама вобастагиҳо бояд насб карда шаванд, кам кунанд.
Аммо силсилаҳои версияҳои кушода як тарафи манфӣ доранд. Шумо дақиқ намедонед, ки кадом версияҳо ҳангоми сохтан насб карда мешаванд ва сохтаҳо такроршаванда нестанд. Ва инчунин як торик дар паҳлӯи версияҳои кушода. Агар як бозигари бад тавонад як ҷузъи зарароварро дар анбори оммавӣ бо версияи баландтари мувофиқ бо диапазони кушодаи шумо нашр кунад, сохтори навбатии шумо ҷузъи зарароварро дар бар мегирад ва ҳатто метавонад нармафзори зарароварро дар скриптҳои насб иҷро кунад, ки метавонанд ба таври худкор иҷро шаванд. Норавшан кардани бори ҳамла як навъ санъат аст.
Ин ҳамчунон маълум аст Набудани пинкунии версия чоп.
Фаъолони бад ҳамеша кӯшиш мекунанд, ки версияҳои зараровари бастаҳои маъмули кушодаасосро ҷойгир кунанд. Онҳо метавонанд дар як ихроҷи махфӣ ба калидҳои анборҳои бастаҳо дастрасӣ пайдо кунанд; онҳо аксар вақт аз муҳандисии иҷтимоӣ истифода мебаранд ё вобастагии зараровари дохилиро дар як чизи муфид пинҳон мекунанд. pull requestҲатто рӯзе чанд муаллиф қарор медиҳанд, ки ҷаҳон одилона нест ва муштариёни худро бо... нармафзори эътирозӣ дар бастаҳои худашон!
Акнун тасаввур кунед, ки шумо дар созмоне кор мекунед, ки ҷузъҳои дохилӣ ва ҷузъҳои кушодаасосро истифода мебарад.
Агар як бозигари бад номи чунин ҷузъҳои дохилиро донад, ӯ/вай метавонад ҷузъеро бо ҳамон ном дар анбори оммавӣ нашр кунад. Бисёре аз менеҷерони бастаҳо аввал ҷузъҳои оммавиро мегиранд ва агар версия дуруст интихоб шуда бошад ва версияи вобастагии эълоншудаи шумо кушода бошад, бум! Ин масъала номгузорӣ шудааст Нофаҳмиҳои вобастагӣ.
Биёед як мисол нишон диҳем. Фарз мекунем, ки дар лоиҳаи NPM-и мо мо аз як ҷузъи хусусӣ вобастагӣ дорем:
- NPM: бастаи.json
{
"ном": "лойиҳаи ман",
...
«вобастагиҳо»: {...
“my-private-dep”: “>=1.0.0”,...
}
...
}
Ҳамлагар метавонад версияи асосии my-private-dep (ба монанди 99.0.0)-ро эҷод кунад ва онро дар анбори оммавии npm бо ҳисоби қалбакии худ нашр кунад (ҳамлагар лозим нест, ки бо ташкилоти ман коре кунад). Менеҷери бастаҳои NPM вобастагии зарароварро насб мекунад, ки аксар вақт бо натиҷаҳои харобиовар анҷом меёбад.
Ҳалли
Барои пешгирӣ аз ин мушкилот дар раванди сохтани нармафзор, мо бояд меъёрҳои қатъиро дар бораи чӣ гуна эълон кардани версияҳои компонентҳо, ки аз технологияи истифодашуда вобастаанд, риоя кунем. Муҳим он аст, ки версияи мушаххаси баста, ки пас аз нашр дар анбори захиравӣ, бояд тағйирнопазир бошад (барои пешгирӣ аз вайрон кардани вобастагон, на танҳо аз сабаби амниятӣ).
Идеяи умумӣ ин аст, ки фишурда шавад (пайвандак) версияҳо, ҳамеша тафтиш мекунанд, ки версияҳои собитшудаи ҷузъҳо (аз ҷумла ҲАМАИ вобастагиҳои транзитӣ) аз нармафзори зараровар озоданд ва ин ба шарофати файлҳои қулфӣ ки бисёре аз менеҷерҳои бастаҳо пешниҳод мекунанд. Биёед бубинем, ки чӣ гуна пинкунии версия барои менеҷерҳои гуногуни бастаҳо кор мекунад. Байни онҳо як муомилаи нозук вуҷуд дорад навсозиҳои зуд-зуди версия барои ислоҳи камбудиҳои маълум ва пин кардани версия барои пешгирӣ аз сохторҳои ғайримуайянкунанда ва ҳамлаҳои эҳтимолии занҷираи таъминот.
- NPM:
Менеҷерҳои бастаҳои npm ё yarn файлҳои гуногуни қулфкуниро (мутаносибан npm-shrinkwrap.json / package-lock.json ё yarn.lock) истифода мебаранд, ки версияҳои собитро барои ҳамаи вобастагиҳо, мустақим ва ғайримустақим, номбар мекунанд. Файлҳои қулфкун бояд таҳти назорати версия бошанд, вагарна дигар таҳиягарон / гиреҳҳои сохта метавонанд бо версияҳои гуногун хотима ёбанд. Аз насби npm худдорӣ кунед, агар ҳангоми таҳия ба шумо лозим набошад, ки вобастагиҳоро навсозӣ кунед (масалан, барои насб кардани ислоҳоти амниятӣ). Умуман, npm ci (Насби тоза)-и муайянтарро истифода баред, то менеҷери баста файли қулфкуниро истифода барад ё агар файли қулфкунӣ набошад ё он бо package.json мувофиқат накунад, бо хатогӣ қатъ мешавад. Агар версияҳои номбаршуда барои нармафзори зараровар тафтиш карда шуда бошанд, файли қулфкун кафолат медиҳад, ки дар вақти сохтан ҳеҷ чизи бад рӯй нахоҳад дод.Барои ҷузъҳои дохилӣ тавсия дода мешавад, ки доираи NPM аз ҷониби ташкилот идора карда мешавад (ба монанди @myorg) ва ин доираи вобастагиро истифода мебарад (ба монанди @myorg/my-private-dep), ки метавонад танҳо намоёнии хусусӣ дошта бошад. Ин блокҳоро манъ мекунад. нофаҳмиҳои вобастагӣ ҳамлаҳо, зеро танҳо узви созмоне, ки дастрасии навиштан дорад, метавонад бастаҳоро дар доираи чунин доира нашр кунад.
- NPM:
- Maven:
Maven/Gradle файлҳои қулфӣ надоранд (аммо нигаред ин мақолаи StackOverflow).Диапазонҳои версияҳо бо Maven/Gradle мисли дигар экосистемаҳо истифода намешаванд. Танҳо аз онҳо худдорӣ кунед. диапазонҳои версияҳо ва мета-версияҳои ОХИРИН ё НАШРШУДА. Версияҳои ғайримустақим низ бояд тафтиш карда шаванд. Версияҳои Maven Plugin як воситаи хубест барои идоракунии версияҳо.
Лутфан, дар хотир доред, ки Maven ҳамеша мафҳуми доираи созмон (қисми groupId-и вобастагӣ)-ро дошт ва ба назар мерасад, ки нофаҳмиҳои вобастагӣ барои ин экосистема умуман мушкиле нестанд.
- Maven:
- Фишка:
Дар Python асбобҳои гуногун барои кор бо файлҳои қулф мавҷуданд:- пипенв, ки файли қулфи Pipfile.lock-ро тавлид мекунад.
- назм, ки шеърро тавлид мекунад. қулф.
- ях кардани пип, фармоне, ки файли requirements.txt-ро тавлид мекунад, ки ҳамчун файли қулф амал мекунад. Санҷед, ки оё ҳамаи вобастагиҳо версияҳои собитро бо оператори == истифода мебаранд. Сипас, pip install -r requirements.txt аз вобастагиҳои собит истифода мебарад.
- Фишка:
Хотиррасон мекунем, ки файлҳои қулфи дар боло зикршуда бояд таҳти назорати версия бошанд ва фармони сохташуда бояд файли қулфиро истифода барад.
Анбори маъмулии бастаҳо, ки бо pip (PyPI) истифода мешавад, доираи номгузорӣ надорад ва он ба ҳамлаҳои нофаҳмиҳои вобастагӣ осебпазир аст. Пешгирӣ аз нофаҳмиҳои вобастагӣ дар экосистемаи Python осон нест ва баъзе муаллифон истифодаи анбори дохилиро ҳамчун прокси барои вобастагиҳои оммавӣ, ки аз PyPI гирифта шудаанд, тавсия медиҳанд, аммо аввал вобастагиҳои хусусиро аз анбори дохилӣ гиред (-index-url бояд ба анбори дохилӣ ишора кунад, на PyPI ва –extra-index-url бояд нест карда шавад).
Баъзе ҳамлаҳои воқеӣ
Ҳамлаи Getcookies: Ҳунарпеша dustin87 ба бастаи маъмули npm mailparser вобастагии ғайримустақимро ба бастаи зараровар бо дари пушти RCE (gCOMMANDhDATAi) илова кард:
JSON.stringify(req.headers).replace(/g([a-f0-9]{4})h((?:[a-f0-9]{2})+)i/gi, (o, p, v) => {})Сарфи назар аз бекор карда шуданаш (бе баррасикунандагон!), mailparser то ҳол тақрибан 64,000 зеркашии ҳафтаинаро гирифт. Ин як ҳолати ҳамлаи қариб бемуваффақият буд, зеро RCE дар асл кор намекард.cisБештар
NPM нашр шудааст ин пост бо тафсилот дар бораи ҳамлаи getcookies.
Нофаҳмиҳои вобастагӣ:
Алекс Бирсан соли 2021 масъалаи нофаҳмиҳои вобастагиро кашф кард ва мақолаеро бо номи "Чӣ гуна ман ба Apple, Microsoft ва даҳҳо ширкатҳои дигар ҳакерӣ кардам".
Дар хотир доред, ки барои npm доираи созмон ба монанди @myorg бояд захира карда шавад ва бастаҳои дохилӣ бояд барои истифодаи доираи истифода тағир дода шаванд.
Бо pip, феҳристи умумии оммавии PyPI дорои соҳаҳо/фазоҳои номӣ нест. Ҳар як бастаи хусусӣ метавонад як бастаи оммавии squat бо ҳамон ном бо бастаи дохилӣ дошта бошад, аммо холӣ бошад ва эҳтимолан ҳангоми истифода хатогӣ ба вуҷуд орад, аз ин рӯ, агар он тасодуфан гирифта шуда бошад, онро муайян кардан мумкин аст.
Node-ipc:
Соҳиби баста, вақте ки ҷанги Русия ва Украина оғоз шуд, ҳангоми насб дар хостҳои Русия ва Беларус, рамзи зарароварро барои нест кардани файлҳои тасодуфӣ ворид кард. Файли ssl-geospec.js чунин фарқияти ҷуғрофиро иҷро мекард:
Ҷолиб он аст, ки бастаҳои дигар версияҳои кушодаро барои вобастагии node-ipc, ба монанди чаҳорчӯбаи маъмули Vue.js, истифода мебурданд ва нигоҳдорандагони он як ... гирифтанд. муроҷиати фаврӣ барои пин кардани вобастагии node-ipc дар версияи бехатар.
ин паём тафсилоти бештарро дар бар мегирад дар бораи ин харобкорӣ, ки як қадам аз дигарон дуртар меравад Протествор масъалаҳо.
Натиҷаҳо
Версияҳои кушода бояд ҳаргиз дар лоиҳаҳои нармафзори муттаҳидшуда истифода шаванд. Онҳо сохторҳоро ғайриқобили такроршавӣ мегардонанд ва ҳамлагарон метавонанд онҳоро истифода баранд ва тавонанд нармафзори зарароварро тавассути ҳамлаҳо ба дарахтони вобастагӣ, ба монанди нофаҳмиҳои вобастагии дар боло зикршуда, ворид кунанд.
Конфигуратсияҳои нодуруст ба монанди версияҳои кушода, набудани пиннинги версия ё ҷузъҳои дохилии номаълум бояд пешгирӣ карда шавад. Аввалин кор ин аст, ки чунин мушкилотро муайян кунем, шояд ҳатто ҳангоми пайдо шудани онҳо сохтмонро масдуд кунем ва протоколи амалро стандартӣ кунем.
Муайянкунии худкори камбудиҳо ва танзимоти нодуруст дар вобастагиҳо, гузориш додани вобастагиҳои шубҳанок, ки метавонанд ба ҳамлаҳои мушаххаси занҷираи таъминот, ба монанди осебпазир бошанд. нофаҳмиҳои вобастагӣ, ҳама бо абзорҳои ислоҳи амалӣ, яке аз ҳадафҳои асосии он аст Платформаи Xygeni.
| Барои хондан бештар |
| Ом М., Плате Х., Сикош А., Мейер М.: “Маҷмӯаи корди Backstabber: Шарҳи ҳамлаҳои занҷираи таъминоти нармафзори кушодаасос”. DIMVA 2020. Эзоҳҳои лексияҳо дар илми компютерӣ, ҷилди 12223. Springer – 2020 (манбаи тасвири дарахти ҳамлаи вобастагӣ.) |
| @adam-npm: “Модули зараровари гузоришшуда: getcookies". Блоги npm (боқимондашуда) - 2 майи соли 2018." |
| Алекс Бирсан: «Чӣ гуна ман ба Apple, Microsoft ва даҳҳо ширкатҳои дигар ҳакерӣ кардам"Миёна - 9 феврали соли 2021." |
| Акс Шарма: "Саботажи калон: Бастаи машҳури npm файлҳоро барои эътироз ба ҷанги Украина нест мекунад"BleepingComputer - 17 марти соли 2022 |







