11-bo‘lim
Zaifliklarni boshqarish
Zaifliklarni topish, CVSS bo'yicha baholash, ustuvorlashtirish, yamoqlash jarayoni va bug bounty.
Ushbu bo‘lim mundarijasi
Zaifliklar doimiy paydo bo'ladi. Ularni topish emas, muntazam boshqarish - asosiy vazifa.
Boshqaruv tsikli #
Inventarizatsiya #
Ko'p tashkilotlarda buzilish unutilgan server yoki eski test tizimi orqali sodir bo'ladi.
Inventarizatsiya - birinchi va eng muhim qadam.
| Aktiv | Turi | Muhitm | Egasi | Versiya | Internetga ochiqmi |
|-------|------|--------|-------|---------|-------------------|
| dokon.uz | Veb ilova | Prod | @husanboy | 2.3.0 | Ha |
| api.dokon.uz | API | Prod | @jasur | 2.3.0 | Ha |
| sinov.dokon.uz | Veb ilova | Staging | @jasur | 2.4.0-rc | Ha |
| db-01 | MySQL 8.0 | Prod | @aziz | 8.0.36 | Yo'q |
| redis-01 | Redis 7 | Prod | @aziz | 7.2.4 | Yo'q |
| ci.dokon.uz | GitLab | Ichki | @aziz | 16.8.1 | Ha |
# Tarmoqdagi qurilmalarni aniqlash (faqat o'z tarmog'ingizda!)
nmap -sn 10.0.1.0/24
# Ochiq portlar va xizmat versiyalari
nmap -sV -p- 10.0.1.15
# Bog'liqliklar inventarizatsiyasi - SBOM
composer show --format=json > sbom-php.json
npm list --json > sbom-js.json
# Standart formatda
syft dir:. -o cyclonedx-json > sbom.json
Software Bill of Materials - loyihangizdagi barcha komponentalar ro'yxati.
Yangi zaiflik e'lon qilinganda, SBOM bo'lsa: "bizda shu kutubxona bormi?" degan savolga bir soniyada javob berasiz.
Usiz - har bir loyihani qo'lda tekshirishga to'g'ri keladi.
Skanerlash turlari #
| Tur | Nima tekshiradi | Vosita |
|---|---|---|
| SAST | Manba kodi | Semgrep, Psalm, SonarQube |
| DAST | Ishlab turgan ilova | OWASP ZAP, Nikto |
| SCA | Bog'liqliklar | composer audit, Snyk, Dependabot |
| IAST | Ishlash paytida kod | Contrast, Seeker |
| Konteyner | Docker obrazlari | Trivy, Grype |
| Infratuzilma | Serverlar, tarmoq | OpenVAS, Nessus, Lynis |
| Sirlar | Kodda kalitlar | gitleaks, trufflehog |
# SCA - bog'liqliklar
composer audit
npm audit --audit-level=high
# Konteyner
trivy image dokon:2.3.0
grype dokon:2.3.0
# Sirlar
gitleaks detect --source . --report-format json --report-path sirlar.json
# Statik tahlil
semgrep --config=p/security-audit --json --output=semgrep.json manba/
# CI da avtomatik skanerlash
name: Xavfsizlik skanerlash
on:
push:
schedule:
- cron: '0 3 * * 1' # har dushanba
jobs:
bogliqliklar:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: composer audit
- run: npm audit --audit-level=high
sirlar:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 0 }
- uses: gitleaks/gitleaks-action@v2
kod:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: returntocorp/semgrep-action@v1
with:
config: p/security-audit
konteyner:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: docker build -t dokon:test .
- uses: aquasecurity/trivy-action@master
with:
image-ref: dokon:test
severity: CRITICAL,HIGH
exit-code: 1
CVSS bahosi #
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H → 9.8 (Kritik)
| Ko'rsatkich | Ma'nosi |
|---|---|
| AV (Attack Vector) | N - tarmoq, A - qo'shni, L - lokal, P - jismoniy |
| AC (Complexity) | L - past, H - yuqori |
| PR (Privileges) | N - kerak emas, L - past, H - yuqori |
| UI (User Interaction) | N - kerak emas, R - kerak |
| C/I/A | Maxfiylik/Yaxlitlik/Mavjudlik: N, L, H |
CVSS 9.8 bo'lgan zaiflik:
- Internetga ochiq to'lov tizimida → kritik
- Ichki tarmoqdagi, 2 kishi ishlatadigan tizimda → o'rtacha
CVSS ni boshlang'ich nuqta sifatida oling, keyin o'z kontekstingizga moslang:
Haqiqiy ustuvorlik = CVSS × Ochiqlik × Aktiv qiymati × Ekspluatatsiya mavjudligi
final class ZaiflikBaholovchi
{
public function ustuvorlik(Zaiflik $z, Aktiv $a): Ustuvorlik
{
$ball = $z->cvss;
// Internetga ochiqmi?
$ball *= $a->internetgaOchiq ? 1.5 : 0.7;
// Ekspluatatsiya ommaviy mavjudmi?
$ball *= $z->ekspluatatsiyaMavjud ? 1.4 : 1.0;
// Faol foydalanilmoqdami?
$ball *= $z->faolFoydalanilmoqda ? 2.0 : 1.0;
// Aktiv muhimligi
$ball *= match ($a->muhimlik) {
Muhimlik::Kritik => 1.5,
Muhimlik::Yuqori => 1.2,
Muhimlik::Ortacha => 1.0,
Muhimlik::Past => 0.6,
};
// Chora ko'rilganmi?
$ball *= $z->choraKorilgan ? 0.4 : 1.0;
return Ustuvorlik::balldan(min($ball, 15.0));
}
}
CISA Known Exploited Vulnerabilities katalogi - haqiqatda foydalanilayotgan zaifliklar ro'yxati.
Bu ro'yxatdagi zaiflik CVSS bahosi past bo'lsa ham darhol tuzatilishi kerak.
Aksincha: CVSS 9.8, lekin uch yil davomida hech kim ishlatmagan zaiflik kamroq shoshilinch.
Zaifliklar reyestri #
# Zaifliklar reyestri
| ID | Aktiv | Zaiflik | CVSS | Ustuvorlik | Holat | Mas'ul | Muddat |
|----|-------|---------|------|-----------|-------|--------|--------|
| Z-001 | api.dokon.uz | SQL inyeksiya (qidiruv) | 9.1 | Kritik | Tuzatilmoqda | @jasur | 2026-08-17 |
| Z-002 | dokon.uz | Eskirgan guzzle (CVE-2026-1234) | 7.5 | Yuqori | Rejada | @husanboy | 2026-08-22 |
| Z-003 | db-01 | MySQL 8.0.32 (yangilanish kerak) | 6.5 | O'rta | Rejada | @aziz | 2026-09-15 |
| Z-004 | sinov.dokon.uz | Katalog ro'yxati ochiq | 4.3 | Past | Qabul qilindi | @jasur | — |
| Z-005 | dokon.uz | CSP yo'q | 5.4 | O'rta | Tuzatildi | @husanboy | 2026-08-10 |
enum ZaiflikHolati: string
{
case Yangi = 'yangi';
case Tasdiqlangan = 'tasdiqlangan';
case Rejada = 'rejada';
case Tuzatilmoqda = 'tuzatilmoqda';
case Tuzatildi = 'tuzatildi';
case Tekshirildi = 'tekshirildi';
case QabulQilindi = 'qabul_qilindi'; // xavf qabul qilindi
case SoxtaIjobiy = 'soxta_ijobiy';
}
Soxta ijobiy natijalar #
Odatiy skanerlash hisobotida topilmalarning 30-60% soxta bo'lishi mumkin.
Sabablari:
- Skaner kontekstni bilmaydi
- Chora ko'rilganini ko'rmaydi
- Versiyani noto'g'ri aniqlaydi
Har bir topilmani tekshiring va soxta bo'lsa - sababini yozib qo'ying:
| ID | Topilma | Holat | Izoh |
|----|---------|-------|------|
| Z-012 | XSS /qidiruv | Soxta | Chiqish qochirilgan, skaner ko'rmagan |
| Z-013 | Eski jQuery | Soxta | Faqat admin panelda, ichki tarmoqda |
Aks holda har skanerlashda bir xil topilma qaytadan tekshiriladi.
Yamoqlash jarayoni #
# Zaiflik bizga tegishlimi?
composer why guzzlehttp/guzzle
dokon/app requires guzzlehttp/guzzle (^7.0)
league/flysystem-aws-s3 requires guzzlehttp/guzzle (^7.4)
# Yangilash
composer update guzzlehttp/guzzle --with-dependencies
# Faqat xavfsizlik yangilanishlari
composer update --with-all-dependencies --prefer-stable
Ba'zan yamoq darhol qo'llab bo'lmaydi:
- Yangilanish mos kelmasligi mumkin
- Sinov vaqt talab qiladi
- Yamoq hali chiqmagan (nol kunlik)
Bunday holatda vaqtinchalik chora:
| Chora | Misol |
|---|---|
| WAF qoidasi | Zaif URL ga so'rovlarni bloklash |
| Xizmatni o'chirish | Zaif imkoniyatni vaqtincha yopish |
| Tarmoq cheklovi | Faqat ichki tarmoqdan kirish |
| Monitoring kuchaytirish | Ekspluatatsiya urinishlarini kuzatish |
Vaqtinchalik chora to'liq yechim emas - uni reyestrga yozing va muddat belgilang.
Zaifliklarni oshkor qilish siyosati #
# Xavfsizlik siyosati
Biz xavfsizlik tadqiqotchilarining ishini qadrlaymiz.
## Zaiflik topsangiz
Iltimos, quyidagi manzilga xabar bering:
**[email protected]** (PGP kaliti: /pgp.txt)
Xabarda ko'rsating:
- Zaiflik turi va joylashuvi
- Takrorlash qadamlari
- Potensial ta'sir
- Ekran surati yoki namoyish (agar bo'lsa)
## Bizning majburiyatimiz
- 48 soat ichida javob beramiz
- 7 kun ichida dastlabki baho beramiz
- Tuzatish jarayoni haqida xabardor qilamiz
- Ruxsatingiz bilan hurmat ro'yxatiga kiritamiz
## Doira
Kiradi:
- dokon.uz, api.dokon.uz
- Mobil ilovalar
Kirmaydi:
- sinov.dokon.uz (sinov muhiti)
- Uchinchi tomon xizmatlari
- DDoS hujumlari
- Ijtimoiy muhandislik
- Jismoniy hujumlar
## Qoidalar
- Faqat o'z hisobingiz bilan sinang
- Ma'lumotni o'chirmang va o'zgartirmang
- Xizmatga zarar yetkazmang
- Zaiflikni tuzatilgunga qadar oshkor qilmang
- Boshqa foydalanuvchilar ma'lumotiga kirmang
Ushbu qoidalarga rioya qilgan tadqiqotchilarga qarshi huquqiy
chora ko'rilmaydi.
# /.well-known/security.txt
Contact: mailto:[email protected]
Expires: 2027-01-01T00:00:00.000Z
Encryption: https://dokon.uz/pgp.txt
Preferred-Languages: uz, ru, en
Policy: https://dokon.uz/xavfsizlik-siyosati
Acknowledgments: https://dokon.uz/hurmat
security.txt - oddiy, lekin foydaliTadqiqotchi zaiflik topsa, u kimga xabar berishni bilishi kerak.
Bu fayl bo'lmasa, u:
- Umumiy
info@manzilga yozadi (javob kelmaydi) - Ijtimoiy tarmoqda e'lon qiladi
- Yoki umuman xabar bermaydi
Bir necha qatorlik fayl - katta farq qiladi.
Bug bounty #
| Model | Tavsifi |
|---|---|
| Yopiq dastur | Taklif qilingan tadqiqotchilar |
| Ochiq dastur | Hamma qatnashadi |
| Mukofotsiz (VDP) | Faqat hurmat ro'yxati |
| Platforma orqali | HackerOne, Bugcrowd |
# Mukofot jadvali
| Jiddiylik | Mukofot |
|-----------|---------|
| Kritik (9.0-10.0) | $2000 - $5000 |
| Yuqori (7.0-8.9) | $500 - $2000 |
| O'rta (4.0-6.9) | $150 - $500 |
| Past (0.1-3.9) | $50 - $150 |
Qo'shimcha: yaxshi hisobot uchun bonus
Dastur ochishdan oldin:
- Asosiy zaifliklar tuzatilgan bo'lsin
- Ichki skanerlash o'tkazilgan bo'lsin
- Hisobotlarni ko'rib chiqadigan odam bo'lsin
- Tuzatish jarayoni ishlab turgan bo'lsin
Aks holda yuzlab hisobot keladi va ular javobsiz qoladi - bu obro'ga zarar yetkazadi.
Metrikalar #
| Ko'rsatkich | Maqsad | Joriy |
|-------------|--------|-------|
| Ochiq kritik zaifliklar | 0 | 1 |
| Ochiq yuqori zaifliklar | < 5 | 3 |
| Kritikni tuzatish o'rtacha vaqti | < 2 kun | 3.2 kun |
| Yuqorini tuzatish o'rtacha vaqti | < 7 kun | 5.8 kun |
| Skanerlash qamrovi | 100% | 92% |
| Muddati o'tgan zaifliklar | 0 | 2 |
| Soxta ijobiy foizi | < 30% | 41% |
Har kuni yangi zaifliklar e'lon qilinadi. "Nolga yetish" imkonsiz.
To'g'ri maqsadlar:
- Kritik zaifliklar 24-48 soatda tuzatiladi
- Muddati o'tgan zaifliklar nol
- Tendensiya kamayishga qarab boradi
- Yangi zaifliklar tez aniqlanadi
Avtomatlashtirish #
# Dependabot
version: 2
updates:
- package-ecosystem: "composer"
directory: "/"
schedule:
interval: "daily"
open-pull-requests-limit: 10
labels: ["xavfsizlik", "bogliqliklar"]
reviewers: ["husanboy"]
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
// Zaiflik xabarlarini avtomatik qayta ishlash
final class ZaiflikXabarnomasi
{
public function qabulQiling(array $xabar): void
{
$zaiflik = Zaiflik::xabardan($xabar);
$tegishliAktivlar = $this->inventar->sbomBoyichaQidiring(
$zaiflik->paket,
$zaiflik->tasirlanganVersiyalar,
);
if ($tegishliAktivlar === []) {
$this->jurnal->info('Zaiflik bizga tegishli emas', [
'cve' => $zaiflik->cve,
]);
return;
}
foreach ($tegishliAktivlar as $aktiv) {
$ustuvorlik = $this->baholovchi->ustuvorlik($zaiflik, $aktiv);
$vazifa = $this->vazifalar->yarating([
'sarlavha' => "[{$ustuvorlik->name}] {$zaiflik->cve} - {$aktiv->nomi}",
'tavsif' => $zaiflik->tavsif,
'mas_ul' => $aktiv->egasi,
'muddat' => $ustuvorlik->muddat(),
'yorliqlar' => ['xavfsizlik', $ustuvorlik->value],
]);
if ($ustuvorlik === Ustuvorlik::Kritik) {
$this->ogohlantiruvchi->darhol($vazifa);
}
}
}
}
Boshqaruv ro'yxati #
| Talab | Bajarildi |
|---|---|
| Aktivlar inventarizatsiyasi mavjud va yangi | |
| SBOM yaratiladi | |
| CI da avtomatik skanerlash | |
| Haftalik to'liq skanerlash | |
| Zaifliklar reyestri yuritiladi | |
| Ustuvorlik kontekst bilan belgilanadi | |
| Har bir zaiflikda mas'ul va muddat | |
| Soxta natijalar yozib boriladi | |
| Yamoq sinovdan o'tadi | |
| Tuzatish tekshiriladi | |
| Metrikalar kuzatiladi | |
security.txt mavjud | |
| Oshkor qilish siyosati e'lon qilingan |
- Loyihangiz uchun aktivlar inventarizatsiyasini tuzing.
composer auditvanpm auditishga tushiring.syftbilan SBOM yarating.gitleaksbilan sirlarni skanerlang.- Trivy bilan Docker obrazini tekshiring.
- Topilgan zaifliklarni reyestrga yozing.
- Har biriga CVSS va kontekstli ustuvorlik bering.
- CI ga avtomatik skanerlash qo'shing.
- Dependabot ni yoqing.
security.txtfayli va oshkor qilish siyosatini yozing.
Xulosa #
- Inventarizatsiyasiz himoya qilib bo'lmaydi - unutilgan tizim eng katta xavf.
- SBOM yangi zaiflik e'lon qilinganda tez javob berish imkonini beradi.
- Skanerlash turlari: SAST, DAST, SCA, konteyner, infratuzilma, sirlar.
- CVSS - boshlang'ich nuqta, yakuniy qaror emas.
- Ustuvorlikni kontekst bilan hisoblang: ochiqlik, aktiv qiymati, ekspluatatsiya mavjudligi.
- KEV katalogi - haqiqatda foydalanilayotgan zaifliklar.
- Skanerlar 30-60% soxta natija beradi - ularni yozib boring.
- Yamoq sinovdan o'tmasdan ishlab chiqarishga chiqmasin.
- Vaqtinchalik chora to'liq yechim emas - muddat belgilang.
security.txt- oddiy fayl, katta foyda.- Nol zaiflik real maqsad emas; tendensiya va tuzatish vaqti muhim.
Keyingi bo'limda xavfsizlik testini ko'ramiz.
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.