সরাসরি পর্বে যান
পর্ব ৩২ · ৮০-এর মধ্যে · মডিউল ৫

Vulnerability management — CVE, CVSS, EPSS, KEV আর patch-এর অগ্রাধিকার

Vulnerability Management — CVE, CVSS, EPSS, KEV & Patch Prioritisation

Taught in Bangla, this lesson covers the vulnerability management cycle, CVE, CWE, CNA and NVD, calculating CVSS v3.1 base scores by hand with an in-page calculator, CVSS v4.0 changes, prioritising with EPSS, KEV, SSVC and asset context, authenticated scans and false positives, patch rings, emergency change and rollback, compensating controls, SLA, exceptions, MTTR, EOL software, and a zero-day week drawn from Log4Shell.

এই পর্বে যা শিখবেন

  • Vulnerability management-এর ছয় ধাপ, আর CVE, CWE, CNA ও NVD-র ভূমিকা
  • CVSS v3.1 base score হাতে হিসাব করা, আর CVSS v4.0-তে কী বদলেছে
  • EPSS, KEV, SSVC আর asset-এর তথ্য মিলিয়ে সারানোর ক্রম ঠিক করা
  • নিজের system-এ authenticated scan-এর ধারণা আর false positive চেনা
  • Patch-এর পরীক্ষা, ring, emergency change, rollback আর compensating control
  • SLA, exception, MTTR, coverage, EOL software আর zero-day সপ্তাহের কাজ

১ · ত্রুটি জানা আর ত্রুটি সারানোর মাঝের ফাঁক

পুরান ঢাকার একটি পুরোনো ভবন ভাবুন। ফায়ার সার্ভিস ঘোষণা করল, এক কোম্পানির এক ধরনের অগ্নিনির্বাপক যন্ত্রে ত্রুটি আছে। ভবনের ম্যানেজার কী করবেন? তাঁকে জানতে হবে ভবনে কতগুলো যন্ত্র আছে, কোন তলায় আছে, কোনগুলো সেই মডেলের। রান্নাঘরের পাশেরটি আগে বদলাতে হবে, ছাদের গুদামেরটি পরে। বদলানোর পর কেউ গিয়ে দেখবেন নতুনটি সত্যিই বসেছে কি না। আর মালিককে জানাতে হবে কতগুলো বাকি।

এই পুরো কাজটিই vulnerability management. Vulnerability মানে দুর্বলতা (পর্ব ২). আর patch management এর একটি অংশ মাত্র, যেখানে patch বসানো হয়। Scan চালিয়ে একটি লম্বা রিপোর্ট বানানো vulnerability management নয়। আসল কাজ শুরু হয় রিপোর্টের পরে।

Vulnerability management-এর ছয় ধাপের চক্র

Discover, assess, prioritise, remediate, verify, report

Vulnerability management-এর চক্র ১ · Asset খোঁজা কী আছে, কার, কোথায় খোলা ২ · মূল্যায়ন scan, advisory, false positive বাদ ৩ · অগ্রাধিকার CVSS, EPSS, KEV, asset-এর গুরুত্ব ৪ · সারানো patch, control, বা লিখিত ছাড় ৫ · যাচাই আবার scan, সত্যিই সেরেছে? ৬ · রিপোর্ট metric, দায়িত্ব, কী শিখলাম
ছবি ৩২.১ — চক্রটি থামে না। প্রতিদিন নতুন দুর্বলতা প্রকাশ হয়, নতুন যন্ত্র আসে, পুরোনো fix ভেঙে যায়।

প্রথম ধাপটিই ভিত্তি। Asset inventory না থাকলে বাকি পাঁচটি ধাপ অন্ধকারে চলে। তালিকায় থাকা দরকার যন্ত্র, software, version, মালিক, আর সেটি internet-এ খোলা কি না। Threat modeling-এ যা শিখেছেন (পর্ব ৪), সেটিও এখানে কাজে লাগে।

Equifax, ২০১৭: মার্কিন ঋণ-তথ্য প্রতিষ্ঠান Equifax-এর ঘটনায় প্রকাশিত হিসাবে প্রায় ১৪.৭ কোটি মানুষের তথ্য ফাঁস হয়। মার্কিন GAO আর কংগ্রেসের রিপোর্ট অনুসারে Apache Struts-এর ত্রুটিটির (CVE-2017-5638) fix মার্চ মাসেই প্রকাশিত হয়েছিল। জানানোর বার্তা ঠিক দায়িত্বশীল ব্যক্তির কাছে পৌঁছায়নি, scan-এও দুর্বল server ধরা পড়েনি, আর মেয়াদোত্তীর্ণ certificate-এর কারণে traffic পরিদর্শন যন্ত্র দীর্ঘদিন কাজ করছিল না। শিক্ষা হলো, fix ছিল। ছিল না মালিকানা, পূর্ণ inventory আর যাচাই।

২ · CVE, CWE, CNA আর NVD — ত্রুটির নাম-ঠিকানা

একই ত্রুটিকে একেক প্রতিষ্ঠান একেক নামে ডাকলে কেউ কারও কথা মেলাতে পারবে না। তাই ১৯৯৯ সালে MITRE শুরু করে CVE তালিকা। একটি ত্রুটির একটি নম্বর, যেমন CVE-2021-44228. মাঝের অংশ বছর, শেষের অংশ ক্রমিক নম্বর। হাসপাতালের রোগীর রেজিস্ট্রেশন নম্বরের মতো, এটি শুধু পরিচয় দেয়, রোগ কতটা গুরুতর তা বলে না।

নম্বর দেন CNA (CVE Numbering Authority). বড় software নির্মাতা, নিরাপত্তা প্রতিষ্ঠান আর কিছু জাতীয় CERT এমন CNA. CVE-র জন্ম হয় সাধারণত সমন্বিত প্রকাশের (পর্ব ৬) পথ ধরে, আর তার সাথে আসে security advisory.

নামপ্রশ্নউদাহরণকে চালায়
CVEকোন নির্দিষ্ট ত্রুটি?CVE-2014-0160 (Heartbleed)CVE Program
CWEকোন ধরনের ভুল?CWE-89 (SQL injection)MITRE
CVSSপ্রযুক্তিগতভাবে কতটা গুরুতর?7.5 HighFIRST
NVDবাড়তি তথ্য কোথায়?স্কোর, CWE, আক্রান্ত পণ্যNIST

CWE হলো রোগের নাম, যেমন ডেঙ্গু। CVE হলো নির্দিষ্ট রোগীর ফাইল নম্বর। হাজারটি CVE একই CWE-র হতে পারে। Developer-এর জন্য CWE বেশি কাজের, কারণ তা ভুলের অভ্যাস ধরিয়ে দেয়। Administrator-এর জন্য CVE বেশি কাজের, কারণ তা বলে কোন পণ্যের কোন version বদলাতে হবে।

সব দুর্বলতার CVE থাকে না। আপনার নিজের লেখা app-এর ত্রুটি, ভুল configuration বা দুর্বল password-এর কোনো CVE নেই। তাই CVE-র তালিকা শেষ মানে নিরাপদ, এমন ভাবা ভুল।

NVD-র backlog: একটি উৎসের ওপর ভর না করা

দীর্ঘদিন প্রায় সবাই ধরে নিয়েছিলেন, NVD প্রতিটি CVE-তে স্কোর আর CPE (কোন পণ্য আক্রান্ত, তার মানসম্মত নাম) যোগ করবে। ২০২৪ সাল থেকে এই কাজ বড় আকারে পিছিয়ে পড়ে। NIST-এর ২০২৬ সালের ১৫ এপ্রিলের ঘোষণা অনুসারে সব CVE-তে তথ্য যোগ করার লক্ষ্য ছেড়ে ঝুঁকিভিত্তিক পথ নেওয়া হয়: KEV-এ থাকা CVE, মার্কিন সরকারে ব্যবহৃত software আর “critical software” আগে। বাকিগুলো তালিকায় থাকে, কিন্তু বাড়তি তথ্য না পেতেও পারে। CVE Program-এর অর্থায়ন নিয়েও ২০২৫ সালের এপ্রিলে শেষ মুহূর্তের অনিশ্চয়তা দেখা দিয়েছিল। এই দুটি বিষয় বদলাতে পারে, তাই বর্তমান অবস্থা nvd.nist.gov আর cve.org-এ দেখে নিন।

ব্যবহারিক শিক্ষা হলো, স্কোর না পেলে বসে থাকবেন না। সরাসরি vendor-এর advisory পড়ুন, আর CNA-র দেওয়া স্কোর দেখুন।

৩ · CVSS v3.1 — স্কোর হিসাব করুন হাতে

FIRST-এর CVSS একটি দুর্বলতার প্রযুক্তিগত তীব্রতাকে ০ থেকে ১০ স্কোরে আনে। ভূমিকম্পের রিখটার মাত্রার মতো, এটি বলে ঘটনাটি কত শক্তিশালী, আপনার বাড়ির কী হবে তা নয়। স্কোরের পাশে থাকে vector, যেমন:

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N

Vector-ই আসল তথ্য। স্কোর শুধু তার সারসংক্ষেপ। প্রতিটি অক্ষরজোড়া একটি প্রশ্নের উত্তর:

Metricপ্রশ্নমান ও ওজন
AV · Attack Vectorকত দূর থেকে সম্ভব?N 0.85, A 0.62, L 0.55, P 0.2
AC · Attack Complexityবিশেষ শর্ত লাগে?L 0.77, H 0.44
PR · Privileges Requiredআগে থেকে কতটা অধিকার লাগে?N 0.85; L 0.62 (S:C হলে 0.68); H 0.27 (S:C হলে 0.5)
UI · User Interactionকোনো ব্যবহারকারীর কাজ লাগে?N 0.85, R 0.62
S · Scopeপ্রভাব নিরাপত্তা-সীমা পেরোয়?U (Unchanged), C (Changed)
C, I, AConfidentiality, Integrity, Availability-তে ক্ষতি?H 0.56, L 0.22, N 0

