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

IDS আর IPS — signature, anomaly আর false positive

IDS and IPS — Signatures, Anomalies & False Positives

Taught in Bangla, this lesson compares IDS and IPS, network and host sensors, TAP, SPAN and inline placement, and fail-open versus fail-closed choices. It reads a harmless Suricata-style rule, explains signature and anomaly limits, what stays visible under TLS, the confusion matrix, precision, recall and the base-rate fallacy with worked calculators, then alert fatigue, tuning and narrow suppression that creates no blind spots.

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

  • IDS আর IPS, network আর host, TAP, SPAN ও inline-এর পার্থক্য
  • IPS নষ্ট হলে fail open না fail closed, সেই সিদ্ধান্ত নেওয়ার যুক্তি
  • একটি নিরীহ Suricata-ধাঁচের rule পড়া, আর signature ও anomaly-এর সীমা
  • TLS-এর পরেও কী দেখা যায়: flow data, SNI আর JA3/JA4 fingerprint
  • Confusion matrix, precision, recall আর base-rate fallacy-র পূর্ণ হিসাব
  • Alert fatigue, tuning আর অন্ধ জায়গা না বানিয়ে suppression করার নিয়ম

১ · পাহারাদার আর গেটের দারোয়ান — IDS বনাম IPS

একটি আবাসিক এলাকা ভাবুন। রাতে মহল্লার পাহারাদার টহল দেন। কিছু সন্দেহজনক দেখলে তিনি বাঁশি বাজান, কিন্তু কাউকে আটকান না। আর গেটের দারোয়ান দাঁড়িয়ে থাকেন পথের ঠিক মাঝে। তিনি চাইলে কাউকে থামিয়ে দিতে পারেন। দুজনের কাজের ধরন আলাদা, ভুলের দামও আলাদা। পাহারাদার ভুল বাঁশি বাজালে কয়েকজনের ঘুম ভাঙে। দারোয়ান ভুল করে মেহমানকে আটকালে বিয়েবাড়ি থেমে যায়।

IDS (intrusion detection system) হলো পাহারাদার। এটি traffic বা host-এর কাজ দেখে, সন্দেহ হলে alert দেয়। IPS (intrusion prevention system) হলো দারোয়ান। এটি traffic-এর পথে বসে, আর নিয়ম মিললে packet বা connection আটকায়। NIST SP 800-94 (২০০৭) দুটিকে একসাথে IDPS বলে, কারণ অনেক পণ্য একই engine-এ দুই ভূমিকাই পালন করে। ফারাকটি তখন নির্ভর করে যন্ত্রটি কোথায় বসানো আর কীভাবে সাজানো তার ওপর।

Firewall থাকলে আবার IDS কেন

পর্ব ২১-এ network-এর ঝুঁকিগুলো দেখেছেন। পর্ব ২২ (Firewall আর segmentation) দেখিয়েছে, firewall মূলত ঠিক করে কোন ঠিকানা আর port থেকে কোন traffic যাবে। ধরুন মার্কেটের প্রধান ফটকে নিয়ম আছে, “দোকানের কর্মচারী ঢুকতে পারবেন।” Firewall সেই পরিচয়পত্র দেখে। কিন্তু অনুমোদিত দরজা দিয়ে আসা মানুষটি ভেতরে কী করছে, সে প্রশ্ন IDS-এর। Port 443 খোলা থাকতেই হবে, কিন্তু সেই পথে অস্বাভাবিক কিছু চলছে কি না, তা দেখার জন্য আলাদা চোখ লাগে।

সংজ্ঞা নিয়ে মতভেদ: সীমারেখা এখন ঝাপসা। আধুনিক next-generation firewall-এর ভেতরেই IPS থাকে। কোনো কোনো বই “IPS” বলতে শুধু inline যন্ত্র বোঝায়। আবার কিছু পণ্য পথের বাইরে থেকে connection reset পাঠিয়েও নিজেকে prevention বলে দাবি করে। তাই পণ্যের নাম না দেখে দুটি প্রশ্ন করুন: এটি traffic-এর পথে আছে কি? আর এটি সত্যিই packet আটকাতে পারে কি?

কোথা থেকে দেখছে: network, host আর তাদের ফাঁক

ধরনযা ভালো দেখেযা দেখে নামহল্লার উপমা
NIDSএক জায়গা থেকে বহু যন্ত্রের traffic, যন্ত্রে কিছু বসাতে হয় নাএনক্রিপ্টেড লেখা, sensor যে পথে বসানো নেই সেই পথের trafficমোড়ের CCTV
HIDSLogin, ফাইল বদল, process, এনক্রিপশন খোলার পরের ঘটনাযে যন্ত্রে agent নেই, আর agent বন্ধ করে দিলে সেই যন্ত্রপ্রতিটি ঘরের ভেতরের রেজিস্টার খাতা

এই দুটি প্রতিযোগী নয়, একে অপরের ফাঁক ঢাকে। Wazuh বা OSSEC-এর মতো টুল HIDS-এর পরিচিত উদাহরণ। আধুনিক EDR এই ধারণাকে আরও এগিয়ে নিয়েছে (পর্ব ৫৯)। Network-এর দিকে একই বিবর্তনের নাম NDR, যা metadata আর আচরণে বেশি জোর দেয়। মূলনীতিটি আসে পর্ব ৩-এর defense in depth থেকে। আর পর্ব ২-এ আপনি detective control হিসেবে এগুলোর জায়গা দেখেছেন।

২ · কোথায় বসাবেন — TAP, SPAN আর inline

একটি sensor শুধু সেই traffic-ই বিশ্লেষণ করতে পারে, যা তার কাছে পৌঁছায়। তাই placement প্রথম নকশার সিদ্ধান্ত। তিনটি পরিচিত পদ্ধতি আছে। প্রথম দুটিতে sensor শুধু কপি দেখে, তৃতীয়টিতে আসল traffic তার ভেতর দিয়ে যায়।

Sensor কোথায় বসে আর alert কোথায় যায়

Inline IPS, passive IDS through TAP and SPAN, host agent, all feeding a SIEM

IPS, IDS, TAP, SPAN আর SIEM-এর অবস্থান ইন্টারনেট Firewall Inline IPSপথের মাঝে, আটকাতে পারে Switch ServerHIDS বা EDR agent IDS sensorশুধু কপি দেখে SIEM: সব alert এক জায়গায় Analyst TAP কপি SPAN কপি
ছবি ২৩.১ — বেগুনি ভাঙা দাগ মানে আসল traffic-এর কপি। IDS sensor বন্ধ হলেও আসল পথ চলে। Inline IPS বন্ধ হলে কী হবে, সেটি আলাদা সিদ্ধান্ত।
পদ্ধতিকীভাবে পায়সুবিধাসীমা
TAPLink-এ বসানো আলাদা hardware কপি পাঠায়পূর্ণ কপি পাওয়ার জন্য নির্ভরযোগ্য, switch-এর ওপর চাপ নেইবাড়তি খরচ, বসাতে সাধারণত link কিছুক্ষণ থামাতে হয়
SPANSwitch নিজেই port-এর কপি পাঠায়সস্তা, দূর থেকে সাজানো যায়Switch ব্যস্ত হলে কপি বাদ পড়তে পারে
Inlineআসল traffic যন্ত্রের ভেতর দিয়ে যায়Packet আটকাতে পারেLatency বাড়ে, যন্ত্রটি নিজেই একক ব্যর্থতার বিন্দু

দারোয়ান অজ্ঞান হলে গেট খোলা, না বন্ধ?

Inline যন্ত্র নষ্ট হলে দুটি পথ। পর্ব ৩-এর ভাষায় fail open মানে traffic যাচাই ছাড়াই যেতে দেওয়া। আর fail closed মানে সব আটকে দেওয়া। কোনটি “সঠিক”, তার সার্বজনীন উত্তর নেই। প্রশ্নটি হলো, এই পথে কোন ক্ষতি বেশি: কিছুক্ষণ না-দেখা, না কি কিছুক্ষণ বন্ধ থাকা?

Fail open

পথ চালু থাকে, নজরদারি থাকে না। সাধারণ অফিসের ইন্টারনেট বা দোকানের checkout-এর সামনে অনেকে এটি বেছে নেন। শর্ত হলো, যন্ত্র bypass-এ গেলেই জরুরি alert যাবে।

Availability আগে

Fail closed

পথ বন্ধ হয়, অযাচাই traffic যায় না। খুব সংবেদনশীল zone, যেমন payment-এর ভেতরের অংশের সামনে এই পছন্দ বেশি মানায়। শর্ত হলো, দ্বিতীয় যন্ত্র বা দ্রুত মেরামতের পরিকল্পনা থাকবে।

Confidentiality আগে

একটি যন্ত্রের ভেতরেও এই সিদ্ধান্ত থাকে। Suricata-র documentation অনুযায়ী IPS mode-এ memory সীমা ফুরিয়ে গেলে কী হবে, তা exception policy দিয়ে ঠিক করা যায়, আর পুরোনো ও নতুন version-এ default আলাদা হতে পারে। তাই আপনার version-এর documentation পড়ে আসল আচরণ পরীক্ষা করুন।

নিরাপদ চালুর পথ: নতুন IPS rule প্রথমেই block-এ দেবেন না। প্রথমে শুধু alert mode-এ চালান। কয়েক সপ্তাহের ফল দেখে যে rule-এ ভুল নেই, শুধু সেগুলো block-এ নিন। একটি ভুল rule পুরো দোকানের payment আটকে দিতে পারে।

আইন আর গোপনীয়তা: Traffic-এর কপি নেওয়া মানে অন্যের যোগাযোগ দেখার সক্ষমতা। শুধু নিজের বা লিখিত অনুমতি পাওয়া network-এ এটি করুন, কর্মীদের জন্য লিখিত নীতি রাখুন, আর ধারণ করা ডেটার মেয়াদ ঠিক করুন। সীমারেখা জানতে পর্ব ৬ দেখুন।

৩ · Signature detection — জানা ছাপ মেলানো

