এই পর্বে যা শিখবেন
- IaaS, PaaS আর SaaS-এ রক্ষকের কাজ কোথায় বদলায়, কোথায় বদলায় না
- Cloud-এর ঝুঁকির ছবি, আর Capital One ও Snowflake-এর গ্রাহকদের ঘটনার রক্ষণের শিক্ষা
- Attack path আর toxic combination চিনে কাজের অগ্রাধিকার ঠিক করা
- CSPM, CIEM, CWPP, CNAPP, CIS Benchmark আর CSA Cloud Controls Matrix-এর সম্পর্ক
- Audit log থেকে alert বানানো, key-এর অপব্যবহার ধরা আর cloud incident সামলানো
১ · কার দায় কতটা: IaaS, PaaS আর SaaS
ধরুন আপনি ব্যবসা করবেন, আর জায়গা নেবেন তিনভাবে। মার্কেটে একটি খালি দোকান ভাড়া নিলে তাক, তালা, আলমারি, কর্মচারী, সবই আপনার। সাজানো দোকান ভাড়া নিলে তাক আর বিদ্যুৎ মালিকের, কিন্তু মাল সাজানো আর কর্মচারী আপনার। আর হোটেলের ঘর নিলে প্রায় সবই হোটেলের। তবু ঘরের চাবি কাকে দেবেন, আর গয়না টেবিলে ফেলে রাখবেন কি না, সে সিদ্ধান্ত আপনার। হোটেলের ঘরে চুরি হলে প্রথম প্রশ্নই হবে, দরজা কে খোলা রেখেছিল?
এই তিনটিই IaaS, PaaS আর SaaS. আর কাজের এই ভাগের নাম shared responsibility. বিস্তারিত চেকলিস্ট আছে Cloud & DevOps কোর্সের Cloud নিরাপত্তার ভিত্তি পর্বে, আর SaaS vendor-এর চুক্তির দিক দেখেছেন পর্ব ৭১-এ। এখানে আমরা নিরাপত্তা বিশ্লেষকের প্রশ্নটি করব: কোন স্তরে ভুল হলে আমাকেই ধরতে হবে?
তিন সেবায় দায়ের ভাগ
A simplified view. The exact split differs by provider and by service
রক্ষকের কাজও স্তর অনুযায়ী বদলায়। IaaS-এ আপনি OS-এর patch, malware আর network সবই দেখেন। PaaS-এ নজর সরে যায় সেটিং, কোড আর পরিচয়ে। SaaS-এ হাতে থাকে শুধু login-এর নিয়ম, sharing আর log. কিন্তু log-ও সবসময় আপনার ইচ্ছামতো পাবেন না। যে স্তর provider-এর, সেখানে আপনি ভাঙন ঠেকাতে পারেন না, দেখতেও অনেক সময় পারেন না। তাই যা দেখা যায় না, তার জন্য provider-এর advisory পড়া আর ব্যর্থতার পরিকল্পনা রাখা দরকার।
২ · Cloud-এর ঝুঁকির ছবি: পরিচয়ই নতুন সীমানা
অফিসের পুরোনো নিরাপত্তা ছিল দুর্গের মতো: বাইরে firewall, ভেতরে নিশ্চিন্ত। Cloud-এ সব কাজই একটি API call. সেই API internet থেকেই পাওয়া যায়, যদি হাতে বৈধ credential থাকে। তাই যাঁর চাবি আছে, তিনি দেয়াল না ভেঙেই ঢুকতে পারেন। একেই বলা হয় identity is the new perimeter. ব্যাংকের লকার রুমে দারোয়ান থাকলেও, আসল প্রশ্ন হয়ে দাঁড়ায় কার হাতে কোন চাবি।
আর একটি বদলও আছে। আগে একটি server বসাতে সপ্তাহ লাগত। এখন একটি ভুল সেটিং এক মিনিটে হাজারো ফাইল প্রকাশ্য করতে পারে। গতি বেড়েছে, ভুলের গতিও বেড়েছে।
| ঝুঁকি | কেন ঘটে | রক্ষকের মূল উত্তর |
|---|---|---|
| Misconfiguration | দ্রুত কাজ, হাতে বদল, ভুল default | নিয়ম আগে থেকে আটকানো, নিয়মিত যাচাই |
| খোলা storage | Object storage-এ public পড়ার অনুমতি | Public-access block প্রতিষ্ঠান জুড়ে |
| ফাঁস হওয়া key | কোড, CI log, ল্যাপটপ, চ্যাট | স্থায়ী key কমানো, secret scanning |
| বাড়তি অনুমতি | “আগে চলুক, পরে কমাব” | Least privilege, ব্যবহার দেখে অনুমতি কমানো |
| Metadata service | App-এর ত্রুটি দিয়ে ভেতরের credential বেরোনো | IMDSv2-এর মতো session-ভিত্তিক ব্যবস্থা, ছোট role |
| নজরের অভাব | Log বন্ধ, মালিক নেই, তালিকা নেই | কেন্দ্রীয় log, মালিকের tag, inventory |
দুটি প্রকাশিত ঘটনা
Capital One, ২০১৯: প্রকাশিত নথি অনুযায়ী একটি ভুলভাবে সাজানো web application firewall, SSRF-এর ধরনের সমস্যা, metadata service-এর সাময়িক credential আর প্রয়োজনের চেয়ে বড় role মিলে প্রায় ১০ কোটি মার্কিন ও ৬০ লাখ কানাডীয় মানুষের তথ্যের ক্ষতি ঘটায়। ধরা পড়ে বাইরের একটি বার্তায়। OCC পরে ৮ কোটি ডলার জরিমানা করে, আর প্রতিষ্ঠানটি অভিযোগ স্বীকার বা অস্বীকার করেনি। প্রযুক্তিগত দিক পর্ব ৪২-এ, control-এর বিশ্লেষণ পর্ব ৬৫-এ। এখানে শিক্ষা একটিই: একটি role ছোট হলে ক্ষতিও ছোট হতো।
Snowflake-এর গ্রাহকেরা, ২০২৪: Mandiant-এর জুন ২০২৪-এর রিপোর্ট বলে, প্রায় ১৬৫টি প্রতিষ্ঠানকে সম্ভাব্য ঝুঁকির কথা জানানো হয়। Credential এসেছিল মূলত Snowflake-এর সাথে সম্পর্কহীন যন্ত্রের infostealer malware থেকে। তিনটি ফাঁক ছিল: MFA নেই, credential বহুদিন বদলানো হয়নি, network allow list নেই। রিপোর্টে Snowflake-এর নিজের প্রতিষ্ঠানগত পরিবেশ ভাঙার প্রমাণ পাওয়া যায়নি। দায়ের আলোচনা আছে পর্ব ৭১-এ। এখানে শিক্ষা: কোনো exploit ছাড়াই শুধু login দিয়ে ডেটা বেরিয়ে যেতে পারে।
দুটি ঘটনাতেই provider-এর মূল পরিকাঠামো ভাঙার কথা প্রকাশিত রিপোর্টে আসেনি। তবে তাই বলে “সব দোষ গ্রাহকের” বলা ঠিক নয়। Provider-এর দিকেও গুরুতর ত্রুটি হয়, আর অনিরাপদ default-ও একটি নকশার সিদ্ধান্ত। ভাবনার প্রশ্নে এই বিতর্কে ফিরব।
৩ · Misconfiguration ধরা: CSPM ভেতরে কী করে
মহল্লার পাহারাদার রাতে প্রতিটি দরজা ঠেলে দেখেন, কোনটি খোলা। CSPM (Cloud Security Posture Management) ঠিক এই কাজটি করে। সে provider-এর API থেকে সেটিং পড়ে, নিয়মের সাথে মেলায় আর একটি finding লেখে। সে দরজা খোলে না, শুধু অবস্থা পড়ে। সাধারণত এই পড়ার জন্য একটি read-only role লাগে, আর সেটিও একটি বড় চাবি, তাই তাকেও সুরক্ষিত রাখতে হয়।
নিচের খেলনা scanner মেমরির কিছু বানানো resource পড়ে। কোনো আসল cloud-এ সে যায় না। লক্ষ করুন, severity শুধু সেটিং দিয়ে নয়, ডেটার ধরন দিয়েও ঠিক হচ্ছে।
// Toy CSPM. Fake resources in memory, no real cloud API is called.
const resources = [
{ id: 'bucket-invoices', type: 'bucket', data: 'personal', public: true, enc: true, owner: 'finance' },
{ id: 'bucket-website', type: 'bucket', data: 'public', public: true, enc: true, owner: 'web', reason: 'static site' },
{ id: 'bucket-logs', type: 'bucket', data: 'internal', public: false, enc: true, owner: null },
{ id: 'db-orders', type: 'database', data: 'personal', public: false, enc: false, owner: 'shop' },
{ id: 'vm-admin', type: 'vm', ports: [22], from: '0.0.0.0/0', tokenMeta: false, enc: true, owner: 'ops' },
{ id: 'vm-web', type: 'vm', ports: [443], from: '0.0.0.0/0', tokenMeta: true, enc: true, owner: 'web' },
];
// Our own teaching rules. Each severity depends on context, not only on the setting.
const rules = [
{ id: 'PUB-1', msg: 'public bucket, no recorded reason',
hit: r => r.type === 'bucket' && r.public && !r.reason,
sev: r => (r.data === 'public' ? 'LOW' : r.data === 'personal' ? 'CRITICAL' : 'HIGH') },
{ id: 'ENC-1', msg: 'encryption at rest is off', hit: r => !r.enc,
sev: r => (r.data === 'personal' ? 'HIGH' : 'MEDIUM') },
{ id: 'NET-1', msg: 'admin port open to the whole internet',
hit: r => r.type === 'vm' && r.from === '0.0.0.0/0' && r.ports.some(p => [22, 3389].includes(p)),
sev: () => 'HIGH' },
{ id: 'IMD-1', msg: 'token-based metadata access not required',
hit: r => r.type === 'vm' && !r.tokenMeta, sev: () => 'MEDIUM' },
{ id: 'OWN-1', msg: 'no owner on record', hit: r => !r.owner, sev: () => 'LOW' },
];
const rank = { CRITICAL: 0, HIGH: 1, MEDIUM: 2, LOW: 3 };
const findings = [];
for (const r of resources)
for (const rule of rules)
if (rule.hit(r)) findings.push({ sev: rule.sev(r), rule: rule.id, id: r.id, msg: rule.msg });
findings.sort((a, b) => rank[a.sev] - rank[b.sev]);
for (const f of findings) console.log(f.sev.padEnd(8), f.rule, f.id.padEnd(15), f.msg);
const clean = resources.filter(r => !findings.some(f => f.id === r.id)).map(r => r.id);
console.log(findings.length, 'findings in', resources.length, 'resources; clean:', clean.join(', '));CRITICAL PUB-1 bucket-invoices public bucket, no recorded reason প্রথমে এসেছে, কারণ খোলা bucket-এ ব্যক্তিগত ডেটা আছে। একই রকম খোলা bucket-website তালিকায় নেই, কারণ তার লিখিত কারণ আছে, আর ডেটাও প্রকাশ্য। ভালো scanner “public মানেই খারাপ” বলে না। শেষ লাইন 5 findings in 6 resources; clean: bucket-website, vm-web. vm-web-কে “clean” দেখে নিশ্চিন্ত হবেন না। পরের অংশে সেই VM-ই সবচেয়ে বিপজ্জনক পথের অংশ হবে, কারণ scanner এখানে patch বা role দেখেনি। সীমা: নিয়মগুলো আমাদের বানানো, আর scanner শুধু সেটিং দেখে, চলমান আচরণ নয়।
নিয়ম আসে কোথা থেকে
নিয়ম নিজে বানাতে হয় না। CIS Benchmark-এর AWS, Azure ও Google Cloud Foundations সংস্করণ প্রতিটি account-এর মৌলিক সেটিং ধরে যাচাইয়ের ধাপ দেয়, আর Level 1 ও Level 2 নামে দুই মাত্রা রাখে। Version দ্রুত বদলায়, তাই CIS-এর সাইট দেখবেন। CSA Cloud Controls Matrix (CCM) আরও ওপরের কাঠামো। Cloud Security Alliance-এর পাতা অনুযায়ী v4.1 (জানুয়ারি ২০২৬) ১৭টি domain-এ ২০৭টি control ধরে, আর সেগুলোকে ISO 27001-এর মতো standard-এর সাথে মেলায়। সহজ ভাগ: CIS বলে “এই সেটিং দেখুন”, CCM বলে “এই control থাকা চাই, কে দায়ী”। পর্ব ৩০-এ CIS, পর্ব ৬৯-এ compliance, আর পর্ব ৭১-এ CCM থেকে তৈরি CAIQ দেখেছেন।
আইনের সীমা: এই ধরনের যাচাই চালান শুধু নিজের বা লিখিত অনুমতি পাওয়া account-এ। অন্যের খোলা storage খুঁজে দেখা কৌতূহলের কাজ নয়, অননুমোদিত প্রবেশ হতে পারে। দেখুন পর্ব ৬। Provider-দেরও নিজস্ব পরীক্ষার নীতি আছে, যা নিজের account-এও মানতে হয়।
৪ · Attack path আর toxic combination: রক্ষকের চোখে
তিন হাজার finding-এর তালিকা হাতে নিয়ে কোনো দল এগোতে পারে না। এর বদলে একটি অন্য প্রশ্ন করুন: internet থেকে আমার সবচেয়ে সংবেদনশীল ডেটা পর্যন্ত কোনো পথ আছে কি? রেললাইনের কথা ভাবুন। একটি ফিশপ্লেট ঢিলা হলে মেরামত দরকার। কিন্তু ওই জায়গায় যদি সিগন্যালও খারাপ হয়, আর ট্রেনও পূর্ণ গতিতে আসে, তবে তিনটি ছোট সমস্যা মিলে একটি বড় দুর্ঘটনার ঝুঁকি।
Cloud-এ এই পথের নাম attack path. পথের প্রতিটি ধাপ একা দেখলে ছোট, কিন্তু মিলে গেলে যে বিপদ, তাকে অনেক cloud নিরাপত্তা পণ্য বলে toxic combination. শব্দটি access control-এর বইয়ে আরেক অর্থেও আসে: একজনের হাতে দুটি পরস্পরবিরোধী অধিকার (পর্ব ১৯)। মূল ভাবনা একই, ক্ষতি আসে যোগফল থেকে। রক্ষকের কাজ হামলা করা নয়, নিজের মানচিত্রে পথটি খুঁজে সবচেয়ে সস্তা আংটাটি ভাঙা।
- Internet
port 443দরকারি পথ - vm-web
patch নেইদুর্বল যন্ত্র - role-web
সব bucketবাড়তি অনুমতি - bkt-cust
ব্যক্তিগত ডেটারক্ষার লক্ষ্য
| নতুন তথ্য | |
| কে জানাল | |
| একা severity | |
| পথ | |
| অগ্রাধিকার |
- খোলা দরজা, কিন্তু দরকারি। Website-এর port 443 খোলা থাকবেই। CSPM-এর চোখে এটি বড় সমস্যা নয়, তাই LOW. আগের scanner-ও
vm-web-কে clean বলেছিল। - Patch নেই। CWPP বা vulnerability scanner জানাল, web software-এ একটি পরিচিত ত্রুটির patch বসেনি। পর্ব ৩২-এর নিয়মে এটি একা HIGH. পথ এখনো অসম্পূর্ণ, কারণ যন্ত্র দখল হলেও ডেটায় পৌঁছানোর চাবি দেখা যায়নি।
- বড় চাবি। CIEM দেখাল,
role-webসব bucket পড়তে পারে। গত ৯০ দিনে সে ব্যবহার করেছে শুধুbkt-assets. একা এটি MEDIUM, তবে যন্ত্রের সাথে জুড়ে যাওয়ায় অগ্রাধিকার HIGH-ই থাকে। - পথ সম্পূর্ণ। Data tag জানাল, সেই নাগালের ভেতরে
bkt-cust-এ গ্রাহকের ব্যক্তিগত ডেটা। এখন চারটি বিন্দু এক রেখায়। কোনো একক finding CRITICAL ছিল না, কিন্তু মিলিত অগ্রাধিকার CRITICAL. এটি সম্ভাব্য পথ, ঘটে যাওয়া ঘটনা নয়। - সবচেয়ে সস্তা আংটা। Patch-এর জন্য release-এর সময় লাগবে। Role সরু করতে লাগে একটি ছোট, পরীক্ষিত পরিবর্তন। তাই আগে role থেকে
bkt-custবাদ। পথ ভেঙেছে, তবে patch-এর কাজ HIGH হিসেবেই আছে। - যাচাই। “ঠিক করেছি” কথায় নয়, আবার যাচাইয়ে প্রমাণ। পথের তালিকায় toxic পথ নেই, app-ও চলছে, আর patch-এর তারিখ ঠিক হয়েছে। Ticket বন্ধ হবে patch বসার পর।
এই চিন্তাটিই একটি গ্রাফের সমস্যা। Resource হলো বিন্দু, “পৌঁছাতে পারে” হলো রেখা। নিচের কোড কাল্পনিক resource-এর ওপর internet থেকে সংবেদনশীল ডেটার পথ খোঁজে। এটি কোনো হামলার ধাপ নয়, নিজের মানচিত্র পড়া।
// Toy attack path graph for defenders. Fake resources, in memory only.
const nodes = {
'internet': {}, 'vm-dev': {}, 'role-dev': {}, 'bkt-assets': {},
'vm-web': { unpatched: true }, 'vm-batch': { unpatched: true },
'role-web': { broad: true }, 'role-batch': { broad: true },
'bkt-cust': { sensitive: true }, 'db-orders': { sensitive: true },
};
const edges = {
'internet': ['vm-web', 'vm-dev'],
'vm-web': ['role-web'], 'vm-dev': ['role-dev'], 'vm-batch': ['role-batch'],
'role-web': ['bkt-assets', 'bkt-cust'], 'role-dev': ['bkt-assets', 'db-orders'],
'role-batch': ['bkt-cust', 'db-orders'],
};
function paths(g, at = 'internet', seen = [at], out = []) {
if (nodes[at].sensitive) out.push(seen);
for (const next of g[at] || [])
if (!seen.includes(next)) paths(g, next, [...seen, next], out);
return out;
}
const toxic = p => p.some(n => nodes[n].unpatched) && p.some(n => nodes[n].broad);
function report(label, g) {
const found = paths(g);
console.log(label + ':', found.length, 'path(s) to sensitive data');
for (const p of found) console.log(' ', toxic(p) ? 'TOXIC ' : 'review', p.join(' -> '));
}
report('Before', edges);
report('After narrowing role-web', { ...edges, 'role-web': ['bkt-assets'] });
const reach = (at, seen = new Set([at])) => {
for (const x of edges[at] || []) if (!seen.has(x)) { seen.add(x); reach(x, seen); }
return seen;
};
const hidden = Object.keys(nodes).filter(n => !reach('internet').has(n));
console.log('Not reachable from internet:', hidden.join(', '));TOXIC internet -> vm-web -> role-web -> bkt-cust পথে তিনটি শর্তই মেলে: internet থেকে নাগাল, patch-হীন যন্ত্র আর বড় role. review internet -> vm-dev -> role-dev -> db-orders toxic নয়, তবু মানুষের চোখ দরকার, কারণ dev যন্ত্র কেন orders database-এ পৌঁছায়? role-web সরু করতেই After narrowing role-web: 1 path(s). একটি পরিবর্তনে সবচেয়ে খারাপ পথ শেষ। আর Not reachable from internet: vm-batch, role-batch শেখায় উল্টো কথাটি: vm-batch-ও patch-হীন, তার role-ও বড়, তবু তালিকায় সে পেছনে যেতে পারে। সতর্কতা: “এখন পৌঁছানো যায় না” মানে “নিরাপদ” নয়। ভেতরে ঢুকে lateral movement হলে এই হিসাব বদলায় (পর্ব ২২)। আসল গ্রাফ অনেক বড়, আর ভুল সম্পর্কও থাকতে পারে।
৫ · CSPM, CIEM, CWPP আর CNAPP: কে কোন প্রশ্নের উত্তর দেয়
Stepper-এ দেখলেন, পথের চারটি বিন্দু চারটি আলাদা উৎস থেকে এসেছে। Cloud নিরাপত্তার সংক্ষিপ্ত নামগুলো এখান থেকেই। নামগুলো মূলত বাজারের শ্রেণি, কোনো standard নয়, তাই সংজ্ঞা vendor-ভেদে কিছুটা আলাদা।
| নাম | মূল প্রশ্ন | কী দেখে | কী পারে না |
|---|---|---|---|
| CSPM | কোন দরজা খোলা? | Cloud-এর সেটিং | চলমান process-এর ভেতর দেখা |
| CIEM | কার হাতে কত চাবি? | পরিচয়, অনুমতি, ব্যবহারের ইতিহাস | অনুমতিটি ব্যবসার জন্য দরকারি কি না বলা |
| CWPP | চলমান workload কি সুস্থ? | VM, container, function-এর দুর্বলতা ও আচরণ | Account-এর সেটিং দেখা |
| DSPM | সংবেদনশীল ডেটা কোথায়? | Storage ও database-এর শ্রেণি, নাগাল | ডেটা ব্যবহারের উদ্দেশ্য বোঝা |
| SSPM | SaaS-এর সেটিং ঠিক আছে? | SaaS-এর sharing, MFA, যুক্ত app | সেবাদাতার ভেতরের দুর্বলতা দেখা |
| CNAPP | সব মিলিয়ে কোন পথ বিপজ্জনক? | ওপরের বেশিরভাগ, সাথে build-এর সময়ের যাচাই | মালিক, অগ্রাধিকার আর সংশোধনের সিদ্ধান্ত |
= CNAPP, এক গ্রাফে জোড়া
Gartner ২০২১ সালের আগস্টের একটি প্রতিবেদনে CNAPP নামটি সামনে আনে বলে সাধারণত ধরা হয়, আর ধারণাটি ছিল আলাদা যন্ত্রের alert এক প্রেক্ষাপটে আনা। সুবিধা হলো সংযোগ: stepper-এর মতো পথ দেখা। ঝুঁকিও আছে: একটি পণ্যের সব অংশ সমান ভালো নয়, আর একক vendor-এর ওপর নির্ভরতা বাড়ে। ছোট দলের জন্য provider-এর নিজের সেবাই শুরু হিসেবে যথেষ্ট হতে পারে। উদাহরণ হিসেবে AWS-এ Security Hub, Azure-এ Defender for Cloud, Google Cloud-এ Security Command Center. নামগুলো সুপারিশ নয়, আর plan ও ক্ষমতা বদলায়।
যন্ত্র বাছাইয়ের প্রশ্ন: Agent লাগে, নাকি snapshot পড়ে কাজ করে? Agent-হীন পথ সহজে সবকিছু ঢাকে, কিন্তু চলমান আচরণ কম দেখে। Agent গভীরে দেখে, কিন্তু চালাতে খরচ হয়। Finding-এর মালিক স্বয়ংক্রিয়ভাবে ঠিক হয় কি? Ticket-এ যায় কি? যে finding-এর মালিক নেই, সেটি সংখ্যা মাত্র।
৬ · Audit trail: কী রাখবেন, কিসে alert দেবেন
অফিসের রেজিস্টার খাতায় যেমন লেখা থাকে কে এলেন, কখন, কার কাছে, তেমনি cloud audit trail-এ লেখা থাকে কোন পরিচয় কোন API call করল। Log-এর গঠন আর সেটআপ আছে Cloud নিরাপত্তার ভিত্তি পর্বে, আর log রক্ষার নীতি পর্ব ৫৫-এ। বিশ্লেষকের কাছে তিনটি বিষয় জরুরি:
- দুই ধরনের event: Management event বলে কে সেটিং বদলাল। Data event বলে কে কোন ফাইল পড়ল। দ্বিতীয়টি অনেক provider-এ নিজে থেকে চালু থাকে না, আর খরচ বাড়ায়। তাই শুধু সংবেদনশীল storage-এ চালু করা একটি বাস্তব মাঝপথ।
- Log আলাদা জায়গায়: যে account-এ ঘটনা ঘটছে, log সেখানে থাকলে দখলকারীও মুছতে পারেন। আলাদা account-এ, অপরিবর্তনীয় storage-এ রাখুন (Governance দেখুন)।
- Provider, SaaS, workload: Cloud-এর log, SaaS-এর log আর VM-এর log একসাথে SIEM-এ না এলে একটি ঘটনার গল্প টুকরো হয়ে থাকে (পর্ব ৫৬)।
যেগুলোতে সাধারণত alert দেওয়া হয়
| ঘটনা | কেন গুরুত্বপূর্ণ | মিথ্যা alert-এর উৎস |
|---|---|---|
| Audit log বন্ধ বা বদল | প্রমাণ মোছার চেষ্টা হতে পারে | অনুমোদিত পরিবর্তন, তবে বিরল |
| Public-access block বন্ধ | ডেটা বাইরে যাওয়ার প্রস্তুতি হতে পারে | নতুন website-এর কাজ |
| অন্যের জন্য নতুন key বা role trust বদল | Persistence-এর চিহ্ন হতে পারে | Automation, offboarding |
| Root বা সর্বোচ্চ account-এর ব্যবহার | এই account দৈনন্দিন কাজে লাগে না | Billing-এর কিছু কাজ |
| MFA ছাড়া login | Password চুরি গেলেই শেষ | SSO-র ভুল log পড়া |
| Machine পরিচয়ের নতুন ঠিকানা | Key চুরির সবচেয়ে ভালো সংকেতের একটি | CI-এর ঠিকানা বদলানো |
| বহু Denied call একসাথে | কেউ অনুমতির সীমা মাপছে কি না | নতুন release-এর ভুল role |
| অস্বাভাবিক পরিমাণ ডেটা পড়া | সম্ভাব্য exfiltration | Backup, analytics job |
নিচের খেলনা ব্যবস্থায় ১০টি বানানো event আছে। ঠিকানাগুলো documentation-এর জন্য সংরক্ষিত, ঘড়িও কাল্পনিক। লক্ষ করুন, কিছু নিয়ম একটি event দেখেই বাজে, আর একটি নিয়ম কয়েকটি event মিলিয়ে দেখে।
// Toy cloud audit log. Fake identities, documentation IP addresses, simulated clock.
const events = [
{ t: '09:02', who: 'alice', act: 'Login', mfa: true, ip: '198.51.100.7' },
{ t: '09:10', who: 'ci-deploy', act: 'UpdateService', ip: '198.51.100.20' },
{ t: '13:40', who: 'bob', act: 'Login', mfa: false, ip: '198.51.100.8' },
{ t: '14:01', who: 'ci-deploy', act: 'ListBuckets', ip: '203.0.113.9' },
{ t: '14:02', who: 'ci-deploy', act: 'GetPolicy', denied: true, ip: '203.0.113.9' },
{ t: '14:02', who: 'ci-deploy', act: 'ListUsers', denied: true, ip: '203.0.113.9' },
{ t: '14:03', who: 'ci-deploy', act: 'ListRoles', denied: true, ip: '203.0.113.9' },
{ t: '14:05', who: 'ci-deploy', act: 'CreateAccessKey', target: 'backup-svc', ip: '203.0.113.9' },
{ t: '14:07', who: 'ci-deploy', act: 'DisablePublicBlock', ip: '203.0.113.9' },
{ t: '14:09', who: 'ci-deploy', act: 'StopLogging', ip: '203.0.113.9' },
];
const knownIps = { 'ci-deploy': ['198.51.100.20'], alice: ['198.51.100.7'], bob: ['198.51.100.8'] };
const single = [
['CRIT', e => e.act === 'StopLogging', 'audit logging stopped'],
['HIGH', e => e.act === 'DisablePublicBlock', 'public access block turned off'],
['HIGH', e => e.act === 'CreateAccessKey' && e.target !== e.who, 'key created for another identity'],
['MED', e => e.act === 'Login' && !e.mfa, 'login without MFA'],
['MED', e => !knownIps[e.who].includes(e.ip), 'identity used from a new address'],
];
const alerts = [];
for (const e of events)
for (const [sev, test, msg] of single)
if (test(e)) alerts.push({ t: e.t, sev, who: e.who, msg, act: e.act });
// Correlation: 3 denied calls by one identity is a pattern, one denial is not.
const denied = {};
for (const e of events) if (e.denied) (denied[e.who] ||= []).push(e.t);
for (const [who, ts] of Object.entries(denied))
if (ts.length >= 3) alerts.push({ t: ts[2], sev: 'HIGH', who, msg: ts.length + ' denied calls in a burst', act: '-' });
alerts.sort((a, b) => a.t.localeCompare(b.t));
for (const a of alerts) console.log(a.t, a.sev.padEnd(4), a.who.padEnd(10), a.act.padEnd(18), a.msg);
const ci = alerts.filter(a => a.who === 'ci-deploy').length;
console.log(events.length, 'events ->', alerts.length, 'alerts; ci-deploy has', ci, '= 1 incident to triage');শেষ লাইন 10 events -> 12 alerts; ci-deploy has 11 = 1 incident to triage সবচেয়ে বড় শিক্ষা। Alert-এর সংখ্যা event-এর চেয়ে বেশি! তাই এগুলোকে পরিচয় ধরে এক ঘটনায় জোড়া দরকার (পর্ব ৬০)। প্রথম সংকেত ১৪:০১-এর identity used from a new address. মাঝারি, কিন্তু machine পরিচয়ের ঠিকানা সাধারণত স্থির, তাই এটিই আগে ধরার সুযোগ। আর ১৪:০৯-এর audit logging stopped পর্যন্ত অপেক্ষা করলে আট মিনিট দেরি। bob-এর MFA-হীন login আলাদা বিষয়, তাকে এই ঘটনায় জড়াবেন না। সীমা: Burst নিয়মটি সময়সীমা মাপে না, শুধু গোনে, আর denied ছাড়া সফল কাজ এই নিয়মে ধরা পড়ে না।
বাস্তবে এমন নিয়ম Sigma-র মতো নিরপেক্ষ ফরম্যাটে লেখা যায়। নিচে AWS-এর log ক্ষেত্র ধরে একটি উদাহরণ। আসল পরিবেশে চালানোর আগে নিজের field-এর নাম মিলিয়ে নিন।
title: Cloud Audit Logging Stopped or Deleted
status: experimental
description: Detects a change that stops or removes the audit trail
logsource:
product: aws
service: cloudtrail
detection:
selection:
eventSource: cloudtrail.amazonaws.com
eventName:
- StopLogging
- DeleteTrail
- UpdateTrail
condition: selection
falsepositives:
- Approved change by the platform team
level: high৭ · Key-এর অপব্যবহার ধরা আর workload identity
স্থায়ী access key হলো এমন বাড়ির চাবি, যা বছরের পর বছর কেউ বদলায় না, আর কপি হলে তালা বুঝতেও পারে না। Long-lived credential-এর বিপদ সহজ: ফাঁসের দিন থেকে বাতিলের দিন পর্যন্ত পুরো সময়টাই ঝুঁকি। Key-এর বিস্তারিত আছে Cloud IAM আর Secret আর KMS পর্বে। বিশ্লেষক প্রথমে key-এর একটি হিসাব চান।
// Toy key report. Fake key ids, fixed "today" so the output never changes.
const TODAY = '2026-10-31';
const MAX_AGE = 90, IDLE = 60;
const keys = [
{ id: 'key-01', owner: 'ci-deploy', made: '2026-09-20', used: '2026-10-30', on: true, scope: 'deploy' },
{ id: 'key-02', owner: 'report-app', made: '2025-02-11', used: '2026-10-29', on: true, scope: 'read-data' },
{ id: 'key-03', owner: 'old-intern', made: '2024-06-03', used: '2024-12-15', on: true, scope: 'admin' },
{ id: 'key-04', owner: null, made: '2026-01-15', used: null, on: true, scope: 'read-data' },
{ id: 'key-05', owner: 'backup-svc', made: '2026-08-01', used: '2026-10-28', on: false, off: '2026-10-20', scope: 'backup' },
];
const day = s => Date.parse(s + 'T00:00:00Z') / 86400000;
const ago = s => day(TODAY) - day(s);
function review(k) {
if (!k.on) return k.used > k.off ? ['INVESTIGATE', 'used after disable date'] : ['OK', 'disabled'];
const idle = k.used ? ago(k.used) : ago(k.made);
if (idle > IDLE) return [k.scope === 'admin' ? 'DISABLE NOW' : 'DISABLE', 'idle ' + idle + ' days'];
if (ago(k.made) > MAX_AGE) return ['ROTATE', 'age ' + ago(k.made) + ' days'];
return ['OK', 'in policy'];
}
console.log('key owner age scope action why');
const tally = {};
for (const k of keys) {
const [act, why] = review(k);
tally[act] = (tally[act] || 0) + 1;
console.log(k.id.padEnd(7), (k.owner || '(none)').padEnd(11), String(ago(k.made)).padStart(3),
' ', k.scope.padEnd(10), act.padEnd(12), why);
}
console.log(JSON.stringify(tally));
const active = keys.filter(k => k.on);
const avg = active.reduce((s, k) => s + ago(k.made), 0) / active.length;
console.log('active keys:', active.length, '| average age:', avg.toFixed(1), 'days');key-03-এর লাইন 880 admin DISABLE NOW idle 685 days সবচেয়ে জরুরি: admin অধিকার, মালিক আর কাজে নেই। key-02 বয়সে পুরোনো, কিন্তু চালু কাজে লাগে, তাই হঠাৎ বন্ধ না করে পরিকল্পিত rotation. key-05-এর INVESTIGATE used after disable date বয়সের প্রশ্ন নয়, সম্ভাব্য incident বা ভুল রেকর্ড। শেষ লাইনে active keys: 4 | average age: 459.3 days. গড় নিজে কিছু সারায় না, তবে নেতৃত্বকে দেখানোর একটি মাপ। ৯০ আর ৬০ দিন আমাদের ধরা সীমা, standard নয়। বদলানোর নিয়ম নিয়ে মতভেদ আছে, তাই স্থায়ী key বদলানোর চেয়ে সরিয়ে ফেলাই ভালো লক্ষ্য।
চুরি যাওয়া key কীভাবে ধরা পড়ে
একটি key চুরি হলে log-এ সে বৈধ দেখায়। ধরা পড়ে আচরণে: নতুন ঠিকানা, নতুন অঞ্চল, যে API আগে কখনো ডাকেনি, Denied-এর ঝাঁক। পর্ব ৫৮-এর মতো baseline না থাকলে “নতুন” বোঝাই যায় না। একটি সহজ ফাঁদও আছে: honeytoken, কোনো কাজে লাগে না এমন একটি key, যেটি ব্যবহার হলেই নিশ্চিত সংকেত।
| সময় | |
| Key | |
| চলমান session | |
| জানা তথ্য |
- খবর। Secret scanning জানাল, একটি public repository-তে key পাওয়া গেছে। ঘড়ি শুরু। খবর যেভাবেই আসুক, ধরে নিন key ইতিমধ্যে কেউ দেখেছেন। Commit মুছে দিলেও সেটি অপ্রকাশিত হয় না।
- মালিক আর ক্ষমতা। ছয় মিনিটে জানা গেল key-টি CI-এর, deploy করতে পারে। এই তথ্য ঠিক করে দেয় কত বড় ঘটনা, আর কাকে ডাকতে হবে। Key-এর মান চ্যাটে পেস্ট নয়, শুধু id.
- বন্ধ, মুছে ফেলা নয়। Key Disabled করা হলো। মুছলে তদন্তে অসুবিধা হয়, আর ভুল হলে ফেরানো যায় না। Deploy থেমেছে, এই ক্ষতি মেনে নেওয়া হলো, দলকে জানানো হলো।
- Session বাতিল। Key বন্ধ হলেও তা দিয়ে আগে নেওয়া temporary credential অনেক ক্ষেত্রে মেয়াদ পর্যন্ত চলতে পারে। তাই session revocation আলাদা ধাপ। পদ্ধতি provider-ভেদে আলাদা।
- Log খোঁজা। Commit-এর সময় থেকে key id ধরে audit trail দেখা হলো। অচেনা ঠিকানা 203.0.113.9 থেকে ২টি call, দুটিই Denied. নতুন key বা role তৈরি হয়নি। Data event না থাকলে “ডেটা পড়া হয়নি” বলা যেত না।
- বদল, আর ভালো নকশা। নতুন স্থায়ী key নয়। CI-কে workload identity-তে আনা হলো, যাতে প্রতিটি job অল্প সময়ের credential পায়। Deploy আবার চালু।
- শেখা। তদন্ত বন্ধ হলে পুরোনো key মোছা হলো। Commit-এর আগে scanning যোগ হলো, আর নতুন স্থায়ী key বানানো guardrail দিয়ে সীমিত হলো। দোষারোপ নয়, ব্যবস্থার ফাঁক দেখা (পর্ব ৫৪)।
Workload identity মানে প্রোগ্রাম কোথায় চলছে, সেটিই তার পরিচয়ের প্রমাণ। VM, Kubernetes pod বা CI job, federation আর OIDC-এর মতো পথে অল্প মেয়াদের credential পায়। উদাহরণ হিসেবে AWS-এ IAM role, Azure-এ managed identity, Google Cloud-এ attached service account. চুরি গেলেও ক্ষতির সময় ছোট। তবে trust-এর শর্ত ঢিলা হলে, যেমন যেকোনো branch-কে deploy role দিলে, সমস্যা শুধু জায়গা বদলায়। সেই শর্তগুলোই এখন আপনার non-human identity-র audit-এর বিষয়।
৮ · Guardrail, ডেটা সুরক্ষা, multi-cloud আর SaaS posture
আগেই আটকানো
ধরা পড়ার পরে সারানোর চেয়ে ভুলটি হতে না দেওয়া সস্তা। ফ্লাইওভারের রেলিং গাড়ি চালায় না, শুধু পড়ে যাওয়া আটকায়। Guardrail তেমনি admin-এর হাতেও একটি সীমা রাখে। AWS-এর SCP, Azure Policy আর Google-এর Organization Policy একই লক্ষ্যের উদাহরণ। আর policy as code সেই নিয়মকে merge-এর আগেই পরীক্ষা করে। লেখার ধরন আর উদাহরণ আছে Governance পর্বে, মূল্যায়নের হিসাব IAM policy evaluation পর্বে। বিশ্লেষকের জন্য প্রথম পাঁচটি নিয়ম সাধারণত এমন:
- Audit log বন্ধ বা log account মোছা নিষেধ।
- প্রতিষ্ঠান জুড়ে public-access block, ব্যতিক্রম শুধু লিখিত অনুমোদনে।
- অব্যবহৃত অঞ্চল বন্ধ।
- নতুন VM-এ session-ভিত্তিক metadata বাধ্যতামূলক।
- মানুষের জন্য স্থায়ী key তৈরি নিষেধ।
আগে “audit” বা শুধু-জানানোর ধরনে চালান, কারণ ভুল guardrail পুরো দলের কাজ থামাতে পারে। Break-glass-এর ব্যতিক্রমও আগে ঠিক করুন।
ডেটা সুরক্ষা: encryption একা যথেষ্ট নয়
Encryption at rest এখন অনেক সেবায় নিজে থেকেই চালু। এতে disk চুরির ঝুঁকি কমে। কিন্তু বৈধ role যদি ফাইল পড়তে চায়, সেবা নিজেই decrypt করে দেয়। Capital One-এর প্রকাশিত তথ্যও এই দিকেই ইঙ্গিত করে: বৈধ role-এর কাছে encryption কোনো দেয়াল নয়। Customer-managed key এখানে একটি দ্বিতীয় তালা দেয়, কারণ ডেটা পড়তে হলে KMS-এ key ব্যবহারের অনুমতিও লাগে, আর সেই ব্যবহার log-এ থাকে। Secret আর KMS পর্বে envelope encryption দেখুন।
Public-access block হলো সেই বাইরের সিটকিনি, যা ভেতরের ভুল অনুমতিকেও অকেজো করে। AWS এপ্রিল ২০২৩ থেকে নতুন S3 bucket-এ এটি নিজে থেকে চালু রাখে, তবে পুরোনো bucket-এ এই বদল আসেনি। তাই পুরোনো সম্পদের হিসাব আলাদা করে দেখতে হয়। Azure Storage আর Google Cloud Storage-এ একই লক্ষ্যের সেটিং আছে, নাম আলাদা।
Multi-cloud: মনোযোগের খরচ
দুই cloud মানে দুই গুণ নিরাপত্তা নয়, প্রায়ই দুই গুণ শেখা। প্রতিটির IAM আলাদা, log আলাদা, default আলাদা। একটি হিসাব ধরুন, সব সংখ্যা আমাদের অনুমান: প্রতি cloud-এ ৪০টি জরুরি detection rule, বছরে প্রতিটির পর্যালোচনায় ২ ঘণ্টা। তিন cloud-এ ৪০ × ৩ × ২ = ২৪০ ঘণ্টা, মানে একজনের প্রায় ছয় সপ্তাহ, আর এটি শুধু rule দেখার সময়। Multi-cloud-এর ব্যবসায়িক কারণ থাকতে পারে, কিন্তু সবচেয়ে ভালো জানা cloud-এ ভালো নিরাপত্তা প্রায়ই তিন cloud-এর পাতলা নিরাপত্তার চেয়ে ভালো।
SaaS-এর posture
প্রতিষ্ঠানের ডেটার বড় অংশ এখন email, ফাইল শেয়ার, CRM-এর মতো SaaS-এ। CSPM সেখানে পৌঁছায় না, তাই SSPM বা হাতের চেকলিস্ট লাগে। দেখুন: সব account-এ MFA আর SSO সত্যিই চালু কি, প্রকাশ্য link কয়টি, কোন OAuth app ডেটা পড়ে, প্রাক্তন কর্মীর account বন্ধ কি, আর audit log কত দিন থাকে। Snowflake-এর গ্রাহকদের ঘটনা এই তালিকার প্রথম তিনটি প্রশ্নেরই গল্প।
৯ · Cloud incident: session বন্ধ, snapshot রাখা, তারপর ফেরা
পর্ব ৬১ আর পর্ব ৬২-এর ধাপগুলোই এখানে খাটে। Cloud-এ তিনটি বদল আছে। প্রমাণ দ্রুত হারায়, কারণ autoscaling যন্ত্র মুছে দিতে পারে। Containment-এর প্রথম হাতিয়ার network নয়, identity. আর প্রমাণ সংগ্রহ করা যায় API দিয়ে। কাল্পনিক ঘটনাটি দেখুন।
| ঘড়ি | |
| অবস্থা | |
| role-report | |
| vm-report-1 | |
| প্রমাণ |
- সংকেত এলো। Threat detection জানাল,
vm-report-1-এর role credential VM-এর বাইরে একটি অচেনা ঠিকানা থেকে ব্যবহার হচ্ছে। VM-এর পরিচয় VM-এর বাইরে দেখা যাওয়া শক্তিশালী সংকেত। প্রথম প্রলোভন VM মুছে দেওয়া, সেটি করা যাবে না। - আগে log নিরাপদ। Incident ঘোষণা হলো। Log আলাদা account-এ আছে, চালু আছে কি না দেখা হলো, আর মুছে যাওয়া আটকাতে retention বাড়ানো হলো। পর্ব ৬৩-এর chain of custody এখান থেকে শুরু।
- পরিচয় থামানো।
role-report-এর চলমান session বাতিল, সংশ্লিষ্ট key বন্ধ। মনে রাখুন, VM চালু থাকলে সে আবার credential পেতে পারে, তাই পরের ধাপ জরুরি। - আলাদা করা আর snapshot. VM-কে load balancer আর autoscaling থেকে সরিয়ে একটি বন্ধ network-এ আনা হলো। Snapshot নেওয়া হলো, tag আর সময়সহ, আলাদা forensic account-এ কপি। Snapshot-এ memory থাকে না, তাই প্রয়োজনে আগেই memory সংগ্রহের সিদ্ধান্ত নিতে হয়।
- আকার মাপা। Data event দেখাল ১,২৪০টি object পড়া হয়েছে। Audit trail ধরে খোঁজা হলো নতুন key, নতুন role, trust-এর বদল, অন্য অঞ্চলের resource. একটি অজানা key পাওয়া গেল, সেটিও বন্ধ করা হলো। আইনি মূল্যায়ন শুরু (পর্ব ৭০)।
- ফেরা। দূষিত VM সারানো নয়, পরিষ্কার image থেকে নতুন করে চালানো। Role সরু করা হলো। মূল দুর্বলতা বন্ধ না করলে আবার একই পথ খুলবে। Snapshot রাখা হলো নির্দিষ্ট মেয়াদে।
- শেখা। কোন detection আগে বাজতে পারত? মহড়ায় এই পরিস্থিতি যোগ হলো। আর একটি CSPM নিয়ম আর একটি guardrail তৈরি হলো, যাতে একই ফাঁক ফিরে না আসে।
Incident-এর দিনে যা খুঁজে পাওয়া কঠিন, তা আগেই ঠিক রাখুন: forensic account, snapshot কপির অনুমতি, encrypted snapshot পড়ার জন্য key-এর অনুমতি, break-glass role, আর provider-এর support-এ যোগাযোগের পথ। Encrypted disk-এর snapshot অন্য account-এ পড়তে key-এর অনুমতি না থাকলে মাঝরাতে আটকে যাবেন।
আরও গভীরে: IaaS, PaaS, SaaS-এর বহুল ব্যবহৃত সংজ্ঞা আছে NIST SP 800-145 (২০১১)-এ। ISO/IEC 27017 cloud সেবার control-এর নির্দেশিকা। MITRE ATT&CK-এর Cloud matrix-এ T1078.004 (Cloud Accounts) আর T1552.005 (Cloud Instance Metadata API)-এর মতো technique-এর সাথে detection-এর পরামর্শও আছে (পর্ব ৫)। NIST SP 800-61 Rev. 3 (২০২৫) incident response-কে CSF 2.0-এর সাথে মিলিয়েছে। পথভিত্তিক ভাবনার গ্রাফ-তত্ত্বের দিকটি পুরোনো attack graph গবেষণা থেকে এসেছে।
পরীক্ষা ও ইন্টারভিউতে:
- Shared responsibility এক লাইনে? Provider cloud-এর নিরাপত্তা দেখে, গ্রাহক cloud-এর ভেতরে নিজের ডেটা, পরিচয় আর সেটিং দেখেন। ভাগ সেবাভেদে বদলায়।
- CSPM আর CWPP-র পার্থক্য? CSPM সেটিং দেখে, CWPP চলমান workload দেখে।
- Toxic combination কী? কয়েকটি ছোট সমস্যা, যারা মিলে সংবেদনশীল সম্পদের পথ বানায়।
- Key ফাঁস হলে আগে কী? Key বন্ধ করা আর চলমান session বাতিল। Commit মোছা যথেষ্ট নয়।
- Encryption থাকলে bucket কি নিরাপদ? না। বৈধ role-এর জন্য সেবা decrypt করে দেয়, তাই অনুমতিও ছোট রাখতে হয়।
১০ · AI-এর যুগে cloud নিরাপত্তা
AI একটি finding-এর তালিকা গুছিয়ে দিতে, policy পড়ে ব্যাখ্যা করতে আর log query লিখতে সত্যিই কাজে লাগে। কিন্তু cloud-এ একটি ভুল পরামর্শ এক ক্লিকে পুরো account-এ ছড়ায়। আর AI-কে cloud-এ চালানো agent নিজেই একটি নতুন non-human identity, যার অনুমতিও ছোট রাখতে হয় (পর্ব ৫১)।
| AI-এর ভুল | ক্ষতি | যাচাই |
|---|---|---|
“Access denied” ঠিক করতে Action: "*" দেয় | Role বড় হয়ে নতুন পথ খোলে | Diff পড়া, policy simulator, log দেখে ছোট করা |
| Upload ঠিক করতে bucket public করে | ডেটা প্রকাশ্য | Public-access block চালু রেখে অন্য পথ |
| নেই এমন API, setting বা CVE বানায় | ভুল নিয়ম, ভুল ভরসা | Provider-এর নথি আর NVD পড়া |
| পুরোনো পরামর্শ, যেমন MD5 বা ECB, encryption-এ দেয় | দুর্বল সুরক্ষা | পর্ব ১৪-এর সাথে মেলানো |
| Log-এর আসল key বা ব্যক্তিগত তথ্য prompt-এ যায় | নতুন ফাঁস | আগে মুছে ফেলা, অনুমোদিত সেবা |
| “এটি false positive” বলে আত্মবিশ্বাসে | আসল ঘটনা বন্ধ হয়ে যায় | Raw log দেখা, মানুষের সিদ্ধান্ত |
Key, account নম্বর আর ব্যক্তিগত তথ্য সরিয়ে AI-কে একজন সন্দেহবাদী পর্যালোচক বানান। পরিবর্তন নয়, প্রশ্ন আর ঝুঁকির তালিকা চান।
AI-এর cloud পরামর্শ ব্যবহারের চেকলিস্ট
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন, তারপর “→ উত্তর” চাপুন।
প্র ০১“Cloud-এর ব্যর্থতা মানে গ্রাহকের ভুল”, এই কথা কতটা ঠিক?
২০১৯ সালে Gartner-এর একটি গবেষণা নোট থেকে একটি কথা বহুল প্রচারিত হয়: ২০২৫ পর্যন্ত cloud নিরাপত্তার ব্যর্থতার প্রায় ৯৯% হবে গ্রাহকের দোষে। মনে রাখুন, এটি ছিল একটি পূর্বাভাস, মাপা পরিসংখ্যান নয়, যদিও বহু লেখায় পরিসংখ্যানের মতো উদ্ধৃত হয়। মূল প্রতিবেদন সবার হাতে নেই, তাই শব্দ ধরে উদ্ধৃত করতে সতর্ক থাকুন। কথাটির সত্য অংশ হলো, বহু বড় ঘটনা ভুল সেটিং আর চুরি যাওয়া পরিচয় থেকে আসে।
কিন্তু “দোষ” শব্দটি বিপজ্জনক। যে সেবার default অনিরাপদ, যেখানে নিরাপদ পথ কঠিন, কিংবা log দামি plan-এ, সেখানে হাজারো গ্রাহকের একই ভুল কি শুধু গ্রাহকের? নিরাপত্তা নকশার পুরোনো নীতি, Saltzer ও Schroeder-এর (১৯৭৫) fail-safe defaults, এই প্রশ্নই তোলে (পর্ব ৩)। এই কারণে Google Cloud-এর লেখকেরা shared fate ধারণা সামনে আনেন: provider শুধু ভাগ বুঝিয়ে দিয়ে সরে যাবে না, নিরাপদ default আর পরীক্ষিত নকশা দেবে। AWS-এর ২০২৩ সালের S3 default বদলও একই দিকের একটি বাস্তব উদাহরণ।
আবার provider-ও ভুল করে। তাই cloud on-premises-এর চেয়ে নিরাপদ কি না, এই প্রশ্নটিই অসম্পূর্ণ। Hardware, ভবন আর patch-এর স্তরে বড় provider-এর সামর্থ্য বেশিরভাগ প্রতিষ্ঠানের চেয়ে বেশি। কিন্তু ভুল সেটিং দ্রুত ছড়ায়, আর এক provider-এর ব্যর্থতা অনেককে একসাথে ছোঁয়। উত্তর নির্ভর করে আপনার দল সেই নতুন ক্ষমতাকে কতটা নিয়ন্ত্রণে আনতে পারে তার ওপর। তাই কেনার সময় শুধু প্রশ্ন করবেন না সেবাটি নিরাপদ কি না, প্রশ্ন করুন নিরাপদ পথটি কি সবচেয়ে সহজ পথও।
মূল উপলব্ধি: দায়ের মানচিত্র কার কাজ কী, তা বলে। ক্ষতি থামায় নিরাপদ default আর আপনার নিজের যাচাই, দুটোই।
প্র ০২Capital One ২০১৯-এ কোন একটি control থাকলে ক্ষতি সবচেয়ে কমত?
এই প্রশ্নটির সুবিধা হলো, এটি দোষ না খুঁজে নকশা খোঁজে। প্রকাশিত নথি, যেমন OCC-র আদেশ আর Novaes Neto ও সহলেখকদের MIT গবেষণা, মিলিয়ে কয়েকটি স্তর চোখে পড়ে: সামনের firewall-এর সেটিং, metadata থেকে credential পাওয়ার ধরন, role-এর পরিধি, বড় আকারের ডেটা বের হওয়ার ওপর নজর, আর alert সামলানো। রিপোর্টের স্তরে থেকে বলা যায়, যেকোনো একটি ঠিক থাকলে ক্ষতির চেহারা বদলাত।
তবু রক্ষকের চোখে সবগুলো সমান নয়। Firewall-এর সেটিং ঠিক রাখা জরুরি, কিন্তু সামনের দরজার ত্রুটি নতুন করেও আসতে পারে। Metadata-র session-ভিত্তিক ধরন এই বিশেষ পথ কঠিন করে, তবে সেটি ঘটনার পরে এসেছে। Role-এর পরিধি এমন একটি control, যা ত্রুটির ধরনের ওপর নির্ভর করে না। ভবিষ্যতের অজানা কোনো দুর্বলতাতেও এটি ক্ষতির সীমা টানে। এই কারণে blast radius কমানোকে অনেকে সবচেয়ে টেকসই বিনিয়োগ বলেন। মনে রাখুন, এটি আমাদের বিশ্লেষণ, কোনো রিপোর্টের একক সিদ্ধান্ত নয়।
আরেকটি শিক্ষা গভীর। OCC-র অভিযোগের বড় অংশ প্রযুক্তি নয়, প্রক্রিয়া: cloud-এ যাওয়ার আগে ঝুঁকি মূল্যায়ন, alert সামলানো আর internal audit-এর ফাঁক। অর্থাৎ ভালো যন্ত্র থাকলেও ঘটনাটি ধরা পড়ে বাইরের বার্তায়। আপনার নিজের পরিবেশে প্রশ্ন করুন: আজ এমন কিছু ঘটলে আমরাই কি আগে জানব?
এই বিশ্লেষণের সীমাও বলা দরকার। ঘটনার পরে বসে পথ স্পষ্ট দেখায়, যাকে hindsight bias বলে। সেই সময়ের দলের সামনে হাজারো অগ্রাধিকার ছিল, আর বাইরে থেকে আমরা তার সবটা জানি না।
মূল উপলব্ধি: যে control ত্রুটির ধরনের ওপর নির্ভর করে না, সেটিই দীর্ঘমেয়াদে সবচেয়ে মূল্যবান। Role ছোট রাখা তেমনই একটি control.
প্র ০৩Log কি মৌলিক নিরাপত্তা, নাকি দামি plan-এর সুবিধা?
জুলাই ২০২৩-এ CISA আর FBI যৌথ advisory AA23-193A প্রকাশ করে। একটি মার্কিন সরকারি সংস্থা জুন ২০২৩-এ তাদের Microsoft 365 audit log-এ MailItemsAccessed event-এ অস্বাভাবিক একটি AppId দেখে সন্দেহ করে। পরে Microsoft জানায়, অল্প কিছু account-এর unclassified Exchange Online ডেটায় অননুমোদিত প্রবেশ ঘটেছে। Microsoft এই গোষ্ঠীকে Storm-0558 নামে ডাকে। Advisory-র গুরুত্বপূর্ণ কথা: CISA আর FBI জানায়, অন্য কোনো log দিয়ে এই কাজ ধরা যেত বলে তাদের জানা নেই। আর ওই ধরনের premium logging-এর জন্য তখন উঁচু স্তরের license (G5/E5) লাগত।
এখান থেকে একটি অস্বস্তিকর প্রশ্ন আসে। ঘটনা ধরার একমাত্র সূত্র যদি দামি plan-এ থাকে, তবে কম টাকার গ্রাহক কীভাবে জানবেন তাঁরা আক্রান্ত কি না? সমালোচনার পরে Microsoft জানায়, আরও বেশি log আরও বেশি গ্রাহকের জন্য খোলা হবে। এটি মনে করিয়ে দেয়, log শুধু প্রযুক্তিগত নয়, দামেরও সিদ্ধান্ত। একটি সংস্থা baseline বানিয়ে না রাখলে এই সংকেতও ধরা পড়ত না।
আপনার কাজের জন্য তিনটি ফল। SaaS বা cloud কেনার আগে জিজ্ঞেস করুন, কোন log কোন plan-এ, কত দিন থাকে, export করা যায় কি। Data event সব জায়গায় চালালে খরচ বাড়ে, তাই সংবেদনশীল সম্পদ বেছে নিন। আর নিজের পরিবেশে একটি ঘটনা কল্পনা করুন: কেউ বৈধ পরিচয়ে একটি ফাইল পড়ল, কোন log সেটি বলবে? উত্তর না থাকলে সেটিই আপনার detection gap. এই ফাঁকের তালিকা ব্যবস্থাপনার সামনে রাখুন, কারণ খরচের সিদ্ধান্ত তাঁদের, আর ঝুঁকি মেনে নেওয়ার সিদ্ধান্তও লিখিত থাকা ভালো।
মূল উপলব্ধি: যা log হয় না, তা তদন্ত করা যায় না। Log-এর plan ঠিক করা মানে আগেই ঠিক করা, কোন ঘটনার উত্তর আপনি পাবেন।
প্র ০৪Workload identity চালু করলেই কি key-এর সমস্যা শেষ?
Workload identity একটি বড় অগ্রগতি। স্থায়ী key-এর সবচেয়ে বড় দোষ ছিল দীর্ঘ জীবন আর সহজে কপি হওয়া। অল্প মেয়াদের credential সেই সময়টি কমায়, আর repository-তে জমা রাখার মতো কিছু থাকে না। Cloud IAM পর্বে যান্ত্রিক দিক দেখেছেন। তবে নিরাপত্তায় কোনো পরিবর্তন ঝুঁকি মুছে দেয় না, ঝুঁকিকে সরিয়ে দেয়।
প্রথম নতুন ঝুঁকি হলো trust-এর শর্ত। OIDC federation-এ cloud বাইরের একটি স্বাক্ষর বিশ্বাস করে। শর্ত যদি হয় “এই সংস্থার যেকোনো repository”, তবে যে কোনো repository-র যে কোনো কাজ production role পেতে পারে। শর্ত হওয়া উচিত নির্দিষ্ট repository আর branch. দ্বিতীয় ঝুঁকি হলো চলমান workload নিজেই। Capital One-এর ঘটনা দেখিয়েছে, অস্থায়ী credential-ও app-এর ত্রুটি দিয়ে বেরিয়ে আসতে পারে (পর্ব ৪২)। মেয়াদ ছোট হলেও সেই সময়েই ডেটা চলে যেতে পারে। তৃতীয়টি হলো অনুমতির আকার। Key-হীন বড় role স্থায়ী key-এর ছোট role-এর চেয়ে খারাপ হতে পারে।
আরেকটি বাস্তব সমস্যা হলো পুরোনো ব্যবস্থা। বাইরের SaaS বা পুরোনো software হয়তো শুধু key নেয়। তখন key থাকবেই, আর সেখানে সরু অনুমতি, IP শর্ত, মালিক, বদলের পরিকল্পনা আর নজরদারি দরকার। Non-human identity-র তালিকা এখন বহু প্রতিষ্ঠানে মানুষের account-এর চেয়ে বড়, তাই একে আলাদা প্রকল্প হিসেবেই ধরতে হয়। Detection-এর দিকেও সুবিধা আছে: workload-এর পরিচয় নির্দিষ্ট জায়গা থেকে আসার কথা, তাই বাইরে দেখা গেলে সংকেত পরিষ্কার। স্থায়ী key-এর ক্ষেত্রে এমন স্পষ্ট সংকেত পাওয়া অনেক কঠিন।
মূল উপলব্ধি: Key সরালে ঝুঁকি চুরি থেকে trust-এর নকশায় সরে যায়। সেটি ভালো সরানো, কারণ নকশা review করা যায়, কিন্তু চুরি হওয়া কপি দেখা যায় না।
প্র ০৫Multi-cloud কি ঝুঁকি কমায়, আর এক CNAPP কি সব সমস্যার উত্তর?
Multi-cloud-এর পক্ষে যুক্তি সহজ: এক provider থেমে গেলে অন্যটি চলবে, আর দর কষাকষির ক্ষমতা বাড়বে। কোনো কোনো নিয়ন্ত্রিত খাতে concentration risk কমানোর চাপও আছে (পর্ব ৭১)। কিন্তু নিরাপত্তার দিক থেকে হিসাবটি উল্টো হতে পারে। দুই cloud-এ দুই রকম ভুলের জায়গা। আর দুই cloud-এ আধাআধি চলা ব্যবস্থায় একটি থামলে প্রায়ই পুরো সেবা থামে, কারণ দুটিই লাগে। আসল বিকল্পতা, মানে এক cloud থেকে অন্যটিতে সত্যিই চলে যাওয়া, নকশা আর মহড়ায় অনেক ব্যয়বহুল।
মনোযোগই এখানে আসল সম্পদ। ছোট দলের একজন বিশ্লেষক দুই ধরনের IAM মডেল, দুই ধরনের log আর দুই রকম default একসাথে গভীরভাবে মনে রাখতে পারেন না। ফলে একটি cloud সাধারণত “ভালোভাবে দেখা” আর অন্যটি “পরে দেখব” হয়ে থাকে। দখলকারী কোনটি বেছে নেবেন, তা ভাবা কঠিন নয়। CNAPP-এর মতো যন্ত্র এখানে একটি বাস্তব সমাধান দেয়: এক জায়গায় দেখা, এক ভাষায় finding.
কিন্তু যন্ত্র প্রেক্ষাপট জানে না। সে জানে না কোন bucket-এর ডেটা ব্যবসায় কত দামি, কোন ব্যতিক্রম অনুমোদিত, আর সংশোধনের মালিক কে। অনেক প্রতিষ্ঠান দামি যন্ত্র কেনে, কয়েক হাজার finding পায়, তারপর কেউ দেখে না, যা পর্ব ৬০-এর alert fatigue-এর আরেক রূপ। তাই যন্ত্র কেনার আগে তিনটি জিনিস ঠিক করুন: সম্পদের তালিকা, মালিকের নিয়ম আর শীর্ষ পাঁচটি পথের অগ্রাধিকার। Pilot চালিয়ে দেখুন, সে কি সত্যিই একটি পথ দেখাতে পারে, নাকি শুধু আগের তালিকাই নতুন রঙে দেয়।
মূল উপলব্ধি: নিরাপত্তায় বিস্তারের দাম মনোযোগে দিতে হয়। যা ভালোভাবে দেখতে পারবেন না, তা বাড়ানোর আগে সেই খরচ হিসাব করুন।
অনুশীলন
নিজের account-এ বা খেলনা ডেটায় করুন। অন্যের account বা storage-এ কিছু পরীক্ষা করবেন না।
-
হিসাব: (ক) একটি key তৈরি ২০২৬-০১-১৫, আজ ২০২৬-১০-৩১। বয়স কত দিন? (খ) Key ফাঁসের ৬ ঘণ্টা পরে খবর আসে, আরও ৪০ মিনিটে key বন্ধ হয়, কিন্তু সবশেষ session-এর মেয়াদ আরও ১২ ঘণ্টা, আর session বাতিল করা হয়নি। সবচেয়ে খারাপ ক্ষেত্রে ঝুঁকির সময় কত? (গ) একটি নিয়মে মাসে ১২০টি alert, তার ৯টি সত্যি ঘটনা, আর মোট সত্যি ঘটনা ছিল ১২টি। Precision আর recall কত?
(ক) ১৫ জানুয়ারি থেকে ৩১ অক্টোবর: ১৬ + ২৮ + ৩১ + ৩০ + ৩১ + ৩০ + ৩১ + ৩১ + ৩০ + ৩১ = ২৮৯ দিন। (খ) ৬ ঘণ্টা + ৪০ মিনিট + ১২ ঘণ্টা = ১৮ ঘণ্টা ৪০ মিনিট। Session বাতিল করলে শেষ ১২ ঘণ্টা অনেকটা কমত, আর এটিই আলাদা ধাপটির কারণ। (গ) Precision = ৯ ÷ ১২০ = ৭.৫%. Recall = ৯ ÷ ১২ = ৭৫%. অর্থাৎ নিয়মটি বেশিরভাগ ঘটনা ধরে, কিন্তু প্রতি ৪০টি alert-এ ৩টি মাত্র সত্যি। Alert-এর সাথে ঠিকানা বা পরিচয়ের প্রেক্ষাপট যোগ করে tuning দরকার (পর্ব ৫৬)।
-
সমালোচনা ও নকশা: একটি ২০ জনের প্রতিষ্ঠান দামি একটি CNAPP চালু করে সব নিয়ম সক্রিয় করল। প্রথম সপ্তাহে ৩,২০০টি finding এল। কেউ কিছু করেনি। দুই মাস পরে ব্যবস্থাপক বললেন, “আমাদের নিরাপত্তা এখন শক্ত।” এই পরিকল্পনার ফাঁক ধরুন, আর পরের ৩০ দিনের একটি পরিকল্পনা লিখুন।
ফাঁক: Finding সারানো ছাড়া নিরাপত্তা বাড়ে না। মালিক নেই, অগ্রাধিকার নেই, সব নিয়ম একসাথে, আর “শক্ত” কথাটি কোনো মাপে দাঁড়ানো নয়।
৩০ দিন: ১ম সপ্তাহ: resource-এ মালিকের tag, সংবেদনশীল ডেটার তালিকা। ২য় সপ্তাহ: শুধু internet থেকে সংবেদনশীল ডেটার পথ আর log বন্ধের মতো শীর্ষ নিয়ম সক্রিয়, বাকি নিয়ম নীরব। ৩য় সপ্তাহ: শীর্ষ পাঁচটি পথ ভাঙা, প্রতিটির মালিক আর তারিখসহ। ৪র্থ সপ্তাহ: public-access block আর audit log রক্ষার guardrail শুধু-জানানোর ধরনে, তারপর পুরোপুরি। মাপ: toxic পথের সংখ্যা, সংশোধনের সময় আর মালিকহীন resource-এর ভাগ, finding-এর মোট সংখ্যা নয়।
-
Output অনুমান: একটি খেলনা গ্রাফ:
internet → vm-a → role-a → db-payআরinternet → vm-b → role-b → bkt-logo.vm-c → role-c → db-pay-এরvm-c-তে internet থেকে পথ নেই। সংবেদনশীল: শুধুdb-pay. Patch নেই:vm-a,vm-c. বড় role:role-a,role-b,role-c. নিয়ম: internet থেকে সংবেদনশীল ডেটার পথে patch-হীন যন্ত্র আর বড় role দুটোই থাকলে TOXIC, নইলে review. কয়টি পথ ছাপা হবে, আর কোনটি কী হিসেবে?vm-a-তে patch বসালে কী বদলাবে?একটি পথই ছাপা হবে:
TOXIC internet -> vm-a -> role-a -> db-pay.vm-b-র পথ সংবেদনশীল ডেটায় যায় না।vm-c-তে internet থেকে পথ নেই, যদিও তার patch নেই, role-ও বড়।vm-a-তে patch বসালে পথটি থেকেই যাবে, কিন্তু লেবেল হবেreview, কারণ patch-হীন যন্ত্রের শর্ত আর মেলে না। মনে রাখুন, patch বসলে পরিচিত ত্রুটি যায়, কিন্তু role-এর আকার বদলায় না। তাই পথটি পর্যালোচনায় থাকা উচিত। -
নিজের হিসাব: আপনার নিজের cloud বা SaaS account-এর নিরাপত্তা পাতায় যান। MFA, সক্রিয় key, তাদের শেষ ব্যবহার, public link আর যুক্ত app-এর তালিকা দেখুন। কিছু বদলানোর আগে শুধু লিখে রাখুন। আপনার প্রতিষ্ঠানের account হলে আগে লিখিত অনুমতি নিন।
অনেকেই এমন একটি পুরোনো key বা ভুলে যাওয়া app পান, যার মালিক এখন নিজেই মনে করতে পারেন না। অব্যবহৃত key মুছুন, ব্যবহৃত key-এর জায়গায় অস্থায়ী পথ আছে কি না দেখুন, আর প্রধান account-এ phishing-প্রতিরোধী MFA চালু করুন (পর্ব ১৬)। যে ঘরটির উত্তর পেলেন না, যেমন “এই log কত দিন থাকে”, সেটিই আপনার পরের কাজ। একটি ছোট তালিকা বছরে দুবার দেখলেই বড় উন্নতি হয়।
নিজেকে যাচাই করুন
ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।
ক্রমএকটি ফাঁস হওয়া cloud key সামলানোর ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)
- Key-এর মালিক আর তার অনুমতি জানা
- Key নিষ্ক্রিয় করা
- সেই key থেকে পাওয়া চলমান session বাতিল করা
- Audit trail থেকে তার সব ব্যবহার খোঁজা
- স্থায়ী key-এর বদলে workload identity চালু করা
- পুরোনো key মুছে কারণ পর্যালোচনা করা
একটি managed database সেবায় (PaaS) সাধারণত কোন কাজটি গ্রাহকের ভাগে থাকে?
- Database server-এর OS patch দেওয়া
- Database-এর user, অনুমতি আর ডেটা কে দেখবে তা ঠিক করা
- Data center-এর hardware বদলানো
- Hypervisor-এর নিরাপত্তা ত্রুটি সারানো
একটি যন্ত্র জানাল: “এই role-এর ১২০টি অনুমতি আছে, গত ৯০ দিনে ব্যবহার হয়েছে ৮টি।” এটি কোন শ্রেণির কাজ?
- CWPP
- WAF
- CIEM
- SSPM
নিচের কোন পরিস্থিতিটি cloud নিরাপত্তার অর্থে toxic combination-এর সবচেয়ে ভালো উদাহরণ?
- Internet-মুখী patch-হীন VM-এর role গ্রাহকের ডেটার bucket পড়তে পারে
- একটি dev VM-এর মালিকের tag নেই
- Website-এর ছবির bucket লিখিত অনুমোদনে public
- Internet-বিচ্ছিন্ন একটি test VM-এ পুরোনো software
একটি ফাঁস হওয়া access key বন্ধ করা হলো। তবু কেন দ্বিতীয় একটি কাজ লাগতে পারে?
- কারণ audit log মুছতে হবে
- কারণ commit মুছলেই ঝুঁকি শেষ হয়
- কারণ সব storage-এর encryption key বদলাতে হবে
- কারণ key থেকে পাওয়া temporary credential তখনও চলতে পারে
Cloud audit log-এ একটি CI service account-এর নামে “audit logging বন্ধ” কাজটি দেখা গেল। সবচেয়ে ভালো প্রথম প্রতিক্রিয়া কোনটি?
- CI-এর কাজ, তাই alert বন্ধ করে দেওয়া
- গুরুতর ধরে log আবার চালু করা, আলাদা কপি নিশ্চিত করা আর পরিচয়টি তদন্ত করা
- Service account সাথে সাথে মুছে ফেলা
- মাসিক পর্যালোচনায় তোলা
একটি cloud VM-এর disk encrypted, আর ঘটনায় VM-এর role চুরি হয়েছে। প্রমাণ রাখার জন্য কোন কাজটি সবচেয়ে ঠিক?
- VM সাথে সাথে terminate করা, তাতে হামলা থামবে
- VM autoscaling group-এ রেখে পরে দেখা
- VM আলাদা করে snapshot নিয়ে forensic account-এ কপি করা, key-এর অনুমতিসহ
- Disk encrypted, তাই প্রমাণের দরকার নেই
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন, অর্থ দেখাবে। এই পর্বের সব শব্দ এখানে একসাথে:
মনে রাখুন
- IaaS থেকে SaaS-এ আপনার কাজ কমে, কিন্তু ডেটা, পরিচয় আর সেটিং আপনার হাতেই থাকে।
- Cloud-এ পরিচয়ই সীমানা। ভুল সেটিং, ফাঁস হওয়া key আর বড় role একসাথে বিপদ বানায়।
- Finding গোনা নয়, internet থেকে সংবেদনশীল ডেটার পথ খুঁজুন, আর সবচেয়ে সস্তা আংটাটি ভাঙুন।
- CSPM সেটিং, CIEM চাবি, CWPP workload দেখে। CNAPP জোড়া দেয়, সিদ্ধান্ত নেয় না।
- Key ফাঁসে বন্ধ, session বাতিল, log খোঁজা, স্থায়ী key সরানো। ঘটনায় VM না মুছে আলাদা করে snapshot রাখুন।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ৭৩ · Container আর Kubernetes নিরাপত্তা — image, runtime আর policyপরবর্তী পর্বWorkload স্তরের প্রতিরক্ষা।
- সাইবার নিরাপত্তা · কোর্স হোম৮০টি পর্বপুরো কোর্সের রোডম্যাপ।
- পর্ব ৭১ · Vendor আর third-party ঝুঁকিপিছনে দেখুনSaaS vendor-এর যাচাই আর চুক্তি।
- Cloud & DevOps · Cloud নিরাপত্তার ভিত্তিপাশের ট্র্যাকAudit log, baseline আর patching-এর কাজের ধাপ।
- Cloud & DevOps · Cloud IAMপাশের ট্র্যাকRole, temporary credential আর workload identity.
- Cloud & DevOps · IAM policy evaluationপাশের ট্র্যাকAllow, deny আর বাড়তি অনুমতি ধরা।
- Cloud & DevOps · Secret আর KMSপাশের ট্র্যাকEnvelope encryption আর rotation.
- Cloud & DevOps · Governanceপাশের ট্র্যাকMulti-account, guardrail আর log account.
- CSA Cloud Controls Matrix v4.1মূল উৎসCloud control-এর কাঠামো।
- CISA AA23-193A (২০২৩)LogCloud log দিয়ে ঘটনা ধরার সরকারি advisory.
- Mandiant: UNC5537 (২০২৪)Snowflakeচুরি যাওয়া credential আর MFA-হীন account-এর বিশ্লেষণ।