সমীকরণ চারটি। সংখ্যাগুলো FIRST-এর প্রকাশিত স্পেসিফিকেশন থেকে নেওয়া:

ISS            = 1 - (1 - C) × (1 - I) × (1 - A)
Impact (S:U)   = 6.42 × ISS
Impact (S:C)   = 7.52 × (ISS - 0.029) - 3.25 × (ISS - 0.02)^15
Exploitability = 8.22 × AV × AC × PR × UI

Impact ≤ 0 হলে   Base = 0
S:U              Base = Roundup(min(Impact + Exploitability, 10))
S:C              Base = Roundup(min(1.08 × (Impact + Exploitability), 10))

Roundup মানে এক দশমিক ঘরে সবসময় ওপরের দিকে গোল করা। সাধারণ গোল করার মতো নয়: 4.02 হয় 4.1, কিন্তু 4.00 থাকে 4.0. এবার কাল্পনিক CVE-EXAMPLE-0003 ধরে হিসাবটি ধাপে ধাপে দেখুন। এটি একটি কাল্পনিক অনলাইন বাজারের গ্রাহক database-এ পাওয়া ত্রুটি, যা সামান্য অধিকারের একটি account দিয়ে network থেকে কাজে লাগানো যায়।

AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
হিসাবের খাতা
AV × AC
PR × UI
Exploitability
ISS
Impact
যোগফল
Base score
  1. Vector পড়া। S:U, তাই Scope Unchanged. PR-এর ওজন নেব S:U-র সারি থেকে, আর Impact-এর সহজ সূত্রটি খাটবে।
  2. কত দূর থেকে, কত সহজে। Network থেকে সম্ভব, তাই AV = 0.85. বিশেষ শর্ত নেই, তাই AC = 0.77.
  3. আগে কী লাগে। সামান্য অধিকার লাগে: PR:L, S:U-তে 0.62. কারও ক্লিক লাগে না: UI:N, 0.85.
  4. Exploitability. 8.22 × 0.85 × 0.77 × 0.62 × 0.85 = 2.8353. এটি বলে কাজে লাগানো কতটা সহজ।
  5. ISS. C ও I হলো H (0.56), A হলো N (0). তাই ISS = 1 − (0.44 × 0.44 × 1) = 0.8064.
  6. Impact. S:U, তাই 6.42 × 0.8064 = 5.1771. এটি 0-র বেশি, তাই পরের ধাপে যাওয়া যায়।
  7. যোগ। 5.1771 + 2.8353 ≈ 8.012. এটি 10-এর কম, তাই min-এ বদলায় না।
  8. Roundup. 8.012 ওপরের দিকে গিয়ে হয় 8.1. 7.0–8.9 সীমার মধ্যে, তাই রেটিং High.

Scope বদলালে কী হয়

ধরুন একই ত্রুটি database process থেকে বেরিয়ে আশপাশের system-এও প্রভাব ফেলে, অর্থাৎ S:C. বাকি সব এক। তিনটি জিনিস বদলাবে:

  • PR:L-এর ওজন 0.62 থেকে হয় 0.68, তাই Exploitability = 8.22 × 0.85 × 0.77 × 0.68 × 0.85 = 3.1096.
  • Impact = 7.52 × (0.8064 − 0.029) − 3.25 × (0.8064 − 0.02)15 = 5.8460 − 0.0884 = 5.7576.
  • যোগফল 8.8673, 1.08 দিয়ে গুণ করে 9.5766. Roundup-এ 9.6, Critical.
স্কোর0.00.1–3.94.0–6.97.0–8.99.0–10.0
রেটিংNoneLowMediumHighCritical

নিচের ক্যালকুলেটরটি স্পেসিফিকেশনের সমীকরণ থেকে লেখা। FIRST-এর প্রকাশিত নমুনা স্কোরের সাথে মিলিয়ে নিজেকে যাচাই করে। আপনি vector বদলে পরীক্ষা করতে পারেন।

// CVSS v3.1 base score, written from the published equations.
const W = { AV: { N: .85, A: .62, L: .55, P: .2 }, AC: { L: .77, H: .44 },
  UI: { N: .85, R: .62 }, CIA: { H: .56, L: .22, N: 0 } };
const PR = { U: { N: .85, L: .62, H: .27 }, C: { N: .85, L: .68, H: .5 } };

function roundup(x) {              // Appendix A of the specification
  const i = Math.round(x * 100000);
  return i % 10000 === 0 ? i / 100000 : (Math.floor(i / 10000) + 1) / 10;
}
function score(vector) {
  const m = Object.fromEntries(vector.split('/').map(p => p.split(':')));
  const iss = 1 - (1 - W.CIA[m.C]) * (1 - W.CIA[m.I]) * (1 - W.CIA[m.A]);
  const changed = m.S === 'C';
  const impact = changed ? 7.52 * (iss - .029) - 3.25 * Math.pow(iss - .02, 15)
                         : 6.42 * iss;
  const expl = 8.22 * W.AV[m.AV] * W.AC[m.AC] * PR[m.S][m.PR] * W.UI[m.UI];
  if (impact <= 0) return 0;
  return roundup(Math.min((changed ? 1.08 : 1) * (impact + expl), 10));
}
// Official sample scores from the FIRST v3.1 examples document.
const samples = [
  ['AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N', 7.5, 'Heartbleed'],
  ['AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H', 9.8, 'Shellshock'],
  ['AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:N/A:N', 3.1, 'POODLE'],
  ['AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N', 6.4, 'MySQL SQLi'],
  ['AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H', 9.9, 'VMware escape'],
  ['AV:L/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H', 8.2, 'ThinkPwn'],
];
for (const [v, want, name] of samples) {
  const got = score(v);
  console.log(`${got === want ? 'OK ' : 'BAD'} ${got.toFixed(1)} ${name}`);
}
console.log('CVE-EXAMPLE-0003 ->', score('AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N').toFixed(1));

ছয়টি লাইনেই OK, যেমন OK 7.5 Heartbleed, OK 9.8 Shellshock আর OK 8.2 ThinkPwn. শেষ লাইন CVE-EXAMPLE-0003 -> 8.1 আমাদের হাতের হিসাবের সাথে মিলেছে। roundup পূর্ণসংখ্যায় হিসাব করে, কারণ দশমিক সংখ্যা কম্পিউটারে হুবহু থাকে না। JavaScript-এ 0.1 + 0.2 সামান্য বেশি হয়, তাই সরল Math.ceil((0.1 + 0.2) * 10) / 10 দেয় 0.4. স্পেসিফিকেশনের Appendix A এই ফাঁদ এড়ানোর জন্যই আছে।

CVSS v4.0-তে কী বদলেছে

CVSS v4.0 প্রকাশিত হয় ২০২৩ সালের নভেম্বরে। তবে এখনো বহু তালিকা আর টুলে v3.1 চলে, তাই দুটিই চেনা দরকার।

  • Attack Requirements (AT) যোগ হয়েছে: আক্রমণের জন্য লক্ষ্য system-এ বিশেষ পরিস্থিতি লাগে কি না।
  • UI-র তিন মান: None, Passive, Active.
  • Scope নেই: এর বদলে impact এখন আলাদা দুই সেটে: দুর্বল system-এর জন্য VC, VI, VA আর পরের system-এর জন্য SC, SI, SA.
  • Temporal-এর জায়গায় Threat: Exploit Maturity মেট্রিক থাকে, আর Environmental দিয়ে নিজের পরিবেশ যোগ করা যায়।
  • Supplemental metric: যেমন Safety আর Automatable. এগুলো বাড়তি তথ্য, স্কোর বদলায় না।
  • নাম: CVSS-B মানে শুধু Base, CVSS-BT, CVSS-BE আর CVSS-BTE মানে Threat বা Environmental-ও ধরা হয়েছে। একটি স্কোর উদ্ধৃত করলে নামসহ লিখুন।
  • হিসাব: আর সরল সূত্র নয়। Metric-গুলো MacroVector নামের দলে ভাগ হয়, বিশেষজ্ঞদের ঠিক করা lookup table থেকে মান আসে, তারপর interpolation. তাই পরীক্ষায় হাতে হিসাব v3.1-এই বেশি মানায়। v4.0-র জন্য FIRST-এর calculator ব্যবহার করুন।

৪ · Severity মানে ঝুঁকি নয় — EPSS, KEV আর SSVC

CVSS 9.8 দেখলেই কি সব ফেলে দৌড়াবেন? ঘূর্ণিঝড়ের কথা ভাবুন। ঝড়ের শক্তি একটি তথ্য। কিন্তু সিদ্ধান্ত নিতে আরও লাগে: ঝড় আসার সম্ভাবনা কত, ঝড় কি এর মধ্যেই আঘাত হেনেছে, আর আপনার ঘর উপকূলে না পাহাড়ে। CVSS-এর নিজের v3.1 user guide-ও বলে, base score তীব্রতা মাপে, ঝুঁকি নয়। ঝুঁকির হিসাবে সম্ভাবনা আর প্রভাব দুটোই লাগে (পর্ব ২).

CVSS · ঝড় কত শক্তিশালী

Base score ত্রুটির নিজের বৈশিষ্ট্য। আপনার পরিবেশ জানে না, আর কেউ হামলা করছে কি না তাও জানে না।

FIRST

EPSS · ঝড় আসার সম্ভাবনা

EPSS অনুমান করে একটি প্রকাশিত CVE পরের ৩০ দিনে বাস্তবে exploit হওয়ার সম্ভাবনা কত। মান ০ থেকে ১, প্রতিদিন নতুন হিসাব হয়।

FIRST-এর EPSS SIG

