এই পর্বে যা শিখবেন
- EDR ঠিক কী কী রেকর্ড করে, আর agent, kernel ও cloud মিলে কীভাবে কাজ করে
- একটি alert-এর process tree পড়ে সিদ্ধান্ত নেওয়া
- Isolate, kill, quarantine আর live response অনুমোদন ও audit-সহ চালানো
- Coverage মাপা, exclusion-এর ঝুঁকি যাচাই, আর Sysmon ও osquery দিয়ে শুরু করা
- XDR, NDR, MDR, SOAR আলাদা করা, ছোট প্রতিষ্ঠানের জন্য নিরপেক্ষভাবে বেছে নেওয়া আর পরীক্ষার ফল সমালোচনার চোখে পড়া
১ · EDR কী দেখে — ছয় ধরনের telemetry
একটি বড় মার্কেটের কথা ভাবুন। পুরোনো ব্যবস্থায় গেটে একজন দারোয়ান আছেন, হাতে চোরদের ছবির তালিকা। ছবির সাথে মিললে আটকান, না মিললে যেতে দেন। এটি signature antivirus. এখন যদি চোর নতুন মুখ হয়, অথবা মার্কেটের কর্মীর পোশাক পরে ঢোকে? তখন দরকার সারা মার্কেটের CCTV, দোকানের রেজিস্টার খাতা আর একটি নিয়ন্ত্রণ কক্ষ, যেখান থেকে দরকারে একটি গেট বন্ধ করা যায়।
পর্ব ২৯-এ দেখেছেন, EDR (Endpoint Detection and Response) ঠিক এই ভূমিকা নেয়। সেখানে তিনটি কথা মনে রাখতে বলা হয়েছিল: alert কেউ না পড়লে কাজের নয়, agent নিজেই ঝুঁকির জায়গা, আর agent যেখানে নেই সেখানে EDR নেই। এই পর্বে সেই ভেতরের কাজটি খুলে দেখব।
যন্ত্র মানে এখানে endpoint: ল্যাপটপ, ডেস্কটপ বা server. যন্ত্রে বসানো agent ঘটনা জমা করে, আর এই ধারাবাহিক তথ্যকে বলে telemetry. মূল ধরন ছয়টি।
| ধরন | যা রেকর্ড হয় | যে প্রশ্নের উত্তর মেলে |
|---|---|---|
| Process | কে চালু হলো, parent কে, command line, ফাইলের hash, কোন user | কী চলল, কে চালাল? |
| File | তৈরি, বদল, নাম বদল, মুছে ফেলা | কী নামল, কী হারাল? |
| Registry | Windows-এর সেটিং ভান্ডারে key ও value-র বদল | যন্ত্র চালুর সময় কিছু চলার ব্যবস্থা হলো কি? |
| Network | কোন process কোন ঠিকানার সাথে কথা বলল, DNS query | কোন program বাইরে গেল? |
| Script | PowerShell ইত্যাদির চলা কোড, script block logging থাকলে তার লেখা | আসলে কী নির্দেশ চলল? |
| Identity | Login, ব্যর্থ login, ক্ষমতা বাড়ানো, কোন logon session | কোন account দিয়ে, কোথা থেকে? |
সবচেয়ে দামি বিষয় হলো জোড়া। আলাদা log বলে “PowerShell চলেছে” আর “203.0.113.50-এর সাথে connection হয়েছে”। EDR বলে “এই PowerShell, যাকে Word চালু করেছিল, সেই connection করেছে”। অর্থাৎ প্রতিটি ঘটনা একটি process-এর সাথে বাঁধা।
Telemetry কত জায়গা নেয়? ধরে নেওয়া সংখ্যা: ৫০০টি যন্ত্র, প্রতিটি দিনে ২০,০০০ ঘটনা, প্রতিটি ১ KB. দিনে ৫০০ × ২০,০০০ = ১ কোটি ঘটনা, অর্থাৎ ১০ GB. ৯০ দিন রাখলে ৯০০ GB. তাই retention একটি খরচের সিদ্ধান্তও। আক্রমণকারী যদি আপনার retention-এর চেয়ে বেশি দিন ভেতরে থাকে, প্রথম দিনের প্রমাণ আর পাবেন না। কতদিন রাখবেন, তা পর্ব ৫৫-র বিষয়, আর জমা telemetry-তে খোঁজার কৌশল পর্ব ৫৮-এ দেখেছেন।
২ · ভেতরের গঠন — agent, kernel আর cloud
EDR-এর তিনটি অংশ। যন্ত্রের ভেতরে থাকে দুই স্তরের agent, আর দূরে থাকে বিশ্লেষণের কেন্দ্র। Operating Systems কোর্সে দেখেছেন, OS দুটি স্তরে চলে। User mode-এ সাধারণ app চলে, আর kernel mode-এ OS-এর মূল অংশ চলে, যার হাতে পুরো যন্ত্রের ক্ষমতা।
EDR-এর তিন অংশ আর তথ্যের পথ
Agent in user and kernel mode, cloud analytics, analyst and SIEM
- Kernel অংশ কেন? OS-এর গভীর থেকে process চালু হওয়া বা ফাইল খোলার খবর আগে পাওয়া যায়, আর কিছু কাজ শুরুর আগেই আটকানো যায়।
- User mode অংশ: জমা করা, ছাঁকা, স্থানীয় নিয়ম চালানো আর কেন্দ্রের সাথে কথা বলা। এখানে ভুল হলে সাধারণত শুধু agent-টি পড়ে।
- Cloud অংশ: বহু যন্ত্রের তথ্য একসাথে মেলানো যায়, যা একা একটি যন্ত্রে সম্ভব নয়। তবে সংযোগ না থাকলে যন্ত্রকে স্থানীয় নিয়মের ওপর চলতে হয়।
এই নকশার দাম আছে। Kernel-এর ক্ষমতা মানে agent বিশ্বাসের একটি বড় ঘাঁটি। এর ভুল আর এর admin console, দুটোই পুরো বহরকে ছুঁতে পারে। সেই কথায় ফিরব অংশ ৯-এ।
আরও গভীরে: Windows-এ agent সাধারণত kernel callback আর ETW থেকে খবর পায়, আর script পরিদর্শনে AMSI ব্যবহার হতে পারে। Linux-এ eBPF বা auditd একই ভূমিকা নেয়। macOS-এ Apple-এর Endpoint Security framework তৃতীয় পক্ষের kernel extension-এর বদলে user space-এ এই খবর দেয়। কোন উৎস ব্যবহার হবে, তা পণ্য আর OS version-এ নির্ভর করে।
৩ · Process tree — alert পড়ার আসল কৌশল
Windows-এ powershell.exe চলা নিজে কোনো অপরাধ নয়। আপনার IT কর্মী প্রতিদিনই চালান। এখানেই living off the land সমস্যা: বৈধ টুলই ব্যবহার হলে ফাইল দেখে কিছু বোঝা যায় না। বোঝা যায় প্রসঙ্গ দেখে। দোকানের চাবি মালিকের হাতে স্বাভাবিক, রাত দুইটায় অচেনা মানুষের হাতে নয়।
Process tree সেই প্রসঙ্গ দেখায়। প্রতিটি process-এর একটি parent process থাকে, মানে যে তাকে চালু করেছে। নিচে একটি কাল্পনিক alert ধাপে ধাপে পড়া হয়েছে। সব নাম, সময় আর ঠিকানা বানানো।
host : LT-14 user: rina
10:14:08 severity: HIGH
title : Office app started a script host
tree : (এখনো খোলা হয়নি)
explorer.exe 10:13:40 └─ winword.exe invoice_oct.docm ফাইল এসেছে: email attachment
explorer.exe └─ winword.exe invoice_oct.docm └─ powershell.exe 10:14:07 cmd: -enc <encoded-script> Word কেন script চালাবে?
powershell.exe [355]
10:14:11 connect 203.0.113.50:443
domain age: 2 days
seen on other hosts: 0
powershell.exe [355] ├─ whoami.exe 10:14:20 └─ schtasks.exe 10:14:31 new task: OfficeUpdateCheck persistence-এর লক্ষণ
verdict : true positive (likely)
scope : LT-14 only (search: 1 host)
user : asked, did open the file
action : request isolation
ticket : INC-1042
- শিরোনাম শুধু দরজা। Alert বলছে একটি Office app script host চালু করেছে, severity HIGH. এখনই সিদ্ধান্ত নয়। শিরোনাম দেখে বন্ধ করা বা আতঙ্কিত হওয়া, দুটোই ভুল।
- ওপর থেকে পড়া।
explorer.exeমানে user নিজে ফাইল খুলেছেন। Word খুলেছেinvoice_oct.docm, আর ফাইলটি এসেছে email থেকে।.docmমানে এতে macro থাকতে পারে। - অস্বাভাবিক জোড়া। Word-এর child হিসেবে PowerShell, ফাইল খোলার ২৭ সেকেন্ড পরে। Command line-এ encoded লেখা, যা পড়া যায় না। প্রশ্ন একটাই: এই প্রতিষ্ঠানে কি কোনো বৈধ add-in এটা করে?
- Network জোড়া। এই একই process চার সেকেন্ড পরে 203.0.113.50-এ গেছে। Domain-টির বয়স দুই দিন, আর বহরের আর কোনো যন্ত্র এখানে যায়নি। একা এটি প্রমাণ নয়, তবে সন্দেহ বাড়ায়।
- পরের কাজ।
whoami.exeদিয়ে নিজের পরিচয় দেখা, তারপরschtasks.exeদিয়ে নতুন scheduled task. নামটি নিরীহ, কিন্তু কাজটি persistence-এর লক্ষণ। - সিদ্ধান্ত। সব মিলিয়ে সম্ভাব্য true positive. বহরে খুঁজে একটিই যন্ত্র মিলল, আর user জানালেন ফাইলটি খুলেছিলেন। পরের ধাপ isolation-এর অনুরোধ, আর সেটি অংশ ৫-এ দেখব। “সম্ভাব্য” শব্দটি রাখুন, কারণ তখনো তদন্ত শেষ হয়নি।
এবার একই চিন্তা কোডে। নিচের block খেলনা ঘটনা থেকে গাছ বানায় আর সন্দেহজনক parent-child জোড়ায় point দেয়। Point আমাদের অনুমান। খেয়াল করুন, দুটি powershell.exe আছে।
// Toy process events from one fictional laptop. Nothing real is read.
const events = [
{ pid: 100, ppid: 0, img: 'explorer.exe' },
{ pid: 210, ppid: 100, img: 'chrome.exe' },
{ pid: 340, ppid: 100, img: 'winword.exe' },
{ pid: 355, ppid: 340, img: 'powershell.exe' },
{ pid: 361, ppid: 355, img: 'schtasks.exe' },
{ pid: 362, ppid: 355, img: 'whoami.exe' },
{ pid: 430, ppid: 100, img: 'powershell.exe' },
{ pid: 431, ppid: 430, img: 'winget.exe' },
];
// Parent -> child pairs that deserve a look. Toy list, not a real product's.
const RISKY = {
'winword.exe>powershell.exe': 3,
'powershell.exe>schtasks.exe': 2,
'powershell.exe>whoami.exe': 1,
};
const kids = {};
for (const e of events) (kids[e.ppid] ||= []).push(e);
function walk(e, depth, chainScore, parentImg) {
const pts = RISKY[parentImg + '>' + e.img] || 0;
const total = chainScore + pts;
const flag = pts ? ` <-- +${pts} (chain=${total})` : '';
console.log(' '.repeat(depth) + `${e.img} [${e.pid}]` + flag);
let best = total;
for (const k of kids[e.pid] || []) best = Math.max(best, walk(k, depth + 1, total, e.img));
return best;
}
const score = Math.max(...(kids[0] || []).map(e => walk(e, 0, 0, '')));
const sev = score >= 5 ? 'HIGH' : score >= 2 ? 'MEDIUM' : 'LOW';
console.log(`\nworst chain score = ${score}, severity = ${sev}`);explorer.exe [100]
chrome.exe [210]
winword.exe [340]
powershell.exe [355] <-- +3 (chain=3)
schtasks.exe [361] <-- +2 (chain=5)
whoami.exe [362] <-- +1 (chain=4)
powershell.exe [430]
winget.exe [431]
worst chain score = 5, severity = HIGH
একই নামের PowerShell, কিন্তু ফল আলাদা। ৩৫৫ এসেছে Word থেকে, তাই ৩ point আর পরের কাজে শৃঙ্খলের স্কোর ৫। ৪৩০ এসেছে explorer.exe থেকে, মানে কেউ হাতে খুলেছেন, তাই কোনো point নেই। তাই নিয়মটি শুধু PowerShell-এর নাম দেখে নয়, কে চালাল তা দেখে বানাতে হয়। পুরো শৃঙ্খল হিসাব করায় একা ছোট ঘটনাও মিলে বড় হয়, যেমন whoami.exe একা মাত্র ১ point.
৪ · Behaviour detection আর severity
EDR-এর detection দুই ভাগে পড়ে। Signature detection জানা জিনিস মেলায়। Behavioural detection কাজের ধরন দেখে, যেমন “Office app script চালাল”, বা “অল্প সময়ে শত শত ফাইল বদলে গেল”। ধরনটি আগে থেকে জানা নয়, কাজটি জানা। পর্ব ২৩-এর signature আর anomaly-র তর্ক এখানেও চলে। নিচে একটি Sigma-ধাঁচের নিয়ম, বিস্তারিত পর্ব ৫৬-তে। Field-এর ফরম্যাট log-এর উৎসভেদে আলাদা হতে পারে।
title: Office App Starts a Script Host
status: experimental
logsource:
category: process_creation
product: windows
detection:
selection:
ParentImage|endswith:
- '\winword.exe'
- '\excel.exe'
Image|endswith:
- '\powershell.exe'
- '\cmd.exe'
condition: selection
falsepositives:
- Approved legacy add-ins or macros
level: highSeverity আর confidence দুটি আলাদা প্রশ্ন। Severity বলে সত্যি হলে ক্ষতি কত বড়। Confidence বলে এটি সত্যি হওয়ার সম্ভাবনা কত। সব পণ্য দুটি আলাদা করে দেখায় না, আর স্তরের নামও (Low থেকে Critical) পণ্যভেদে আলাদা। তাই শুধু লেবেলের ওপর ভরসা না করে যন্ত্রের গুরুত্ব যোগ করুন। একই MEDIUM alert বিক্রয়কর্মীর ল্যাপটপে আর domain controller-এ এক কথা নয়।
একটি নিয়ম সপ্তাহে ২০০টি alert দেয়, সত্যি ৩০টি। আর ১০টি আসল ঘটনা ধরতে পারেনি। Precision = ৩০ ÷ ২০০ = ১৫%. Recall = ৩০ ÷ (৩০ + ১০) = ৭৫%. এখন একটি অনুমোদিত add-in বাদ দিলে ১৫০টি false positive কমে, কিন্তু একটি আসল ঘটনাও ফসকে যায়। নতুন alert ৪৯টি, সত্যি ২৯টি। Precision ২৯ ÷ ৪৯ ≈ ৫৯%, recall ২৯ ÷ ৪০ = ৭২.৫%. Alert tuning মানে এই লেনদেনটি জেনে করা, শব্দ কমানোর নামে চোখ বন্ধ করা নয়। Base rate কম বলে precision সহজেই নিচে নামে।
৫ · সাড়ার কাজ — ক্ষমতা, অনুমোদন আর audit
“R” অংশটিই EDR-কে শুধু log-এর চেয়ে আলাদা করে। তবে প্রতিটি কাজের একটি দাম আছে।
| কাজ | কী হয় | দাম বা ঝুঁকি |
|---|---|---|
| Host isolation | যন্ত্র network থেকে আলাদা, শুধু EDR-এর সাথে যোগাযোগ থাকে | User-এর কাজ বন্ধ; server হলে সেবাও বন্ধ |
| Kill process | চলমান process বন্ধ | Memory-র প্রমাণ হারাতে পারে, ভুল হলে কাজ নষ্ট |
| Quarantine | ফাইল নিরাপদ জায়গায় সরিয়ে আটকে রাখা | বৈধ ফাইল হলে app ভাঙে |
| Collect files | তদন্তের জন্য ফাইল বা log সংগ্রহ | ব্যক্তিগত ডেটা থাকতে পারে, hash লিখে রাখা চাই |
| Live response | দূর থেকে যন্ত্রে সীমিত shell | সবচেয়ে বড় ক্ষমতা; admin console দখল হলে বিপদ |
এই ক্ষমতা অনেকটা ব্যাংকের লকারের দুই চাবির মতো হওয়া উচিত। তাই পর্ব ২০-এর নিয়মগুলো এখানে বসে: RBAC, MFA, maker-checker আর audit log. নিচে LT-14-এর গল্পের পরের অংশ।
- Analystঅনুরোধ
- Leadঅনুমোদন
- LT-14আলাদা
- Auditপ্রমাণ
action : isolate host
target : LT-14
by : tanvir (analyst)
ticket : INC-1042
reason : Office -> script, new task
status : PENDING
role may request : yes
MFA in this session : yes
host class : laptop
approval needed : yes, 1 lead
approver = requester : not allowed
approver : shila (shift lead)
checked : tree, business impact
note : user can use spare laptop
status : APPROVED
signed command delivered
agent ack : LT-14
network : deny all
except : EDR service only
console state : ISOLATED
203.0.113.50 : blocked
file share : blocked
EDR heartbeat : ok
evidence collect : running
10:19 tanvir requested isolate LT-14 10:21 shila approved INC-1042 10:22 system applied, agent ack 10:24 tanvir verified copy sent to SIEM
LT-14 rebuilt, scan clean
password reset: rina
request : tanvir
approve : shila
state : RELEASED
ticket : INC-1042 updated
- অনুরোধ। Analyst Tanvir ১০:১৯-এ অনুরোধ করলেন। সাথে ticket নম্বর আর কারণ আছে। কারণ ছাড়া কাজ পরে কেউ বুঝবে না।
- নীতি যাচাই। তাঁর role অনুরোধ করতে পারে, session-এ MFA আছে। যন্ত্রটি ল্যাপটপ, তাই একজন lead-এর অনুমোদন লাগবে। যিনি অনুরোধ করেছেন তিনি নিজে অনুমোদন দিতে পারবেন না।
- অনুমোদন। Shila গাছটি দেখলেন আর ব্যবসায়িক প্রভাব ভাবলেন। Rina অন্য ল্যাপটপে কাজ চালাতে পারবেন। ১০:২১-এ অনুমোদন।
- প্রয়োগ। স্বাক্ষরিত নির্দেশ agent-এ পৌঁছাল, agent স্বীকার করল। এখন সব network বন্ধ, শুধু EDR সেবার সাথে যোগাযোগ খোলা। না হলে আর তদন্তই করা যেত না।
- যাচাই। “চাপ দিয়েছি” মানেই “হয়েছে” নয়। Console বলছে ISOLATED, 203.0.113.50 আর file share দুটোই বন্ধ, heartbeat ঠিক আছে। এখন প্রমাণ সংগ্রহ চলছে। Kill বা মুছে ফেলার আগে এটি করা ভালো।
- Audit. কে, কী, কখন, কেন, ফল কী, সব লেখা হলো। একটি কপি SIEM-এ গেছে, যাতে EDR console-এর admin নিজের কাজ মুছতে না পারেন। Chain of custody-র জন্যও এটি কাজে লাগে।
- মুক্তি। ছাড়া পাওয়াও একটি সিদ্ধান্ত। পরিষ্কার করা, password বদল আর আবার দুজনের সম্মতি শেষে যন্ত্রটি ফিরল। Containment-এর পূর্ণ আলোচনা পর্ব ৬২-তে।
রাত তিনটায় অনুমোদন কে দেবেন? Ransomware দ্রুত ছড়ালে অপেক্ষা ক্ষতিকর। তাই আগে থেকে লিখে রাখুন কোন উচ্চ-আস্থার পরিস্থিতিতে স্বয়ংক্রিয় isolation চলবে, আর break-glass পথ কী। Hospital, POS বা production server-এর জন্য আলাদা runbook রাখুন। স্বয়ংক্রিয় কাজও audit হবে।
৬ · Rollout — coverage, performance আর exclusion
EDR কিনলেই পাহারা শুরু হয় না। বসানোর তিনটি কঠিন প্রশ্ন আছে।
- Performance: Compile, database বা backup-এর মতো ভারী কাজে agent ধীরগতি আনতে পারে। আগে ছোট দলে পরীক্ষা করে আগের-পরের সংখ্যা মাপুন, অনুমান নয়।
- ধাপে চালু: প্রথমে শুধু দেখার মোড (audit mode), তারপর ঝুঁকি কম এমন দলে আটকানোর মোড, তারপর বাকিরা। “Detect-only” যেন স্থায়ী না হয়ে যায়।
- Exclusion: EDR exclusion মানে কোনো path, process বা hash-কে পাহারার বাইরে রাখা। এটি অনেক সময় দরকার, যেমন database-এর data ফাইল। Vendor-এর লিখিত পরামর্শ থাকলে আরও ভালো।
Exclusion হলো পাহারাদারকে বলা, “এই দরজা দেখার দরকার নেই।” তাই প্রশ্ন একটাই: সেই দরজা দিয়ে অন্য কেউ ঢুকতে পারে কি? সাধারণ user যেখানে লিখতে পারেন, সেই ফোল্ডার বাদ দিলে ফাঁকটি বড়। পুরো script host বাদ দেওয়া তার চেয়েও বিপজ্জনক। নিয়ম: যত সরু, তত ভালো; path-এর চেয়ে স্বাক্ষর বা hash ভালো; সব যন্ত্রের বদলে নির্দিষ্ট যন্ত্র; আর মালিক, কারণ ও মেয়াদ বাধ্যতামূলক। নিচের block খেলনা তালিকা যাচাই করে। Point আমাদের অনুমান।
// Toy exclusion auditor: fictional rules, no real product is changed.
const rules = [
{ id: 'EX1', kind: 'path', value: 'D:\\AcmeDB\\data\\*.mdf', scope: 'DB-01',
owner: 'dba', why: 'vendor note 42', expires: '2027-03-01' },
{ id: 'EX2', kind: 'path', value: 'C:\\Users\\*\\Downloads\\*', scope: 'all',
owner: '', why: '', expires: null },
{ id: 'EX3', kind: 'process', value: 'powershell.exe', scope: 'all',
owner: 'it', why: 'slow login script', expires: null },
{ id: 'EX4', kind: 'hash', value: 'sha256:example-1f3a', scope: 'BK-01',
owner: 'backup', why: 'signed backup tool', expires: '2026-12-31' },
{ id: 'EX5', kind: 'path', value: 'C:\\Temp\\', scope: 'FIN-*',
owner: 'finance', why: '', expires: '2027-01-15' },
];
const USER_WRITABLE = /\\Users\\|\\Temp\\|\\Downloads\\/i;
const SCRIPT_HOST = /^(powershell|cmd|wscript|cscript|mshta)\.exe$/i;
function audit(r) {
const hits = [];
if (r.kind === 'path' && USER_WRITABLE.test(r.value)) hits.push([3, 'user-writable']);
if (r.kind === 'process' && SCRIPT_HOST.test(r.value)) hits.push([3, 'script-host']);
if (r.kind === 'path' && r.value.includes('*\\')) hits.push([1, 'wildcard-dir']);
if (r.scope === 'all') hits.push([2, 'every-host']);
if (!r.owner) hits.push([1, 'no-owner']);
if (!r.why) hits.push([1, 'no-reason']);
if (!r.expires) hits.push([2, 'no-expiry']);
const score = hits.reduce((s, h) => s + h[0], 0);
const band = score >= 6 ? 'HIGH' : score >= 3 ? 'MEDIUM' : 'LOW';
return { id: r.id, score, band, why: hits.map(h => h[1]).join(', ') || '-' };
}
const report = rules.map(audit).sort((a, b) => b.score - a.score);
for (const x of report) console.log(`${x.id} ${String(x.score).padStart(2)} ${x.band.padEnd(6)} ${x.why}`);EX2 10 HIGH user-writable, wildcard-dir, every-host, no-owner, no-reason, no-expiry
EX3 7 HIGH script-host, every-host, no-expiry
EX5 4 MEDIUM user-writable, no-reason
EX1 0 LOW -
EX4 0 LOW -
EX2 প্রায় সব ভুল একসাথে করেছে: সব যন্ত্রে সবার Downloads পাহারার বাইরে, মালিক নেই, মেয়াদ নেই। EX3-র মালিক আছেন, কারণও আছে, তবু ফল HIGH, কারণ login script ধীর বলে পুরো PowerShell বাদ দেওয়া হয়েছে। ঠিক কাজ হলো script-টির সমস্যা দেখা। EX1 আর EX4 ০ পেয়েছে, কারণ এগুলো সরু, নির্দিষ্ট যন্ত্রে সীমিত আর মেয়াদসহ। এই তালিকাও গোপন রাখুন, আর প্রতি ত্রৈমাসিকে পর্যালোচনা করুন।
এবার coverage. পর্ব ২৯-এর শিক্ষা মনে রাখুন: coverage metric-এর হর হবে inventory, agent তালিকা নয়। আর “বসানো” মানেই “সুস্থ” নয়।
// Toy agent-health report. Inventory is the denominator, not the agent list.
const MAX_SILENT_DAYS = 1, MIN_VERSION = 70;
const inventory = ['LT-01', 'LT-02', 'LT-03', 'LT-04', 'LT-05', 'LT-06',
'SRV-01', 'SRV-02', 'SRV-03', 'POS-01'];
const agents = { // what the console reports (made-up values)
'LT-01': { seen: 0, ver: 72, tamper: true, mode: 'block' },
'LT-02': { seen: 0, ver: 72, tamper: true, mode: 'block' },
'LT-03': { seen: 9, ver: 71, tamper: true, mode: 'block' },
'LT-04': { seen: 0, ver: 64, tamper: true, mode: 'block' },
'LT-05': { seen: 0, ver: 72, tamper: false, mode: 'block' },
'SRV-01': { seen: 0, ver: 71, tamper: true, mode: 'block' },
'SRV-02': { seen: 1, ver: 72, tamper: true, mode: 'detect' },
'SRV-03': { seen: 0, ver: 72, tamper: true, mode: 'block' },
};
let installed = 0, healthy = 0;
const problems = [];
for (const host of inventory) {
const a = agents[host];
if (!a) { problems.push(`${host}: NO AGENT`); continue; }
installed++;
const bad = [];
if (a.seen > MAX_SILENT_DAYS) bad.push(`silent ${a.seen}d`);
if (a.ver < MIN_VERSION) bad.push(`old version ${a.ver}`);
if (!a.tamper) bad.push('tamper protection off');
if (a.mode !== 'block') bad.push('detect-only');
if (bad.length) problems.push(`${host}: ${bad.join(', ')}`);
else healthy++;
}
const pct = n => (100 * n / inventory.length).toFixed(0) + '%';
console.log(`inventory ${inventory.length}`);
console.log(`installed ${installed} (${pct(installed)})`);
console.log(`healthy ${healthy} (${pct(healthy)})`);
problems.forEach(p => console.log(' ' + p));inventory 10
installed 8 (80%)
healthy 4 (40%)
LT-03: silent 9d
LT-04: old version 64
LT-05: tamper protection off
LT-06: NO AGENT
SRV-02: detect-only
POS-01: NO AGENT
Console-এর তালিকায় ৮টি agent, তাই সব ঠিক মনে হতে পারে। আসল ছবি ১০টির মধ্যে ৪টি সুস্থ, মানে ৪০%. LT-03 ৯ দিন নীরব, যা বন্ধ যন্ত্রও হতে পারে, আবার অক্ষম agent-ও। LT-05-এর tamper protection বন্ধ, যা সাথে সাথে তদন্তের যোগ্য। POS-01-এর মতো যন্ত্র প্রায়ই বাদ থাকে, অথচ ঝুঁকি সেখানেই বেশি হতে পারে।
৭ · বিনা খরচে telemetry — Sysmon আর osquery
EDR ছাড়াও শেখা যায়। আপনার নিজের যন্ত্র বা ল্যাবে, অথবা প্রতিষ্ঠানে অনুমতি নিয়ে, দুটি টুল দেখতে পারেন। “বিনা খরচে” মানে software-এর দাম নেই। Log জমা, নিয়ম লেখা আর পড়ার মানুষ আপনাকেই দিতে হবে।
Sysmon — Windows-এর বিস্তারিত রেজিস্টার খাতা
Microsoft Sysinternals-এর Sysmon একটি service আর driver, যা ঘটনা Windows event log-এ লেখে। Microsoft-এর নথি স্পষ্ট বলে, এটি নিজে বিশ্লেষণ করে না, আর নিজেকে লুকায়ও না। তাই এটি শুধু তথ্যের উৎস, SIEM-এ পাঠিয়ে তবে কাজে লাগে। Log থাকে Microsoft/Windows/Sysmon/Operational-এ।
| Event ID | ঘটনা | মনে রাখার কথা |
|---|---|---|
1 | Process creation | Parent, command line আর hash থাকে |
3 | Network connection | Default-এ বন্ধ, চালু করতে হয় |
11 | File create | Startup, temp, download ফোল্ডারে কাজের |
12–14 | Registry event | Autostart key-র বদল |
22 | DNS query | কোন process কী নাম খুঁজল |
<!-- Lab example. Match schemaversion to your binary: sysmon64 -? config -->
<Sysmon schemaversion="4.82">
<HashAlgorithms>SHA256</HashAlgorithms>
<EventFiltering>
<!-- exclude with no rule: log every process start -->
<ProcessCreate onmatch="exclude" />
<!-- network: only programs running from user folders -->
<NetworkConnect onmatch="include">
<Image condition="begin with">C:\Users\</Image>
</NetworkConnect>
<!-- autostart changes in the registry -->
<RegistryEvent onmatch="include">
<TargetObject condition="contains">\CurrentVersion\Run</TargetObject>
</RegistryEvent>
</EventFiltering>
</Sysmon>sysmon64 -accepteula -i sysmon-config.xml
sysmon64 -cপ্রথম কমান্ড configuration-সহ Sysmon বসায়, দ্বিতীয়টি বর্তমান configuration দেখায়। এটি শুরু করার একটি ছোট configuration. Exclude-এ কোনো নিয়ম না দেওয়ায় সব process লেখা হবে, আর network ও registry শুধু নির্দিষ্ট ক্ষেত্রে। সব চালু করলে log-এর বন্যা হয়, আর খুব কম চালু করলে অন্ধ। আগে ল্যাবে দেখুন দিনে কত ঘটনা আসে।
osquery — যন্ত্রকে database-এর মতো জিজ্ঞেস করা
osquery OS-কে একটি relational database-এর মতো দেখায়, তাই SQL দিয়ে প্রশ্ন করা যায়। এটি Windows, macOS আর Linux-এ চলে। হাতে চালানোর জন্য osqueryi, আর নিয়মিত চালানোর জন্য osqueryd. Facebook-এ তৈরি এই open source প্রকল্প এখন Linux Foundation-এর অধীনে চলে। নিচে দুটি শুধু-পড়ার query, যা কিছু বদলায় না।
-- Which process listens on which port? (own lab machine)
SELECT p.pid, p.name, p.path, l.port
FROM listening_ports AS l
JOIN processes AS p USING (pid)
WHERE l.port > 0;
-- Running, but the file on disk is gone
SELECT pid, name, path FROM processes WHERE on_disk = 0;Table আর column osquery-র version ও OS-ভেদে আলাদা হতে পারে, তাই নিজের যন্ত্রের schema দেখে নিন। এখানে ব্রাউজারে osquery চালানো যায় না, আর আমরা আসল process পড়তেও চাই না। তাই নিচের block একটি স্থির নমুনা table-এ একই ধরনের প্রশ্ন করে।
#!/bin/bash
# osquery-like filter on a fixed sample table. Real osquery is not used here,
# and no real process on this machine is read.
table=$(cat <<'EOF'
pid,name,path,on_disk,port
401,sshd,/usr/sbin/sshd,1,22
522,nginx,/usr/sbin/nginx,1,443
610,edr-agent,/opt/agent/edr-agent,1,0
733,postgres,/usr/lib/postgresql/bin/postgres,1,5432
815,updater,/tmp/.cache/updater,1,8081
902,worker,/var/tmp/worker,0,0
EOF
)
approved="sshd nginx postgres"
echo "Q1: running, but file is gone from disk (on_disk = 0)"
echo "$table" | awk -F, 'NR>1 && $4==0 {print " "$1, $2, $3}'
echo "Q2: running from a temp folder"
echo "$table" | awk -F, 'NR>1 && $3 ~ /^\/(var\/)?tmp\// {print " "$1, $2, $3}'
echo "Q3: listening, but not on the approved list"
echo "$table" | awk -F, -v ok="$approved" '
BEGIN { n = split(ok, a, " "); for (i = 1; i <= n; i++) allow[a[i]] = 1 }
NR>1 && $5 > 0 && !($2 in allow) {print " "$1, $2, "port", $5}'Q1: running, but file is gone from disk (on_disk = 0)
902 worker /var/tmp/worker
Q2: running from a temp folder
815 updater /tmp/.cache/updater
902 worker /var/tmp/worker
Q3: listening, but not on the approved list
815 updater port 8081
তিনটি প্রশ্ন, প্রতিটি সন্দেহ তোলে, রায় দেয় না। Q1-এ worker-এর ফাইল আর নেই। এটি লুকানোর লক্ষণ হতে পারে, আবার software update-এর পরে পুরোনো process চলতে থাকলেও এমন হয়। Q3 পর্ব ২২-এর allowlist-চিন্তা: কী থাকার কথা জানা থাকলে বাকিটা চোখে পড়ে। worker Q3-এ নেই, কারণ তার কোনো port খোলা নেই। তাই একটি প্রশ্নে ধরা না পড়া মানে নিরাপদ নয়।
৮ · XDR, NDR, MDR, SOAR — আর কেনার সিদ্ধান্ত
এই বাজারে শব্দের ভিড় বেশি। মনে রাখার সহজ উপায়: কোনোটি কী দেখে, কোনোটি কী করে, আর কোনোটি কে করে।
| নাম | মূল প্রশ্ন | কী | মহল্লার তুলনা |
|---|---|---|---|
| EDR | যন্ত্রের ভেতরে কী হলো? | Endpoint পণ্য | প্রতিটি বাড়ির ভেতরের CCTV |
| NDR | Network-এ কী চলছে? | Network পণ্য | রাস্তার মোড়ের ক্যামেরা |
| XDR | নানা উৎসের ঘটনা কি একই গল্প? | বহু উৎস জোড়া detection ও সাড়া | বাড়ি, রাস্তা, গেট এক নিয়ন্ত্রণ কক্ষে |
| SIEM | সব log একসাথে দেখা যায় কি? | Log জমা, নিয়ম, দীর্ঘ সংরক্ষণ | থানার পুরো রেজিস্টার |
| SOAR | একই কাজ কি স্বয়ংক্রিয় করা যায়? | Playbook চালানোর automation | লিখিত নিয়মে চলা সহকারী |
| MDR | রাত তিনটায় কে দেখবে? | সেবা, পণ্য নয় | ভাড়া করা পাহারাদার দল |
XDR-এর একক মানসম্মত সংজ্ঞা নেই। কেউ বোঝান এক vendor-এর সব পণ্য জোড়া, কেউ বোঝান নানা vendor-এর উৎস জোড়া। তাই “XDR” লেখা দেখলে জিজ্ঞেস করুন: ঠিক কোন কোন উৎস, কোন গভীরতায়, আর সাড়া কোথায় কোথায় দেওয়া যায়?
২৪ ঘণ্টার হিসাব আর MDR
একটি চেয়ারে সবসময় একজন মানুষ রাখতে কত লোক লাগে? সপ্তাহে ১৬৮ ঘণ্টা ÷ জনপ্রতি ৪০ ঘণ্টা = ৪.২ জন, ছুটি আর অসুস্থতা বাদে। বাস্তবে অন্তত ৫ থেকে ৬ জন। অধিকাংশ ছোট প্রতিষ্ঠানের জন্য এটি অসম্ভব, আর আক্রমণ অফিস সময় মেনে হয় না। এখানেই MDR-এর যুক্তি। সেবাদাতার analyst আপনার alert দেখেন, যাচাই করেন, আর চুক্তি অনুযায়ী সাড়া দেন।
তবে দায় কেনা যায় না। চুক্তির আগে লিখে নিন: তাঁরা কি যন্ত্র isolate করতে পারবেন, নাকি শুধু ফোন করবেন? রাতে কাকে ফোন? সাড়ার SLA কত? আপনার ডেটা কোথায় থাকে? চুক্তি শেষে log ফেরত পাবেন? এসব প্রশ্নের বিস্তারিত পর্ব ৭১-এ।
ATT&CK Evaluations সমালোচনার চোখে
MITRE-র ATT&CK Evaluations-এ অংশ নেওয়া পণ্যকে একটি অনুকরণ করা আক্রমণের সামনে রাখা হয়, আর ফল প্রকাশ হয়। এই স্বচ্ছতা মূল্যবান। কিন্তু MITRE নিজেই বলে তারা vendor-দের ক্রম করে না। “আমরা প্রথম” বিজ্ঞাপনটি vendor-এর নিজের ব্যাখ্যা। পড়ার সময় মনে রাখুন:
- অংশগ্রহণ ঐচ্ছিক, তাই নেই মানে খারাপ নয়।
- পরীক্ষার পরিবেশ আপনার অফিস নয়। আসল বহরের শব্দ, দুর্বল configuration আর ক্লান্ত analyst সেখানে নেই।
- Detection সব সমান নয়। শুধু telemetry দেখা আর স্পষ্ট alert দেওয়া আলাদা জিনিস।
- False positive, মোট alert-এর সংখ্যা, দাম আর ব্যবহারের সহজতা আলাদা করে দেখতে হবে। এক রাউন্ডের সংখ্যা নয়, MITRE-র মূল ফল নিজে পড়ুন।
ছোট প্রতিষ্ঠান কীভাবে বেছে নেবে
আগে পর্ব ২৯-এর ভিত্তি: inventory, patch, MFA, backup. সেগুলো ছাড়া EDR ফুটো নৌকায় দামি পাম্প বসানোর মতো। তারপর কোনো নাম নয়, এই প্রশ্নগুলো ধরে এগোন। আপনার OS বা office suite-এ বিল্ট-ইন সুবিধা থাকলে সেটিও তুলনায় রাখুন।
৯ · সীমা — যা EDR পারে না, আর জুলাই ২০২৪
Agent-এর ওপর হাত
দখল করা যন্ত্রে আক্রমণকারী পাহারা দুর্বল করার চেষ্টা করতে পারে। একে ঝুঁকি হিসেবে ধরুন আর tampering-এর খবর নজরে রাখুন।
Heartbeat, service, policy বদলের alertAgent-হীন যন্ত্র
Unmanaged device, shadow IT, printer, camera, VPN appliance আর network যন্ত্রে সাধারণত agent বসে না। অথচ দরজা অনেক সময় সেখানেই।
NDR, log, segmentationঅন্ধ জায়গা
SaaS-এর ভেতরের কাজ, চুরি যাওয়া token দিয়ে cloud login, আর কম সময়ের container. যন্ত্রে কিছু না হলে EDR দেখে না।
Identity ও cloud logএক vendor-এর ওপর নির্ভরতা
পণ্য, detection, log আর সাড়া এক জায়গায় হলে সহজ, কিন্তু vendor lock-in আর single point of failure-ও তৈরি হয়।
Log-এর স্বাধীন কপি, বিকল্প পথTampering কীভাবে নজরে রাখবেন: Tamper protection চালু রাখুন আর uninstall-এ অনুমোদন লাগুক। Agent নীরব হলে alert দিন, বিশেষ করে যন্ত্রটি অন্য log-এ জীবিত দেখা গেলে। Console-এর policy বা exclusion বদল SIEM-এ পাঠান। Windows-এর দুর্বল driver blocklist চালু রাখুন। পর্ব ৩১-এর মতো admin account সীমিত রাখুন, কারণ কম admin মানে যন্ত্রে হাত দেওয়ার পথও কম। EDR পরীক্ষা শুধু নিজের ল্যাবে বা পর্ব ৬-এর লিখিত অনুমতি নিয়ে।
১৯ জুলাই ২০২৪: পাহারাদারই যখন দরজা আটকে দেন
এটি সাইবার হামলা ছিল না। CrowdStrike-এর প্রকাশিত রিপোর্ট অনুযায়ী, ১৯ জুলাই ২০২৪ তারিখে ০৪:০৯ UTC-তে Windows-এর Falcon sensor-এর জন্য একটি configuration content update ছাড়া হয়। নতুন content ২১টি input field ধরে লেখা ছিল, কিন্তু sensor-এর কোড দিয়েছিল ২০টি মান, ফলে ২১তমটি পড়তে গিয়ে memory-র সীমার বাইরে পড়া হয়, আর kernel-এ এই ভুল Windows-কে crash করায়। ০৫:২৭ UTC-তে update ফিরিয়ে নেওয়া হয়। মাত্র ৭৮ মিনিট, কিন্তু সেই সময়ে online থাকা প্রভাবিত যন্ত্রগুলো পড়ে গিয়েছিল। Microsoft-এর অনুমান প্রায় ৮৫ লাখ Windows যন্ত্র, যা তাদের হিসাবে সব Windows যন্ত্রের ১%-এর কম। বহু যন্ত্রে হাতে গিয়ে সারাতে হয়েছে, আর বিমান, হাসপাতাল ও ব্যাংকের সেবায় ব্যাঘাতের খবর এসেছিল।
রিপোর্টে এই update-এ ধাপে ধাপে ছাড়ার ব্যবস্থা না থাকার ইঙ্গিত মেলে। পরে প্রতিষ্ঠানটি staggered deployment আর গ্রাহকের নিয়ন্ত্রণ বাড়ানোর অঙ্গীকার করে। শিক্ষাটি একটি কোম্পানির নয়, পুরো শ্রেণির: kernel-এ চলা, স্বয়ংক্রিয় update পাওয়া, সব যন্ত্রে থাকা software নিজেই একটি blast radius. আর “এটি শুধু configuration” বলে যাচাই এড়ানো যায় না। নিচে একটি কাল্পনিক ৫,০০০ যন্ত্রের বহরে staged rollout দেখুন। আরও জানতে deployment strategy-র পর্ব দেখতে পারেন।
- Ring 0
10ল্যাব - Ring 1
50IT দল - Ring 2
500একটি শাখা - Ring 3
4,440বাকি সব
fleet : 5,000 rings : 10 + 50 + 500 + 4,440 stop rule : crash or offline > 1% soak time : 24 h each ring rollback : tested, one command
hosts : 10
crashed : 0 (0%)
gate : PASS
note : all 10 share one disk driver
hosts : 50 crashed : 6 (12%) limit : 1% gate : FAIL
rollout : HALTED
sent : 60 hosts
not sent: 4,940 hosts
alert : on-call + vendor ticket
auto recovered : 54 hosts
manual repair : 6 hosts
service impact : IT team only
with rings : 6 hosts down
without rings : 5,000 x 12% = 600 hosts down
lab fix : add other disk driver
- আগে নিয়ম। ৫,০০০ যন্ত্র চারটি deployment ring-এ ভাগ করা। থামার শর্ত আগেই লেখা: ১%-এর বেশি crash বা offline. প্রতিটি ring-এ ২৪ ঘণ্টা soak time. Rollback আগে পরীক্ষা করা।
- Ring 0. ল্যাবের ১০টি যন্ত্রে ০টি crash, তাই পাস। কিন্তু খেয়াল করুন, সবগুলোর disk driver একই। ল্যাব সবুজ মানেই নিরাপদ নয়।
- Ring 1. ৫০টির মধ্যে ৬টি পড়ে গেল, মানে ১২%. ত্রুটিটি শুধু একটি ভিন্ন disk driver-এ ঘটে, যা ল্যাবে ছিল না। ১২% > ১%, তাই গেট FAIL.
- থামা। কোনো মানুষের অপেক্ষা না করে rollout থামল। মোট ১০ + ৫০ = ৬০টি যন্ত্র update পেয়েছে। বাকি ৪,৯৪০টি স্পর্শই হয়নি।
- ফেরা। ৬০টির মধ্যে ৫৪টি নিজে v72-এ ফিরল। ৬টি চালুই হচ্ছে না, তাই হাতে সারাতে হবে। ঠিক এজন্যই Ring 1-এ IT দলের যন্ত্র রাখা, যাঁরা নিজেরাই সারাতে পারেন।
- তুলনা। Ring ছাড়া একসাথে ছাড়লে ৫,০০০ × ১২% = ৬০০টি যন্ত্র পড়ত। Ring থাকায় পড়ল ৬টি। এবার ল্যাবে ভিন্ন driver যোগ হবে, যাতে একই ফাঁক আর না থাকে।
Canary কত বড় হবে? ধরুন একটি ত্রুটি ২% যন্ত্রে ঘটে। ৫০টি যন্ত্রের দলে অন্তত একটিতে ধরা পড়ার সম্ভাবনা ১ − ০.৯৮৫০ ≈ ৬৪%. ২০০টিতে ১ − ০.৯৮২০০ ≈ ৯৮%. তাই দল বড় আর বৈচিত্র্যপূর্ণ হওয়া চাই। তবে সংখ্যার চেয়েও বড় কথা, হার্ডওয়্যার আর software-এর ধরন যেন আসল বহরের মতো হয়।
পরীক্ষা ও ইন্টারভিউতে:
- EDR আর antivirus-এর পার্থক্য? Antivirus মূলত ফাইল আটকায়; EDR আচরণ রেকর্ড করে, তদন্ত আর দূর থেকে সাড়া দেওয়া যায়।
- Process tree-তে আগে কী দেখবেন? Parent-child জোড়া স্বাভাবিক কি না, command line আর user.
- XDR আর SIEM? SIEM log জমা ও নিয়মের জন্য; XDR বাছাই করা উৎসে তৈরি detection ও সাড়া দেয়।
- Exclusion-এর ঝুঁকি? সেই পথে যা ঘটে তা পাহারার বাইরে, তাই সরু, মালিকসহ আর মেয়াদসহ রাখা হয়।
- MDR কখন? ২৪ ঘণ্টা দল না থাকলে। এক চেয়ারেই ৪.২ জন লাগে।
১০ · AI-এর যুগে — EDR-এ AI-কে কীভাবে ব্যবহার করবেন
অনেক EDR পণ্যে এখন AI সহকারী আছে, যা alert-এর সারাংশ লেখে। এটি কাজের, কারণ encoded লেখা ব্যাখ্যা বা দীর্ঘ গাছের সারাংশে সময় বাঁচে। তবে AI আত্মবিশ্বাসের সাথে ভুলও বলে, আর ভুল রায় একজন মানুষের যন্ত্র আটকে দিতে পারে।
| AI-এর সাধারণ ভুল | যাচাই |
|---|---|
| ভুল Event ID, ATT&CK technique বা বানানো CVE নম্বর | মূল উৎস: Microsoft, MITRE, NVD |
| “Alert বন্ধ করতে পুরো ফোল্ডার exclude করুন” | আগে কারণ খুঁজুন, exclusion হলে সরু ও মেয়াদসহ |
| Install ঠিক করতে tamper protection বন্ধের পরামর্শ | Vendor-এর নথি আর অনুমোদন |
| এক লাইন দেখেই “নিরীহ” বা “ক্ষতিকর” রায় | পুরো গাছ, প্রসঙ্গ আর user-এর সাথে কথা |
| পুরোনো পরামর্শ, যেমন MD5 hash-এই ভরসা | SHA-256 আর বর্তমান নথি |
নিচের prompt-টি একটি কাল্পনিক বা নাম-মুছে-ফেলা alert ব্যাখ্যায় সাহায্য করে। আসল hostname, user-এর নাম, token বা ব্যক্তিগত ডেটা কখনো দেবেন না।
AI ব্যবহারের চেকলিস্ট
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন, তারপর “→ উত্তর” চাপুন।
প্র ০১“EDR” শব্দটি কোথা থেকে এলো, আর “XDR” কি আসল অগ্রগতি, নাকি নতুন বিজ্ঞাপন?
সাধারণভাবে বলা হয়, ২০১৩ সালে Gartner-এর বিশ্লেষক Anton Chuvakin “endpoint threat detection and response” নামে এই শ্রেণিটির কথা লেখেন। প্রেক্ষাপট ছিল পরিষ্কার। ২০১০-এর দশকের শুরুতে বড় বড় অনুপ্রবেশে দেখা যাচ্ছিল, আক্রমণকারী মাসের পর মাস ভেতরে থাকছে, আর antivirus কিছু বলছে না। প্রশ্নটি তাই “ঠেকানো গেল কি” থেকে সরে গেল “ঢুকে থাকলে জানব কীভাবে” দিকে।
XDR শব্দটি ২০১৮ সালের দিকে Palo Alto Networks-এর Nir Zuk-এর সাথে যুক্ত বলে প্রায়ই উল্লেখ হয়। মূল ভাবনাটি সৎ। আক্রমণ এক জায়গায় থাকে না। Email থেকে শুরু, ল্যাপটপে চলা, cloud account-এ যাওয়া। আলাদা পর্দায় আলাদা alert দেখলে গল্পটি ভেঙে যায়। উৎসগুলো জুড়লে দশটি alert মিলে একটি incident হতে পারে।
আবার বাজারের দিকটিও সত্য। এই শব্দে একক মান নেই, তাই প্রায় যেকোনো পণ্য নিজেকে XDR বলতে পারে। অনেকে এটিকে এক vendor-এর সব পণ্য কেনানোর কৌশল হিসেবেও দেখেন। পাশাপাশি SIEM-ও detection আর automation যোগ করছে, ফলে সীমারেখা ঝাপসা হচ্ছে।
ক্রেতার জন্য ব্যবহারিক পরীক্ষা হলো একটি কাল্পনিক ঘটনা হাতে নিয়ে জিজ্ঞেস করা: phishing থেকে শুরু করে ল্যাপটপ আর cloud login পর্যন্ত এই পণ্য কি সত্যিই একটি গল্প দেখাবে? আমাদের অন্য vendor-এর log কি ঢুকবে? সেখান থেকে কি সাড়া দেওয়া যাবে? উত্তর demo-তে নিজের চোখে দেখে নিন, শুধু slide দেখে নয়।
মূল উপলব্ধি: নিরাপত্তার বাজারে নাম আসে দ্রুত, মান আসে ধীরে। নামের বদলে কাজ দিয়ে পণ্য যাচাই করুন: কী দেখে, কী জোড়ে, কী করতে পারে।
প্র ০২নিরাপত্তা software-এর কি আদৌ kernel-এ থাকা উচিত?
পক্ষের যুক্তি শক্ত। Kernel থেকে দেখলে আগে দেখা যায়, আর আটকানোও যায় কাজটি ঘটার আগে। আক্রমণকারী যদি kernel-এ থাকে আর পাহারাদার user mode-এ, তাহলে পাহারাদারের দেখা ছবি বদলে দেওয়া সম্ভব হতে পারে। যন্ত্র চালুর শুরুতেই নিরাপত্তা চালু থাকাও দরকারি।
বিপক্ষের যুক্তি জুলাই ২০২৪ স্পষ্ট করেছে। Kernel-এ একটি ভুল মানে একটি app নয়, পুরো OS পড়ে যাওয়া। আর সেই software-এ নিজের কোনো দুর্বলতা থাকলে আক্রমণকারী সবচেয়ে ক্ষমতাবান স্তরে পৌঁছাতে পারে। Saltzer ও Schroeder-এর ১৯৭৫ সালের নীতিগুলোর অন্যতম least privilege আর economy of mechanism: বিশ্বাস করা কোডের পরিমাণ যত কম, তত ভালো।
ঘটনার পর ১০ সেপ্টেম্বর ২০২৪-এ Microsoft নিরাপত্তা vendor-দের নিয়ে একটি সম্মেলন করে, যেখানে kernel-এর বাইরে এসব পণ্য চালানোর পথ আলোচনায় আসে। পরে Windows Resiliency Initiative-এর অধীনে একটি endpoint security platform-এর ঘোষণা আসে, যাতে এমন পণ্য user mode-এ চলতে পারে। Apple আগেই macOS-এ kernel extension থেকে সরে আসার পথ দেখিয়েছে, আর Linux-এ eBPF যাচাই করা কোড kernel-এ চালায়। এগুলোর কোনোটিই পুরো সমাধান নয়। eBPF-ও ত্রুটিমুক্ত নয়, আর নতুন পথে যেতে সময় লাগে।
আরেকটি তর্ক প্রতিযোগিতার। যে কোম্পানি OS বানায়, সে নিজেও নিরাপত্তা পণ্য বেচে। তাই অন্যদের সুযোগ সীমিত হলে তা ন্যায্য কি না, সে প্রশ্নও উঠেছে।
মূল উপলব্ধি: প্রশ্নটি “kernel ভালো না খারাপ” নয়। প্রশ্ন হলো ক্ষমতার দাম কত, আর ভুলের প্রভাব কতটা সীমিত রাখা যায়। Privileged কোড যেখানেই থাকুক, তাকে OS-এর সমান যত্নে যাচাই আর ছাড়তে হবে।
প্র ০৩Alert এসেছিল, তবু বড় breach ঠেকেনি। দোষ কি প্রযুক্তির, নাকি অন্য কিছুর?
২০১৩ সালের Target breach এই প্রশ্নের চেনা উদাহরণ। মার্কিন সিনেট কমিটির কর্মীদের ২০১৪ সালের বিশ্লেষণ আর তখনকার প্রকাশিত খবর অনুযায়ী, প্রবেশ ঘটেছিল একটি তৃতীয় পক্ষের যোগসূত্র ধরে। প্রতিষ্ঠানটির malware detection ব্যবস্থা সতর্কতা দিয়েছিল, আর পর্যবেক্ষণ দল তা জানিয়েওছিল। কিন্তু সেই সতর্কতা অনুযায়ী সময়মতো কাজ হয়নি বলে জানা যায়। পরে কয়েক কোটি কার্ডের তথ্য চুরির কথা প্রকাশ পায়।
অর্থাৎ যন্ত্র কথা বলেছিল, প্রতিষ্ঠান শোনেনি। এর পেছনে সাধারণ কিছু কারণ থাকে, শুধু একটি ঘটনায় নয়। প্রথমত alert fatigue. দিনে শত শত alert-এর বেশিরভাগ যদি false positive হয়, মানুষ ধীরে ধীরে উপেক্ষা করতে শেখে। দ্বিতীয়ত অস্পষ্ট দায়িত্ব। কে সিদ্ধান্ত নেবেন, কার যন্ত্র বন্ধ করা যাবে, তা লেখা না থাকলে সবাই অন্যের অপেক্ষায় থাকেন। তৃতীয়ত ব্যবসার চাপ, বিশেষ করে বিক্রির মৌসুমে কেউ ব্যবস্থা থামাতে চান না।
পর্ব ৫-এর গল্পেও autostart-এর সতর্কতা অগ্রাধিকার না পেয়ে পরের দিনের জন্য রয়ে গিয়েছিল। এই পর্বের alert triage-এর শৃঙ্খলা, runbook, অনুমোদনের পথ, আর tuning এজন্যই। একই কারণে MDR বা ২৪ ঘণ্টার দল শুধু বিলাসিতা নয়।
এখান থেকে একটি মাপও আসে। প্রতিষ্ঠান সাধারণত গর্ব করে “কত alert পেয়েছি”, অথচ জরুরি হলো: উচ্চ severity-র alert কতক্ষণে একজন মানুষ দেখলেন, আর কতক্ষণে কাজ হলো। পর্ব ৬০-এ এই metric-গুলো আসবে।
মূল উপলব্ধি: Detection একটি প্রক্রিয়া, পণ্য নয়। মানুষ, দায়িত্ব আর ক্ষমতা ঠিক না থাকলে সেরা sensor-ও শুধু একটি সুন্দর প্রমাণ রেখে যায় যে আপনি জানতে পারতেন।
প্র ০৪কর্মীর ল্যাপটপে EDR: নিরাপত্তা, নাকি নজরদারি? সীমা কোথায় টানবেন?
EDR-এর telemetry খুব ব্যক্তিগত হতে পারে। Command line-এ ফাইলের নাম, ভিজিট করা domain, কে কখন login করলেন, আর live response-এ দরকারে পুরো ফাইল। মহল্লার পাহারাদার গেট দেখলে সবাই খুশি; পাহারাদার শোবার ঘরে ঢুকলে নয়। প্রযুক্তিটি একই থাকে, বদলায় উদ্দেশ্য আর নিয়ন্ত্রণ।
GDPR-এর মতো আইনে এর জন্য purpose limitation আর data minimisation-এর ধারণা আছে। ইউরোপের কর্মক্ষেত্রে নজরদারি নিয়েও আলাদা বিতর্ক ও আদালতের সিদ্ধান্ত হয়েছে। বাংলাদেশে ব্যক্তিগত উপাত্ত সুরক্ষা আইন, ২০২৬ প্রণীত হয়েছে, যার কিছু ধারা পরে কার্যকর হবে। আপনার ক্ষেত্রে কী প্রযোজ্য তা আইনজীবীর কাছে জানুন। এটি আইনি পরামর্শ নয়। আইনের প্রসঙ্গ পর্ব ৬-এ আছে, আর privacy engineering পর্ব ৭০-এ আসবে।
ব্যবহারিক নিয়মগুলো স্পষ্ট। প্রথমত স্বচ্ছতা: নীতিতে লিখুন কী রেকর্ড হয়, কেন, কতদিন, আর কে দেখতে পারেন। দ্বিতীয়ত উদ্দেশ্য সীমিত রাখুন: নিরাপত্তার তথ্য দিয়ে কর্মীর উৎপাদনশীলতা মাপা নয়। তৃতীয়ত least privilege: সবাই সব telemetry খুঁজতে পারবেন না। চতুর্থত প্রতিটি খোঁজ audit-এ থাকবে। পঞ্চমত ব্যক্তিগত যন্ত্রে agent বসানোর আগে আলাদা ভাবনা দরকার, কারণ সেখানে পরিবারের ফাইলও থাকতে পারে। পর্ব ২৯-এর BYOD আলোচনায় container বা app-স্তরের সমাধান এসেছে।
আর একটি কথা। Telemetry নিজেও একটি ঝুঁকি। Cloud-এ জমা এই তথ্য ফাঁস হলে আপনার সব যন্ত্রের মানচিত্র ফাঁস হয়। তাই retention যত লম্বা, দায়ও তত বড়।
মূল উপলব্ধি: বিশ্বাস ছাড়া নিরাপত্তা টেকে না। যে ক্ষমতা দিয়ে আক্রমণকারী ধরা হয়, সেই ক্ষমতার ওপরও নিয়ম, স্বচ্ছতা আর নজরদারি থাকা চাই।
প্র ০৫একটি পণ্য ATT&CK Evaluations-এ “১০০% detection” পেয়েছে। তাহলে কি এটিই সেরা?
না, আর MITRE-ও তা বলে না। ২০১৮ সালে শুরু হওয়া এই মূল্যায়নের লক্ষ্য ছিল পণ্যের আচরণ প্রকাশ করা, বিজয়ী ঘোষণা নয়। ডিসেম্বর ২০২৫-এর Enterprise রাউন্ডের ঘোষণাতেও MITRE জানায় তারা vendor-দের ক্রম করে না। অথচ ফল বেরোলেই প্রায় প্রতিটি অংশগ্রহণকারী নিজেকে কোনো না কোনোভাবে সেরা বলে প্রচার করে। Forrester-এর মতো বিশ্লেষকরাও সতর্ক করেছেন, শুধু ১০০% সংখ্যাটি দেখে সিদ্ধান্ত নেওয়া বিভ্রান্তিকর।
কেন? প্রথমত, পরীক্ষাটি নির্দিষ্ট একটি অনুকরণ করা আক্রমণ। নতুন আক্রমণে একই ফল আসবে, এমন নিশ্চয়তা নেই। দ্বিতীয়ত, vendor আগে থেকে জানে এটি মূল্যায়ন, আর পণ্য বিশেষজ্ঞ দিয়ে সাজানো। আপনার অফিসে তা থাকবে না। তৃতীয়ত, পরীক্ষার যন্ত্রে স্বাভাবিক কাজের শব্দ সীমিত। আসল বহরে ১০০% ধরা পণ্য যদি হাজারো false alert দেয়, আপনার analyst আসল alert হারিয়ে ফেলবেন। অংশ ৪-এর precision-এর হিসাব মনে করুন।
চতুর্থত, detection-এর মান আলাদা। Telemetry-তে কোথাও একটি ঘটনা থাকা এক কথা, আর analyst-কে কী ঘটেছে তা প্রসঙ্গসহ বলা অন্য কথা। শেষে, অংশগ্রহণ ঐচ্ছিক। কোনো পণ্য নেই মানে সেটি খারাপ, এমন নয়। পরপর একাধিক রাউন্ডের ফল দেখা একটি রাউন্ডের চেয়ে বেশি কিছু বলে।
তাহলে কীভাবে ব্যবহার করবেন? প্রথমে আপনার নিজের threat model থেকে (পর্ব ৪) ঠিক করুন কোন আচরণ সবচেয়ে জরুরি। MITRE-র মূল ফল খুলে দেখুন সেগুলোতে পণ্য কী দেখিয়েছে। তারপর নিজের যন্ত্রে পাইলট চালিয়ে মাপুন performance, alert-এর সংখ্যা আর সাড়ার সহজতা। ঘটনার সময় vendor-এর support কেমন, সেটিও জেনে নিন।
মূল উপলব্ধি: মানদণ্ড সিদ্ধান্তের কাঁচামাল, সিদ্ধান্ত নয়। যে সংখ্যা আপনার পরিবেশে মাপা হয়নি, তা আপনার সংখ্যা নয়।
অনুশীলন
হিসাব, ভবিষ্যদ্বাণী, query আর সমালোচনা, চার রকম কাজ।
-
Coverage আর canary-র হিসাব: Inventory-তে ৪০০টি যন্ত্র, agent বসানো ৩৪০টিতে, সুস্থ ৩০৬টি। (ক) Installed আর healthy coverage কত? (খ) কতটি যন্ত্র ঝুঁকিতে? (গ) একটি update-এর ত্রুটি ১% যন্ত্রে ঘটলে ১০০টি যন্ত্রের canary দলে অন্তত একটিতে ধরা পড়ার সম্ভাবনা কত?
(ক) Installed = ৩৪০ ÷ ৪০০ = ৮৫%. Healthy = ৩০৬ ÷ ৪০০ = ৭৬.৫%.
(খ) ৪০০ − ৩০৬ = ৯৪টি। এর মধ্যে ৬০টিতে agent নেই, ৩৪টিতে আছে কিন্তু সুস্থ নয়।
(গ) ১ − ০.৯৯১০০ ≈ ১ − ০.৩৬৬ = ০.৬৩৪, অর্থাৎ প্রায় ৬৩%. মানে ১০০টি যন্ত্রের পরেও প্রায় ৩৭% ক্ষেত্রে এই ত্রুটি ধরা পড়বে না।
-
ফল আগে বলুন:
exclusion_audit.js-এ EX5 বদলে করা হলোscope: 'all'আরwhy: 'legacy app'. অন্য কিছু বদলায়নি। Program না চালিয়ে বলুন EX5-এর লাইনটি কী হবে, আর সে তালিকায় কত নম্বরে থাকবে। তারপরprocess_tree.js-এ pid ৪৩০-এরppid১০০ থেকে ৩৪০ করলে শেষ লাইনটি বদলাবে কি?EX5:
user-writable৩ +every-host২ = ৫। কারণ আছে, মালিক আছেন, মেয়াদ আছে।C:\Temp\-এ wildcard নেই। ফলEX5 5 MEDIUM user-writable, every-host. EX2 (১০) আর EX3 (৭)-এর পরে, তৃতীয় স্থানে।Tree: ৪৩০ এখন Word-এর child, তাই তার পাশে
+3 (chain=3)দেখাবে।winget.exe-তে point নেই। কিন্তু সবচেয়ে খারাপ শৃঙ্খল এখনো ৫, তাই শেষ লাইন একই থাকবে:worst chain score = 5, severity = HIGH. -
একটি query লিখুন: নিজের ল্যাবের Linux যন্ত্রের জন্য একটি শুধু-পড়ার osquery লিখুন, যা
/tmpবা/var/tmpথেকে চলা process দেখায়। ফল এলে কী করবেন?SELECT pid, name, path, cmdline FROM processes WHERE path LIKE '/tmp/%' OR path LIKE '/var/tmp/%';ফল এলে রায় নয়, প্রশ্ন শুরু। কিছু installer বা test বৈধভাবেই temp থেকে চলে। দেখুন parent কে, কোন user, কবে শুরু, আর network আছে কি। বৈধ না হলে নিজের incident প্রক্রিয়ায় যান। Process মেরে দেওয়ার আগে প্রমাণ রাখুন।
-
পরিকল্পনাটি সমালোচনা করুন: একটি কাল্পনিক ২০০ জনের প্রতিষ্ঠানের প্রস্তাব: “শুক্রবার সন্ধ্যায় সব যন্ত্রে একসাথে EDR বসাব। Build ধীর হচ্ছে বলে সব developer-এর
C:\Tools\*বাদ দেব। সবাই একটি shared admin login ব্যবহার করবে। Alert দেখব প্রতি সোমবার। Update স্বয়ংক্রিয়, সবার জন্য।” কমপক্ষে পাঁচটি সমস্যা আর তার সমাধান বলুন।- একসাথে, শুক্রবার সন্ধ্যায়: সমস্যা হলে দেখার কেউ নেই। পাইলট দল, তারপর ring, কাজের দিনের শুরুতে।
- চওড়া exclusion: Developer যেখানে লিখতে পারেন তার সবটাই পাহারার বাইরে। আগে মেপে দেখুন কী ধীর, তারপর স্বাক্ষরভিত্তিক সরু exclusion, মালিক আর মেয়াদসহ।
- Shared admin: কে কী করলেন জানা যাবে না, audit অর্থহীন। ব্যক্তিগত account, MFA, role আর maker-checker.
- সোমবার alert পড়া: শুক্রবার রাতের ঘটনা ৬০ ঘণ্টার বেশি অদেখা থাকবে। MDR বা on-call ব্যবস্থা, আর উচ্চ-আস্থার ঘটনায় স্বয়ংক্রিয় সাড়া।
- সবার জন্য স্বয়ংক্রিয় update: খারাপ update সবাইকে একসাথে ফেলবে। সম্ভব হলে ধাপে ধাপে নিন, পরীক্ষিত rollback রাখুন, আর জরুরি যন্ত্র পরের ring-এ রাখুন।
নিজেকে যাচাই করুন
ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।
ক্রমএকটি EDR alert সামলানোর ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)
- Alert-এর শিরোনাম দেখে process tree খোলা
- Parent-child, network আর user মিলিয়ে সিদ্ধান্ত নেওয়া
- Ticket-সহ isolation-এর অনুরোধ আর অনুমোদন
- Isolation হয়েছে কি না যাচাই আর প্রমাণ সংগ্রহ
- পরিষ্কার করা, অনুমোদন নিয়ে যন্ত্র ছাড়া আর audit-এ লেখা
Windows ল্যাপটপে EDR দেখাচ্ছে: winword.exe → powershell.exe, আর একই PowerShell একটি নতুন scheduled task বানিয়েছে। Analyst-এর সবচেয়ে ভালো পরের কাজ কোনটি?
- সব যন্ত্রে PowerShell মুছে দেওয়া
- Task-এর নাম স্বাভাবিক হলে alert বন্ধ করা
- Command line, network, user যাচাই করে দরকারে isolation-এর অনুরোধ করা
- winword.exe-কে exclusion-এ রাখা
একটি EDR detection নিয়ম সপ্তাহে ২০০টি alert দেয়, যার ৩০টি সত্যি, আর ১০টি আসল ঘটনা ধরতে পারেনি। Precision আর recall কত?
- Precision ৭৫%, recall ১৫%
- Precision ১৫%, recall ৭৫%
- Precision ১৫%, recall ১০০%
- Precision ৩০%, recall ২৫%
EDR exclusion-এর কোন তালিকাটি সবচেয়ে নিরাপদ?
- সব যন্ত্রে সব user-এর Downloads ফোল্ডার
- সব যন্ত্রে powershell.exe process
- অর্থ বিভাগের যন্ত্রে C:\Temp, মেয়াদ ছাড়া
- একটি database server-এ শুধু data ফাইলের path, মালিক, কারণ আর মেয়াদসহ
২৪ ঘণ্টা নিজের দল চালাতে পারে না এমন একটি ছোট প্রতিষ্ঠানের alert রাতে দেখার সমস্যায় কোনটি সরাসরি সমাধান?
- NDR কেনা
- শুধু SOAR বসানো
- MDR সেবা নেওয়া
- রাতের সব alert বন্ধ রাখা
জুলাই ২০২৪-এর ব্যাপক Windows বিভ্রাটের সবচেয়ে সঠিক বর্ণনা কোনটি?
- একটি নিরাপত্তা sensor-এর খারাপ content update, যা হামলা ছিল না, Windows যন্ত্র crash করায়
- একটি সমন্বিত ransomware হামলা সব যন্ত্র বন্ধ করেছিল
- একটি নির্দিষ্ট CPU-র hardware ত্রুটি যন্ত্র বন্ধ করেছিল
- একজন user-এর ভুল পাসওয়ার্ড থেকে এটি শুরু হয়েছিল
Sysmon সম্পর্কে কোন কথাটি সঠিক?
- এটি নিজে সব ঘটনা বিশ্লেষণ করে রায় দেয়
- এটি Windows event log-এ বিস্তারিত ঘটনা লেখে, আর network event চালু করে নিতে হয়
- এটি নিজেকে এমনভাবে লুকিয়ে রাখে যে কেউ দেখতে পায় না
- এটি একটি পূর্ণ EDR, যা দূর থেকে যন্ত্র isolate করে
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন, অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:
মনে রাখুন
- EDR process, file, registry, network, script আর identity-র ঘটনা একে অপরের সাথে জুড়ে রাখে; এটিই তার শক্তি।
- নাম নয়, process tree-র প্রসঙ্গ দেখে সিদ্ধান্ত নিন, আর severity-র সাথে confidence ও যন্ত্রের গুরুত্ব মেলান।
- Isolate, kill, live response মানেই ক্ষমতা, তাই অনুমোদন, যাচাই আর audit চাই।
- Coverage-এর হর inventory, আর exclusion হবে সরু, মালিকসহ, মেয়াদসহ।
- EDR-এর সীমা আছে: agent-হীন যন্ত্র, অন্ধ জায়গা আর privileged update-এর ঝুঁকি। Staged rollout আর স্বাধীন log রাখুন, আর ২৪ ঘণ্টা দল না থাকলে MDR ভাবুন।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ৬০ · SOC পরিচালনা — tier, triage, playbook আর metricপরবর্তী পর্বAlert থেকে দলের কাজের ধারা।
- সাইবার নিরাপত্তা · কোর্স হোম৮০টি পর্বপুরো কোর্সের রোডম্যাপ।
- পর্ব ২৯ · Endpoint নিরাপত্তাপেছনে ফিরুনInventory, baseline আর EDR-এর ভূমিকা।
- পর্ব ৩৩ · Malware প্রতিরক্ষাপাশের পর্বকোন আচরণ কেন সন্দেহজনক।
- Cloud & DevOps · Centralized loggingপাশের ট্র্যাকবহু যন্ত্রের log এক জায়গায় আনার পথ।
- Operating Systems · OS নিরাপত্তাগভীরে যানKernel, user mode আর সুরক্ষার ভিত্তি।