থানার দেয়ালে পরিচিত পকেটমারের ছবি থাকলে পুলিশ ভিড়ে তাকে চিনতে পারে। Signature detection এভাবেই কাজ করে। আগে থেকে জানা একটি নকশা লেখা থাকে। Traffic বা log সেই নকশার সাথে মিললেই alert. সুবিধা দুটি: দ্রুত, আর alert হলে কারণটি স্পষ্ট বলা যায়। একটি লেখা detection rule-এই সব কথা থাকে। আর বহু rule মিলে হয় ruleset, যা নিয়মিত হালনাগাদ করতে হয়।

একটি নিরীহ rule পড়া

নিচের উদাহরণটি হামলা নয়, একটি প্রতিষ্ঠানের নীতি দেখে। ধরুন একটি কাল্পনিক অনলাইন বাজারের নীতি হলো, অফিসের কম্পিউটার থেকে অননুমোদিত file-sharing সাইটে যাওয়া চলবে না।

alert tls $HOME_NET any -> $EXTERNAL_NET any ( \
  msg:"POLICY unapproved file-sharing host"; \
  flow:established,to_server; \
  tls.sni; content:"files.example.com"; nocase; \
  isdataat:!1,relative; \
  classtype:policy-violation; \
  sid:1000023; rev:1;)
অংশঅর্থ
alertAction. মিললে alert দেওয়া। IPS mode-এ drop হলে packet আটকাত
tlsTLS হিসেবে চেনা traffic-এ দেখা
$HOME_NET any -> $EXTERNAL_NET anyনিজের network থেকে বাইরের দিকে, যেকোনো port
msgAnalyst যে বার্তা পড়বেন
flow:established,to_serverগড়ে ওঠা connection-এ, client থেকে server-এর দিকে
tls.sni; content:…TLS ClientHello-র SNI ঘরে এই নাম খোঁজা, হরফের ছোট-বড় না ধরে
isdataat:!1,relativeনামটির পরে আর কিছু নেই, অর্থাৎ নাম এখানেই শেষ হয়েছে
classtypeAlert-এর শ্রেণি, যা থেকে severity আসে
sid, revRule-এর পরিচয় নম্বর আর সংস্করণ। স্থানীয় rule-এর জন্য ১০ লক্ষ থেকে শুরুর পরিসর প্রচলিত

এই rule-টি উদাহরণ, কিছু আটকায় না। শব্দভান্ডার Suricata-র ধাঁচের, Snort-এর ভাষা কাছাকাছি হলেও পুরোপুরি এক নয়। আপনার version-এ চালানোর আগে documentation দেখে নিন, আর শুধু নিজের lab-এ পরীক্ষা করুন। এখন একই ধারণা ছোট করে কোডে দেখি। নিচের matcher কোনো আসল network ছোঁয় না, শুধু কয়েকটি বানানো log লাইন পড়ে। প্রতিটি লাইনে আগে থেকে লেখা আছে সেটি আসলে ধরার মতো কি না।

// Toy signature matcher on fixed, harmless log lines. Nothing here touches a network.
const LOG = [
  { line: 'GET /index.html host=shop.example.com', bad: false },
  { line: 'GET /docs/admin-guide.pdf host=shop.example.com', bad: false },
  { line: 'GET /admin host=shop.example.com src=203.0.113.9', bad: true },
  { line: 'TLS sni=files.example.com src=198.51.100.21', bad: true },
  { line: 'TLS sni=newfiles.example.net src=198.51.100.22', bad: true },
  { line: 'TELNET src=198.51.100.30 dst=198.51.100.5 port=23', bad: true },
  { line: 'SSH src=198.51.100.31 dst=198.51.100.5 port=22', bad: false },
];
const rulesV1 = [
  { sid: 1, msg: 'admin path requested', test: s => s.includes('/admin') },
  { sid: 2, msg: 'unapproved file host', test: s => s.includes('sni=files.example.com') },
  { sid: 3, msg: 'cleartext telnet', test: s => s.includes('port=23') },
];
const rulesV2 = rulesV1.map(r => r.sid !== 1 ? r :
  { ...r, test: s => /^GET \/admin( |$)/.test(s) });  // exact path, not a substring

function scan(name, rules) {
  let tp = 0, fp = 0, fn = 0;
  console.log(`--- ${name}`);
  for (const { line, bad } of LOG) {
    const hit = rules.find(r => r.test(line));
    if (hit && bad) tp++;
    if (hit && !bad) { fp++; console.log(`FP   sid ${hit.sid}: ${line}`); }
    if (!hit && bad) { fn++; console.log(`MISS       ${line}`); }
  }
  console.log(`TP ${tp}  FP ${fp}  missed ${fn}`);
}
scan('rules v1 (substring)', rulesV1);
scan('rules v2 (exact path)', rulesV2);

প্রথম চালানোয় FP sid 1: GET /docs/admin-guide.pdf: /admin লেখাটি একটি নিরীহ PDF-এর নামের ভেতরেও আছে, তাই ভুল alert. ফল TP 3 FP 1 missed 1. দ্বিতীয়বার নিয়মটি নির্দিষ্ট পথ মেলায়, তাই TP 3 FP 0 missed 1. কিন্তু দুবারই MISS রয়ে গেল newfiles.example.net, কারণ এই নতুন সাইটের নাম কোনো rule-এ লেখা নেই। এই দুই ফল মিলেই signature-এর পুরো গল্প: নিয়ম শিথিল হলে ভুল alert, আর যা লেখা নেই তা অদৃশ্য।

Signature-এর সীমা

  • শুধু জানা জিনিস: নতুন zero-day বা নতুন কৌশলের signature আগে থেকে থাকে না। কেউ আগে দেখেছেন, লিখেছেন, তারপর আপনি পেয়েছেন।
  • চিহ্ন বদলায়: পর্ব ৫-এর pyramid of pain মনে করুন। IP বা hash বদলানো সহজ। তাই আচরণের ওপর লেখা rule বেশি টেকে।
  • Rule বাড়লে খরচ বাড়ে: প্রতিটি rule CPU খায়। পুরোনো rule না ছাঁটলে sensor ধীর হয়, আর চাপের সময় packet বাদ পড়তে পারে।
  • এনক্রিপশন: Payload-এর ভেতরের লেখা খুঁজতে হলে তা পড়তে পারতে হবে (অংশ ৬)।

৪ · Anomaly আর behaviour detection — স্বাভাবিকের সাথে তুলনা

মহল্লার চায়ের দোকানদার সবাইকে চেনেন। কেউ রাত তিনটায় একটি বন্ধ দোকানের সামনে পায়চারি করলে তাঁর কোনো ছবি মেলানোর দরকার হয় না। তিনি চেনা ছন্দটি জানেন, তাই বেমানান জিনিস চোখে পড়ে। Anomaly detection-এর ধারণা এটাই। প্রথমে baseline বানানো হয়, অর্থাৎ স্বাভাবিক সময়ের মাপ। তারপর তার থেকে বেশি সরে গেলে সতর্ক করা হয়।

সবচেয়ে সহজ পদ্ধতিটি পরিসংখ্যানের। শেষ কয়েকটি মানের গড় m আর standard deviation s বের করুন। নতুন মান x কতটা দূরে আছে, তা মাপে z-score:

z = (x − m) ÷ s
|z| > 3 হলে সতর্ক করা, যা একটি প্রচলিত শুরুর সীমা

নিচের খেলনায় প্রতি মিনিটের request গণনা আছে, আর t=12-এ একটি spike. ধরনটি লক্ষ করুন: একই ডেটায় baseline দুইভাবে শেখানো হচ্ছে। একবার সবকিছু শিখছে, আরেকবার flagged মান বাদ দিচ্ছে।

// Rolling mean and standard deviation on a toy series of requests per minute.
const SERIES = [100, 104, 98, 101, 97, 103, 99, 102, 100, 96, 105, 101,
                340, 103, 98, 104, 100, 102, 97, 101];  // one spike at t=12
const WINDOW = 8, LIMIT = 3, FLOOR = 2;   // FLOOR: smallest sd we accept

const stats = a => {
  const m = a.reduce((s, x) => s + x, 0) / a.length;
  const sd = Math.sqrt(a.reduce((s, x) => s + (x - m) ** 2, 0) / a.length);
  return { m, sd };
};
function detect(guarded) {
  const base = SERIES.slice(0, WINDOW);
  for (let t = WINDOW; t < SERIES.length; t++) {
    const { m, sd } = stats(base.slice(-WINDOW));
    const z = (SERIES[t] - m) / Math.max(sd, FLOOR);
    const hit = Math.abs(z) > LIMIT;
    const alarmAt = m + LIMIT * Math.max(sd, FLOOR);
    if (hit || t === 15) console.log(
      `t=${t} value=${SERIES[t]} mean=${m.toFixed(1)} sd=${sd.toFixed(1)} ` +
      `z=${z.toFixed(1)} alarm above ${alarmAt.toFixed(0)}` + (hit ? '  ALERT' : ''));
    if (!(guarded && hit)) base.push(SERIES[t]);  // guarded: flagged point stays out
  }
}
console.log('--- baseline learns everything, spike included');
detect(false);
console.log('--- baseline skips flagged points');
detect(true);

t=12-এ দুই ক্ষেত্রেই ধরা পড়ল: mean=100.4 sd=2.8 z=84.8, যা ৩-এর সীমার অনেক ওপরে। পার্থক্য পরের দিকে। t=15-এ প্রথম সংস্করণে mean=130.6 sd=79.2, আর alert-এর সীমা উঠে গেছে alarm above 368-এ। মানে spike-টি baseline-এ ঢুকে পড়ায় detector কয়েক মিনিটের জন্য প্রায় অন্ধ। দ্বিতীয় সংস্করণে একই সময়ে alarm above 109. FLOOR রাখা হয়েছে, যাতে খুব শান্ত সময়ে s প্রায় শূন্য হলে সামান্য ওঠানামাতেই alert না হয়।

আচরণভিত্তিক detection

“অস্বাভাবিক সংখ্যা” ধরা এক জিনিস, আর একটি সন্দেহজনক ধরন ধরা আরেক জিনিস। Behavioural detection-এ বলা হয়, “একটি অফিসের কম্পিউটার অল্প সময়ে অনেকগুলো অভ্যন্তরীণ server-এ নতুন connection খুলছে।” এখানে কোনো নির্দিষ্ট ফাইল বা ঠিকানা লাগে না। এটি lateral movement-এর মতো কাজের ইঙ্গিত দিতে পারে, আবার নতুন inventory tool-ও হতে পারে। তাই context ছাড়া এটি শুধু একটি ইঙ্গিত।