KEV · ঝড় আঘাত হেনেছে

KEV তালিকায় ওঠে যখন CVE আছে, বাস্তবে হামলার নির্ভরযোগ্য প্রমাণ আছে, আর সারানোর পরিষ্কার পথ আছে।

CISA

SSVC · এখন কী করব

SSVC সংখ্যা দেয় না। কয়েকটি প্রশ্নের decision tree পেরিয়ে সরাসরি করণীয় বলে।

CMU SEI ও CISA

EPSS পড়ার নিয়ম

  • EPSS 0.40 মানে পরের ৩০ দিনে কোথাও exploit কার্যকলাপ দেখা যাওয়ার অনুমিত সম্ভাবনা ৪০%. এটি আপনার server-এ হামলার সম্ভাবনা নয়।
  • Percentile আলাদা জিনিস। ৯৫তম percentile মানে ৯৫% CVE-র স্কোর এর সমান বা নিচে।
  • EPSS ক্ষতির মাপ দেয় না। একটি ছোট ত্রুটিও সহজে exploit হতে পারে।
  • স্কোর বদলায়। কম EPSS মানে চিরকাল নিরাপদ নয়, মডেল ভুলও করতে পারে।
  • মডেলের নতুন version আসে। বর্তমান version আর তথ্য first.org/epss-এ দেখুন।

KEV পড়ার নিয়ম

KEV পেছনের দিকে তাকায়, এতে ওঠা মানে হামলা ঘটে গেছে। তালিকায় না থাকা মানে হামলা হচ্ছে না, এমন নয়। Proof of concept বা গবেষকের scan থাকলেই তালিকায় ওঠে না, লাগে বাস্তব হামলার প্রমাণ। CISA-র মতে মার্কিন ফেডারেল সংস্থার বাইরের প্রতিষ্ঠানও KEV-কে নিজের পরিকল্পনায় রাখতে পারে। ২০২৬ সালের জুনে BOD 26-04 আগের BOD 22-01 আর 19-02-কে সরিয়ে দিয়েছে, আর সময়সীমা ঠিক করে asset public কি না, KEV, automation আর technical impact দেখে। কয়েকটি ক্ষেত্রে সময় মাত্র ৩ দিন বলে প্রকাশিত। এটি শুধু মার্কিন ফেডারেল বেসামরিক সংস্থার জন্য বাধ্যতামূলক, আপনার প্রতিষ্ঠানের নিয়ম নয়। বিস্তারিত সূচির জন্য cisa.gov দেখুন। শেখার বিষয় হলো, এই চারটির কোনোটিই CVSS স্কোর নিজে নয়।

SSVC: সংখ্যা নয়, সিদ্ধান্ত

CMU SEI আর CISA-র গবেষকদের চিন্তা হলো, স্কোরের কাজ শেষে কেউ তো সিদ্ধান্তই নেন। তাই সরাসরি সিদ্ধান্তের প্রশ্ন করা যাক। CISA-র সংস্করণে পাঁচটি প্রশ্ন আর চার ফল:

প্রশ্নসম্ভাব্য উত্তর
Exploitation: হামলার কী অবস্থা?none, public PoC, active
Automatable: হামলা স্বয়ংক্রিয় করা যায়?yes, no
Technical impact: কতটা নিয়ন্ত্রণ যায়?partial, total
Mission prevalence: কাজের জন্য কতটা জরুরি?minimal, support, essential
Public well-being impact: মানুষের ক্ষতি?minimal, material, irreversible

ফল হয় Track (নিয়মিত সূচিতে), Track* (নিয়মিত সূচিতে, তবে কাছ থেকে নজর), Attend (তত্ত্বাবধায়কেরা যুক্ত হন, সূচির আগে সারান) আর Act (নেতৃত্বও যুক্ত হন, যত দ্রুত সম্ভব সারান)। Active হামলা, স্বয়ংক্রিয়, total impact আর জরুরি system হলে ফল Act. হামলা নেই, স্বয়ংক্রিয় নয়, partial আর কম গুরুত্ব হলে Track. মাঝের ঘরগুলোর জন্য CISA-র মূল tree দেখুন, মুখস্থ করার দরকার নেই।

৫ · সব মিলিয়ে সারানোর ক্রম

এবার একটি ছোট তালিকায় সব সংকেত এক করি। শেষ বিষয়টি হলো asset context: কোন যন্ত্র, কতটা জরুরি, internet থেকে কি পৌঁছানো যায়, চারপাশে segmentation (পর্ব ২২) আছে কি না, মালিক কে। নিচের কোডের সূত্রটি আমাদের বানানো, শেখার জন্য; কোনো মান নয়। ছয়টি ID-ই কাল্পনিক (CVE-EXAMPLE-0001 থেকে 0006), তাই শুধু শেষ চার অঙ্ক ছাপা হবে।

// Toy prioritiser. The formula is ours, for teaching; it is NOT a standard.
const vulns = [
  { id: '0001', cvss: 9.8, epss: .02,  kev: false, net: false, crit: 1, host: 'test lab server' },
  { id: '0002', cvss: 7.5, epss: .91,  kev: true,  net: true,  crit: 3, host: 'payment gateway' },
  { id: '0003', cvss: 8.1, epss: .40,  kev: false, net: false, crit: 3, host: 'customer database' },
  { id: '0004', cvss: 9.1, epss: .003, kev: false, net: false, crit: 1, host: 'print server' },
  { id: '0005', cvss: 6.5, epss: .62,  kev: true,  net: true,  crit: 2, host: 'staff VPN gateway' },
  { id: '0006', cvss: 5.3, epss: .001, kev: false, net: true,  crit: 1, host: 'company blog' },
];
function rank(v) {
  const likely = v.kev ? 1 : v.epss;        // KEV = already exploited
  const reach = v.net ? 1 : 0.6;            // internet-facing or not
  return likely * reach * (v.crit / 3) * (v.cvss / 10);
}
function tier(v) {
  if (v.kev && v.net) return 'P1';
  if (v.kev || (v.epss >= .3 && v.crit === 3)) return 'P2';
  if (v.cvss >= 7 && v.crit >= 2) return 'P3';
  return 'P4';
}
const byCvss = [...vulns].sort((a, b) => b.cvss - a.cvss);
const byRisk = [...vulns].sort((a, b) => rank(b) - rank(a));
console.log('CVSS only   : ' + byCvss.map(v => v.id).join(' '));
console.log('With context: ' + byRisk.map(v => v.id).join(' '));
console.log('');
for (const v of byRisk) {
  console.log(`${tier(v)} ${v.id} rank=${rank(v).toFixed(3)} ` +
    `cvss=${v.cvss} epss=${v.epss} kev=${v.kev ? 'Y' : 'N'} ${v.host}`);
}

প্রথম দুই লাইনই আসল শিক্ষা। শুধু CVSS দেখলে ক্রম 0001 0004 0003 0002 0005 0006. Context ধরলে 0002 0005 0003 0001 0004 0006. CVSS 9.8-এর পরীক্ষাগারের server প্রথম থেকে নেমে যায় চারে, আর CVSS 7.5-এর payment gateway উঠে আসে এক নম্বরে (P1 0002 rank=0.750), কারণ সেটি KEV-এ আছে, internet-এ খোলা আর জরুরি। অবশ্য চারটি ভিন্ন মাপ গুণ করা গণিতের দিক থেকে কাঁচা কাজ (পর্ব ২-এর risk matrix-এর সীমা মনে করুন)। তাই tier-এ সহজ নিয়ম আলাদা রাখা হয়েছে। মানুষ নিয়ম পড়ে বুঝতে পারেন, আর সিদ্ধান্তের শেষ কথা তাঁদেরই।

নিচে নেমে যাওয়া মানে বাদ দেওয়া নয়। 0001 এখন P4, কিন্তু সেই পরীক্ষাগারের server যদি production network-এ যুক্ত হয়, তা হলে হিসাব বদলাবে। Lateral movement-এ কম গুরুত্বের যন্ত্রও সিঁড়ির ধাপ হতে পারে। তাই context-এর তথ্যও পুরোনো হয়, যাচাই করে রাখতে হয়।

৬ · নিজের system-এ scan, আর false positive

মূল্যায়নের প্রধান উপায় vulnerability scanner. এটি যন্ত্রের software আর version জেনে জানা দুর্বলতার সাথে মেলায়। দুই ধারণা জানা জরুরি:

দিকবাইরে থেকে (Unauthenticated)ভেতর থেকে (Authenticated বা agent)
কী দেখেবাইরে যা খোলা, প্রায়ই অনুমানআসল package, version, configuration
নির্ভুলতাকম, false positive ও false negative বেশিঅনেক বেশি
কাজআক্রমণকারী বাইরে থেকে যা দেখেন তার ধারণাপ্রতিদিনের ঝুঁকির তালিকা
সতর্কতাভঙ্গুর পুরোনো যন্ত্রে সমস্যা হতে পারেScan account নিজেই সংবেদনশীল

আইনি সীমা: Scan শুধু নিজের প্রতিষ্ঠানের system-এ, দায়িত্বশীল ব্যক্তির লিখিত অনুমতি নিয়ে, ঘোষিত সময়ে। অন্যের system-এ অনুমতি ছাড়া scan আইনি বিপদ ডেকে আনতে পারে (পর্ব ৬). এই পর্বে ইচ্ছা করেই কোনো scan কমান্ড নেই। Scan account-কে least privilege দিন, আলাদা রাখুন, আর তার ব্যবহার log-এ দেখুন (পর্ব ২০).

