CI/CD-дегі SBOM: CycloneDX, SPDX пен Dependency-Track енгізу
CI/CD-ге SBOM енгізудің практикалық жоспары: CycloneDX немесе SPDX таңдау, генерация, сақтау, Dependency-Track арқылы анализ және тез тексерулер.

Мәселе: тәуелділіктер бар, ал ашықтық жоқ
Қазіргі кездің көп қосымшасы ондаған да, жүздеген де басқа компоненттерден құралады. Белгілі бір кітапханада жаңа осалдық шыққанда, бірінші сұрақ қарапайым: бізге әсер етеді ме? Практикада жауап күндерге созылатын хат алмасуға айналады, өйткені нақты компоненттер тізімі қолда жоқ.
Айқын тізім болмаған кезде әдетте үш нәрсе жоғалады. Біріншіден, нақты нұсқалар: репозиторийде package.json немесе pom.xml бар, бірақ продқа басқа нәрсе шыққан болуы мүмкін. Екіншіден, транзитивті тәуелділіктер: сіз оларды таңдамағансыз, бірақ олар басқа пакеттер арқылы сборкаға енген. Үшіншіден, шыққан жері: артефактың қайдан алынғаны, сборкада қандай көздер пайдаланылғаны, бинарилердің хэші мен метадеректері.
SBOM осы олқылықты жояды. Бұл жеткізілімнің құрамын тіркейтін бірыңғай құжат: не бар, қай нұсқалар және қалай байланысты. Егер SBOM CI/CD-ге енгізілсе, логтар бойынша болжамдамайсыз және репозиторийлардан қолмен іздемейсіз: жеткізілім фактісін нақты осалдықпен салыстырып, жұмыстар ауқымын тез түсінесіз.
Ең көп пайда алатындар — үйлестіріп әрекет етуге тиіс командалар:
- Әзірлеу: қай жерді жаңарту керектігін және не сынуы мүмкін екенін тез табады.
- Қауіпсіздік: тәуекелді жылдам бағалап, патчтарды приоритеттейді.
- ИТ-эксплуатация: қай қызметтер мен орта нақты әсерленгенін анықтайды.
- Закупкалар: жеткізілетін ПО-ға ашық талаптарға ие болады.
Қарапайым сценарий: компонент X-та критикалық осалдық табылды. SBOM болмаса, онда сіз ондаған жобалар мен контейнерлерді тексересіз, ал кейбір тәуелділіктер жасырын қалады. SBOM-пен компонент пен нұсқа бойынша сүзгіден өткізіп, қандай сборкалар зардап шеккенін бірден көресіз. Бұл сағаттарды үнемдейді және проблемалы сервисті өткізіп жіберу тәуекелін төмендетеді.
SBOM деген не және ондағы не болуы тиіс
SBOM (Software Bill of Materials) — бұл қосымшаның құрамын көрсететін түсінікті тізім: қандай кітапханалар, модульдер мен пакеттер кірген және олардың нұсқалары. Оны қаптамаға жазылған «құрамы» сияқты елестетуге болады: қалай дайындалғаны туралы емес, нақты қандай компоненттерден жасалғаны туралы.
Жақсы SBOM қауіпсіздік үшін басты сұраққа жауап береді: «бұл компонент бізде қай жерде және қандай нұсқада қолданылады?». Бұл әсіресе танымал тәуелділікте жаңа осалдық пайда болғанда маңызды, және репозиторийлар бойынша қолмен іздеуге уақыт жоқ кезде қажет.
SBOM-да не болуы керек
Жиі инциденттерде және тексерістерде көмектесетін минималды өрістер:
- компоненттің атауы (пакет/кітапхана) және оның нұсқасы
- компоненттің идентификаторы (мысалы, package URL) — «тасқа ұқсастықтарды» болдырмау үшін
- лицензия — қолдану тәуекелдері мен шектеулерін түсіну үшін
- контрольдық соммалар (хештер) немесе басқа тұтастық белгілері — файлдың ауыстырылмағанын тексеру үшін
- көз (компонент қайдан алынған: реестр, репозиторий, ішкі артефакт)
Тәуелділіктердің байланыстары да ерекше маңызды: компоненттер тізімі ғана емес, кімнен кімге тәуелді екенін көрсету арқылы неге осал пакет сборкаға енгені көрінеді: ол тікелей пе, әлде басқа кітапхана арқылы ма.
SBOM — жеткізілім артефакті ретінде
SBOM ішкі сборкалар үшін де, мердігерлерден жеткізілген ПО үшін де пайдалы. Бірінші жағдайда сіз әр нұсқаның релизіне SBOM қоса жүресіз. Екінші жағдайда — жеткізіліммен бірге SBOM талап етіп, қабылдау кезінде оны пайдаланасыз.
Практикада SBOM типтік сұрақтарды жауып қояды: осалдық нақты қай затқа әсер етеді, қандай өнімдер мен ортада тәуекел бар, қай тәуелділікті қайда жаңарту керек және аудитшықарға құрам мен лицензияларды бақылағаныңызды дәлелдеу.
CycloneDX пен SPDX: артық теориясыз формат таңдау
CycloneDX пен SPDX ұқсас міндетті шешеді — ПО құрамын сипаттау — бірақ әдетте олар әртүрлі қажеттіліктерге таңдалады. Егер бастысы кітапханалардағы осалдықтарды тез табу және релиздерді тежемеу болса, әдетте CycloneDX-пен бастау оңайырақ. Ал егер юридиялық тазалық, лицензиялар және ұйымдар арасындағы құжат алмасу басты орын алатын болса — SPDX ыңғайлырақ.
CycloneDX AppSec пен DevSecOps үшін ыңғайлы: оны CI/CD-де SBOM қабылдайтын құралдар жиі қолдайды, тәуелділіктер графын құрып, компоненттерді осалдықтармен байланыстырады. Сұрақ — «бұл нұсқа біздің қай жерде қолданылады?» деген жедел жауап болса, CycloneDX ыңғайлы.
SPDX лицензиялар, авторлық және жеткізу дәлелділігі тұрғысынан күшті. Бұл сіз ПО сатып алғанда немесе ірі тапсырыс берушілерге дайын шешімдер жеткізгенде құрамды әрі лицензиялауды ресми түрде растау қажет болғанда пайдалы.
Форматты таңдау кезінде «танымалдыққа» емес, қандай өрістер сізге маңызды екеніне назар аударыңыз:
- компонентті нақты идентификациялау (атау, нұсқа және мүмкіндігінше purl)
- лицензия және жеткізу түрі (арнайы закуптар мен аудитке)
- тұтастық үшін хештер/қолтаңбалар
- «кімнен кімге тәуелді» байланысы (тәуелділік графы)
- сборка метадеректері (қалай және немен құрастырылғаны, қайталау үшін)
Бастапқыда күрделендірмеу үшін бір форматты негізгі мақсатқа сай таңдаңыз. Типтік жол: күнделікті тәуелділіктерді сканерлеуге CycloneDX, ал келісімшарттық құжаттарға SPDX пайдалану.
Екі форматты да қолдау мәні бар, егер сіз бір уақытта лицензиялық талаптарды жабып, сыртқы жеткізушілермен SBOM алмасып, компания ішінде әртүрлі құралдар конвертациясыз жұмыс жасауын қаласаңыз.
Дайындық: инвентаризация, қамту және ережелер
SBOM тек сіз не сипаттайтыныңызды алдын ала шешкенде ғана жақсы жұмыс істейді. Бастапқыда шекараларды анықтаңыз: қандай өнімдер мен артефактілер «есеп бірлігі» болып саналады және қай жерде SBOM міндетті.
Қамтуды анықтаңыз. Әдетте оған қосымшалар (backend, frontend, desktop), контейнер образдары, компания ішінде жарияланатын кітапханалар және инфрақұрылымның негізгі пакеттері (мысалы, агенттер, утилиталар, образдардағы ОС компоненттері) кіреді. Бұл ережені жазып алу маңызды. Әйтпесе бір команда тек кодқа SBOM жасайды, ал басқа — барлық контейнерге.
Технологиялық картаны жасаңыз: қандай тілдер мен пакет менеджерлері нақты қолданыста (npm/yarn/pnpm, Maven/Gradle, NuGet, pip/Poetry, Go modules және т.б.). Бұл генерациялау құралдарына және нәтижесінің сапасына әсер етеді. Эксотикалық бөліктер SBOM-ға енбесе — соқыр аймақтар пайда болады.
Құндылықты келісіңіз: әдетте осалдықтарды табу үшін тек тікелей емес, транзитивті тәуелділіктер де қажет. Басқаша айтқанда, тек тікелей тәуелділіктерді көрсететін SBOM жеткіліксіз.
Идентификация ережелерін алдын ала енгізіңіз, дубльдерді болдырмау үшін: компоненттің атауын, нұсқасын, жеткізушіні және типті бір қайталанбас түрде жазу. Тіпті регистрдегі кіші әріп/үлкен әріп айырмашылығы немесе «react 18.2.0» және «[email protected]» сияқты вариациялар кейін іздеу мен есептерді бұзады.
Иеленушілерді тағайындаңыз. Әр өнім үшін SBOM жауаптысы болуы керек (әдетте тимлид немесе релиз-инженер), ал қауіпсіздік — саясатты бақылау ролін атқарады. Мысалы: команда релиз шығарады, CI SBOM генерациялайды, ал иеленуші оның қажетті артефактқа және келісілген ережелерге сай екенін растайды.
Әртүрлі типтегі сборкалар үшін SBOM қалай генерацияланады
Ең сенімді тәсіл — SBOM-ды жинақтау басқаруына қатысатын файлдардан тікелей генерациялау: манифесттер мен lock-файлдардан. Lock-файл аса маңызды: ол нақты нұсқаларды бекітеді; онсыз SBOM жиі «шамалап» шығады және тергеулерге жарамайды.
Кітапханалар мен қосымшалар (Java, .NET, Node.js, Python және т.б.) үшін әдетте манифест, lock-файл және сборщик деректері жеткілікті. Осылайша сіз тікелей және транзитивті тәуелділіктерді және олардың нақты нұсқаларын аласыз.
Контейнерлерде күрделірек: маңыздысы — тек сіздің код емес, базалық образ пен ішіндегі ОС пакеттерін де ескеру. Жиі қателік — тек кодқа арналған SBOM шығарып, OpenSSL, glibc немесе жүйелік утилиталарды ұмыту. Практикалық тәсіл — екі қабат: қосымшаның SBOM және контейнердің SBOM жасап, оларды релиз артефакті ретінде қатар сақтау.
SBOM-ды ыңғайлы ету үшін барлық жобаларға бір шығу форматын келісіңіз (мысалы, CycloneDX немесе SPDX) және артефактілердің қарапайым құрылымын бекітіңіз: жоба атауы, нұсқа, билд нөмірі, commit хеші, орта.
SBOM сапасын автоматты түрде тексеріңіз. Минималды тексерістер:
- бос нұсқалар және "LATEST" болмауы
- пакет атаулары экожүйеге сай болуы (group/artifact, npm name және т.б.)
- транзитивті тәуелділіктердің болуы
- контейнерлер үшін ОС пакеттері мен базалық образ ескерілгені
SBOM-ды әрбір билдте қайта құрастыру керек, ол development-тен ары жүрсе және релиз/hotfix кезінде міндетті. Әйтпесе сіз инцидентті «дерлік сол» сборка бойынша талдап, продта жүрген нақты сборкадан айырмашылық болуы мүмкін.
Қадам бойынша: SBOM-ды CI/CD-ге енгізу
SBOM-ды CI/CD-ге бөлек қолмен жасалатын құжат ретінде емес, әдеттгі сборка құрамдасы ретінде енгізу жақсы. Сол кезде SBOM нақты артефакқа сәйкес келеді және инцидентті тергеу кезінде тез қол жетеді.
Пайплайнның минималды схемасы
Қарапайым, бірақ қайталанатын сценарийден бастаңыз:
- Сборка кезеңінде тәуелділіктерді көретін құралмен SBOM генерациясын қосыңыз (пакет менеджері, сборщик, контейнер билд).
- SBOM-ды сборка артефакті ретінде сақтаңыз — кез келген нұсқа үшін жүктеп алуға мүмкіндік болсын.
- SBOM-ды релиз пакетінен бөлек емес, бинарь, образ немесе орнатушы қасына тіркеңіз.
- SBOM-ды ішкі артефакт хранилищесіне немесе реестрге жариялап, релиздермен бірдей мерзімде сақтаңыз.
- SBOM сапа ережелері үшін автоматты тексерістер қосыңыз.
Ережелер тексерістері жылдам әсер көрсетеді. Мысалы, бекітілмеген нұсқалары бар тәуелділіктерге, рұқсат етілмеген көздерден келген пакетке, бос метадеректерге (атау, нұсқа, жеткізуші) және күтпеген лицензияларға тыйым салыңыз, егер бұл ұйымыңыз үшін маңызды болса.
Алдымен не блоктайтынын, не ескерту жасайтынын шешіңіз. Әдетте шын мәнінде SBOM-ды сенімсіз ететін жағдайлар — сборка тоқтайтын себеп: тәуелділіктер тізімін құрастыру мүмкін болмауы, белгісіз нұсқалары бар компоненттер, SBOM артефакпен сәйкес келмеуі. Ескерту ретінде релизді дереу бұғаттамайтын, тек нақтылау талап ететін заттарды қалдырыңыз: толық емес өрістер, жаңа лицензиялар үшін қолмен тексеру және т.б.
Мысал: команда сервис жинап жатқанда бір кітапхана latest ретінде тартылады. SBOM генераторы оны белгісіз нұсқа ретінде тіркейді, сапа ережесі іске қосылып, релиз толығымен тоқтайды. Нәтижесінде сіз кейін осалдықты нақты нұсқамен сәйкестендіре алмайтын релизді шығармайсыз.
SBOM сақтау және тұтастық: оған сену үшін
SBOM тек оның қай релизке қатысты екені түсінікті және оны жасырып алмау мүмкін болса ғана пайдалы. Сондықтан SBOM-ды бинарьлар мен контейнер образдары сияқты тәртіппен сақтаңыз.
Практикалық тәсіл — SBOM-ды релиз артефактісінің қасында артефакт репозиторийінде ұстау. Қосымша көшірмесін код репозиторийінде (релиз метадеректері каталогында) немесе бөлек ішкі SBOM каталогында сақтауға болады, егер қолжетімділікті басқару осылай оңай болса.
SBOM-ды нақты сборкамен байланыстыру түсінікті болуы тиіс. SBOM метадеректерінде және файл атауында сборка идентификаторларын көрсетіңіз:
- commit SHA және/немесе tag
- нұсқа (SemVer) және CI build-id
- компонент атауы және орта (prod, stage)
- сборка күні және пайплайн идентификаторы
Тұтастықты хештер мен қолтаңбалар қамтамасыз етеді. Минимум — SBOM үшін SHA-256 сақтау және оны жариялау/жүктеу кезінде тексеру. Жақсырақ — SBOM-ды қолтаңба арқылы қорғау немесе релиз артефактілер жинағын қолтаңбамен жабу және жариялау құқығын тек CI сервис аккаунтына қалдыру: қолмен жүктеулерге тыйым салыңыз.
Қол жетімділікті бөлу: оқуға — әзірлеу, ИБ және эксплуатация; өзгертуге немесе жариялауға — тек автоматтандыру. Релизден кейінгі кез келген өзгеріс журналда жазылсын: кім, қашан және не себепті.
Сақтау мерзімін жеткілікті ұзақ таңдаңыз. Осалдықтар айлар өткеннен кейін де пайда болуы мүмкін, сондықтан ескі нұсқаларға арналған SBOM релиз артефактілер сияқты сақталуы тиіс. Мысалы, егер ұйым жеткізілімдерді жылдар бойы қолдаса, SBOM-ды қолдау мерзіміне тең немесе одан да ұзағырақ сақтау ақылға қонымды.
Dependency-Track: SBOM талдауы және уязвимдіктерді қарау
Dependency-Track — SBOM-ды алып, тәуекелдердің түсінікті картасына айналдыратын жүйе: қандай компоненттер қолданылатынын, қай жерде және оларға қандай уязвимдіктер байланғанын көрсетеді. Ол SAST, контейнер және IaC сканерлерінен түсетін ақпаратты толықтырады: сканер код пен образдардағы проблемаларды табады, ал Dependency-Track тәуелділіктерге және олардың уақыт бойынша өзгерістеріне фокус жасайды. Бұл әсіресе CI/CD-де әр релиз үшін SBOM генерацияланғанда қолайлы.
CycloneDX және SPDX импорттау: жобалар мен нұсқалар
Ең жақсы жұмыс істейтін тәжірибе — әр қосымша немесе сервис үшін бөлек жоба ашып, SBOM-ды нұсқа (релиз, билд, тег) ретінде жүктеу. Солай қай релиз кезінде осалдық пайда болғанын немесе жойылғанын көресіз.
Егер бір өнімнің бірнеше сборкасы болса (мысалы, on-prem және cloud, әртүрлі платформалар), оларды бөлек жобаларға немесе нұсқа тармақтарына бөліңіз. Әйтпесе triage қай сборка зардап шеккені туралы таласты шақырады.
Триаж, оповещения және шешімдерді тіркеу
Жаңа CVE түскенде триажды қарапайым тәртіппен жүргізу ыңғайлы:
- Біз зардап шеккенбіз бе: SBOM-да компонент пен осал нұсқа бар ма.
- Қай жерде қолданылады: қай қызмет және қай релиз.
- Эксплуатация жолы бар ма: уязвимді модуль немесе функция қолданылуда ма.
- Приоритет: критичность, сыртқы қолжетімділік, паблик эксплойттің болуы.
- Жоспар: кім жасайды және қандай мерзімге.
Оповещениелерді шудан қорықпайтындай етіп баптаңыз: критикалық оқиғалар бірден жұмыс арнасына, орташа деңгейдегі — күнделікті дайджестке, ал бір компонентке қатысты қайталанатын оқиғаларды топтастырыңыз.
Шешімді жұмыс барысында тіркеңіз: тәуелділікті жаңарту, компонентті ауыстыру (егер жаңарту жоқ болса) немесе тәуекелді себеппен және қайта қарау мерзімімен қабылдау. Егер кітапханада осалдық бар, бірақ модуль қолданылмайтын болса, төмен приоритет қоюға болады, бірақ аудит үшін жазба қалдыру керек.
SBOM закуптарда: жеткізушілерге талаптар және қабылдау
Егер SBOM тек инциденттен кейін пайда болса, ол көмектеспейді. Закуптарда оны нұсқаулар мен қолдау шарттары сияқты нақты талап ету керек. Солай қауіпсіздік пен эксплуатация командаларының не жеткізілгені, оның құрамы және қалай жаңартылатыны туралы тірегі болады.
Тендер және келісімшарт қосымшаларында бірнеше тармақты бекіту ыңғайлы:
- SBOM жеткізілімге және әр жаңартуға міндетті (патч, минор және мажор нұсқалар).
- Формат: таңдау — CycloneDX немесе SPDX және схема нұсқасы көрсетіледі.
- Минималды өрістер: компонент аты, нұсқасы, жеткізуші/көз, түрі (кітапхана, образ, пакет), лицензия, хештер, тәуелділіктер.
- Коммерциялық модульдерге ережелер: не жасыруға болады және қалай белгілеу керек (мысалы, ашық атауы жоқ компонент, бірақ бірегей идентификаторпен).
- Мерзімдер: SBOM жеткізіліммен бірге беріледі және қолдау мерзімі бойы сақталады.
Қабылдауда файл алу жеткіліксіз — оның жеткізілімге сай келетіні тексерілуі керек. Әдетте жеткілікті үш тексеріс: SBOM бар ма, қажетті нұсқаға қатысты ма және оған сенуге болады ма.
Қысқа бақылау қадамдары:
- Өнім нұсқасы мен сборкасын SBOM метадеректерімен сәйкестендіріңіз.
- Тұтастықты тексеріңіз (қолтаңба немесе хеш) және тасымалдаудан кейін өзгермегеніне көз жеткізіңіз.
- Кілт тәуелділіктердің бар екеніне көз жеткізіңіз, тек жоғарғы деңгей көрсетілмегеніне назар аударыңыз.
- Жабық компоненттерді жеке жазбалар ретінде белгілеңіз, олар тәуекелде есепке алынсын.
- SBOM-ды қабылдау артефакті ретінде тіркеңіз.
Мысал: сіз ішкі порталға жаңарту сатып аласыз. Жеткізуші релиз бен SBOM жібереді. SBOM бойынша белгілі бір осалдық бар кітапхана қосылғаны көрінеді. Сіз патч шыққанша енгізуді тоқтатасыз, орнатқаннан кейін құрамды қолмен анықтаудың орнына.
Мысал: SBOM уязвимдік шыққанда реакцияны жылдамдатады
Таңертең танымал JSON-парсерде критикалық осалдық шықты делік. Жаңалықтарда көбінесе «X.Y.Z нұсқасына жаңартыңыз» деп айтылады. Бірақ команда үшін басты сұрақ басқа: өнімдеріміз зардап шегеді ме және қай жерде.
Егер CI/CD-де SBOM орнатылған болса, репозиторийларда қолмен іздеуді бастамайсыз. Әр сборканың соңғы SBOM-ын ашып, компонентті атауы мен нұсқасы бойынша минут ішінде табасыз. Dependency-Track сияқты құралдарда бұл одан да жылдам: қандай қосымшалар мен сборкаларда кітапхана кездесетінін көрсетеді және осал нұсқаларды бөлектейді.
Келесі қадам — паникаға берілмей, приоритеттерді дұрыс қою. Бір кітапхана әртүрлі жағдайларда болуы мүмкін:
- продта нақты орындалады (тікелей импорт, код шақырылады)
- транзитивті тәуелділік, бірақ іс жүзінде қолданылмайды
- dev/test құралдарында ғана және прод-артефактқа түспейді
- образда немесе дистрибутивте бар, бірақ жүктелмейді
Алғашқы тәулікте қарапайым жоспар көмектеседі:
- қай сборкалар уязвим екендігін SBOM пен нұсқалар арқылы растау
- экспозицияны анықтау: интернет қолжетімділігі, әсерленген қызметтер, деректердің критикалықтығы
- патч шығару немесе тәуелділікті жаңарту және артефактілерді қайта жинау
- патч жоқ болса — уақытша шаралар (конфиг, WAF ережесі, функцияны ажырату)
- жүйе иеленушілеріне хабарлап, басшылыққа күйін тіркеу
Инциденттен кейін де SBOM көмектеседі. Қандай SBOM-дар тексеруде қолданылғанын сақтаңыз және генерация ережелерін жаңартыңыз: SBOM нақты сборкаға байлансын, қолтаңба немесе хешпен сақталсын және транзитивті тәуелділіктер әрқашан кірсін. Солай келесі шұғыл CVE апта емес, бірнеше сағат ішінде анықталып, өңделеді.
SBOM енгізуде жиі кездесетін қателіктер және тұзақтар
Ең жиі кездесетін мәселе: SBOM-ды генерациялауды бастап, бірақ оны басқарылатын артефакті ретінде пайдаланбау. Нәтижеде файл бір жерде жатады, бірақ инцидент кезінде қай релизке қатысты екені белгісіз және оған сенуге болмайды.
Енгізуді жиі бұзатындар
- SBOM релизге және сборкаға байланбаған. Егер релиз идентификаторы (тег, билд нөмірі, хеш) жоқ болса, инцидент кезінде дұрыс SBOM табу үшін уақыт жоғалтасыз.
- Тәуелділіктер толық емес. Көбіне есепке тек тікелей кітапханалар енеді, ал транзитивтілер сыртында қалады. Жаңа осалдық пайда болғанда сізге «бізге әсер етпейді» дейді, бірақ кейін сканер тереңде тауып береді.
- Компонент атаулары мен координаттарында әркелкілік. Бір команда "log4j" деп жазады, екіншісі "org.apache.logging.log4j:log4j-core" деп. Іздеу, дедупликация және CVE сәйкестендіру хаосқа айналады.
- Жеткізушінің берген SBOM-ына слепо сену. Құжат келсе де, қабылдау тексерістері жоқ болса, ескірген файл немесе басқа FLAGS-пен жиналған SBOM алуыңыз мүмкін.
- Бірден тым қатаң ережелер. Барлық ескертулер бойынша релизті дереу бұғаттасаңыз, командалар процесті айналып өтуге немесе генерацияны өшіруге тырысады.
Жақсы старт тактикасы: алдымен қамтуды және сәйкестілікті қамтамасыз етіп, содан кейін шектеулерді кезең-кезеңімен енгізіңіз. Мысалы, бірінші айда әр релиз үшін SBOM жасалып, толықтық тексерілсін; бұғаттау тек критикалық осалдықтар үшін және тек жаңа өзгерістерде болсын. Бұл қарсылықты азайтады және инциденттерді талдауда жылдам нәтиже береді.
Өндіріске жіберер алдында жылдам чеклист
Релиз алдында SBOM генерациясынан басқа да ол сенімге лайық екенін тексеріңіз. Бұл чеклист типтік кемшіліктерді табуға көмектеседі:
- Әр релизке SBOM бар және оны инциденттерді талдайтындар: қауіпсіздік, DevOps, өнім иелері, қолдау алмайтындай қолжетімді.
- SBOM құрамында нақты нұсқалар мен бірегей идентификаторлар бар (мысалы, Package URL немесе CPE қажет болғанда), сонда қай кітапхана нақты сборкаға түскенін болжаудың қажеті жоқ.
- Транзитивті тәуелділіктер есепке алынған, ал контейнерлерде образ компоненттері (ОС пакеттері, базалық образ) қосылған. Әйтпесе бір бөлігі тәуекелден тыс қалады.
- SBOM нақты сборкаға байланған: build-id, commit немесе тег және өзгертілмейді. Релизден кейін құжат қайта жазылмайды — келесі нұсқа үшін жаңа құжат шығарылады.
- Реакция процесі анық: кім алертке қарайды, кім шешім қабылдайды (жаңарту, компенсирлеу, тәуекел қабылдау), критикалық осалдықтар үшін қандай мерзімдер және нәтиже қалай тіркеледі.
Закуптар мен мердігерлер туралы бөлек: SBOM талаптары алдын ала жазылып, қабылдау форматы, толықтығы және жеткізілген артефактқа сәйкестігі тексерілуі керек. Солай жаңа осалдық шыққанда ПО құрамын ұнтақтап жинаудың орнына зардап шеккен релиздерді және әрекет жоспарын жылдам анықтайсыз.
Келесі қадамдар: пилот, стандарттар және енгізуге қолдау
Кішігірім, бірақ толық пилоттан бастаңыз. 1–2 нақты өнімді таңдаңыз, мұнда тәуелділіктердің ашықтығы нақты пайда әкеледі (мысалы, қоғамдық сервис пен ішкі API). Толық тізбек жүргізіп шығу: SBOM генерациясы, хранилищеге жүктеу, уязвимдіктер іздеу, триаж, түзету, қайта тексеру.
Жақсы пилот келесідей көрінеді:
- процестің иесін анықтау (әзірлеу + ИБ) және алерттерді талдау бойынша SLA белгілеу
- SBOM генерациясының нүктелерін бекіту (сборка, релиз, контейнер)
- ереже: релиз SBOM-сыз өтпейді
- тестілік кейс: танымал кітапханада жаңа CVE және реакция уақыты
- есеп дайындау: не бұзылды, не кедергі болды, не автоматтандыру қажет
Содан кейін ең маңыздысы — бірыңғай ережелер бекіту, әйтпесе SBOM файлдар жинағына айналып, оларға ешкім сенбейді. Компания деңгейінде стандартты бекітіп, оны қабылдау бөлігіне кіргізіңіз.
Стандартта әдетте келесі тармақтар жеткілікті:
- формат пен профиль (CycloneDX немесе SPDX), міндетті өрістер мен идентификаторлар
- SBOM қай жерде сақталады, кімнің қолжетімдігі бар, қанша уақыт сақталуы керек
- тұтастықты қалай растау (қолтаңба, контрольдық соммалар, өзгермейтін артефактілер)
- қандай тәуекелдер қабылданады және қашан релиз бұғатталады
Параллельде закуптар мен келісімшарттарға шаблон талаптарын дайындаңыз: SBOM ұсыну мерзімі, өзгерістер болғанда жаңарту, транзитивті тәуелділіктерге ережелер және жаңа уязвимдіктерге әрекет тәртібі.
Оқыту өткізуді ұмытпаңыз: әзірлеушілер тәуелділіктерді қалай түзету керектігін, закупшылар SBOM-ды қалай қабылдау керектігін, эксплуатация — инциденттерде SBOM-ды қалай қолдануды білуі керек.
Егер ішкі ресурстар жеткіліксіз болса, пайплайндарды, артефакт хранилищелерін, қауіпсіздік саясаттарын және инфрақұрылымды баптау үшін жүйелік интеграторды тартқан жөн. Мысалы, GSE.kz (gse.kz) — Қазақстандағы өндіруші және жүйелік интегратор ретінде кешенді ИТ-жобаларды жүргізіп, процесстерді, инфрақұрылымды және қолдауды, соның ішінде 24/7 қызметті құруға көмектесе алады.
FAQ
SBOM деген не және ол не үшін керек?
SBOM — бұл жеткізіліп отырған өнімге нақты түскен компоненттердің тізімі: кітапханалар, модульдер, пакеттер және олардың нұсқалары. Ол қажет, өйткені «компонент X-тегі осалдық бізді қамтиды ма?» деген сұраққа репозиторийлер мен логтарды қолмен ақтаудың орнына тез жауап береді.
Не таңдау керек: CycloneDX немесе SPDX?
Бір форматтан бастайтын және негізгі мақсатын анықтайтын болады. Күнделікті уязвимдіктермен және тәуелділік графымен жұмыс істеуге CycloneDX-пен бастау оңайырақ болады, ал келісімшарттар, лицензиялар мен ұйымдар арасындағы ресми айырбастаулар үшін SPDX жиі таңдалады.
SBOM-та міндетті қандай өрістер болуы керек?
Минимум пайдалы SBOM құрамына компоненттің атауы, нақты нұсқасы, бірегей идентификатор (мысалы, purl), лицензия, контрольдық соммалар және алынған көз кіруі тиіс. Қосымша тәуелділіктер қатынасы болса, компоненттің қалай кіргені — тікелей пе әлде транзитивті ме — түсінікті болады.
Неге SBOM-ды тек package.json немесе pom.xml бойынша құруға болмайды?
Өйткені манифест «сіз не орнатқыңыз келеді» дегенді көрсетеді, ал нақты орнатылған және продқа кеткен нәрсені көрсетпейді. Lock-файлдар нақты нұсқаларды бекітеді, транзитивтерді қамтиды және SBOM-ды инциденттерді зерттеуге жарамды етеді.
SBOM-ды CI/CD-ге қалай дұрыс енгізуге болады, ол шынайы релизге сай болу үшін?
SBOM-ды сборка бөлігі ретінде генерациялаңыз, содан кейін оны белгілі бір билдтің артефакті ретінде сақтаңыз және бинарь немесе образ қасына тіркеңіз. Маңыздысы — әр релиз үшін SBOM қайтагенерацияланып, build-id, commit/tag-пен бірмәнді байланыста болуы керек.
Неге сканер уязвимдікті табады, ал SBOM-та оны «көрмейді»?
Көбінесе себебі — SBOM-ға транзитивті тәуелділіктер, lock-файлдан алынатын тәуелділіктер немесе контейнер ішіндегі ОС пакеттері кірмеген. Тағы бір жиі жағдай — компоненттерді атау ережелерінің әртүрлілігі, сондықтан CVE сәйкес келмейді және пакеттер «әртүрлі» болып көрінеді.
Контейнерлерге SBOM жасау керек пе және оған не қосылады?
Контейнерлер үшін екі қабатты есепке алу керек: сіздің қосымшаңыз және образдағы мазмұн (базалық образ пен ОС пакеттері). Практикалық тәсіл — қосымшаға арналған SBOM және контейнерге арналған SBOM екі бөлек жасап, бір релиз артефакті ретінде қатар сақтау — сонда тәуекел қай жерде екенін нақты түрде түсінесіз: кодта, тәуелділікте немесе жүйелік пакеттерде.
SBOM-ды қалай сақтау керек, оған сенім арту үшін?
SBOM-ды релиз артефактілері сақталатын жерде сақтаңыз және қолмен ауыстыруға тыйым салыңыз: жариялауды CI жасауы тиіс. Міндетті қорғау — SBOM үшін SHA-256 сақтау және жариялау/жүктеу кезінде тексеру; одан да жақсы — SBOM-ды немесе релиз пакетін цифрлық түрде қол қою және қай релизке қатысты екенін белгілеу.
Dependency-Track-ты SBOM-пен практикада қалай қолдануға болады?
Әр сервиске немесе өнімге жоба ашып, SBOM-ды релиз нұсқасы (билд, тег) ретінде жүктеу жақсы тәжірибе: қай релизде осалдық пайда болғанын немесе жойылғанын дәл көруге болады. Оповещениелерді ықшам етіп баптаңыз: критикалық оқиғалар дереу, орташа — күнделікті дайджест, бір компонент бойынша қайталанатындарды біріктіріңіз; және әр шешімді (жаңарту, ауыстыру, тәуекел қабылдау) тіркеңіз.
Поставщиктен SBOM-ды қалай талап ету және оны қабылдауда қалай тексеру керек?
Поставкалар үшін SBOM-ды міндетті құжат ретінде сұраңыз: әр жеткізілім және әр жаңарту үшін (патч, минор, мажор). Формат: CycloneDX немесе SPDX және схема нұсқасы. Минимум өрістер: компонент атауы, нұсқасы, жеткізуші/көз, түрі (кітапхана, образ, пакет), лицензия, хештер, тәуелділіктер. Қабылдауда тек файл алумен шектелмей, SBOM-ның жеткізілімге сай келетінін тексеріңіз: нұсқа мен билд сәйкес келсін, өзгеріссіз болсын және тек жоғарғы деңгей емес толық тәуелділіктер көрсетілген болсын.