প্রশ্নSignatureAnomaly / behaviour
অচেনা ঘটনা ধরে?সাধারণত নাপারে, যদি স্বাভাবিক থেকে আলাদা হয়
Alert-এর কারণ বোঝাসহজ, rule-এই লেখাকঠিন হতে পারে
ভুল alert-এর উৎসঢিলা ruleস্বাভাবিকের বদল
শুরুতে যা লাগেহালনাগাদ rulesetপরিষ্কার baseline, সময়
কোথায় হারেএকেবারে নতুন কিছুতেস্বাভাবিকের সাথে মিশে যাওয়া কাজে

Anomaly-এর তিনটি ফাঁদ

  • স্বাভাবিক বদলায়: ঈদের সেলের সন্ধ্যায় বা বেতনের দিনে traffic কয়েকগুণ হয়। একে concept drift বলে, আর দিন-সময় অনুযায়ী আলাদা baseline এর একটি সমাধান।
  • Baseline নিজেই দূষিত হতে পারে: শেখার সময় যদি সমস্যা চলছিল, তবে সেটিই “স্বাভাবিক” হয়ে যায়। কোডে আপনি তার ছোট রূপ দেখলেন।
  • অস্বাভাবিক মানেই ক্ষতিকর নয়: বড় backup, নতুন release বা ভুল config, সবই বেমানান দেখায়। আর সতর্কভাবে চলা ক্ষতিকর কাজ বেমানান না-ও দেখাতে পারে।

৫ · Suricata, Snort আর Zeek — আর একটি alert-এর যাত্রা

তিনটি উন্মুক্ত উৎসের টুল এই জগতে খুব পরিচিত। এগুলো উদাহরণ মাত্র। আপনার প্রতিষ্ঠানের জন্য কোনটি ঠিক, তা দল, ডেটার পরিমাণ আর SIEM-এর ওপর নির্ভর করে। বাণিজ্যিক পণ্যেও একই ধারণা পাবেন।

টুলমূল ধরনযা নিয়ে পরিচিতমনে রাখুন
SnortRule-ভিত্তিক IDS/IPS১৯৯৮ সালে Martin Roesch-এর প্রকাশ, এর rule ভাষা বহুল প্রচলিতCommunity আর বাণিজ্যিক rule দুটোই আছে
SuricataRule-ভিত্তিক IDS/IPS, সাথে protocol logOISF-এর প্রকল্প, বহু thread-এ চলে, EVE JSON আউটপুট দেয়Snort-ধাঁচের rule পড়ে, তবে সব কিছু হুবহু মেলে না
ZeekNetwork-এর বিস্তারিত log ও scriptVern Paxson ১৯৯৫ সালে Bro নামে শুরু করেন, ২০১৮ সালে নাম বদলে ZeekBlock করার টুল হিসেবে নয়, ঘটনার রেকর্ড আর বিশ্লেষণে শক্তিশালী

সহজ করে বললে, rule engine প্রশ্ন করে “এই নিয়ম মিলল কি?” আর Zeek লিখে রাখে “network-এ কী কী ঘটল।” অনেক দল দুটি পাশাপাশি চালায়, কারণ alert পেলে তদন্তে পাশের log-টিই কাজে লাগে। এবার একটি alert শুরু থেকে শেষ পর্যন্ত দেখুন। সব ঠিকানা কাল্পনিক, আর sensor নিজের network-এই বসানো।

  1. কপিTAPtraffic-এর কপি
  2. পড়াdecodeflow ও protocol
  3. মিলsid 1000023rule মিলল
  4. ঘটনাEVEJSON লেখা
  5. যোগSIEMcontext যোগ
  6. রায়triageমানুষের সিদ্ধান্ত
কপিআসল পথ অক্ষত
10:42:07  198.51.100.21:51544 → 203.0.113.80:443
          TCP handshake শেষ, ClientHello আসছে