Scanner-এর ফল অকাট্য নয়। False positive মানে আসলে নেই, কিন্তু রিপোর্টে আছে। সবচেয়ে সাধারণ কারণ backported fix: Linux distribution পুরোনো version নম্বর রেখেই fix বসায়, আর সরল scanner version দেখে সতর্ক করে। আরেকটি কারণ reachability: library আছে, কিন্তু দুর্বল ফাংশনটি কখনো ডাকা হয় না। এটি কম ঝুঁকি, তবে শূন্য নয়। False negative আরও বিপজ্জনক, কারণ ত্রুটি থাকে অথচ রিপোর্টে থাকে না। Equifax-এর ঘটনায় scan-এ না ধরা পড়া একটি প্রকাশিত ব্যর্থতা।

False positive দাবি করলে প্রমাণ রাখুন: vendor-এর advisory, package changelog, বা VEX ঘোষণা। “আমাদের এখানে হবে না” প্রমাণ নয়। Penetration testing scanner-এর কাজের পরিপূরক, কিন্তু আলাদা অনুমোদিত কাজ (পর্ব ৫০).

৭ · Patch management — দ্রুত, কিন্তু অন্ধভাবে নয়

Patch বসানো নিজেই একটি পরিবর্তন, আর পরিবর্তন system ভাঙতে পারে। Patch আসলে তিনটি প্রশ্ন: উৎসটি আসল তো (vendor-এর চ্যানেল, পর্ব ১১-এর signature যাচাই), আমাদের system-এ এটি কী ভাঙবে, আর ভাঙলে ফিরব কীভাবে?

Ring দিয়ে ধাপে ধাপে patch

Test first, widen only when the last ring stays healthy

  1. পরীক্ষার পরিবেশproduction-এর মতো সাজানো staging
  2. Canary ringঅল্প কিছু কম ঝুঁকির যন্ত্র
  3. Early ringনানা ধরনের যন্ত্রের একটি অংশ
  4. Broad ringবেশিরভাগ যন্ত্র
  5. সবচেয়ে জরুরি systemঘোষিত সময়ে, rollback প্রস্তুত রেখে
ছবি ৩২.২ — প্রতিটি ring-এর পর health check. জরুরি অবস্থায় ring ছোট হয়, বাদ যায় না।
  • Ring: সমস্যা অল্প যন্ত্রেই ধরা পড়ে, ফলে blast radius ছোট থাকে।
  • Maintenance window: বিদ্যুৎ অফিসের ঘোষিত লাইন মেরামতের সময়ের মতো। আগে জানানো হয়, ব্যবহারকারী প্রস্তুত থাকেন। ঈদের সেলের আগের রাতটি উইন্ডো হিসেবে ভুল সময়।
  • Emergency change: নিয়ম ভাঙা নয়, আগে থেকে লেখা দ্রুত পথ। কে অনুমতি দেবেন, ন্যূনতম কী পরীক্ষা হবে, আর পরে কোন নথি হবে। অনুমতির মানুষ রাত ২টায় পাওয়া যাবেন কি না, তাও আগে ঠিক রাখুন।
  • Rollback: Snapshot আর backup আগে নিন, আর ফেরার পথ পরীক্ষা করুন। Database schema বদলালে ফেরা কঠিন হতে পারে। মনে রাখুন, rollback ত্রুটিকে ফিরিয়ে আনে, তাই তখন compensating control লাগবে।
  • বসানো মানেই চালু নয়: Service বা যন্ত্র restart না হলে পুরোনো কোড memory-তে চলতে পারে। তাই যাচাই আলাদা ধাপ।

নিচের সিমুলেটরে ১০০০টি কাল্পনিক host. একটি ভালো patch আর একটি খারাপ patch একই নিয়মে ছড়ানো হচ্ছে। কোনো ring-এ ২%-এর বেশি ব্যর্থ হলে থামবে। Seed স্থির, তাই ফল প্রতিবার এক।

// Patch ring rollout on a toy fleet, seeded so every run is the same.
function mulberry32(a) {
  return () => { a |= 0; a = a + 0x6D2B79F5 | 0;
    let t = Math.imul(a ^ a >>> 15, 1 | a);
    t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;
    return ((t ^ t >>> 14) >>> 0) / 4294967296; };
}
const rings = [['canary', 10], ['early', 90], ['broad', 400], ['critical', 500]];
const STOP_AT = 0.02;                       // halt if over 2% of a ring fails

function rollout(label, failRate, seed) {
  const rand = mulberry32(seed);
  let patched = 0, broken = 0;
  console.log(`${label} (true failure rate ${failRate * 100}%)`);
  for (const [name, size] of rings) {
    let bad = 0;
    for (let i = 0; i < size; i++) if (rand() < failRate) bad++;
    patched += size; broken += bad;
    const rate = bad / size;
    console.log(`  ${name.padEnd(8)} ${String(size).padStart(3)} hosts, ` +
                `${String(bad).padStart(2)} failed (${(rate * 100).toFixed(1)}%)`);
    if (rate > STOP_AT) {
      console.log(`  HALT and roll back. Patched ${patched}, broken ${broken}.`);
      return;
    }
  }
  console.log(`  Finished. Patched ${patched}, broken ${broken}.`);
}
rollout('Good patch', 0.002, 7);
rollout('Bad patch', 0.08, 7);
console.log(`Bad patch on all 1000 hosts at once: about ${1000 * 0.08} broken`);

ভালো patch চারটি ring পেরিয়ে শেষ হয়: Finished. Patched 1000, broken 2. খারাপ patch প্রথম ring-এই ধরা পড়ে: canary 10 hosts, 2 failed (20.0%), তারপর HALT and roll back. Patched 10, broken 2. একবারে সবখানে দিলে ভাঙত প্রায় 80টি। তবে এখানে seed-এর কিছু সৌভাগ্যও আছে। ৮% ব্যর্থতায় ১০টি host-এর একটিও না ভাঙার সম্ভাবনা 0.9210 ≈ ৪৩.৪%. তাই canary কখনো খারাপ patch-কে ছেড়ে দিতে পারে। ring যত বড়, ধরা পড়ার সম্ভাবনা তত বেশি।

Patch দেওয়া না গেলে: compensating control

কখনো patch নেই, কখনো যন্ত্রের নির্মাতা অনুমতি দেন না, কখনো পরের উইন্ডো দুই সপ্তাহ পরে। তখন compensating control. ঘরের তালা ভাঙা, মিস্ত্রি কাল আসবেন, আজ রাতে দারোয়ান বসানোর মতো।

Controlকী থামায়কী থামায় না
দুর্বল feature বন্ধওই পথের ঝুঁকিএকই software-এর অন্য ত্রুটি, আর কাজের ক্ষতি হতে পারে
Internet বা network থেকে আলাদা করাদূর থেকে পৌঁছানোভেতরের কেউ বা আগে থেকে ঢুকে থাকা কেউ
Virtual patch (WAF বা IPS নিয়ম)পরিচিত ধরনের অনুরোধঅন্যভাবে সাজানো অনুরোধ, encrypted traffic যা যন্ত্র দেখে না
Egress filteringভেতর থেকে অজানা ঠিকানায় যোগাযোগমূল ত্রুটি
বাড়তি log আর detectionকিছু থামায় না, দেখতে সাহায্য করেক্ষতি

Compensating control সময় কেনে, সমস্যা মেটায় না। CISA-ও KEV-এর নির্দেশনায় workaround-কে সাময়িক বলে, আর fix এলে তা বসাতে বলে।

৮ · SLA, exception আর metric

SLA লিখে ঠিক করে দেয় কোন অগ্রাধিকারের কাজ কত দিনে শেষ হবে। নিচের সংখ্যাগুলো ধরে নেওয়া, প্রতিটি প্রতিষ্ঠান নিজের ঝুঁকি আর সামর্থ্য দেখে ঠিক করে।

অগ্রাধিকারকখন (কাল্পনিক নীতি)লক্ষ্য
P1KEV আর internet-মুখী৩ দিন
P2KEV, অথবা EPSS বেশি আর জরুরি asset১৪ দিন
P3CVSS High, মাঝারি থেকে জরুরি asset৩০ দিন
P4বাকি সব৯০ দিন বা নিয়মিত সূচিতে

এবার CVE-EXAMPLE-0003-এর পুরো জীবন ধাপে ধাপে দেখুন। আগের ধাপের হিসাব থেকেই শুরু: CVSS 8.1, জরুরি গ্রাহক database.

Ticket · CVE-EXAMPLE-0003 (কাল্পনিক)
তারিখ
বয়স
অবস্থা
মালিক
SLA-র বাকি
  1. খুঁজে পাওয়া। নিয়মিত authenticated scan গ্রাহক database server-এ CVE-EXAMPLE-0003 দেখাল। Ticket খোলা হলো। বয়সের গণনা শুরু।
  2. Triage শুরু। নিরাপত্তা দল প্রথমে দেখে, এটি কি backported fix-এর কারণে false positive?
  3. নিশ্চিত। Package changelog আর vendor advisory মিলিয়ে দেখা গেল fix সত্যিই বসেনি। Asset inventory থেকে মালিক পাওয়া গেল।
  4. অগ্রাধিকার। CVSS 8.1, EPSS 0.40, KEV নয়, internet-মুখী নয়, কিন্তু জরুরি asset. নীতি অনুযায়ী P2: ১৪ দিন। Ticket গেল database দলের কাছে, বাকি ১৩ দিন।
  5. পরীক্ষা। Staging-এ patch বসিয়ে app-এর মূল কাজ পরীক্ষা হলো। Backup আর rollback-এর ধাপ লেখা হলো। এর মধ্যে সাময়িকভাবে database-এ পৌঁছানোর পথ আরও সংকীর্ণ করা হলো।
  6. বসানো। ঘোষিত maintenance window-তে আগে replica, তারপর primary. Service restart হলো। বাকি ৪ দিন।
  7. যাচাই। আবার scan আর version যাচাই করে দেখা গেল ত্রুটিটি নেই, app-ও ঠিক চলছে। শুধু “কাজ শেষ” লেখা ticket বন্ধের প্রমাণ নয়।
  8. রিপোর্ট। Ticket বন্ধ হলো ১১ দিনে, SLA-র ৩ দিন আগে। এই সংখ্যা metric-এ যোগ হবে।

নিচে একই ধরনের কয়েকটি ticket-কে একটি কল্পিত তারিখে দেখা হচ্ছে। আসল ঘড়ি ব্যবহার করা হয়নি, তাই ফল সবসময় এক।

// SLA ageing tracker on a simulated date. Days and dates are assumed.
const DAY = 86400000;
const d = s => Date.parse(s + 'T00:00:00Z');
const today = d('2026-03-20');              // simulated "today"
const SLA = { P1: 3, P2: 14, P3: 30, P4: 90 };   // target days, assumed
const items = [
  { id: '0002', pri: 'P1', found: '2026-03-16', closed: '2026-03-18' },
  { id: '0005', pri: 'P1', found: '2026-03-14', closed: null },
  { id: '0003', pri: 'P2', found: '2026-03-02', closed: '2026-03-13' },
  { id: '0007', pri: 'P2', found: '2026-02-20', closed: null },
  { id: '0008', pri: 'P3', found: '2026-03-01', closed: null },
  { id: '0004', pri: 'P4', found: '2026-01-10', closed: null, exception: '2026-06-30' },
];
const closedDays = [];
let breached = 0, open = 0;
for (const v of items) {
  const end = v.closed ? d(v.closed) : today;
  const age = Math.round((end - d(v.found)) / DAY);
  const left = SLA[v.pri] - age;
  let state = v.closed ? 'closed in time' : `open, ${left} days left`;
  if (v.closed) closedDays.push(age);
  else open++;
  if (left < 0) { state = v.closed ? 'closed late' : `OVERDUE by ${-left} days`; breached++; }
  if (v.exception) state += `, exception until ${v.exception}`;
  console.log(`${v.pri} ${v.id} age=${String(age).padStart(2)}d ${state}`);
}
const mttr = closedDays.reduce((a, b) => a + b, 0) / closedDays.length;
console.log(`MTTR of closed items: ${mttr.toFixed(1)} days (n=${closedDays.length})`);
console.log(`Open: ${open}, past SLA: ${breached} of ${items.length}`);

P1 0005 age= 6d OVERDUE by 3 days আর P2 0007 age=28d OVERDUE by 14 days দুটি খোলা ticket, যা সময় পেরিয়ে গেছে। এবার MTTR of closed items: 6.5 days (n=2) দেখুন। সংখ্যাটি দারুণ দেখায়, অথচ Open: 4, past SLA: 2 of 6. কারণ MTTR শুধু বন্ধ ticket গোনে। ২৮ দিনের খোলা ticket-টি গড়ে ঢোকেনি। শুধু MTTR দেখলে সবচেয়ে কঠিন কাজগুলো চোখের আড়ালে থেকে যায়।

কোন metric দেখবেন

  • Coverage: কত শতাংশ asset authenticated scan-এর আওতায়। এটি কম হলে বাকি সব সংখ্যা ভুয়া নিরাপত্তা দেয়।
  • MTTR: অগ্রাধিকার অনুযায়ী আলাদা করে, গড়ের পাশে median সহ।
  • Age: খোলা দুর্বলতার বয়স, সবচেয়ে পুরোনোটি কত দিনের, ৩০ বা ৯০ দিনের ওপরে কতগুলো।
  • SLA মানা: সময়মতো কত শতাংশ, আর KEV-এ থাকা কতগুলো এখনো খোলা।
  • Exception: কতগুলো চলছে, কতগুলোর মেয়াদ শেষ।

“মোট কত CVE বন্ধ হলো” দিয়ে দলকে বিচার করলে সহজগুলোই বন্ধ হবে, কঠিনগুলো পড়ে থাকবে। Metric যা গোনে, মানুষ তাই বদলায়।

Exception আর risk acceptance

সব সময়মতো হবে না। একটি যন্ত্রের নির্মাতা নতুন firmware দেবেন পরের বছর। তখন exception, অর্থাৎ risk acceptance-এর লিখিত রূপ (পর্ব ২). ভালো exception-এ থাকে:

EOL software: patch আর আসবে না

End of life মানে নির্মাতা আর নিরাপত্তা update দেবেন না। এটি কোনো scanner-এর একক ফলাফল নয়, একটি স্থায়ী ঝুঁকি, কারণ প্রতিটি নতুন ত্রুটি চিরকাল খোলা থাকবে। উপায়: EOL-এর তারিখ inventory-তে রাখা, আগে থেকে বদলের বাজেট করা, না গেলে আলাদা network-এ সরিয়ে রাখা, আর সময় কেনার মতো অর্থের বিনিময়ে বর্ধিত support থাকলে সেটি যাচাই করা। KEV-এর নির্দেশনাও বলে, পণ্য EOL হলে বা update সম্ভব না হলে সেটি network থেকে সরিয়ে ফেলতে। Legacy system বাদ দেওয়া ব্যবসায়িক সিদ্ধান্ত, তাই দায়ও ব্যবসার।

৯ · Zero-day সপ্তাহ — Log4Shell থেকে শিক্ষা

Zero-day-তে fix নেই বা সবে এসেছে। N-day-তে fix আছে, কিন্তু বসানো হয়নি। আসল হামলার বড় অংশ এই দ্বিতীয় দলে পড়ে বলে নানা প্রতিবেদনে বলা হয়, তাই নিয়মিত কাজটিই প্রথম প্রতিরক্ষা। তবু বড় zero-day এলে পুরো প্রতিষ্ঠান থমকে যায়।

২০২১ সালের ডিসেম্বরে প্রকাশিত Log4Shell (CVE-2021-44228) তার সবচেয়ে বড় উদাহরণ। Apache Log4j 2 হলো Java জগতের বহুল ব্যবহৃত logging library. ত্রুটিটির CVSS 10.0. ধারণাটি হলো, log-এ লেখা নির্দিষ্ট ধরনের text-কে library শুধু লেখা হিসেবে না রেখে একটি নির্দেশ হিসেবে ব্যাখ্যা করত। Log-এ তো ব্যবহারকারীর ইনপুট প্রায়ই লেখা হয়, তাই ঝুঁকি ছড়িয়ে পড়ে। বিস্তারিত হামলার ধাপ এখানে দরকার নেই। প্রতিরক্ষার শিক্ষাগুলোই আসল:

  • কোথায় আছে কেউ জানতেন না। Log4j অনেক app-এ সরাসরি ছিল না, ছিল transitive dependency হয়ে, বা অন্য JAR-এর ভেতরে গুঁজে, বা vendor-এর পণ্যের ভেতরে।
  • প্রথম fix শেষ fix নয়। 2.15.0-এর পরও আরও version আসে, কারণ পরে CVE-2021-45046 সহ আরও ত্রুটি ধরা পড়ে। তাই প্রথম দিনের সমাধান আবার যাচাই করতে হয়েছে।
  • দীর্ঘ লেজ। মার্কিন Cyber Safety Review Board-এর ২০২২ সালের জুলাইয়ের রিপোর্ট একে “endemic” দুর্বলতা বলে, যা হয়তো এক দশক বা আরও বেশি সময় থেকে যাবে। সেই রিপোর্টই বলে, গুরুত্বপূর্ণ অবকাঠামোতে বড় হামলা বোর্ডের জানা ছিল না। অবশ্য রিপোর্ট করার বাধ্যবাধকতা না থাকায় এই তথ্যের সীমা আছে।

এবার একটি কাল্পনিক অনলাইন বাজারের zero-day সপ্তাহ দেখুন। ঘটনাটি বানানো, আর লাইব্রেরির নামও দেওয়া হয়নি। Log4Shell-এর পরিচিত ধরনটি মাথায় রেখে সাজানো।

ঘটনার বোর্ড
সময়
জানা আক্রান্ত app
Internet-মুখী, সুরক্ষাহীন
সর্বশেষ fix-সহ
সাময়িক control
Log তদন্ত
  1. দিন ০, সকাল — খবর। একটি বহুল ব্যবহৃত library-র গুরুতর advisory এলো। incident lead ঠিক হলেন, একটি যোগাযোগের চ্যানেল খোলা হলো। প্রথম প্রশ্ন: “এটি আমাদের কোথায় কোথায় আছে?”
  2. দিন ০, বিকেল — প্রথম তালিকা। সরাসরি dependency খুঁজে ৩টি app পাওয়া গেল, এর ২টি internet-মুখী। এই সংখ্যা যে কম হতে পারে, দল তা জানে।
  3. দিন ১, সকাল — SBOM. SBOM আর build-এর তথ্য ঘেঁটে সংখ্যা হলো ১১: সরাসরি ৩, transitive ৬, vendor-এর পণ্যে ২. Internet-মুখী ৫টি।
  4. দিন ১, রাত — সময় কেনা। ৫টি internet-মুখী app-এ WAF নিয়ম আর বাইরের সংযোগের কড়াকড়ি বসানো হলো। সুরক্ষাহীন সংখ্যা ০. তবে এটি patch নয়।
  5. দিন ২ — প্রথম patch. Emergency change-এ ছোট ring ধরে ৫টি internet-মুখী app-এ fix বসল।
  6. দিন ৩ — নতুন খবর। নির্মাতা জানালেন প্রথম fix অসম্পূর্ণ, নতুন version এসেছে। “সর্বশেষ fix-সহ” আবার ০. সাময়িক control থাকায় আতঙ্ক নেই।
  7. দিন ৪ — নিজেদের ৯টি। নিজেদের ৯টি app-ই নতুন version-এ এলো। ২টি vendor পণ্যের fix এখনো নেই, তাই সেগুলোতে control চালু।
  8. দিন ৫ — আগেই কি কেউ ঢুকেছে? Patch অতীত মোছে না। Log আর সংযোগের তথ্য খুঁজে ১টি alert পাওয়া গেল, triage-এ নিরীহ প্রমাণিত। সন্দেহ টিকলে বিষয়টি incident response-এ যেত (পর্ব ৬১).
  9. দিন ৭ — যাচাই ও শিক্ষা। আবার যাচাই করে দেখা গেল ৯টি ঠিক আছে। ২টি vendor পণ্যে মেয়াদসহ exception, মালিকের নাম লেখা। পর্যালোচনায় ধরা পড়ল ৮টি app-এর SBOM ছিল না, এটিই পরের কাজ।