sensor দেখছে কপি; আসল packet নিজের পথেই গেছে
DecodeFlow আর TLS চেনা
flow:     established, to_server
app_proto: tls
sni:      files.example.com
ভেতরের ডেটা এনক্রিপ্টেড, এই নামটি ClientHello-তে খোলা
Ruleপ্রতিটি শর্ত মিলল
$HOME_NET -> $EXTERNAL_NET   মিলল
flow:established,to_server   মিলল
tls.sni = files.example.com  মিলল
action: alert  (block নয়)
eve.json (উদাহরণ)নমুনা আউটপুট — version-ভেদে আলাদা হতে পারে
{"event_type":"alert",
 "src_ip":"198.51.100.21",
 "dest_port":443,
 "app_proto":"tls",
 "alert":{"action":"allowed",
  "signature_id":1000023,
  "signature":
   "POLICY unapproved
    file-sharing host"},
 "tls":{
  "sni":"files.example.com"}}
SIEMসংখ্যা নয়, মানে যোগ হলো
host:      fin-laptop-07   (হিসাব বিভাগ)
owner:     কাল্পনিক কর্মী, ডেটা সংবেদনশীল
history:   এই rule-এ গত ৩০ দিনে ০টি alert
priority:  medium → high
TriageAnalyst-এর রায়
দেখা হলো: flow-এর আকার, সময়, সংশ্লিষ্ট log
কর্মীর সাথে কথা: বড় ফাইল পাঠানোর দরকার ছিল
রায়: true positive, নীতি ভাঙা; ক্ষতিকর নয়
সাড়া: অনুমোদিত উপায় দেখানো, ticket বন্ধ
  1. কপি। ১০:৪২:০৭-এ 198.51.100.21 একটি বাইরের server-এর সাথে port 443-এ connection খুলল। TAP তার কপি sensor-এ পাঠাল। এটি IDS, তাই আসল packet-এর গতি বা পথ বদলায়নি।
  2. পড়া। Sensor টুকরো packet মিলিয়ে flow বানাল, আর বুঝল এটি TLS. ClientHello থেকে SNI পেল files.example.com. ভেতরের ডেটা sensor দেখতে পাচ্ছে না।
  3. মিল। sid 1000023-এর প্রতিটি শর্ত মিলল। Action হলো alert, তাই connection চলতেই থাকবে। IPS-এ drop লেখা থাকলে এখানেই থামত।
  4. ঘটনা লেখা। EVE JSON-এ একটি লাইন লেখা হলো। "action":"allowed" মানে traffic আটকানো হয়নি। এই লাইনটিই কাঠামোবদ্ধ প্রমাণ।
  5. Context যোগ। SIEM লাইনটি নিল, আর asset তালিকা থেকে জানল যন্ত্রটি হিসাব বিভাগের। গত ৩০ দিনে এই rule-এ এই host-এর কোনো alert নেই। তাই priority medium থেকে high হলো।
  6. মানুষের রায়। Analyst triage করে দেখলেন, নীতি সত্যিই ভাঙা হয়েছে, তবে কর্মী শুধু বড় ফাইল পাঠাচ্ছিলেন। ফল: true positive, তবে ক্ষতিকর নয়। সাড়া হিসেবে অনুমোদিত উপায় দেখানো হলো। “আসল” আর “ক্ষতিকর” আলাদা কথা।

৬ · Encrypted traffic — খামের ভেতর নয়, খামের বাইরে যা দেখা যায়

পোস্ট অফিসের কর্মী বন্ধ খামের ভেতরের চিঠি পড়তে পারেন না। কিন্তু তিনি দেখতে পান খামটি কোথা থেকে কোথায় যাচ্ছে, কত ভারী, আর একই ঠিকানায় প্রতিদিন কতগুলো যায়। TLS-এর পরে IDS-এর অবস্থাও তাই। TLS কীভাবে কাজ করে, তা পর্ব ১২-এ দেখেছেন। এখানে প্রশ্ন শুধু একটি: sensor এখন কী দেখে?

তথ্যTLS 1.3-এ inspection ছাড়াযা জানা যায়
IP, port, সময়, byteদেখা যায়কে কার সাথে, কতক্ষণ, কতটা ডেটা
Server-এর নাম (SNI)সাধারণত দেখা যায়, ECH থাকলে নয়কোন সাইট বা সেবা
DNS প্রশ্নসাধারণ DNS-এ দেখা যায়, এনক্রিপ্টেড DNS-এ নয়কোন নাম খোঁজা হলো
Client-এর ধরনClientHello থেকে আন্দাজ করা যায়কোন ধরনের software
Server certificateTLS 1.3-এ এনক্রিপ্টেডTLS 1.2-তে যা খোলা দেখা যেত
URL, header, ফাইল, payloadদেখা যায় নাএখানে payload signature অকেজো

Flow data আর fingerprint

Flow data হলো প্রতিটি connection-এর সারাংশ। NetFlow বা IPFIX-এর মতো ফরম্যাটে router নিজেই এটি দিতে পারে। এতে সব packet রাখার দরকার পড়ে না, ফলে অনেক দিনের ইতিহাস কম খরচে রাখা যায়। ধরনে নজর দিন: একটি যন্ত্র কি প্রতি ৬০ সেকেন্ডে ঠিক একই আকারের ছোট connection খুলছে? নাকি রাত দুটোয় বাইরে অনেক বেশি ডেটা পাঠাচ্ছে? এসবই প্রশ্ন, প্রমাণ নয়।

JA3 (Salesforce-এর গবেষকদের, ২০১৭) আর JA4 (FoxIO, ২০২৩) হলো TLS client-এর fingerprint. ClientHello-র কিছু ঘর, যেমন version, cipher suite আর extension, মিলিয়ে একটি ছোট চিহ্ন বানানো হয়। হাতের লেখা চেনার মতো: কে লিখেছে জানা যায় না, শুধু লেখার ধরনটি চেনা যায়।

  • এটি পরিচয় নয়: একই browser version-এর লাখো মানুষের fingerprint একই হতে পারে। তাই একা এটি দিয়ে সিদ্ধান্ত নেবেন না।
  • এটি বদলায়: Browser হালনাগাদ হলে চিহ্নও বদলাতে পারে। Chrome TLS extension-এর ক্রম এলোমেলো করা শুরু করলে JA3-এর স্থিরতা কমে যায়। JA4 ক্রম সাজিয়ে হিসাব করে এই সমস্যা কমায়।
  • ভালো ব্যবহার: “এই server-এ সাধারণত কোন client আসে” তা জানা, আর নতুন কিছু দেখলে আরও প্রমাণ খোঁজা। লাইসেন্স আর সমর্থন টুলভেদে আলাদা, তাই আপনার টুলের documentation দেখুন।

তাহলে কি TLS খুলে দেখবেন?

TLS inspection-এ প্রতিষ্ঠানের যন্ত্র মাঝখানে বসে traffic খুলে দেখে। এতে দৃষ্টি বাড়ে, কিন্তু দাম আছে: কর্মীদের ব্যক্তিগত ডেটা, নতুন বিশ্বাসের বিন্দু, আর ভুল সাজালে TLS-ই দুর্বল হওয়া। তাই বহু জায়গায় ভারসাম্য হলো, শুধু দরকারি পথে এটি করা, ব্যাংক বা স্বাস্থ্যের মতো সাইট বাদ রাখা, লিখিত নীতি রাখা, আর বাকি দৃষ্টি endpoint ও application log থেকে নেওয়া। যন্ত্রের ভেতরে এনক্রিপশন খোলা অবস্থায় দেখার সুবিধাই HIDS আর EDR-এর বড় শক্তি।

Equifax-এর ২০১৭ সালের breach নিয়ে মার্কিন প্রতিনিধি পরিষদের তদন্ত (২০১৮) জানায়, traffic দেখার একটি যন্ত্রের certificate মেয়াদোত্তীর্ণ ছিল, তাই যন্ত্রটি বহু মাস ধরে encrypted traffic দেখছিল না। House রিপোর্ট ১৯ মাসের কথা বলে, আর GAO-র হিসাবে certificate breach-এর প্রায় ১০ মাস আগে মেয়াদোত্তীর্ণ হয়। এই অমিল নিয়ে আছে পর্ব ৬৫-এ। কিন্তু উভয় রিপোর্টে মূল কথা এক: certificate হালনাগাদের পরই সন্দেহজনক traffic চোখে পড়ে। শিক্ষা হলো, একটি sensor নীরবে অন্ধ হয়ে যেতে পারে, আর কেউ তা খেয়াল না-ও করতে পারে।

৭ · Confusion matrix, precision, recall আর base-rate fallacy

ধরুন এক বিক্রেতা বললেন, “আমাদের detector ৯৯% সঠিক।” কিনবেন? এই অংশের পরে আপনি জানবেন, ঠিক কোন প্রশ্নটি করতে হবে। প্রথমে ফলাফলগুলোর নাম দরকার। প্রতিটি ঘটনার দুটি সত্য আছে: আসলে কী ছিল, আর detector কী বলল। চার ঘরের এই ছকটিকে confusion matrix বলে।

আসলে ক্ষতিকরআসলে নিরীহ
Alert হলোTrue positive (TP): ঠিক ধরাFalse positive (FP): ভুল বাঁশি
Alert হলো নাFalse negative (FN): ধরা পড়েনিTrue negative (TN): ঠিক চুপ
Precision = TP ÷ (TP + FP)
Recall = TP ÷ (TP + FN)
False positive rate = FP ÷ (FP + TN)
Accuracy = (TP + TN) ÷ মোট

কথায় বললে, precision জিজ্ঞেস করে, “যত alert হলো, তার কতগুলো আসল?” Recall জিজ্ঞেস করে, “যত আসল ঘটনা ঘটল, তার কতগুলো ধরা পড়ল?” False positive rate জিজ্ঞেস করে, “নিরীহ ঘটনার কত অংশে ভুল alert হলো?” আর দুটিকে একসাথে মাপতে F1 score = 2 × precision × recall ÷ (precision + recall) ব্যবহার হয়। Accuracy নিয়ে সাবধান: ক্ষতিকর ঘটনা বিরল হলে এই সংখ্যা প্রায় কিছুই বলে না।

৯৯% সঠিক detector-এর আসল হিসাব

একটি কাল্পনিক network-এ দিনে ১০ লক্ষ ঘটনা ঘটে। এর মধ্যে ১০০টি আসলেই ক্ষতিকর, অর্থাৎ prevalence ০.০১%. Detector-এর recall ৯৯%, আর false positive rate ১%. “৯৯% সঠিক” কথাটির এটিই একটি স্বাভাবিক অর্থ। ধাপে ধাপে হিসাব করুন।

১০ লক্ষ ঘটনার এক দিন
আসল ক্ষতিকর
নিরীহ
TP
FP
মোট alert
Precision
  1. দেওয়া আছে। মোট ১০ লক্ষ ঘটনা, prevalence ০.০১%, recall ৯৯%, false positive rate ১%. এখনো কিছু হিসাব হয়নি।
  2. দুই ভাগ। ১০,০০,০০০ × ০.০০০১ = ১০০টি ক্ষতিকর। বাকি ৯,৯৯,৯০০টি নিরীহ। প্রথম এই ভাগটিই সবার আগে করতে হয়।
  3. TP. ১০০ × ০.৯৯ = ৯৯টি আসল ঘটনা ধরা পড়ল, ১টি ছুটে গেল। Recall ৯৯% দেখতে দারুণ।
  4. FP. ৯,৯৯,৯০০ × ০.০১ = ৯,৯৯৯টি ভুল alert. খেয়াল করুন, এই হিসাবে “১%” বসেছে অনেক বড় একটি সংখ্যার ওপর। এখানেই পুরো গল্প ঘুরে যায়।
  5. মোট alert. ৯৯ + ৯,৯৯৯ = ১০,০৯৮টি alert এক দিনে। Analyst-এর সামনে এগুলো একই রকম দেখায়, কোনটি আসল তা লেখা থাকে না।
  6. Precision. ৯৯ ÷ ১০,০৯৮ ≈ ০.০০৯৮, অর্থাৎ ০.৯৮%. প্রতি ১০২টি alert-এ প্রায় ১টি আসল। অথচ accuracy ঠিকই ৯৯%. এই ফাঁকটির নামই base-rate fallacy.

একই হিসাব Bayes-এর সূত্রেও আসে, যা লিখিত পরীক্ষায় কাজে লাগে:

P(ক্ষতিকর | alert) = (0.99 × 0.0001) ÷ (0.99 × 0.0001 + 0.01 × 0.9999)
= 0.000099 ÷ 0.010098 ≈ 0.0098

এখন মানুষের খরচ ধরি। প্রতি alert-এ ৫ মিনিট ধরলে ১০,০৯৮ × ৫ = ৫০,৪৯০ মিনিট, অর্থাৎ প্রায় ৮৪১.৫ ঘণ্টা। ৮ ঘণ্টার shift-এ দিনে প্রায় ১০৫ জন analyst লাগত, শুধু ৯৯টি আসল ঘটনার জন্য। সংখ্যাগুলো অনুমান, কিন্তু ফলটি সতর্ক করার মতো। এবার calculator-এ prevalence আর false positive rate বদলে দেখুন।

// Base-rate calculator: 1,000,000 events a day. All numbers are assumptions.
const EVENTS = 1000000;
function run(prevalence, recall, fpr) {
  const bad = EVENTS * prevalence, good = EVENTS - bad;
  const tp = bad * recall, fn = bad - tp;
  const fp = good * fpr, tn = good - fp;
  return { tp, fp, fn, alerts: tp + fp,
    precision: tp / (tp + fp), accuracy: (tp + tn) / EVENTS };
}
const row = (a, r) => console.log(
  a.padEnd(10) + String(Math.round(r.tp)).padStart(7) +
  String(Math.round(r.fp)).padStart(8) +
  (r.precision * 100).toFixed(2).padStart(9) + '%' +
  (r.accuracy * 100).toFixed(2).padStart(8) + '%');
const head = n => console.log(n.padEnd(10) + '     TP      FP precision accuracy');

console.log('--- recall 99%, false positive rate 1%, prevalence changes');
head('prevalence');
for (const p of [0.1, 0.01, 0.001, 0.0001, 0.00001])
  row((p * 100) + '%', run(p, 0.99, 0.01));

console.log('--- prevalence 0.01%, recall 99%, false positive rate changes');
head('FP rate');
for (const f of [0.01, 0.001, 0.0001, 0.00001])
  row((f * 100) + '%', run(0.0001, 0.99, f));

const lazy = run(0.0001, 0, 0);
console.log('--- detector that never alerts');
console.log(`accuracy ${(lazy.accuracy * 100).toFixed(2)}%, real events caught ${lazy.tp}`);

প্রথম সারণিতে recall আর FP rate স্থির। Prevalence 10% হলে precision 91.67%, 1%-এ 50.00%, আর 0.01%-এ মাত্র 0.98%. একই detector, শুধু ঘটনা বিরল হয়েছে। অথচ accuracy কলাম সব সারিতেই 99.00%. দ্বিতীয় সারণিতে শিক্ষা হলো, recall না কমিয়ে FP rate কমান। 0.01%-এ precision 49.75%, মানে প্রায় অর্ধেক alert আসল। শেষ সারির 100.00% আসলে গোল করা ৯৯.৯৯৯%. আর শেষ লাইনটি আসল শিক্ষা: যে detector কখনোই alert দেয় না, তার accuracy 99.99%, যদিও real events caught 0.

১৯৯৯ থেকে ২০০০ সালে Stefan Axelsson দেখান, ঠিক এই base-rate কারণেই IDS-এর সবচেয়ে বড় সীমা আসে false alarm rate থেকে (“The Base-Rate Fallacy and the Difficulty of Intrusion Detection”, ACM TISSEC, ২০০০)। চিকিৎসায় দুর্লভ রোগের screening-এও একই গণিত খাটে। প্রশ্নটি তাই শুধু “কতটা ধরে” নয়, “কতবার ভুল বাঁশি বাজায়।”

৮ · Alert fatigue, tuning আর অন্ধ জায়গা ছাড়া suppression

রাখাল বালকের গল্পটি নিরাপত্তা দলের খুব চেনা। প্রতিদিন ভুল বাঁশি বাজলে, আসল বিপদের দিন কেউ আর দৌড়ায় না। একে alert fatigue বলে। এটি অলসতা নয়, এটি নকশার ফল। মানুষ এমন সিস্টেমে মনোযোগ ধরে রাখতে পারে না, যা বেশিরভাগ সময় ভুল বলে।

২০১৩ সালের Target breach নিয়ে মার্কিন সিনেট কমিটির কর্মীদের ২০১৪ সালের রিপোর্ট সংবাদমাধ্যমের তথ্যের ভিত্তিতে জানায়, malware-প্রতিরোধী যন্ত্র alert দিয়েছিল, কিন্তু নিরাপত্তা দল সেগুলোর ওপর ব্যবস্থা নিয়েছে বলে মনে হয় না। কারণ বাইরে থেকে নিশ্চিত বলা যায় না। তবে শিক্ষা পরিষ্কার: detection ঘটলেই সুরক্ষা ঘটে না। Alert থেকে সিদ্ধান্ত পর্যন্ত পুরো শিকলটি কাজ করতে হবে।

Tuning মানে আসল ঘটনা ধরার ক্ষমতা ধরে রেখে ভুল alert কমানো। নিচে একটি কাল্পনিক rule, যা গত সপ্তাহে ১,২০০টি alert দিয়েছে। ধরা যাক সবগুলো পর্যালোচনা করে ৬টি আসল পাওয়া গেছে। সিদ্ধান্তটি দেখুন।

Rule-এর এক সপ্তাহের ফল, পুরোনো ডেটায় replay করে
বিকল্প
মোট alert
TP
FP
Precision
Recall (৬টির মধ্যে)
  1. এখনকার অবস্থা। ১,২০০টি alert, ৬টি আসল। Precision ৬ ÷ ১,২০০ = ০.৫%. Analyst-রা rule-টির ওপর বিরক্ত, আর আসল ৬টি ভিড়ে হারিয়ে যাওয়ার ঝুঁকিতে।
  2. উৎস খোঁজা। Alert-গুলো উৎস আর গন্তব্যে ভাগ করে দেখা গেল ১,১৫০টি একটি backup server 198.51.100.10 থেকে। এর ১,১৪৯টি একই বৈধ গন্তব্য 203.0.113.50-তে। বাকি ১টি অন্য গন্তব্যে। সংখ্যা এখনো বদলায়নি, শুধু কারণ বোঝা গেছে।
  3. Rule বন্ধ করা। সবচেয়ে সহজ পথ, সবচেয়ে খারাপ ফল। Alert ০, কিন্তু recall-ও ০%. শব্দ বন্ধ হলো, আর সাথে চোখও। পুরোপুরি বাতিল।
  4. পুরো server suppress. Alert ৫০-এ নামল, precision ১০.০%. কিন্তু replay দেখাল, ওই অন্য গন্তব্যের ১টি alert আসল ছিল। ফলে TP ৫, recall ৫ ÷ ৬ = ৮৩.৩%. Server-টিই সবচেয়ে দামি যন্ত্রগুলোর একটি, আর সেটি এখন এই rule-এ অদৃশ্য।
  5. শুধু জোড়া suppress. শুধু “এই উৎস + এই গন্তব্য + এই rule” বাদ। ১,১৪৯টি যায়, থাকে ৫১টি, TP ৬, precision ৬ ÷ ৫১ ≈ ১১.৮%, recall ১০০%. প্রায় একই শান্তি, কোনো হারানো ঘটনা নেই।
  6. নথিতে তোলা। সংখ্যা একই থাকল, কিন্তু কাজ শেষ হলো নথিতে: মালিক, কারণ, ticket আর ৯০ দিনের মেয়াদ। এই জোড়ায় ডেটার পরিমাণের ওপর একটি আলাদা নজরও রাখা হলো, কারণ বৈধ পথেরও একদিন অপব্যবহার হতে পারে।

Threshold-এর দাম

অনেক detector একটি score দেয়, আর আপনি ঠিক করেন কোন সীমার ওপরে alert হবে। সীমা নামালে কম ঘটনা ছুটে যায়, কিন্তু ভুল alert বাড়ে। উঠালে উল্টো। নিচে ২,০০০টি বানানো ঘটনা আছে, যার ২০টি আসল। Seed স্থির, তাই ফল প্রতিবার একই। ধরা হয়েছে প্রতি alert-এ ৫ মিনিট লাগে।

// Threshold tuning on 2,000 simulated events. Seeded PRNG, 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 rnd = mulberry32(23);
const events = [];
for (let i = 0; i < 1980; i++) events.push({ score: rnd() * 40 + rnd() * 40, bad: false });
for (let i = 0; i < 20; i++)   events.push({ score: 45 + rnd() * 50, bad: true });

const MINUTES_PER_ALERT = 5;
console.log('limit alerts  FP  missed precision recall review');
for (const limit of [40, 50, 60, 65, 70, 75, 80, 90]) {
  const hits = events.filter(e => e.score >= limit);
  const tp = hits.filter(e => e.bad).length;
  const fp = hits.length - tp, missed = 20 - tp;
  const precision = hits.length ? (tp / hits.length * 100).toFixed(1) : '-';
  const recall = (tp / 20 * 100).toFixed(0);
  const hours = (hits.length * MINUTES_PER_ALERT / 60).toFixed(1);
  console.log(String(limit).padStart(5) + String(hits.length).padStart(7) +
    String(fp).padStart(4) + String(missed).padStart(8) +
    (precision + '%').padStart(10) + (recall + '%').padStart(7) +
    (hours + 'h').padStart(7));
}

সীমা 40-এ 984টি alert, missed ০, কিন্তু কাজ 82.0h. সীমা 70-এ 94টি alert, ৫টি ছুটে গেছে, আর পর্যালোচনায় 7.8h. সীমা 80-এ precision 100.0% দেখতে সুন্দর, কিন্তু 12টি আসল ঘটনা ছুটে গেছে, recall 40%. ধরুন দলের হাতে দিনে ৮ ঘণ্টা আছে। তখন 70 সম্ভাব্য সীমা, তবে ২০টির ৫টি ছুটে যাওয়া মেনে নেওয়াটি একটি ঝুঁকির সিদ্ধান্ত, যা লিখে রাখতে হবে। ভালো পথ হলো rule-ই উন্নত করা, যাতে পুরো সারিটি বদলে যায়। শুধু সীমা ঘোরালে একটি ক্ষতিকে অন্য ক্ষতিতে বদলানো হয়।

অন্ধ জায়গা না বানিয়ে suppression

Suppression হলো নির্দিষ্ট শর্তে alert দেখানো বন্ধ রাখা। নিচের উদাহরণ Suricata-র threshold.config-এর ধাঁচের। এটি শুধু এই sid আর এই host-এর জন্য:

# owner: netops-team  ticket: SEC-1042  review by: 2027-02-01
# reason: nightly backup to approved host
suppress gen_id 1, sig_id 1000031, track by_src, ip 198.51.100.10

দুটি জিনিস খেয়াল করুন। Suricata-র documentation-এ দেখানো syntax-এ মেয়াদের ঘর নেই, তাই মেয়াদ রাখতে হয় মন্তব্য আর ticket-এ, আর কোনো মানুষ বা script-কে তা যাচাই করতে হয়। আর track by_src পুরো host-কে এই rule থেকে সরায়, যা ওপরের stepper-এর ধাপ ৪-এর ঝুঁকি। জোড়া-ভিত্তিক নিয়ম দরকার হলে rule-এর শর্ত বদলানো বা SIEM-এ alert নিয়ন্ত্রণ করা বেশি সরু হতে পারে।

Suppression-এর ছয় শর্ত
  • সরু: rule, উৎস, গন্তব্য যতটা সম্ভব নির্দিষ্ট
  • মালিক: একজন মানুষ বা দল, যিনি জবাব দেবেন
  • কারণ: কেন নিরীহ, তার প্রমাণ ও ticket
  • মেয়াদ: নির্দিষ্ট তারিখে পর্যালোচনা, চিরস্থায়ী নয়
  • Log থাকে: সম্ভব হলে শুধু বিজ্ঞপ্তি থামান, ঘটনা রেকর্ডে থাকুক
  • যাচাই: পুরোনো ডেটায় replay করে দেখুন recall কমেছে কি না

৯ · ধরা এড়ানোর চেষ্টা, defence in depth আর SIEM

একটি কথা সৎভাবে মেনে নিন: আক্রমণকারীরা ধরা পড়তে চায় না, আর তারা detection এড়ানোর চেষ্টা করে। কোনো একটি sensor সব কিছু দেখে না। কৌশলের বিস্তারিত এই কোর্সের বিষয় নয়, আর রক্ষকের দরকারও নেই। রক্ষকের উত্তরটি একই থাকে: একটি স্তরের ওপর ভরসা না করা। Network নিরাপত্তার ভিত্তি থেকেই এই ধারণা শুরু।

  • স্তর: Network sensor, endpoint telemetry, application log, identity log আর honeypot. একটি ফাঁকি দিলেও অন্যটিতে চিহ্ন থাকতে পারে।
  • প্রতিরোধ আগে: Segmentation, patch, MFA আর least privilege এমন ঘটনাই কমায়, যা ধরতে হতো।
  • Coverage মাপা: পর্ব ৫-এর মতো detection coverage মানচিত্র বানান, যাতে detection gap জানা থাকে।
  • Sensor-এর স্বাস্থ্য: নীরব sensor আর শান্ত network দেখতে একই। তাই packet drop, CPU, certificate মেয়াদ আর “শেষ event কখন এলো” মাপুন। নিজের lab বা অনুমোদিত সময়ে একটি নিরীহ পরীক্ষামূলক event পাঠিয়ে পুরো পথ যাচাই করুন।

Alert যায় SIEM-এ

একটি sensor-এর alert একা কম কথা বলে। SIEM-এ গিয়ে সেটি অন্য log-এর সাথে মেলে। প্রথমে সব উৎসের ক্ষেত্রকে একই নামে আনা হয়, যেমন src_ip. তারপর একই ঘটনার পুনরাবৃত্তি এক করা, asset-এর গুরুত্ব যোগ করা, আর অন্য উৎসের সাথে সম্পর্ক খোঁজা হয়। ধরুন IDS একটি সন্দেহজনক connection দেখল, আর কয়েক মিনিট পরে একই যন্ত্রে নতুন admin account তৈরি হলো। আলাদাভাবে দুটিই সাধারণ alert, একসাথে অনেক গুরুতর। এই কাজের নিয়ম লেখা, Sigma আর correlation পর্ব ৫৬ (SIEM আর detection rule)-এ আসবে। Log সংগ্রহের অবকাঠামো দেখতে centralized logging পড়তে পারেন।

আরও গভীরে: IDS-এর গবেষণার সূচনা ধরা হয় James Anderson-এর ১৯৮০ সালের রিপোর্ট আর Dorothy Denning-এর “An Intrusion-Detection Model” (IEEE TSE, ১৯৮৭) থেকে। Sommer আর Paxson (“Outside the Closed World”, IEEE S&P, ২০১০) ব্যাখ্যা করেন, machine learning-ভিত্তিক anomaly detection গবেষণায় যতটা, বাস্তব network-এ ততটা ছড়ায়নি কেন: ভুলের দাম বেশি, ফল ব্যাখ্যা কঠিন, আর ভালো পরীক্ষার ডেটা বিরল। আর detection-কে কোডের মতো version control, পরীক্ষা ও review-এর মধ্যে রাখার চর্চাকে অনেকে detection-as-code বলেন।

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

  • IDS আর IPS-এর মূল পার্থক্য? IDS পথের বাইরে দেখে জানায়, IPS পথের মাঝে বসে আটকাতে পারে।
  • Precision আর recall-এর পার্থক্য? Precision: alert-এর কত অংশ আসল। Recall: আসল ঘটনার কত অংশ ধরা পড়ল।
  • ৯৯% accuracy থাকলেও alert কেন ভুল? ঘটনা বিরল হলে ছোট FP rate-ও বিশাল নিরীহ সংখ্যার ওপর বসে, তাই FP সংখ্যা TP-কে ছাড়িয়ে যায়।
  • Encrypted traffic-এ NIDS কী দেখে? IP, port, সময়, আকার, সাধারণত SNI আর client fingerprint, কিন্তু payload নয়।
  • একটি noisy rule নিয়ে কী করবেন? উৎস বিশ্লেষণ, সরু suppression, মালিক ও মেয়াদ, আর replay করে recall যাচাই। Rule পুরো বন্ধ করা শেষ উপায়।

১০ · AI-এর যুগে IDS আর IPS

AI একটি জটিল rule-কে সহজ ভাষায় বুঝিয়ে দিতে, alert-এর সারাংশ লিখতে, বা log-এ ধরন খুঁজতে ভালো সাহায্য করে। কিন্তু রায় দেওয়ার কাজটি তার হাতে ছেড়ে দিলে বিপদ। AI যা আত্মবিশ্বাস নিয়ে বলে, সেটি যাচাই করা analyst-এর আসল কাজ।

AI-এর ভুলকেন বিপজ্জনকযাচাইয়ের উপায়
অস্তিত্বহীন rule keyword বা CVE বলে দেয়Rule load হয় না, বা ভুল তদন্ত হয়Documentation আর CVE তালিকা দেখা
False positive কমাতে rule বন্ধ করতে বলেনতুন অন্ধ জায়গা তৈরি হয়Replay করে recall মাপা
Alert-কে নিশ্চিত “benign” বলে দেয়দেখতে ভদ্র ভাষা, ভিত্তি দুর্বলপ্রমাণ দেখতে চাওয়া, মানুষের রায়
পুরোনো বা ভুল rule syntax দেয়Version-ভেদে আচরণ বদলায়নিজের lab-এ পরীক্ষা
Accuracy দেখিয়ে model ভালো বলেবিরল ঘটনায় অর্থহীনPrecision, recall আর prevalence দেখা

নিচের prompt AI-কে রায় না দিয়ে চিন্তাসঙ্গী হতে বলে। Log পেস্ট করার আগে আসল IP, নাম আর ব্যক্তিগত তথ্য সরিয়ে নিন, আর প্রতিষ্ঠানের অনুমোদিত AI টুলই ব্যবহার করুন।

তুমি একজন অভিজ্ঞ SOC analyst-এর মতো সাহায্য করবে। নিচে আমার নিজের network-এর একটি IDS alert আছে, যেখানে সব ঠিকানা আর নাম আমি বদলে দিয়েছি। [alert-এর JSON এখানে] ১. এই rule আসলে কোন শর্ত মিলিয়েছে, সহজ বাংলায় বলো। ২. এটি নিরীহ হওয়ার ৩টি সম্ভাব্য কারণ, আর ক্ষতিকর হওয়ার ৩টি সম্ভাব্য কারণ বলো। ৩. প্রতিটি সম্ভাবনা যাচাই করতে আমি নিজের log-এ কী দেখব, তা তালিকা করো। ৪. নিশ্চিত রায় দিও না। কোথায় তুমি অনিশ্চিত, তা আলাদা করে লেখো। ৫. Tuning-এর পরামর্শ দিলে সেটি কত সরু, আর কোন আসল ঘটনা ছুটে যেতে পারে, তাও লেখো। কোনো CVE বা standard উল্লেখ করলে উৎস দাও।

AI-এর পরামর্শ কাজে লাগানোর আগে

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

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

প্র ০১Anomaly detection-এর ধারণা ১৯৮০-র দশকের। তাহলে চার দশক পরেও SOC কেন এত signature-এর ওপর নির্ভর করে?

১৯৮০ সালে James Anderson-এর রিপোর্ট প্রস্তাব করে, audit record দেখে অস্বাভাবিক ব্যবহার ধরা যায়। ১৯৮৭ সালে Dorothy Denning “An Intrusion-Detection Model” প্রবন্ধে এই ধারণাকে আনুষ্ঠানিক রূপ দেন: নিরাপত্তা লঙ্ঘন ধরা যায় সিস্টেম ব্যবহারের অস্বাভাবিক ধরন দেখে। ধারণাটি মার্জিত। যদি আপনি স্বাভাবিককে জানেন, তাহলে আক্রমণের তালিকা লাগে না।

সমস্যা হলো “স্বাভাবিক” কথাটি নিজেই। ২০১০ সালে Sommer আর Paxson “Outside the Closed World” প্রবন্ধে কয়েকটি কারণ সাজান। এক, machine learning সাধারণত যা আগে দেখেছে তার মতো জিনিস চিনতে ভালো, অথচ এখানে তাকে চিনতে হবে যা কখনো দেখেনি। দুই, ভুলের দাম খুব বেশি। Spam ফিল্টারের ভুল একটি মেইল হারায়, IDS-এর ভুল একজন analyst-এর আধা ঘণ্টা নেয়। তিন, “এটি ৪.৩ standard deviation দূরে” বললে analyst বুঝতে পারেন না কী করবেন। চার, network traffic স্বভাবতই খুব পরিবর্তনশীল। পাঁচ, প্রকাশযোগ্য বাস্তব ডেটা কম, তাই পরীক্ষাও দুর্বল।

তাঁরা বলেননি যে machine learning অনুপযুক্ত। তাঁদের কথা ছিল, এটি কঠিন, আর সমস্যা খুব সরু করে ধরতে হবে। আজকের বাস্তব পণ্যে তাই মিশ্র পথ দেখা যায়: signature দিয়ে জানা জিনিস, behaviour rule দিয়ে ধরন, আর anomaly দিয়ে নির্দিষ্ট প্রশ্ন, যেমন “এই service account কি কখনো এই database-এ গিয়েছে?” প্রশ্ন যত সরু, baseline তত পরিষ্কার, alert তত ব্যাখ্যাযোগ্য।

মূল উপলব্ধি: Detection-এর মান শুধু গাণিতিক দক্ষতায় নয়, একজন মানুষ alert পেয়ে কী করতে পারেন তাতেও মাপা হয়। “কেন” না বলতে পারলে সেরা model-ও কম কাজে আসে। তাই নতুন কোনো AI-ভিত্তিক দাবি শুনলে আগে জিজ্ঞেস করুন, alert-এর সাথে কী ব্যাখ্যা আসবে।

প্র ০২Axelsson-এর base-rate যুক্তি থেকে কি ধরে নেব যে IDS অর্থহীন? না হলে নকশায় কী বদলাবেন?

না, অর্থহীন নয়। Axelsson-এর (ACM TISSEC, ২০০০) যুক্তি হলো, ক্ষতিকর ঘটনা খুব বিরল বলে recall নয়, false alarm rate-ই সবচেয়ে বড় সীমা হয়ে দাঁড়ায়। যুক্তিটি detector-এর বিরুদ্ধে নয়, একটি বিশেষ ব্যবহারের বিরুদ্ধে: সব কিছুর ওপর এক ছাঁকনি চালিয়ে সরাসরি মানুষের কাছে পাঠানো।

গণিত থেকেই সমাধানগুলো আসে। প্রথমত, prevalence বাড়ান। পুরো ইন্টারনেট ট্রাফিকের বদলে শুধু সেই জায়গায় তাকান, যেখানে ক্ষতিকর ঘটনার ঘনত্ব বেশি। যেমন, database server থেকে বাইরের নতুন গন্তব্যে যাওয়া connection. ক্ষেত্র ছোট হলে prevalence বাড়ে, precision-ও বাড়ে। ওপরের calculator-এ prevalence ০.০১% থেকে ১% হলে precision ০.৯৮% থেকে ৫০% হয়েছে।

দ্বিতীয়ত, স্তর বানান। চিকিৎসায় একটি সাধারণ screening test ইতিবাচক এলে সরাসরি রোগ ঘোষণা হয় না, দ্বিতীয় নির্ভুল test হয়। একইভাবে প্রথম সংকেত মানুষের কাছে না গিয়ে SIEM-এ জমতে পারে, আর দুটি স্বাধীন সংকেত মিললে alert হতে পারে। মনে রাখবেন, দুটি সংকেত সত্যিই স্বাধীন না হলে এই হিসাব অতিরঞ্জিত হয়।

তৃতীয়ত, ফলাফল ভাগ করুন। সব কিছু “high” না রেখে কিছু সংকেত শুধু রেকর্ডে থাকুক, যা threat hunting বা তদন্তে কাজে লাগবে। চতুর্থত, নিশ্চিত হওয়া স্বয়ংক্রিয় করুন। যেমন, আগে থেকে জানা host বা ticket মিলিয়ে অনেক alert মানুষ না দেখেই বন্ধ হতে পারে, যদিও সেই নিয়মও একটি suppression, তাই তারও পর্যালোচনা লাগে।

বিক্রেতার সাথে কথা বলার সময়ও এটি কাজে লাগে। “৯৯% accuracy” না শুনে জিজ্ঞেস করুন: কোন ডেটায়, কত prevalence-এ, FP rate কত, আর দিনে কতগুলো alert আশা করব?

মূল উপলব্ধি: Base-rate fallacy IDS-কে বাতিল করে না। এটি বলে, detection হলো একটি ছাঁকনির সারি। প্রতি স্তরে prevalence বাড়লে শেষে মানুষের কাছে এমন একটি alert পৌঁছায়, যা পড়ার যোগ্য।

প্র ০৩Target ২০১৩: Alert এসেছিল বলে জানা যায়। তাহলে দোষ কি শুধু মানুষের, না নকশার?

মার্কিন সিনেটের Commerce Committee-র কর্মীদের ২০১৪ সালের রিপোর্ট “A ‘Kill Chain’ Analysis of the 2013 Target Data Breach” পর্ব ৫-এর kill chain ধরে দেখায়, Target বিভিন্ন ধাপে হামলা থামানোর সুযোগ হারিয়েছিল। রিপোর্টটি সংবাদমাধ্যমের তথ্যের ওপরও নির্ভর করেছে, যেখানে বলা হয়েছিল malware শনাক্ত করার যন্ত্র জরুরি alert দিয়েছিল। রিপোর্টের ভাষা সতর্ক: নিরাপত্তা দল ব্যবস্থা নিয়েছে বলে মনে হয় না। কেন নেয়নি, তার সম্পূর্ণ ভেতরের চিত্র প্রকাশ্যে নেই। তাই একজন ব্যক্তিকে দোষ দেওয়া ঠিক হবে না, আর আমরা এখানে হামলার ধাপ নয়, শুধু রক্ষার ব্যর্থতা দেখছি।

নকশার দিক থেকে দেখলে কিছু সাধারণ প্রশ্ন আসে, যা যেকোনো প্রতিষ্ঠানে খাটে। Alert কার কাছে যায়? যিনি পান, তাঁর কি যন্ত্র বন্ধ করার ক্ষমতা আছে? ক্ষমতা থাকলে ব্যবসা থামানোর ভয় কি তাঁকে থামায়? দিনে কত alert আসে, আর “জরুরি” কতগুলো? সব কিছু জরুরি হলে আসলে কিছুই জরুরি নয়। একটি ঘটনায় কয়েকটি দল জড়িত থাকলে কার দায়িত্ব শেষ, সেটি পরিষ্কার কি?

এই চিন্তা নিরাপত্তা সংস্কৃতির “দোষারোপহীন পর্যালোচনা”-র সাথে মেলে (পর্ব ৫৪)। ঘটনা বিশ্লেষণে “অমুক alert দেখেননি” থেমে না গিয়ে জিজ্ঞেস করতে হয়, “সিস্টেম এমন কী করেছিল যাতে না দেখা স্বাভাবিক হয়ে গিয়েছিল?” উত্তর থেকে আসে বাস্তব পরিবর্তন: সরল escalation, playbook, on-call দায়িত্ব, আর আগে থেকে দেওয়া অনুমতি যে নির্দিষ্ট পরিস্থিতিতে analyst নিজেই একটি যন্ত্র আলাদা করতে পারবেন। পরিস্থিতি বিচার করে IPS-কে কিছু নিশ্চিত ক্ষেত্রে স্বয়ংক্রিয় আটকানোর ক্ষমতা দেওয়াও এর অংশ, যদিও এখানেও ভুল block-এর ঝুঁকি মাপতে হবে।

মূল উপলব্ধি: Detection শুধু সংকেত তৈরি। নিরাপত্তা আসে সংকেত থেকে সিদ্ধান্ত আর কাজ পর্যন্ত পুরো পথ পরীক্ষা করা থাকলে। পথের প্রতিটি জোড়ায় একজন মালিক দরকার।

প্র ০৪Equifax-এর expired certificate থেকে sensor-এর স্বাস্থ্য নিয়ে কী শিখব? “কোনো alert নেই” মানে কী?

ড্যাশবোর্ড সবুজ দেখলে আমরা ধরে নিই সব ঠিক আছে। কিন্তু “কোনো alert নেই”-এর দুটি সম্পূর্ণ আলাদা অর্থ হতে পারে: কিছুই ঘটেনি, অথবা আপনি আর দেখছেন না। Equifax-এর ঘটনায় মার্কিন প্রতিনিধি পরিষদের রিপোর্ট আর GAO-র রিপোর্ট দুটোই জানায়, traffic দেখার একটি ব্যবস্থায় মেয়াদোত্তীর্ণ certificate-এর কারণে encrypted traffic অনেকদিন যাচাই হচ্ছিল না। সময়ের হিসাবে রিপোর্ট দুটির মধ্যে পার্থক্য আছে। House রিপোর্টে ১৯ মাস, আর GAO-র হিসাবে breach-এর প্রায় ১০ মাস আগে মেয়াদ শেষ। তবে উভয়েই বলে, হালনাগাদের পরই সমস্যাটি চোখে পড়ে। House রিপোর্ট আরও জানায়, অন্তত ৩২৪টি certificate মেয়াদোত্তীর্ণ অবস্থায় ছিল।

এখানে একটি গভীর কথা আছে। নিরাপত্তা নিয়ন্ত্রণ সাধারণত ব্যর্থ হয় শান্তভাবে। Web server বন্ধ হলে গ্রাহক সাথে সাথে অভিযোগ করেন। কিন্তু sensor অন্ধ হলে কেউ অভিযোগ করে না, উল্টো alert কমে যায়, যা দেখতে ভালো লাগে। বিমানের ককপিটে সব যন্ত্র ঠিক আছে কি না যাচাইয়ের আলাদা ব্যবস্থা থাকে, কারণ যন্ত্র চুপ থাকাকে সুখবর ধরা যায় না।

রক্ষকের করণীয় তাই নিয়ন্ত্রণের ওপরও নিয়ন্ত্রণ রাখা। Certificate-এর একটি মেয়াদ তালিকা ও স্বয়ংক্রিয় নবায়ন রাখুন, যা পর্ব ১২-এ এসেছে। প্রতিটি sensor কত packet পড়েছে, কত বাদ পড়েছে, শেষ event কখন, সেগুলো মাপুন, আর “৩০ মিনিট event নেই” নিজেই একটি alert হোক। নিয়মিত অনুমোদিত একটি নিরীহ পরীক্ষা event চালিয়ে দেখুন, সেটি sensor থেকে SIEM হয়ে analyst পর্যন্ত পৌঁছায় কি না। এই পুরো পথের পরীক্ষা ছাড়া নিশ্চিত হওয়া যায় না।

মূল উপলব্ধি: Detection ব্যবস্থাকে একটি উৎপাদন সিস্টেমের মতোই পর্যবেক্ষণ করতে হয়। “Alert নেই” তখনই শুভ সংবাদ, যখন আপনি প্রমাণ করতে পারেন যে sensor সেই মুহূর্তে দেখছিল।

প্র ০৫TLS inspection দৃষ্টি বাড়ায়। তাহলে সব প্রতিষ্ঠান কেন সব traffic খুলে দেখে না?

প্রথম নজরে উত্তর সহজ মনে হয়: TLS-এর ভেতরে যা আছে তা না দেখলে IDS অন্ধ, তাই খুলে দেখুন। কিন্তু এর জন্য প্রতিষ্ঠানের যন্ত্রকে নিজের CA দিয়ে প্রতিটি সাইটের জন্য নকল certificate বানাতে হয়, আর সব কম্পিউটারকে সেই CA বিশ্বাস করতে হয়। অর্থাৎ পর্ব ১১-এর বিশ্বাসের শিকলে নতুন একটি খুব শক্তিশালী আংটা যোগ হয়। ওই key ফাঁস হলে প্রতিষ্ঠানের পুরো এনক্রিপ্টেড traffic ঝুঁকিতে পড়ে।

দ্বিতীয় সমস্যা গুণগত। Durumeric ও সহকর্মীদের গবেষণা “The Security Impact of HTTPS Interception” (NDSS, ২০১৭) জানায়, পরীক্ষিত অনেক interception পণ্য সংযোগের নিরাপত্তা কমিয়ে দিচ্ছিল, যেমন পুরোনো cipher মেনে নেওয়া বা certificate ঠিকভাবে যাচাই না করা। মানে যে যন্ত্র নিরাপত্তার জন্য বসানো, সেটি নিজেই দুর্বল জায়গা হতে পারে। পণ্য তারপরে উন্নত হতে পারে, তাই নিজের যন্ত্র পরীক্ষা করে দেখা উচিত।

তৃতীয়ত, খরচ আর ভাঙন। সব traffic খোলা CPU-র বড় খরচ। Certificate pinning আছে এমন app, mTLS, আর অনেক সংবেদনশীল সেবা এতে ভেঙে যেতে পারে। চতুর্থত, গোপনীয়তা ও আইন। কর্মীর ব্যাংক বা চিকিৎসার সাইটের ডেটা প্রতিষ্ঠানের যন্ত্রে খোলা অবস্থায় আসা একটি গুরুতর দায়িত্ব। বিভিন্ন দেশে এর নিয়ম আলাদা, তাই আইনি পরামর্শ, কর্মীদের জানানো আর লিখিত নীতি দরকার (পর্ব ৬)।

আর ভবিষ্যৎ এই দিক থেকে সরে যাচ্ছে। TLS 1.3-এ certificate এনক্রিপ্টেড, ECH SNI-ও লুকাতে পারে, আর বহু কাজ এখন প্রতিষ্ঠানের network-এর বাইরে, cloud-এ। তাই বহু দল দৃষ্টির ভর সরাচ্ছে endpoint, application log আর identity log-এর দিকে, যেখানে ডেটা এনক্রিপশন ছাড়াই দেখা যায়। Inspection থাকে সরু জায়গায়, যেমন উচ্চ ঝুঁকির পথ বা অতিথি zone বাদ দিয়ে নির্দিষ্ট server-এর সামনে।

মূল উপলব্ধি: দৃষ্টি বাড়ানোর প্রতিটি উপায় নিজেও একটি ঝুঁকি আর একটি দায়িত্ব। প্রশ্নটি “সব দেখতে পারি কি” নয়, “কোন প্রশ্নের উত্তর সবচেয়ে কম ঝুঁকিতে পাওয়া যায়।”

অনুশীলন

হিসাবগুলো খাতায় করুন। যেকোনো হাতে-কলমে কাজ শুধু নিজের যন্ত্রে বা লিখিত অনুমতি পাওয়া network-এ করবেন।

  1. পুরো হিসাব: দিনে ৫,০০,০০০টি ঘটনা, এর ৫০টি আসলেই ক্ষতিকর। Detector-এর recall ৯০%, false positive rate ০.৫%. (ক) TP, FP আর precision কত? (খ) Recall একই রেখে precision ২০% করতে FP rate কত হতে হবে?

    (ক) নিরীহ = ৫,০০,০০০ − ৫০ = ৪,৯৯,৯৫০। TP = ৫০ × ০.৯ = ৪৫। FP = ৪,৯৯,৯৫০ × ০.০০৫ = ২,৪৯৯.৭৫, অর্থাৎ প্রায় ২,৫০০। Precision = ৪৫ ÷ (৪৫ + ২,৪৯৯.৭৫) ≈ ১.৭৭%.

    (খ) Precision ০.২ মানে TP ÷ (TP + FP) = ০.২, তাই TP + FP = ৪৫ ÷ ০.২ = ২২৫, আর FP = ১৮০। FP rate = ১৮০ ÷ ৪,৯৯,৯৫০ ≈ ০.০৩৬%. অর্থাৎ FP rate প্রায় ১৪ গুণ কমাতে হবে।

  2. সমালোচনা করুন: সহকর্মী বললেন, “এই rule দিনে ৮০০ alert দিচ্ছে, পুরো 198.51.100.0/24 subnet-এর জন্য চিরদিনের মতো suppress করে দিই।” এই প্রস্তাবের সমস্যা কী? আপনি কী করবেন?

    সমস্যা তিনটি। এটি খুব চওড়া, কারণ পুরো subnet-এর সব host এই rule থেকে অদৃশ্য হবে। এতে মেয়াদ নেই, তাই পরিস্থিতি বদলালেও কেউ খেয়াল করবে না। আর এতে কারণ নেই, কেউ দেখেনি alert-গুলো নিরীহ কি না।

    ভালো পথ: প্রথমে ৮০০ alert-কে উৎস, গন্তব্য আর সময়ে ভাগ করুন। বেশিরভাগ কয়েকটি জোড়া থেকে এলে শুধু সেই জোড়াগুলোর জন্য suppression লিখুন। মালিক, ticket আর ৯০ দিনের মতো পর্যালোচনার তারিখ দিন। পুরোনো ডেটায় replay করে দেখুন কোনো আসল ঘটনা বাদ পড়ছে কি না। সম্ভব হলে rule-টিই ভালো করুন, আর ঘটনাগুলো log-এ রাখুন।

  3. ফল আগে বলুন: একটি detector শেষ ৩টি মান থেকে population standard deviation নিয়ে z-score হিসাব করে, আর |z| > 3 হলে alert দেয়। Flagged মান baseline-এ ঢোকে না। মানগুলো ক্রমে আসে: 10, 12, 11, 30, 12. প্রথম তিনটি শুধু শেখার জন্য। 30 আর পরের 12-এ কী হবে?

    Baseline 10, 12, 11: গড় ১১, ভেদাঙ্ক (১ + ১ + ০) ÷ ৩ = ০.৬৬৭, তাই s ≈ ০.৮১৬। 30-এর জন্য z = (৩০ − ১১) ÷ ০.৮১৬ ≈ ২৩.৩, তাই alert. এটি flagged, তাই baseline বদলায় না। পরের 12-এর জন্য z = (১২ − ১১) ÷ ০.৮১৬ ≈ ১.২২, তাই alert নেই, আর এই মানটি baseline-এ ঢোকে। নতুন baseline: 12, 11, 12.

  4. নকশা করুন: ৩০ জনের একটি কাল্পনিক অফিসে একটি router, একটি managed switch আর দুটি ছোট server আছে। IT-তে একজন মানুষ। আপনি কোথায় কী বসাবেন, আর শুরুতে block চালু করবেন কি? লিখুন, কারণসহ।

    একটি যুক্তিসঙ্গত উত্তর: শুরুতে inline নয়। Switch-এর SPAN থেকে একটি ছোট IDS sensor চালান, কারণ sensor নষ্ট হলেও অফিস চলবে, আর একজন মানুষের পক্ষে ভুল block সামলানো কঠিন। দুটি server-এ host agent বসান, কারণ encrypted traffic-এর ভেতরের ঘটনা সেখানেই দেখা যায়। Alert একটি সরল জায়গায় জমান, আর দিনে মানুষ যতটা পড়তে পারেন ততটা রাখুন: শুধু উচ্চ ঝুঁকির ruleset দিয়ে শুরু।

    কয়েক সপ্তাহ পরে যে কয়েকটি rule ভুল করে না, দরকার হলে সেগুলোতেই block ভাবুন। Sensor-এর শেষ event-এর সময়ও নজরে রাখুন। ছোট অফিসে ভালো MFA, patch আর backup প্রায়ই IDS-এর চেয়েও আগে আসে। Network নিজের না হলে বা মালিকের অনুমতি না থাকলে এর কিছুই করা যাবে না।

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

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

ক্রমএকটি IDS alert-এর যাত্রা সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. TAP বা SPAN থেকে traffic-এর কপি sensor-এ পৌঁছানো
  2. Sensor-এর flow আর protocol চিনে নেওয়া
  3. Detection rule মিলে যাওয়া
  4. Event SIEM-এ গিয়ে context পাওয়া
  5. Analyst-এর triage করে রায় দেওয়া
  6. ফলাফল থেকে rule tune করা

IDS আর IPS-এর মূল পার্থক্য কোনটি?

  • IDS শুধু signature ব্যবহার করে, IPS শুধু anomaly
  • IDS দেখে জানায়, IPS পথের মাঝে বসে আটকাতে পারে
  • IDS network-এ চলে, IPS শুধু host-এ চলে
  • দুটি একই জিনিসের দুই নাম, কোনো ব্যবহারিক পার্থক্য নেই

দিনে ১০,০০,০০০টি ঘটনায় ১০০টি আসলেই ক্ষতিকর। একটি detector-এর recall ৯৯% আর false positive rate ১%. প্রায় কত শতাংশ alert আসল?

  • ৯৯%
  • ৫০%
  • প্রায় ১%
  • ০.০১%

একটি rule-এ TP = ৪০, FP = ১৬০, FN = ১০। Precision আর recall কত?

  • Precision ৮০%, recall ২০%
  • Precision ৮০%, recall ৮০%
  • Precision ২০%, recall ২০%
  • Precision ২০%, recall ৮০%

SPAN port-এ যুক্ত একটি IDS sensor হঠাৎ বন্ধ হলো। আসল traffic-এর কী হবে, আর প্রধান ঝুঁকি কী?

  • Traffic চলতে থাকবে, কিন্তু নীরবে নজরদারি হারাবে
  • সব traffic সাথে সাথে বন্ধ হয়ে যাবে
  • পরে চালু হলে বন্ধ সময়ের সব alert আপনাআপনি পাওয়া যাবে
  • Firewall স্বয়ংক্রিয়ভাবে সব port খুলে দেবে

TLS 1.3 inspection ছাড়া, ECH ব্যবহার না হলে, একটি network sensor সাধারণত কোনটি দেখতে পায়?

  • HTTP request-এর পুরো URL
  • Upload করা ফাইলের লেখা
  • IP, port, সময়, ডেটার পরিমাণ আর SNI
  • Login form-এর password

একটি noisy rule-এর ৯৫% alert একটি backup server থেকে একটি অনুমোদিত গন্তব্যে যায়। সবচেয়ে ভালো পদক্ষেপ কোনটি?

  • Rule পুরোপুরি বন্ধ করা
  • শুধু ওই জোড়ার জন্য সরু suppression, মালিক ও মেয়াদসহ, replay করে যাচাই
  • পুরো backup server-কে চিরদিনের জন্য suppress করা
  • Severity বাড়িয়ে দেওয়া, যাতে analyst সব পড়তে বাধ্য হন

শব্দকোষ

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

মনে রাখুন

  1. IDS দেখে জানায়, IPS পথে দাঁড়িয়ে আটকায়। TAP ও SPAN কপি দেয়, inline-এ fail open না fail closed আগে ঠিক করতে হয়।
  2. Signature জানা জিনিস ধরে, anomaly অচেনা বেমানান জিনিস ধরে। অস্বাভাবিক মানেই ক্ষতিকর নয়।
  3. এনক্রিপশনের পরে থাকে metadata: flow, SNI, fingerprint. ভেতরের দৃষ্টি আসে endpoint আর application log থেকে।
  4. Precision = TP ÷ (TP + FP), recall = TP ÷ (TP + FN). বিরল ঘটনায় accuracy বিভ্রান্ত করে, তাই prevalence জিজ্ঞেস করুন।
  5. Suppression সরু, মালিকসহ, মেয়াদসহ। “কোনো alert নেই” তখনই সুখবর, যখন sensor-এর দেখার প্রমাণ আছে।

পরের পর্বে: IDS বলল কিছু ঘটেছে। এবার নিজের network-এ tcpdump আর Wireshark দিয়ে packet খুলে দেখব, আসলে কী ঘটেছিল।

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

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