SBOM-এর কাছে যে প্রশ্নগুলো করবেন

SBOM হলো software-এর উপকরণের তালিকা, বিস্কুটের প্যাকেটের গায়ে লেখা উপাদানের মতো। SPDX আর CycloneDX দুটি প্রচলিত ফরম্যাট। বিস্তারিত পর্ব ৪৮-এ। Zero-day-র দিনে দরকার এই প্রশ্নগুলোর দ্রুত উত্তর:

  • এই component কোন কোন পণ্য আর image-এ আছে, কোন version?
  • সরাসরি, নাকি transitive?
  • সেই পণ্য এখন কোথায় চলছে, internet-মুখী কি না, মালিক কে?
  • দুর্বল অংশটি সত্যিই চলে কি? Vendor কি VEX বা বিবৃতি দিয়েছেন?
  • SBOM-টি কবেকার, আর চলমান system-এর সাথে মেলে তো?

আরও গভীরে: EPSS-এর ভিত্তি Jacobs ও সহকর্মীদের ২০২১ সালের গবেষণা; KEV চালু হয় ২০২১ সালের নভেম্বরে। SSVC-র মূল প্রতিবেদন লিখেছেন CMU SEI-র Spring ও সহকর্মীরা (২০১৯), যেখানে deployer-এর জন্য আলাদা tree আছে: Defer, Scheduled, Out-of-cycle, Immediate. NIST SP 800-40 Rev. 4 (২০২২) patch ব্যবস্থাপনাকে প্রতিরোধমূলক রক্ষণাবেক্ষণ হিসেবে দেখতে বলে। যুক্তরাষ্ট্রের EO 14028 (২০২১ সালের মে) SBOM-কে আলোচনার কেন্দ্রে আনে, আর কয়েক মাস পরে Log4Shell তার প্রয়োজন হাতে-কলমে দেখিয়ে দেয়।

পরীক্ষা ও ইন্টারভিউতে:

  • CVE আর CWE-র পার্থক্য? CVE নির্দিষ্ট পণ্যের নির্দিষ্ট ত্রুটি; CWE ভুলের ধরন।
  • CVSS 9.8 কি সবসময় আগে? না। CVSS তীব্রতা মাপে। EPSS, KEV আর asset-এর গুরুত্ব মিলিয়ে ক্রম ঠিক হয়।
  • EPSS 0.4 মানে? পরের ৩০ দিনে exploit কার্যকলাপ দেখার অনুমিত সম্ভাবনা ৪০%, নির্দিষ্টভাবে আপনার system-এ নয়।
  • Patch না গেলে? Compensating control, মেয়াদসহ লিখিত exception, আর fix বসানোর পরিকল্পনা।
  • Authenticated scan কেন? ভেতরের আসল package আর configuration দেখে, তাই অনুমান কম। Scan account-কে least privilege দিতে হয়।

১০ · AI-এর যুগে vulnerability management

AI লম্বা advisory সংক্ষেপ করতে, ticket লিখতে আর rollback পরিকল্পনার খসড়া করতে দারুণ। কিন্তু এই কাজে একটি ভুল নম্বর সরাসরি ভুল সিদ্ধান্তে নিয়ে যায়। আর এই ক্ষেত্রে সত্য প্রতিদিন বদলায়।

AI-এর ভুলঝুঁকিযাচাই
নেই এমন CVE নম্বর বানায়, বা ভুল পণ্যে জুড়ে দেয়ভুল কাজে সময় নষ্টcve.org আর vendor advisory
CVSS স্কোর স্মৃতি থেকে বলে, EPSS আর KEV পুরোনোভুল ক্রমVector নিজে হিসাব করা, আজকের তালিকা দেখা
“এই version নিরাপদ” বলে আত্মবিশ্বাসেঅসম্পূর্ণ fix থেকে যায়Advisory-র fixed version, পরের সংশোধন
Error সরাতে যাচাই বন্ধ করতে বলে (verify=False, chmod 777)নতুন দুর্বলতাDiff পড়া, কারণ বোঝা
Triage-এ অতিরিক্ত আত্মবিশ্বাস, “এটি false positive”আসল ঝুঁকি বন্ধ হয়ে যায়প্রমাণ ছাড়া ticket বন্ধ নয়
ভুল fix-এ injection বা অনুমতি-যাচাই বাদ পড়া কোড লেখেএকটি ত্রুটি সারাতে আরেকটিCode review, নিজের ল্যাবে পরীক্ষা

Scan রিপোর্ট কখনো সরাসরি পেস্ট করবেন না। এতে ভেতরের ঠিকানা, host-এর নাম আর দুর্বলতার মানচিত্র থাকে, যা ভুল হাতে গেলে হামলার পরিকল্পনা হয়ে যায়। নাম সরিয়ে, প্রতিষ্ঠানের নীতিমালা মেনে এভাবে জিজ্ঞেস করুন:

আমি নিজের প্রতিষ্ঠানের vulnerability management-এ কাজ করি। নিচে কাল্পনিক নামসহ একটি advisory-র সারাংশ আর একটি asset-এর বিবরণ দিচ্ছি। [advisory-র সারাংশ, কোনো গোপন তথ্য বা ভেতরের ঠিকানা ছাড়া] [asset: ধরন, internet-মুখী কি না, কাজের গুরুত্ব] ১. কোন কোন তথ্য আমাকে নিজে cve.org, vendor advisory আর CISA KEV থেকে যাচাই করতে হবে, তালিকা দাও। ২. নিশ্চিত না হলে "জানি না" বলো। কোনো CVE নম্বর, স্কোর বা তারিখ বানিয়ো না। ৩. Patch সম্ভব না হলে কোন প্রতিরক্ষামূলক control কী থামায় আর কী থামায় না, লেখো। ৪. Test, rollback আর যাচাইয়ের একটি খসড়া চেকলিস্ট দাও। শেষ সিদ্ধান্ত মানুষের।

AI-এর সাহায্য নিলে — চেকলিস্ট

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন, তারপর “→ উত্তর” চাপুন।

প্র ০১CVSS এত জনপ্রিয় হলে “শুধু CVSS দেখে patch করা” ভুল কেন? আর “KEV-এ উঠলে তবে patch” নীতিই বা কেন ঝুঁকিপূর্ণ?

CVSS জনপ্রিয় কারণ এটি সরল। একটি সংখ্যা, একটি রঙ, একটি নিয়ম: “৯-এর ওপরে সব সাত দিনে।” কিন্তু base score তৈরি হয়েছে ত্রুটির প্রযুক্তিগত বৈশিষ্ট্য বর্ণনা করতে, হামলার সম্ভাবনা বলতে নয়। FIRST-এর নিজের user guide-ও সতর্ক করে যে CVSS ঝুঁকি মাপে না। CMU SEI-র Spring ও সহকর্মীরা সমালোচনা করে দেখিয়েছিলেন, ক্রমভিত্তিক মাপকে গণিতের সংখ্যার মতো ব্যবহার করা নিয়েও প্রশ্ন আছে, আর একই ত্রুটিতে মূল্যায়নকারীদের স্কোরও ভিন্ন হতে পারে।

বাস্তবে বহু CVE High বা Critical হয়, তাই “সব Critical আগে” নীতি শেষ পর্যন্ত অগ্রাধিকারই থাকে না। আর প্রকাশিত দুর্বলতার একটি ছোট অংশই বাস্তবে exploit হয় বলে EPSS-এর গবেষকদের কাজে দেখা যায়। ফলে সীমিত জনবল এমন ত্রুটিতে খরচ হয়, যার ওপর কেউ হাত দেবে না। অন্যদিকে তুলনামূলক কম স্কোরের ত্রুটি internet-মুখী যন্ত্রে থাকলে অপেক্ষা করে।

উল্টো দিকের ভুল হলো শুধু KEV দেখা। KEV পেছনের তথ্য, প্রমাণ জোগাড় আর তালিকায় ওঠার আগেই হামলা চলতে পারে। আপনার শিল্পের বিশেষ software-এ হামলার খবর হয়তো CISA পর্যন্ত পৌঁছাবেই না। আর নিজের app-এর ত্রুটির তো CVE-ই নেই।

তাই প্রতিটি সংকেত আলাদা প্রশ্নের উত্তর। CVSS বলে কতটা খারাপ হতে পারে, EPSS সামনের দিকের অনুমান, KEV অতীতের প্রমাণ, SSVC সিদ্ধান্তের কাঠামো, আর asset context বলে আপনার ক্ষতি কত।

মূল উপলব্ধি: একটি সংখ্যা সিদ্ধান্তের বদলি নয়। স্কোর তথ্য দেয়, অগ্রাধিকার ঠিক করে আপনার পরিবেশ।

প্র ০২NVD-র backlog আর CVE Program-এর অনিশ্চয়তা থেকে নিরাপত্তা জগত কী শিখল? একটি প্রতিষ্ঠান নিজেকে কীভাবে সামলাবে?

বহু বছর ধরে scanner আর প্রক্রিয়াগুলো ধরে নিয়েছিল, CVE আসবে, NVD তাতে স্কোর আর পণ্যের নাম যোগ করবে, আর টুল সেই তথ্য টেনে নেবে। অর্থাৎ বিশ্বের নিরাপত্তা-তথ্যের একটি বড় অংশ অল্প কয়েকটি সংস্থার ওপর দাঁড়িয়ে ছিল। এটি single point of failure-এর প্রাতিষ্ঠানিক রূপ।

২০২৪ সাল থেকে NVD-র তথ্য যোগের কাজ বড় আকারে পিছিয়ে পড়ে। প্রকাশিত হিসাবে CVE-র সংখ্যা দ্রুত বাড়ছিল, সাথে ছিল সম্পদের সীমা। ২০২৫ সালের এপ্রিলে CVE Program-এর মার্কিন সরকারি চুক্তি শেষ হওয়ার মুখে এসে শেষ মুহূর্তে বাড়ানো হয়, আর সেই সময় CVE Foundation নামে একটি অলাভজনক উদ্যোগের ঘোষণাও আসে। ইউরোপে ENISA চালু করে EUVD. ২০২৬ সালের এপ্রিলে NIST জানায়, সব CVE-তে তথ্য যোগ করার লক্ষ্য ছেড়ে অগ্রাধিকারের ভিত্তিতে কাজ হবে। এসব ব্যবস্থা এখনো বদলাচ্ছে, তাই বর্তমান অবস্থা মূল সাইটে দেখা দরকার।

একটি প্রতিষ্ঠানের জন্য শিক্ষা কয়েকটি। এক, নিজের scanner কোন উৎস থেকে তথ্য নেয় জানুন। NVD-তে স্কোর না থাকলে সে কি ত্রুটিটি বাদ দেয়, নাকি Unknown দেখায়? দুই, নিজের জরুরি পণ্যগুলোর vendor advisory সরাসরি অনুসরণ করুন, আর পণ্যভিত্তিক দায়িত্বশীল ব্যক্তি রাখুন। তিন, CNA-র দেওয়া স্কোর পড়ুন, আর মনে রাখুন vendor ও অন্য উৎসের স্কোর ভিন্ন হতে পারে। চার, “স্কোর নেই” অবস্থার জন্য triage-এর নিয়ম লিখে রাখুন।

মূল উপলব্ধি: নিরাপত্তার তথ্য-সরবরাহও একটি সরবরাহ শিকল। আপনি যে তথ্যের ওপর ভর করেন, তার ব্যর্থতাও আপনার পরিকল্পনায় থাকতে হবে।

প্র ০৩Equifax-এর হাতে fix ছিল, দুর্বলতার খবরও পৌঁছেছিল। তাহলে ব্যর্থতাটি প্রযুক্তির, না প্রতিষ্ঠানের?

প্রকাশিত মার্কিন GAO আর কংগ্রেসের রিপোর্ট পড়লে ব্যর্থতা দেখা যায় পুরো চক্র জুড়ে, একটি নয়। ত্রুটিটির কথা ২০১৭ সালের মার্চে প্রকাশিত হয়, আর ভেতরে সতর্কতাও পাঠানো হয়। কিন্তু দায়িত্বশীল সবার কাছে তা পৌঁছায়নি। পরে চালানো scan দুর্বল web app-টি খুঁজে পায়নি। কোন system-এ ওই software চলছে, তার পূর্ণ তালিকা ছিল না। আর একটি traffic পরিদর্শন যন্ত্রের certificate-এর মেয়াদ দীর্ঘদিন আগে শেষ হওয়ায় এনক্রিপ্টেড traffic দেখা হচ্ছিল না, ফলে অস্বাভাবিক কার্যকলাপ অনেকদিন চোখে পড়েনি। Certificate নবায়নের পর ধরা পড়ে।

লক্ষ করুন, প্রতিটি ব্যর্থতাই আমাদের ছয় ধাপের একটির সাথে মেলে। Asset খোঁজা দুর্বল। মূল্যায়নে false negative. সারানোর মালিকানা অস্পষ্ট। “সারানো হয়েছে” যাচাই হয়নি। আর detection control নিজেই চুপচাপ বন্ধ ছিল, যা কেউ রিপোর্টে দেখেননি।

রিপোর্টগুলো শাসনব্যবস্থার দিকেও আঙুল তোলে: দায়িত্বের স্পষ্টতা, পুরোনো জটিল system, আর নীতিমালা বাস্তবে না মানা। অর্থাৎ বড় একটি প্রতিষ্ঠানে নিয়ম লেখা ছিল, কিন্তু তা মানা হচ্ছে কি না দেখার ব্যবস্থা দুর্বল ছিল। এই কারণেই patch-এর সময়সীমা, মালিকের নাম, স্বাধীন যাচাই আর detection control-এর নিজের health check জরুরি।

একজন engineer-কে দোষ দেওয়া সহজ, কিন্তু তাতে পরের ঘটনা থামে না। প্রশ্ন হওয়া উচিত, কোন প্রক্রিয়া থাকলে একজনের ভুল বড় ঘটনা হতো না (পর্ব ৫৪-এর দোষারোপহীন সংস্কৃতি).

মূল উপলব্ধি: Patch প্রযুক্তিগত কাজ, কিন্তু patch হওয়ার নিশ্চয়তা প্রাতিষ্ঠানিক ব্যবস্থা। Fix থাকা আর fix বসা এক নয়।

প্র ০৪Patch দ্রুত দিলে বিভ্রাটের ভয়, দেরি করলে হামলার ভয়। এই দ্বন্দ্ব কীভাবে সামলাবেন?

দুটি ভয়ই বাস্তব। হামলাকারীরা অনেক সময় patch দেখে ত্রুটি বুঝে নেন, তাই প্রকাশের পর সময় কমে আসছে। BOD 26-04-এর মতো নির্দেশনায় সবচেয়ে জরুরি ক্ষেত্রে সময় কয়েক দিনে নেমে আসা এই চাপেরই লক্ষণ।

অন্যদিকে ২০২৪ সালের জুলাইয়ে CrowdStrike Falcon-এর একটি ত্রুটিপূর্ণ content update-এ বিশ্বজুড়ে বহু Windows যন্ত্র বন্ধ হয়ে যায়। Microsoft-এর হিসাবে প্রায় ৮৫ লাখ যন্ত্র আক্রান্ত হয়। বিমান সংস্থা, হাসপাতাল আর ব্যাংকের কাজ ব্যাহত হয়। এটি হামলা ছিল না, ছিল একটি নিরাপত্তা পণ্যের নিজের update. প্রতিষ্ঠানটির প্রকাশিত ঘটনা-বিশ্লেষণে পরে ধাপে ধাপে ছড়ানো আর ভালো যাচাইয়ের প্রতিশ্রুতি দেওয়া হয়।

সমাধান “দ্রুত” আর “ধীর”-এর মাঝে একটি সংখ্যা নয়। সমাধান হলো দ্রুত কিন্তু নিরাপদে পরিবর্তন করার সক্ষমতা তৈরি করা। স্বয়ংক্রিয় পরীক্ষা আছে, ring আছে, health check আছে, আর rollback মহড়া দেওয়া, এমন দল ঘণ্টায় যা পারে, হাতে-কলমে চলা দল মাসে তা পারে না। DevOps-এর গবেষণাও বলে, গতি আর স্থিতি প্রায়ই একসাথে উন্নত হয়।

দ্বিতীয় হাতিয়ার হলো অগ্রাধিকার। সব patch-এর গতি এক হবে কেন? KEV-এ থাকা internet-মুখী ত্রুটিতে ছোট ring, ঝুঁকি মেনে দ্রুত। সাধারণ মাসিক update নিয়মিত সূচিতে। মাঝখানে compensating control সময় কেনে। প্রতিটি সিদ্ধান্তে দুই ঝুঁকিই লিখে ফেলা ভালো: হামলার ঝুঁকি বনাম বিভ্রাটের ঝুঁকি, আর দায়িত্ব কার।

মূল উপলব্ধি: গতি বনাম স্থিতি মিথ্যা দ্বন্দ্ব হতে পারে। ভালো প্রকৌশল দুটিকে একসাথে বাড়ায়, আর ঝুঁকি অনুযায়ী গতি ঠিক করে।

প্র ০৫SBOM থাকলেই কি পরের Log4Shell-এ আমরা নিরাপদ? কোথায় এর সীমা?

Log4Shell-এর সময় বহু প্রতিষ্ঠানের প্রথম কয়েক দিন গেছে একটি সহজ প্রশ্নে: “এটি কোথায় আছে?” কেউ ফাইল খুঁজেছেন, কেউ vendor-দের ইমেইল করেছেন, কেউ scanner-এর ওপর ভর করেছেন। CSRB-র রিপোর্টেও আক্রান্ত software শনাক্ত করার কঠিন দিকটি উঠে আসে। এই অভিজ্ঞতা SBOM-এর পক্ষে জোরালো যুক্তি দেয়। আলোচনাটি অবশ্য ২০২১ সালের EO 14028-এর পর থেকেই চলছিল।

SBOM সত্যিই প্রশ্নের উত্তর দ্রুত করে। কিন্তু এর সীমাও আছে। এক, মান নিয়ে সমস্যা: টুল সব component খুঁজে না পেতেও পারে, বিশেষ করে অন্য JAR-এর ভেতরে গুঁজে দেওয়া বা হাতে কপি করা কোড। দুই, SBOM তৈরির মুহূর্তের ছবি, চলমান system তার সাথে নাও মিলতে পারে। তিন, vendor-এর পণ্যের SBOM আপনি পেলেও তা না চাইলে বা না পড়লে লাভ নেই। চার, তালিকায় থাকা মানে ত্রুটি কাজে লাগানো যায় তা নয়, তাই বিশাল alert ঢেউ আসতে পারে। এখানে VEX আর reachability বিশ্লেষণ কাজে লাগে, যদিও VEX-এর ঘোষণাও যাচাই করা দরকার।

পাঁচ, SBOM সমস্যার জায়গা দেখায়, সমাধান করে না। CSRB বলেছে এই ত্রুটি ২০১৩ সালের কোড থেকে এসেছে, আর স্বেচ্ছাসেবীদের নিরাপত্তা-পর্যালোচনার সম্পদ ছিল না। অর্থাৎ মূল প্রশ্ন open source-এর অর্থায়নও। আবার ২০২৪ সালের xz ঘটনা দেখিয়েছে, তালিকায় থাকা উপাদানের ভেতরেও ক্ষতিকর জিনিস লুকিয়ে থাকতে পারে।

দরকার SBOM-এর সাথে asset inventory-র জোড়া। Component থেকে পণ্য, পণ্য থেকে চলমান যন্ত্র, যন্ত্র থেকে মালিক: এই শিকল এক ঘণ্টায় হাঁটা গেলে zero-day-র দিন অনেক সহজ হয়। এটি আগে থেকে মহড়া দেওয়াও ভালো।

মূল উপলব্ধি: SBOM মানচিত্র, রক্ষাকবচ নয়। মানচিত্র হালনাগাদ, পড়ার মানুষ আর পরিকল্পনা থাকলে তবেই সংকটে কাজে লাগে।

অনুশীলন

প্রথমে কাগজ-কলমে করুন, তারপর উত্তর মিলিয়ে দেখুন।

  1. CVSS হিসাব: AV:A/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N vector-এর ISS, Impact, Exploitability আর base score বের করুন।

    ISS = 1 − (0.44 × 0.78 × 1) = 0.6568. S:U, তাই Impact = 6.42 × 0.6568 = 4.2167.

    Exploitability = 8.22 × 0.62 × 0.44 × 0.85 × 0.62 = 1.1818.

    যোগফল 5.3984, 10-এর কম। Roundup-এ 5.4, Medium. উপরের cvss31.js-তে এই vector দিয়ে মিলিয়ে নিন।

  2. আউটপুট অনুমান করুন: চালানোর আগে বলুন, নিচের কোড কী ছাপবে।
    function roundup(x) {
      const i = Math.round(x * 100000);
      return i % 10000 === 0 ? i / 100000 : (Math.floor(i / 10000) + 1) / 10;
    }
    for (const x of [4.02, 4.0, 7.96, 10]) {
      console.log(roundup(x).toFixed(1));
    }

    আউটপুট চারটি লাইনে: 4.1, 4.0, 8.0, 10.0.

    4.02 সামান্য বাড়তি, তাই ওপরের ঘরে 4.1. 4.0-র কোনো বাড়তি নেই, তাই বদলায় না। 7.96 ওপরে গিয়ে 8.0, যা রেটিং হিসেবে High থাকে। 10 ঠিক পূর্ণ, 10.0.

  3. Ring-এর আকার: একটি খারাপ patch ৮% যন্ত্র ভাঙে। Canary-তে ৩০টি যন্ত্র রাখলে একটিও না ভাঙার সম্ভাবনা কত? ১০টির তুলনায় কী বদলাল, আর বড় ring-এর খরচ কী?

    একটি যন্ত্র ঠিক থাকার সম্ভাবনা 0.92, যন্ত্রগুলো স্বাধীন ধরে। ৩০টির সব ঠিক থাকার সম্ভাবনা 0.9230 ≈ 0.082, অর্থাৎ ৮.২%. ১০টিতে ছিল ৪৩.৪%. বড় canary অনেক বেশি নির্ভরযোগ্য।

    খরচ হলো, ring বড় হলে ভাঙলে বেশি যন্ত্র ভাঙবে, আর সময় লাগবে। আরও গুরুত্বপূর্ণ, যন্ত্রগুলো একই রকম হলে স্বাধীনতার ধারণা খাটে না। তাই ring-এ নানা ধরনের যন্ত্র রাখতে হয়।

  4. নীতিমালা সমালোচনা: একটি কাল্পনিক অনলাইন বাজারের নীতি: “CVSS 9-এর ওপরে হলে ৭ দিনে patch, বাকিগুলো সুবিধামতো। Patch না গেলে IT প্রধান ইমেইলে ছাড় দেবেন। প্রতি মাসে মোট কত CVE বন্ধ হলো, তা রিপোর্ট হবে।” ত্রুটিগুলো চিহ্নিত করে নতুন করে লিখুন।

    ত্রুটি: শুধু CVSS দেখে ক্রম, EPSS, KEV আর asset নেই। “সুবিধামতো” মানে সময়সীমা নেই। Exception-এ মেয়াদ, ঝুঁকির মালিক, compensating control আর নথি নেই। মোট বন্ধের সংখ্যা সহজ কাজকে পুরস্কার দেয়। Coverage, verify আর EOL নেই।

    নতুন খসড়া: অগ্রাধিকার KEV, EPSS, CVSS, exposure আর asset-এর গুরুত্ব মিলিয়ে P1 থেকে P4, প্রতিটির SLA লেখা। Ticket বন্ধ হবে যাচাইয়ের প্রমাণ দিয়ে। Exception হবে মেয়াদসহ, ঝুঁকির মালিকের স্বাক্ষরে, risk register-এ। রিপোর্টে coverage, অগ্রাধিকার অনুযায়ী MTTR, খোলা দুর্বলতার বয়স, SLA মানা, KEV-এ খোলা সংখ্যা আর EOL তালিকা।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমVulnerability management-এর ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. Asset খোঁজা আর তালিকা বানানো
  2. দুর্বলতা মূল্যায়ন আর false positive বাদ দেওয়া
  3. অগ্রাধিকার ঠিক করা
  4. Patch বা অন্য উপায়ে সারানো
  5. সারানো হয়েছে কি না যাচাই
  6. রিপোর্ট আর metric

CVSS v3.1 vector AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N-এর Impact 5.1771 আর Exploitability 2.8353 হলে base score কত?

  • 8.0
  • 8.7
  • 8.1
  • 10.0

EPSS স্কোর 0.40 মানে কী?

  • আপনার server-এ পরের ৩০ দিনে হামলার সম্ভাবনা ৪০%
  • পরের ৩০ দিনে CVE-টি বাস্তবে exploit হওয়ার অনুমিত সম্ভাবনা ৪০%
  • ত্রুটিটির ক্ষতির মাত্রা ১০-এর মধ্যে ৪
  • CVE-টি মোট CVE-র ৪০তম percentile-এ আছে

একটি CVE-র CVSS 7.5, KEV-এ আছে, আর সেটি internet-মুখী payment system-এ। আরেকটির CVSS 9.8, EPSS খুব কম, আর সেটি বিচ্ছিন্ন পরীক্ষাগারের যন্ত্রে। কোনটি আগে?

  • CVSS 9.8, কারণ স্কোর বেশি
  • দুটিই একসাথে, কারণ দুটিই High বা Critical
  • কোনোটিই নয়, মাসিক সূচি পর্যন্ত অপেক্ষা
  • CVSS 7.5, কারণ হামলার প্রমাণ, exposure আর asset-এর গুরুত্ব বেশি

Scanner একটি server-এ পুরোনো package version দেখে দুর্বলতা জানাল, কিন্তু Linux distribution-এর changelog বলছে fix আগেই বসানো। এটি সম্ভবত কী?

  • Backported fix-এর কারণে false positive
  • False negative
  • Zero-day
  • EOL software

পাঁচটি ticket-এর মধ্যে দুটি বন্ধ হয়েছে ২ ও ১১ দিনে। বাকি তিনটি ৬০ দিনের বেশি খোলা। MTTR 6.5 দিন দেখিয়ে “দল দারুণ করছে” বলা কেন ভুল?

  • গড়ের হিসাব ভুল হয়েছে
  • MTTR কখনো ব্যবহার করা উচিত নয়
  • MTTR শুধু বন্ধ ticket গোনে, পুরোনো খোলা ticket বাদ পড়ে
  • MTTR-এর হিসাবে scan coverage ঢোকানো হয়নি

একটি নির্দিষ্ট যন্ত্রের নির্মাতা এখন patch দিচ্ছেন না। সবচেয়ে ভালো পদক্ষেপ কোনটি?

  • Scanner-এ ওই ফল চিরতরে লুকিয়ে দেওয়া
  • Compensating control বসিয়ে ঝুঁকির মালিকের অনুমোদনে মেয়াদসহ লিখিত exception
  • Internet থেকে অনানুষ্ঠানিক patch নামিয়ে সরাসরি বসানো
  • মুখে বলে দেওয়া যে এটি পরে দেখা হবে

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন, অর্থ দেখাবে। এই পর্বের শব্দগুলো এখানে একসাথে:

মনে রাখুন

  1. চক্রের ছয় ধাপ: asset, মূল্যায়ন, অগ্রাধিকার, সারানো, যাচাই, রিপোর্ট. জানা নেই এমন asset-এর patch হয় না।
  2. CVE নাম, CWE ধরন, CVSS তীব্রতা, NVD বাড়তি তথ্য। CVSS v3.1-এ Roundup সবসময় ওপরের দিকে।
  3. Severity মানে ঝুঁকি নয়। EPSS সামনের অনুমান, KEV হামলার প্রমাণ, SSVC সিদ্ধান্তের কাঠামো, আর asset context আপনার ক্ষতির মাপ।
  4. Patch-এ পরীক্ষা, ring, উইন্ডো আর rollback. না গেলে compensating control আর মেয়াদসহ exception.
  5. Metric-এ coverage, MTTR আর age একসাথে. Zero-day-তে প্রথমে “কোথায় আছে”, যার উত্তর দেয় inventory আর SBOM.

পরের পর্বে: দুর্বলতা বন্ধ না হলে কী ঢোকে? পর্ব ৩৩-এ malware-এর ধরন, আচরণ আর detection.

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান