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

অনুমোদিত penetration testing — scope, rules of engagement, রিপোর্ট আর bug bounty

Authorised Penetration Testing — Scope, Rules of Engagement, Reporting & Bug Bounty

Taught in Bangla, this lesson shows how organizations run authorized security testing, not how to attack. It compares scans, pentests, red teams and bug bounties, black, grey and white box work, and methods such as PTES and OWASP WSTG. It covers scope, written permission, rules of engagement, stop conditions, handling evidence, report writing, retesting, choosing vendors, running a VDP, and career ethics.

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

  • প্রতিষ্ঠান কেন পরীক্ষা করায়, আর কোন প্রশ্নে কোন ধরনের পরীক্ষা মানায়
  • Black, grey আর white box-এর পার্থক্য এবং PTES, NIST SP 800-115, OWASP WSTG-র ধাপের নাম
  • কাজ শুরুর আগের কাগজপত্র, থামার শর্ত আর সংবেদনশীল প্রমাণ সামলানো
  • একটি finding লেখা, ঝুঁকির মাত্রা দেওয়া, developer-এর সাথে কাজ করা আর retest
  • Vendor বাছাই, VDP আর bug bounty চালানো, পেশার পথ আর স্বার্থের সংঘাত

১ · নিজের দরজায় নিজেই ধাক্কা দেওয়ানো কেন

আগে নিয়মটি আবার বলি: লিখিত অনুমতি ছাড়া এই কাজ অপরাধ। নিজের system ছাড়া অন্য কারও system-এ পরীক্ষা করতে হলে মালিকের লিখিত অনুমতি লাগবে। আইন, অনুমতির উপাদান আর হঠাৎ ত্রুটি পেলে কী করবেন, তা আছে পর্ব ৬-এ। এই পর্বে কোনো টুলের কমান্ড নেই, হামলার কোনো ধাপও নেই। আমরা client আর পরীক্ষক দলের ব্যবস্থাপকের চোখে দেখব, কাজটি কীভাবে চলে।

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

Penetration testing বা pentest হলো সেই মহড়া। মালিকের অনুমতিতে অভিজ্ঞ মানুষ একটি সীমিত সময়ে দেখেন, দুর্বলতাগুলো বাস্তবে কতদূর গড়ায়। একটি প্রতিষ্ঠান নিজের টাকায় এটি করায় কয়েকটি কারণে:

  • নকশা আর বাস্তবের ফাঁক ধরা। নীতিতে লেখা আছে “সব admin-এ MFA”, বাস্তবে একটি পুরোনো panel বাদ পড়েছে।
  • বড় পরিবর্তনের আগে যাচাই। নতুন payment flow, নতুন mobile app বা cloud-এ স্থানান্তরের আগে একবার স্বাধীন চোখ।
  • চুক্তি আর মানের চাহিদা। বড় client, বিমাকারী আর PCI DSS-এর মতো মান নিয়মিত পরীক্ষার প্রমাণ চাইতে পারে (পর্ব ৬৯).
  • বিনিয়োগের অগ্রাধিকার। বাজেট কোথায় যাবে, তা অনুমানে নয়, প্রমাণে ঠিক করা। পর্ব ৪-এর threat model কাগজে ঝুঁকি দেখায়, pentest সেটি মিলিয়ে দেখে।
  • রক্ষকদের অনুশীলন। পরীক্ষা চলার সময় SOC কী দেখল, কী দেখল না, সেটিও শেখার উপাদান।
মূল ধারণা

Pentest-এর পণ্য কোনো “হ্যাক” নয়। পণ্য হলো একটি সিদ্ধান্ত নেওয়ার মতো নথি: কী দুর্বল, প্রভাব কী, আগে কোনটি ঠিক করবেন, আর ঠিক হয়েছে কি না কীভাবে জানবেন। সিস্টেমে যে দুর্বলতা নেই, সেই গ্যারান্টি pentest দেয় না। এটি সময়ে বাঁধা একটি নমুনা পরীক্ষা।

১৯৬০-৭০-এর দশকে মার্কিন প্রতিরক্ষা গবেষণায় “tiger team” কথাটি প্রচলিত হয়, মানে এমন দল যারা system-এর দুর্বলতা খুঁজে বের করে। পরিচিত নথি হলো ১৯৭৪ সালের Karger ও Schell-এর Multics নিরাপত্তা মূল্যায়ন। সেখান থেকে একটি শিক্ষা আজও টিকে আছে: নকশা ঠিক না হলে পরীক্ষা করে আর জোড়াতালি দিয়ে নিরাপত্তা আসে না। তাই পরীক্ষা হলো secure SDLC-র একটি অংশ, পুরোটা নয় (পর্ব ৪৫).

২ · Scan, pentest, red team আর bug bounty — কোন প্রশ্নে কোনটি

চারটি কাজকে প্রায়ই এক নামে ডাকা হয়। ফলে প্রতিষ্ঠান scan-এর দাম দিয়ে pentest-এর আশা করে, বা অল্প বয়সের একটি system-এ red team চায়। একটি মহল্লার কথা ভাবুন:

Scan হলো পাহারাদারের রাতের টহল: প্রতিটি দরজায় তালা আছে কি না দেখে খাতায় টিক দেওয়া। Pentest হলো মালিকের ডাকা অভিজ্ঞ মিস্ত্রি, যিনি দেখেন কোন তালা আসলে কতটা মজবুত আর ভেতরে গেলে কতদূর যাওয়া যায়। Red team হলো না জানিয়ে করা মহড়া: পাহারাদারেরা সন্দেহজনক কাউকে ধরতে পারেন কি না। আর bug bounty হলো মহল্লার নোটিশ বোর্ড: “নিয়ম মেনে ত্রুটি দেখালে পুরস্কার।”

কাজযে প্রশ্নের উত্তর দেয়কে, কতদিনসীমা
Vulnerability scanপরিচিত ত্রুটি আর ভুল configuration কোথায় আছে?স্বয়ংক্রিয় টুল, নিয়মিত (পর্ব ৩২)অনেক false positive, ব্যবসার যুক্তি বোঝে না
Penetration testদুর্বলতাগুলো বাস্তবে কাজে লাগানো যায় কি? জুড়লে প্রভাব কত?মানুষ, সাধারণত কয়েক দিন থেকে কয়েক সপ্তাহনির্দিষ্ট scope আর সময়ের নমুনা
Red teamএকটি লক্ষ্য ধরে এগোলে আমাদের প্রতিরোধ, detection আর সাড়া কেমন কাজ করে?ছোট অভিজ্ঞ দল, সাধারণত কয়েক সপ্তাহ বা বেশিসব ত্রুটি খোঁজে না; পরিণত নিরাপত্তা দল লাগে
Bug bountyনানা দক্ষতার বাইরের মানুষ কী খুঁজে পান?গবেষকেরা, চলমানTriage-এর খরচ, ফলাফলের নিশ্চয়তা নেই

প্রায়ই পাশের একটি শব্দ শুনবেন, purple team. এখানে red আর blue team একসাথে বসে, প্রতিটি কৌশল চালিয়ে দেখে detection কাজ করল কি না। লক্ষ্য লুকোচুরি নয়, দ্রুত শেখা। ক্রম হিসেবে সাধারণ পরামর্শ হলো: আগে vulnerability management, তারপর pentest, তারপর red team. Scan-এই যে ত্রুটি ধরা পড়ে, তার জন্য পেশাদার মানুষের দিন খরচ করা অপচয়।

Black, grey আর white box — পরীক্ষককে কতটা জানানো হবে

Black box

পরীক্ষক শুধু প্রকাশ্য ঠিকানা জানেন। বাইরের অচেনা মানুষের দৃষ্টি পাওয়া যায়, তবে সময়ের বড় অংশ যায় খুঁজে বের করায়। ভেতরের অংশ অদেখা থেকে যেতে পারে।

বাইরের দৃষ্টি, কম গভীরতা

Grey box

সাধারণ ব্যবহারকারীর test account, কিছু নথি। Web app-এ প্রায়ই এটিই সবচেয়ে কাজের, কারণ login-এর ভেতরের যুক্তি পরীক্ষা করা যায়।

প্রায়ই ভালো ভারসাম্য

White box

Source code, নকশা, configuration সব দেওয়া হয়। একই সময়ে সবচেয়ে বেশি জায়গা দেখা যায়। Code review-র সাথে মিলে যায় (পর্ব ৪৯).

সবচেয়ে গভীর

একটি প্রচলিত ভুল ধারণা হলো, black box-ই “আসল” পরীক্ষা। বাস্তব আক্রমণকারীর হাতে মাসের পর মাস সময় থাকে, আপনার পরীক্ষকের হাতে ১০ দিন। তথ্য দিলে পরীক্ষক সময় বাঁচিয়ে গভীরে যেতে পারেন। আপনি অনুমান কেনার বদলে কভারেজ কেনেন।

৩ · পদ্ধতিপত্র আর ধাপ — প্রতিটি ধাপ client-কে কী দেয়

পেশাদার কাজ ব্যক্তির খেয়ালে চলে না। একটি লিখিত পদ্ধতি অনুসরণ করলে দুটি লাভ হয়: কাজ পুনরাবৃত্তি করা যায়, আর client জানেন কী দেখা হয়েছে। তিনটি পরিচিত নথির ধাপের নাম জেনে রাখুন। এদের ভেতরের কৌশল এই কোর্সের বিষয় নয়।

নথিকার, কবেধাপ বা গঠন
PTESপেশাজীবীদের উদ্যোগ, শুরু প্রায় ২০০৯৭টি অংশ: Pre-engagement, Intelligence Gathering, Threat Modeling, Vulnerability Analysis, Exploitation, Post Exploitation, Reporting
NIST SP 800-115NIST, ২০০৮৪টি ধাপ: Planning, Discovery, Attack, Reporting. Discovery আর Attack ঘুরে ঘুরে চলে
OWASP WSTGOWASP. শেষ স্থিতিশীল version v4.2 (২০২০), v5 তৈরি হচ্ছে বলে প্রকল্প জানায়Web app পরীক্ষার ক্ষেত্রভিত্তিক তালিকা: configuration, identity, authentication, authorization, session, input, business logic ইত্যাদি

নিচের ছবিতে PTES-এর ধাপগুলো ধারণা হিসেবে সাজানো। বাঁ পাশে ধাপ, ডান পাশে client-এর হাতে যা আসে। ব্যবস্থাপক হিসেবে এই ডান পাশটিই আপনার দেখার জিনিস।

প্রতিটি ধাপ থেকে client কী পান

What each engagement stage gives the client

প্রতিটি ধাপ থেকে client কী পান Pre-engagement Recon Threat model Vuln analysis Exploitation Post-exploit Reporting + Retest সীমা, অনুমতি, জরুরি পথ স্পষ্ট লেখা থাকে বাইরে থেকে কী দেখা যায় অজানা asset ধরা পড়ে সীমিত সময় কোথায় যাবে তা ঠিক হয় সম্ভাব্য ত্রুটির যাচাই করা তালিকা, false positive বাদ ত্রুটি বাস্তব কি না, তার নিয়ন্ত্রিত প্রমাণ ব্যবসায় প্রভাব কতদূর, blast radius কত বড় সিদ্ধান্তের নথি, তারপর ঝুঁকি কমার প্রমাণ
ছবি ৫০.১ — লাল দুটি ধাপ সবচেয়ে ঝুঁকিপূর্ণ, তাই অনুমতিতে এদের সীমা আলাদা করে লেখা থাকে। অনেক কাজে শুধু ত্রুটি প্রমাণ করে থামতে বলা হয়।

Exploitation শব্দটি শুনে ভয় পাওয়ার কিছু নেই, আবার হালকাভাবে নেওয়ারও কিছু নেই। অনুমোদিত কাজে এর উদ্দেশ্য প্রমাণ, ক্ষতি নয়। সবচেয়ে ছোট যে কাজে ত্রুটিটি প্রমাণ হয়, সেখানেই থামা হয়। এই কাজে scanner, web proxy বা exploitation framework-এর মতো টুল ব্যবহৃত হয়, যেমন Nmap, Burp Suite, Metasploit নামগুলো শুনবেন। এগুলো অনুমোদিত কাজে থাকে বলেই শুধু নাম বললাম। এই কোর্স এদের ব্যবহার শেখায় না।

৪ · কাজ শুরুর আগে — scope থেকে স্বাক্ষর

একটি pentest-এর ভালো-মন্দ অনেকটাই ঠিক হয়ে যায় প্রথম কি-বোর্ড ছোঁয়ার আগে। Scope আর লিখিত অনুমতির মূল উপাদান পর্ব ৬-এ দেখেছেন। এখানে দেখব, কাগজগুলো কে, কখন, কোন ক্রমে তৈরি করেন। নিচের কাল্পনিক অনলাইন বাজারের অনুরোধটি স্বাক্ষর পর্যন্ত নিয়ে যান।

  1. প্রয়োজনকেন
  2. Scopingকী
  3. মালিকানাকার
  4. চুক্তিদায়
  5. RoEনিয়ম
  6. স্বাক্ষরGo
অনুরোধBusiness need
From   : Head of Technology, Bazaar Ltd
Reason : new checkout goes live next quarter
Goal   : can one customer reach another's orders?
Scopingআকার আর ধরন
Assets : web shop, customer API
Type   : grey box, two test accounts
Effort : 10 tester-days (assumed)
Env    : staging first, production read-only review
মালিকানাAsset owner table
shop.example.com  owner: Bazaar Ltd     in
api.example.com   owner: Bazaar Ltd     in
pay.example.net   owner: Payment Vendor OUT
cloud host        provider policy read: yes
চুক্তিCommercial
NDA signed by both sides
Statement of work: scope, price, deliverables
Liability and insurance reviewed by counsel
Rules of engagementকাজের নিয়ম
Window : 22:00-06:00 Asia/Dhaka
Banned : load tests, social engineering
Tester IPs shared with SOC: 203.0.113.10
Stop   : see stop-condition list
Contact: duty engineer, 24 hours
Kick-offGo / no-go
AUTH-2026-021 signed by system owner
Restore test: passed last week
Change freeze checked: none in window
Decision: GO on 2026-11-08 22:00
  1. ধাপ ১ — প্রয়োজন। অনুরোধ আসে একটি ব্যবসায়িক কারণে: নতুন checkout. “পুরো system পরীক্ষা করুন” না বলে একটি স্পষ্ট প্রশ্ন আছে। এই প্রশ্নই পরে রিপোর্টের প্রথম অংশ ঠিক করবে।
  2. ধাপ ২ — Scoping. দুই পক্ষ বসে ঠিক করেন কোন asset, কোন ধরন, কতদিন। এখানে grey box, দুটি test account, staging আগে। উৎপাদনে (production) শুধু পড়ার মতো পর্যালোচনা, কারণ সেখানে আসল গ্রাহক আছেন।
  3. ধাপ ৩ — মালিকানা। প্রতিটি asset কার? Payment অংশ অন্য প্রতিষ্ঠানের, তাই Bazaar Ltd তার অনুমতি দিতে পারে না, ফলে এটি বাদ। Cloud provider-এর পরীক্ষা-নীতিও পড়া হলো।
  4. ধাপ ৪ — চুক্তি। NDA গোপনীয়তা বাঁধে। Statement of work কাজ আর ফলাফল বাঁধে। ক্ষতি হলে দায় কার, তা আইনজীবী দেখেন। প্রযুক্তির লোকেরা একা এটি ঠিক করেন না।
  5. ধাপ ৫ — Rules of engagement. সময়, নিষিদ্ধ পদ্ধতি, পরীক্ষকের IP, থামার শর্ত আর জরুরি যোগাযোগ। পরীক্ষকের IP জানা থাকলে SOC আসল হামলা থেকে আলাদা করতে পারে। একে বলে deconfliction.
  6. ধাপ ৬ — স্বাক্ষর। System-এর দায়িত্বশীল ব্যক্তি অনুমতিপত্রে সই করলেন, নম্বর AUTH-2026-021. শেষ যাচাই: সাম্প্রতিক backup থেকে restore সফল, ঐ সময়ে কোনো বড় পরিবর্তন নেই। তবেই GO.

RoE-তে যা অবশ্যই ভাবতে হবে

বিষয়যে প্রশ্নের উত্তর লিখিত চাই
সময়কোন তারিখ, কোন ঘড়ির সময়, কোন time zone? ঈদের কেনাকাটা, বেতনের দিন বা বন্ধের সময়ের সাথে সংঘাত আছে কি? Maintenance window কখন?
জরুরি যোগাযোগদুই পক্ষে কে, কোন নম্বরে, রাত দুটোয়ও? একজন না পেলে দ্বিতীয় কে? নিজের ফোন বন্ধ থাকলে কী হবে?
ডেটাআসল ব্যক্তিগত তথ্য দেখলে কী করবেন? প্রমাণ কোথায়, কতদিন, কীভাবে মুছবেন? দেশের বাইরে যাবে কি? (Data minimization)
তৃতীয় পক্ষHosting, SaaS, payment আর CDN-এর নিজস্ব নিয়ম কী? তাদের অনুমতি লাগে কি?
Production নিরাপত্তাকোন পদ্ধতি নিষিদ্ধ? ডেটা বদলানো যাবে? Backup আর rollback পরীক্ষিত? কোন system এতই নাজুক যে শুধু কাগজে দেখা হবে?
কে জানবেনSOC জানবে, নাকি শুধু একজন trusted agent? থানায় বা নিরাপত্তারক্ষীদের কাছে আটকালে কে ফোন ধরবেন?

Cloud provider-এর নিয়ম: আপনার অনুমতি শুধু আপনার অংশে চলে। AWS-এর বর্তমান নীতিতে তালিকাভুক্ত সেবায় আগাম অনুমতি লাগে না, কিন্তু DoS-জাতীয় কাজ নিষিদ্ধ, আর চাপ পরীক্ষার আলাদা নীতি আছে। Microsoft-এর নিয়মে পরীক্ষা নিজের tenant-এর ভেতরে রাখতে হয়, DoS আর phishing নিষিদ্ধ। এগুলো উদাহরণ, সুপারিশ নয়। নীতি বদলায়, তাই কাজের আগে provider-এর বর্তমান পাতা পড়ে তার কপি ফাইলে রাখুন।

এবার একটি ছোট simulator. এটি একটি বানানো scope document পড়ে বলে কাজ শুরু করা যাবে কি না। কোনো network নেই, শুধু কয়েকটি মান। খেয়াল করুন, প্রতিটি host-এর মালিকের স্বাক্ষরও এটি মিলিয়ে দেখে।

// Toy readiness check on a fictional scope document. No network, no real target.
const checks = [
  ['letter',    'signed authorisation letter'],
  ['roe',       'rules of engagement agreed'],
  ['window',    'time window with time zone'],
  ['contacts',  'emergency contacts on both sides'],
  ['stopRules', 'stop conditions written'],
  ['dataRules', 'evidence and data handling rules'],
  ['backup',    'recent restore test for production'],
];
function review(doc) {
  const blockers = checks.filter(([k]) => !doc[k]).map(([, label]) => label);
  // Every host needs an owner who has signed. Unknown owner means blocked.
  for (const h of doc.scope) {
    if (!doc.signedBy.includes(h.owner)) {
      blockers.push(`no signature from ${h.owner} for ${h.host}`);
    }
  }
  console.log(`${doc.name}: ${doc.scope.length} hosts, ${blockers.length} blocker(s)`);
  blockers.forEach(b => console.log('  BLOCK ' + b));
  console.log('  => ' + (blockers.length ? 'NOT READY, do not start' : 'READY for go/no-go'));
}
const draft = {
  name: 'Draft v1', letter: true, roe: true, window: false, contacts: true,
  stopRules: false, dataRules: true, backup: true,
  signedBy: ['Bazaar Ltd'],
  scope: [
    { host: 'shop.example.com', owner: 'Bazaar Ltd' },
    { host: 'api.example.com',  owner: 'Bazaar Ltd' },
    { host: 'pay.example.net',  owner: 'Payment Vendor' },
  ],
};
review(draft);
review({ ...draft, name: 'Draft v2', window: true, stopRules: true,
         scope: draft.scope.filter(h => h.owner === 'Bazaar Ltd') });

প্রথম খসড়ায় ফল 3 blocker(s): সময় লেখা নেই, থামার শর্ত নেই, আর no signature from Payment Vendor for pay.example.net. তাই NOT READY, do not start. দ্বিতীয় খসড়ায় দুটি শর্ত যোগ হলো আর payment host-টি scope থেকে বাদ গেল, ফলে 0 blocker(s) এবং READY for go/no-go. লক্ষ করুন, ফলটি “GO” নয়। কোড শুধু কাগজ দেখে। শেষ সিদ্ধান্ত নেন মানুষ, kick-off সভায়।

৫ · কাজ চলার সময় — প্রমাণ, সংবেদনশীল ডেটা আর থামার শর্ত

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

প্রমাণ রাখার নিয়ম

  • কার্যবিবরণী। কে, কখন, কোন host-এ, কী করলেন, সবই সময়সহ লিখুন। অফিসের রেজিস্টার খাতার মতো। কোনো গোলমাল হলে এই খাতাই দেখায় কোনটি পরীক্ষকের কাজ, কোনটি নয়।
  • ন্যূনতম প্রমাণ। ত্রুটি প্রমাণ করতে একটি নিজের test record যথেষ্ট হলে আসল গ্রাহকের দিকে যাবেন না। কত record আছে, তা গোনার জন্য সেগুলো নামানোর দরকার নেই।
  • ঢেকে রাখা। Screenshot-এ নাম, ফোন, token ঢেকে দিন। ঢাকা মানে পিক্সেল সত্যিই মুছে ফেলা, ওপরে আধা-স্বচ্ছ দাগ নয়।
  • এনক্রিপ্ট আর মেয়াদ। প্রমাণ এনক্রিপ্ট করা জায়গায়, সীমিত মানুষের হাতে। চুক্তির দিন পার হলে মুছে সেই কথা লিখিত জানানো।
  • পরিষ্কার করে যাওয়া। Test account, পরীক্ষার ফাইল বা কনফিগারেশন যা তৈরি হলো, তার তালিকা রেখে শেষে সরানো, অথবা client-কে জানানো।

আইনি মামলার সম্ভাবনা থাকলে chain of custody লাগতে পারে, যা পর্ব ৬৩-তে আসবে। সাধারণ pentest-এর প্রমাণ forensic মানের হয় না, তবে সময়, উৎস আর সততা সেখানেও জরুরি।

Stop condition — কখন সঙ্গে সঙ্গে থামবেন

কিছু ঘটনায় “কাজটা শেষ করে জানাই” চলে না। এগুলো RoE-তে আগেই লেখা থাকে, আর যেকোনো পক্ষ থামাতে পারেন।

ঘটনাসঙ্গে সঙ্গে করণীয়
সার্ভিস ধীর হয়েছে বা বন্ধ হয়েছে, কারণ যা-ই হোকসব কাজ থামান, duty contact-কে ফোন করুন, সময়সহ নিজের শেষ কাজ জানান
আসল ব্যক্তিগত তথ্য বা অর্থের সংবেদনশীল ডেটা দেখা গেলথামুন, কপি করবেন না, জায়গাটি লিখে জানান
আগে থেকে কেউ ঢুকে আছে, এমন চিহ্নকিছু বদলাবেন না, ফোনে জানান, সিদ্ধান্ত client-এর incident response দলের
Scope-এর বাইরের system-এ পৌঁছে গেছেনফিরে আসুন, লিখে রাখুন, জানান
মানুষের নিরাপত্তা বা কারখানার যন্ত্র জড়িত (OT)থামুন, আগে থেকে ঠিক করা ব্যক্তিকে জানান
পরীক্ষকের ল্যাপটপ হারিয়েছে বা credential ফাঁস হয়েছেথামুন, জানান, সংশ্লিষ্ট account আর key বাতিল করান
Client বা পরীক্ষক দলের যে কেউ থামতে বললেনপ্রশ্ন পরে, থামা আগে

এবার একটি থামার ঘটনা ধাপে ধাপে দেখুন। ঘড়ি কাল্পনিক, ঘটনাও কাল্পনিক। পরীক্ষকের হাতে আগেই এমন একটি পদক্ষেপ তালিকা আছে বলে, রাত দুটোয়ও তিনি অনুমান করেন না।

  1. স্বাভাবিক০২:০৫
  2. চিহ্ন০২:১৪
  3. থামা০২:১৫
  4. ফোন০২:১৯
  5. হস্তান্তর০২:৪০
  6. পুনরায়পরদিন
Tester activity log02:05
02:05 reviewing staging admin roles, test account only
in scope: yes   window: yes
Tester activity log02:14
02:05 reviewing staging admin roles, test account only
02:14 unknown admin account "svc_tmp9", created 3 days ago
      no ticket, not ours, not in the handover list
Tester activity log02:15
02:14 unknown admin account "svc_tmp9"
02:15 STOP. all activity paused. nothing changed or deleted
account not opened, not disabled, not explored
Tester activity log02:19
02:15 STOP. all activity paused
02:19 phoned duty engineer (RoE contact 1), reached
      said: possible real intruder, tester IP 203.0.113.10
Client IR ticket (fictional)02:40
02:40 IR lead takes over
      received: tester log, source IP, time window
      result: tester actions separated from unknown actor
পরের দিনSigned note
Testing paused 02:15 until IR lead confirms.
Addendum to AUTH-2026-021: window extended 2 nights.
Report: event recorded, details with IR team.
  1. ০২:০৫ — স্বাভাবিক কাজ। Staging-এ পরীক্ষার account দিয়ে ভূমিকা পর্যালোচনা চলছে। Scope আর সময়, দুটিই ঠিক। Log-এ প্রতিটি কাজ লেখা হচ্ছে।
  2. ০২:১৪ — অদ্ভুত চিহ্ন। একটি অচেনা admin account, তিন দিন আগে তৈরি, কোনো ticket নেই। পরীক্ষকেরা বানাননি, হস্তান্তর তালিকাতেও নেই। এটি আগের কোনো সত্যিকারের অনুপ্রবেশের চিহ্ন হতে পারে, আবার ভুলে রাখা account-ও হতে পারে। পরীক্ষক সেটি যাচাই করতে যান না।
  3. ০২:১৫ — থামা। সব কাজ বন্ধ। কৌতূহল সবচেয়ে বড় ফাঁদ। Account খুললে বা মুছলে সত্যিকারের প্রমাণ নষ্ট হতে পারে, আর অনুপ্রবেশকারী সতর্ক হতে পারেন।
  4. ০২:১৯ — ফোন। Email নয়, RoE-র প্রথম নম্বরে ফোন। চার মিনিটেই পাওয়া গেল। কী দেখলেন আর নিজের IP কোনটি, শুধু এটুকু বলা হলো। সন্দেহের কথা ছড়ানো হয়নি।
  5. ০২:৪০ — হস্তান্তর। সিদ্ধান্ত এখন client-এর IR দলের (পর্ব ৬১). পরীক্ষকের log দিয়ে তাঁরা আলাদা করলেন কোনটি পরীক্ষকের কাজ, কোনটি অচেনা কারও। ভালো কার্যবিবরণীর দাম এখানেই।
  6. পরদিন — লিখিত সিদ্ধান্ত। IR প্রধান নিশ্চিত করার আগে কাজ বন্ধ থাকবে। হারানো সময়ের জন্য মৌখিক কথায় নয়, স্বাক্ষরিত সংযোজনে দুই রাত বাড়ানো হলো। রিপোর্টে ঘটনাটি নথিবদ্ধ থাকবে, বিস্তারিত থাকবে সীমিত হাতে।

৬ · রিপোর্ট — যে নথির জন্য টাকা দেওয়া হয়

পরীক্ষা যত ভালোই হোক, রিপোর্ট দুর্বল হলে client-এর হাতে কিছুই থাকে না। একই রিপোর্ট দুই ধরনের পাঠক পড়েন, তাই দুটি স্তর লাগে।

Executive summary

পরিচালনা পর্ষদ বা ব্যবস্থাপকের জন্য, সাধারণত এক-দুই পাতা। কী পরীক্ষা হলো, সামগ্রিক অবস্থা, সবচেয়ে বড় ব্যবসায়িক ঝুঁকি, কোন সিদ্ধান্ত বা বাজেট লাগবে। প্রযুক্তির ভাষা প্রায় নেই।

পাঠক: সিদ্ধান্তদাতা

প্রযুক্তিগত অংশ

Scope, সময়, পদ্ধতি, সীমাবদ্ধতা, তারপর প্রতিটি finding: শিরোনাম, মাত্রা, প্রভাবিত asset, প্রভাব, প্রমাণ, মালিকের জন্য পুনরুৎপাদনের বর্ণনা, remediation আর সূত্র।

পাঠক: developer ও admin

“সীমাবদ্ধতা” অংশটি ছোট মনে হলেও সততার পরীক্ষা। কোন জিনিস দেখা হয়নি, কেন হয়নি, সেটি স্পষ্ট লিখুন। না লিখলে পাঠক ধরে নেবেন সবই দেখা হয়েছে।

Severity — CVSS আর ব্যবসার ঝুঁকি

CVSS একটি প্রযুক্তিগত তীব্রতা মাপে, যার পূর্ণ হিসাব পর্ব ৩২-এ করেছেন। আমাদের কাল্পনিক finding-এর vector হলো CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N. অর্থাৎ network থেকে, সহজে, সাধারণ login দিয়ে, গোপনীয়তার বড় ক্ষতি। হিসাবটি মিলিয়ে নিন:

  • ISS = 1 − (1 − 0.56) × 1 × 1 = 0.56, তাই Impact = 6.42 × 0.56 = 3.5952.
  • Exploitability = 8.22 × 0.85 × 0.77 × 0.62 × 0.85 = 2.8353.
  • যোগফল 6.4305, রাউন্ড-আপে 6.5, Medium.

কিন্তু CVSS জানে না যে এই ডেটা হাজার গ্রাহকের ঠিকানা আর কেনাকাটার হিসাব। FIRST-ও স্পষ্ট বলে, base score ঝুঁকি মাপার একক নয়। তাই অনেক রিপোর্টে পাশে থাকে একটি risk matrix: likelihood × impact, ১ থেকে ৫ স্কেলে (পর্ব ২). আমরা ধরলাম likelihood 4, কারণ যেকোনো গ্রাহক এটি করতে পারেন; impact 4, কারণ ব্যক্তিগত তথ্য। ফল ৪ × ৪ = ১৬। আমাদের বানানো স্কেলে ১৭–২৫ Critical, ১০–১৬ High, ৫–৯ Medium, ১–৪ Low. তাই ফল High. স্কেল প্রতিষ্ঠানভেদে আলাদা, সেজন্য রিপোর্টে স্কেলটি লিখে দিতে হয়। পরীক্ষক প্রস্তাব করেন, চূড়ান্ত ব্যবসায়িক ঝুঁকি মেনে নেন risk owner.

একটি finding লেখা — প্রমাণ থেকে সমাধান

নিচে একটি broken access control finding তৈরি হচ্ছে। ত্রুটির ধারণা আর প্রতিরক্ষা আছে পর্ব ৩৮-এ। এখানে দেখুন লেখার প্রক্রিয়া। সব নাম আর মান বানানো, কাজটি পরীক্ষকের নিজের দুটি test account-এ সীমিত।

  1. পর্যবেক্ষণ
  2. সীমা
  3. প্রমাণ
  4. মাত্রা
  5. লেখা
  6. সমাধান
Tester notestaging
Signed in as test-a. Viewed invoice owned by test-b.
Server returned test-b's invoice. Expected: denied.
Tester noteকোথায় থামা হলো
Both accounts are ours. One confirmation only.
No other invoice numbers were tried.
No real customer record was opened.
Evidence item E-07Encrypted store
Time   : 2026-11-09 22:41 Asia/Dhaka
Item   : screenshot, address field masked
SHA-256: recorded in evidence log
Retain : deleted 30 days after final report
Ratingদুটি মাপ
CVSS 3.1 base : 6.5 Medium
Likelihood    : 4   any signed-in customer
Impact        : 4   personal data
Risk          : 4 x 4 = 16, High (scale in appendix)
Finding F-01Draft
Title : Customers can read each other's invoices
Asset : api.example.com, invoice endpoint
Impact: names, addresses and orders of any customer
        could be exposed to any signed-in customer
RemediationOwner: API team
Fix   : check on the server that invoice.owner = session.user
Test  : add a regression test with two users
Detect: alert on many denied invoice lookups
Retest: requested after the fix ships
  1. পর্যবেক্ষণ। test-a হিসেবে login করে test-b-র invoice পাওয়া গেল। প্রত্যাশা ছিল প্রত্যাখ্যান। এটি IDOR ধরনের ত্রুটি, মানে নম্বর বদলালেই অন্যের জিনিস পাওয়া যায়।
  2. সীমা। ত্রুটি প্রমাণ হয়ে গেছে, তাই এখানেই থামা। আসল গ্রাহকের invoice খোলার দরকার নেই, কত গ্রাহক প্রভাবিত তা গোনার জন্য ডেটা নামানোরও দরকার নেই। সেই সংখ্যা client নিজেই database থেকে জানতে পারেন।
  3. প্রমাণ। সময়, ঠিকানা ঢেকে রাখা ছবি, hash আর মেয়াদসহ E-07 নম্বরে রাখা হলো। এখন রিপোর্টের প্রতিটি দাবির পেছনে একটি প্রমাণ নম্বর আছে।
  4. মাত্রা। CVSS 6.5 Medium, ব্যবসার ঝুঁকি 16, High. দুটি সংখ্যা দ্বন্দ্ব নয়, দুটি আলাদা প্রশ্নের উত্তর। পরিশিষ্টে স্কেলটি থাকে, যাতে পাঠক যাচাই করতে পারেন।
  5. লেখা। শিরোনাম ক্ষতি বলে, কৌশল নয়। “Customers can read each other's invoices” যেকোনো ব্যবস্থাপক বোঝেন। পরিভাষা পরে আসে।
  6. সমাধান। সমস্যা শুধু এক জায়গায় নয়, মূল কারণ (root cause) হলো server-এ মালিকানা যাচাই না থাকা। তাই সমাধান, regression test আর detection একসাথে। শেষে retest-এর অনুরোধ।

চূড়ান্ত finding-টি রিপোর্টে এমন দেখায়। “পুনরুৎপাদন” অংশটি মালিকের জন্য লেখা, যাতে তাঁর developer নিজের staging-এ নিজের দুটি account দিয়ে সমস্যাটি দেখতে পান।

উদাহরণ (কাল্পনিক finding, কোনো বাস্তব system নয়)
F-01  Customers can read each other's invoices
মাত্রা     : High (risk 16). CVSS 3.1 base 6.5 Medium
Asset      : api.example.com, invoice endpoint (staging)
প্রভাব     : যেকোনো login করা গ্রাহক অন্য গ্রাহকের নাম, ঠিকানা আর
             কেনাকাটার তথ্য দেখতে পারেন।
পুনরুৎপাদন: staging-এ দুটি test account নিন। প্রথম account দিয়ে
             দ্বিতীয় account-এর invoice দেখার চেষ্টা করুন।
             প্রত্যাশিত ফল প্রত্যাখ্যান, প্রাপ্ত ফল invoice.
প্রমাণ     : E-07
সমাধান    : প্রতিটি invoice অনুরোধে server-এ মালিকানা যাচাই করুন।
             দুই ব্যবহারকারীর regression test যোগ করুন।
সূত্র      : OWASP Top 10 (Broken Access Control), CWE-639
অবস্থা    : Open, retest বাকি

রিপোর্টের ক্রম সাজানো

পাঁচটি বানানো finding দুইভাবে সাজিয়ে দেখি। CVSS সংখ্যাগুলো উদাহরণ মাত্র।

// Toy report ordering. CVSS numbers are illustrative; likelihood and impact
// (1 to 5) are the client's business view of a fictional shop.
const band = r => r >= 17 ? 'Critical' : r >= 10 ? 'High' : r >= 5 ? 'Medium' : 'Low';
const findings = [
  { id: 'F-01', cvss: 6.5, like: 4, imp: 4, title: 'Other customers invoices readable' },
  { id: 'F-02', cvss: 5.3, like: 4, imp: 2, title: 'Stack trace in error page' },
  { id: 'F-03', cvss: 8.1, like: 3, imp: 5, title: 'Admin panel without MFA' },
  { id: 'F-04', cvss: 3.7, like: 1, imp: 2, title: 'Old TLS version on staging' },
  { id: 'F-05', cvss: 9.8, like: 2, imp: 3, title: 'Unpatched isolated build host' },
];
for (const f of findings) { f.risk = f.like * f.imp; f.rating = band(f.risk); }

const line = f => `${f.id}  cvss ${f.cvss.toFixed(1)}  risk ${String(f.risk).padStart(2)} ` +
                  `${f.rating.padEnd(8)} ${f.title}`;
console.log('Order by CVSS alone:');
[...findings].sort((a, b) => b.cvss - a.cvss).forEach(f => console.log('  ' + line(f)));

console.log('Report order (risk, then CVSS):');
const report = [...findings].sort((a, b) => b.risk - a.risk || b.cvss - a.cvss);
report.forEach((f, i) => console.log(`${i + 1} ` + line(f)));

const count = {};
report.forEach(f => count[f.rating] = (count[f.rating] || 0) + 1);
console.log('Summary:', JSON.stringify(count));

শুধু CVSS ধরলে প্রথমে আসে F-05 cvss 9.8, একটি বিচ্ছিন্ন build host, যেখানে পৌঁছানোই কঠিন। ব্যবসার ঝুঁকিতে সেটি risk 6 Medium, চতুর্থ স্থানে। প্রথমে আসে F-01 cvss 6.5 risk 16 High, কারণ এটি গ্রাহকের ডেটা। শেষে সারসংক্ষেপ {"High":2,"Medium":2,"Low":1}, যা executive summary-তে যায়। তবে ৯.৮-কে অবহেলা করা যায় না। “বিচ্ছিন্ন” দাবিটি যাচাই করতে হবে, কারণ এই likelihood সেই দাবির ওপর দাঁড়িয়ে। Compensating control সরে গেলে হিসাব বদলে যাবে।

৭ · Developer-এর সাথে কাজ, retest আর বন্ধ করা

রিপোর্ট দেওয়া মানে কাজ শেষ নয়। অনেক প্রতিষ্ঠানে রিপোর্ট আসে, ভয় ছড়ায়, তারপর ফাইলে পড়ে থাকে। Finding-কে কাজে বদলানোর কিছু অভ্যাস:

  • রিপোর্টের আগে ফোন। গুরুতর কিছু পেলে রিপোর্টের অপেক্ষা নয়, RoE অনুযায়ী তখনই জানান।
  • Debrief সভা। পরীক্ষক আর developer একসাথে বসেন। প্রশ্ন হয় “কীভাবে ঠিক করব”, “কার দোষ” নয়। নিজের কোডের ত্রুটি শুনতে কারও ভালো লাগে না, তাই ভাষা নম্র রাখুন, ব্যক্তির নাম লিখবেন না।
  • Finding থেকে ticket. প্রতিটি finding-এর একজন মালিক, একটি সময়সীমা (SLA) আর একটি ticket নম্বর।
  • একই শ্রেণি খুঁজুন। পরীক্ষক নমুনা দেখান, পুরো তালিকা নয়। একটি endpoint-এ মালিকানা যাচাই নেই, এর মানে আরও থাকতে পারে। তাই মূল কারণ ধরে সব জায়গা দেখুন।
  • মতভেদ লিখিত সামলান। Developer যদি বলেন “এটি ত্রুটি নয়”, প্রমাণ দেখুন। পরীক্ষক ভুলও হতে পারেন। মাত্রা বদলালে কারণসহ লিখুন।

Finding-এর জীবনচক্রটি একটি ছোট state machine. দুটি নিয়ম খেয়াল করুন: Developer “ঠিক করেছি” বললে সেটি শুধু দাবি, আর বন্ধ করতে পারে কেবল retest. ঝুঁকি মেনে নেওয়াও একটি বৈধ সমাপ্তি, তবে তাতে risk owner-এর স্বাক্ষর লাগে আর পুনর্বিবেচনার তারিখ লাগে (risk acceptance).

একটি finding-এর জীবনচক্র

Finding states from open to closed

একটি finding-এর জীবনচক্র Open Fixed? Closed Accepted Reopened সমাধানের দাবি retest পাস ঝুঁকি মেনে সই retest ফেল আবার দাবি সই
ছবি ৫০.২ — “Fixed?”-এর প্রশ্নবোধক চিহ্নটিই মূল কথা। Closed-এ পৌঁছানোর একমাত্র পথ retest. Reopened মানে সমাধানটি পুরো কাজ করেনি।

Retest মানে পুরো pentest আবার করা নয়। শুধু সেই finding-গুলোর সমাধান যাচাই, সাধারণত মূল পরীক্ষকের দ্বারা, মূল scope আর অনুমতির ভেতরে। মূল অনুমতির মেয়াদ শেষ হলে নতুন স্বাক্ষর নিন। নিচের ছোট tracker একটি কাল্পনিক event log চালিয়ে দেখায়, নিয়মগুলো কীভাবে কাজ করে।

// Toy retest tracker, simulated days. Only a retest can close a finding.
const allowed = {
  OPEN:     { 'fix-claimed': 'FIXED?', 'risk-accepted': 'ACCEPTED' },
  'FIXED?': { 'retest-pass': 'CLOSED', 'retest-fail': 'REOPENED' },
  REOPENED: { 'fix-claimed': 'FIXED?', 'risk-accepted': 'ACCEPTED' },
};
const slaDays = { High: 30, Medium: 60, Low: 90 };
const items = {
  'F-01': { sev: 'High',   state: 'OPEN' },
  'F-02': { sev: 'Medium', state: 'OPEN' },
  'F-03': { sev: 'High',   state: 'OPEN' },
  'F-04': { sev: 'Low',    state: 'OPEN' },
};
const log = [
  [ 9, 'F-01', 'fix-claimed'],   [12, 'F-03', 'retest-pass'],
  [14, 'F-01', 'retest-fail'],   [21, 'F-01', 'fix-claimed'],
  [24, 'F-01', 'retest-pass'],   [25, 'F-04', 'risk-accepted'],
  [40, 'F-02', 'fix-claimed'],   [65, 'F-03', 'fix-claimed'],
];
for (const [day, id, ev] of log) {
  const it = items[id], next = (allowed[it.state] || {})[ev];
  if (!next) { console.log(`day ${day}: ${id} ${ev} REJECTED (state ${it.state})`); continue; }
  console.log(`day ${day}: ${id} ${it.state} -> ${next}`);
  it.state = next;
  if (next === 'CLOSED' || next === 'ACCEPTED') it.endDay = day;
}
const today = 70;
console.log(`--- status on day ${today} ---`);
for (const [id, it] of Object.entries(items)) {
  const age = it.endDay ?? today;
  const late = age > slaDays[it.sev] ? ' OVER SLA' : '';
  console.log(`${id} ${it.sev.padEnd(6)} ${it.state.padEnd(8)} day ${age}${late}`);
}
const shut = Object.values(items).filter(i => i.state === 'CLOSED').length;
console.log(`closed by retest: ${shut} of ${Object.keys(items).length}`);

দিন ১২-তে F-03 retest-pass REJECTED (state OPEN), কারণ সমাধানের দাবি ছাড়াই পাসের ঘটনা ঢোকানো হয়েছিল। F-01 প্রথম retest-এ ফেল করল, তাই FIXED? -> REOPENED, দিন ২৪-এ CLOSED. F-04-এর ঝুঁকি মেনে নেওয়া হলো, তাই সেটি ACCEPTED, কিন্তু retest-এ বন্ধ বলে গোনা হয়নি। ৭০তম দিনে F-02 আর F-03 শুধু দাবির অবস্থায় আটকে, দুটিই OVER SLA. শেষ লাইন closed by retest: 1 of 4. Dashboard-এ “৩টি সমাধান হয়েছে” দেখালে সেটি মিথ্যা আশ্বাস হতো। আসল সংখ্যাটি ১।

৮ · Vendor বাছাই, নৈতিকতা আর পেশার পথ

পরীক্ষক দলকে আপনি নিজের দুর্বলতার মানচিত্র তুলে দিচ্ছেন। তাই বাছাই শুধু দামের প্রশ্ন নয়, বিশ্বাসের প্রশ্ন। বাইরের সেবাদাতা বাছাইয়ের সাধারণ নিয়ম পাবেন পর্ব ৭১-এ। Pentest-এর জন্য বাড়তি প্রশ্নগুলো হলো:

ভালো সংকেতRed flag
কাজের আগে scope নিয়ে প্রশ্ন করে, RoE আর লিখিত অনুমতি নিজেই চায়“Domain দিন, কাল থেকে শুরু করি”, অনুমতির কথাই নেই
নমুনা রিপোর্ট দেখায় (নাম মুছে), সমাধান আর সীমাবদ্ধতা স্পষ্টScanner-এর ছাপা ফলাফলের ওপর নিজের লোগো
কে কাজ করবেন, তাঁর অভিজ্ঞতা জানায়, background যাচাই আছেবিক্রির সময় অভিজ্ঞ লোক, কাজের সময় অজানা নতুন কেউ
প্রমাণ কোথায়, কতদিন, কীভাবে মোছা হবে তা লিখে জানায়Client-এর ডেটা নিজের ল্যাপটপে রাখে, মোছার প্রমাণ নেই
Retest দাম আর সময় আগে থেকে পরিষ্কার“কোনো ত্রুটি না পেলে টাকা ফেরত” বা ফলাফলের আগাম গ্যারান্টি
দায়, বিমা আর চুক্তি নিয়ে খোলামেলাআগের client-এর গোপন ঘটনা গল্প করে নিজের প্রচার

CREST-এর মতো স্বীকৃতি বা কোনো সনদ একটি সংকেত, নিশ্চয়তা নয়। সবচেয়ে কাজের যাচাই হলো নমুনা রিপোর্ট পড়া আর পরীক্ষকের সাথে পনেরো মিনিট কথা বলা।

নৈতিকতা আর স্বার্থের সংঘাত

পেশাগত দায়িত্বের ভিত্তি আছে পর্ব ৬-এ। Pentest-এর সাধারণ conflict of interest হলো:

  • যে প্রতিষ্ঠান system বানিয়েছে বা চালায়, সে-ই স্বাধীন পরীক্ষক হিসেবে সনদ দিচ্ছে।
  • রিপোর্টে ত্রুটি যত বেশি, নিজের সমাধান-সেবা বিক্রি তত বেশি, তাই মাত্রা বাড়িয়ে লেখার টান।
  • উল্টো টান: ব্যবস্থাপক অডিট পার হতে চান, বলছেন “এই finding-টি নামিয়ে দিন”।
  • পরীক্ষক client-এর প্রতিদ্বন্দ্বীর কাজ করছেন, বা কোনো বিক্রেতার অংশীদার।

সমাধান: separation of duties, আগে থেকে জানানো, মাত্রা বদলের লিখিত কারণ। প্রমাণ না থাকলে client-এর চাপে finding মুছবেন না। বদলে যদি client ঝুঁকি মেনে নেন, রিপোর্টে সেটিই লিখুন। মনে রাখুন, রিপোর্টটি অন্য কেউ ভরসা করে পড়বেন: অডিটর, ব্যাংক বা client-এর গ্রাহক।

পেশার পথ

অনেকেই pentest-কে একটি নাটকীয় কাজ ভাবেন। বাস্তবে সময়ের বড় অংশ যায় পড়া, নোট রাখা, রিপোর্ট লেখা আর সভায়। ভালো ভিত্তি হলো network, OS, web আর programming, মানে এই কোর্সের আগের মডিউলগুলো। পথটি প্রায়ই developer, system admin বা SOC analyst থেকে আসে। নিজের ল্যাব, বৈধ অনুশীলন প্ল্যাটফর্ম আর CTF দিয়ে শুরু করুন (পর্ব ৬).

পরিচিত সনদের উদাহরণ: OffSec-এর OSCP, CompTIA PenTest+, GIAC-র GPEN, EC-Council-এর CEH, CREST-এর পরীক্ষা। এগুলোর বিষয়, ধরন আর শর্ত বদলায়, তাই প্রতিষ্ঠানের নিজের পাতা দেখুন। এখানে কোনোটির সুপারিশ করা হচ্ছে না, আর এই পর্বের কোনো প্রশ্ন কোনো সনদ-পরীক্ষা থেকে নেওয়া নয়।

পরীক্ষা ও ইন্টারভিউতে: বিশ্ববিদ্যালয়, চাকরি বা ইন্টারভিউর প্রশ্নে এমন ধরন আসতে পারে।

  • Vulnerability scan আর pentest-এর পার্থক্য? Scan পরিচিত ত্রুটি স্বয়ংক্রিয়ভাবে তালিকা করে; pentest মানুষের যাচাইয়ে দেখায় সেগুলো বাস্তবে কতদূর যায়।
  • Pentest আর red team? Pentest বেশি ত্রুটি খোঁজে; red team একটি লক্ষ্য ধরে প্রতিরক্ষা আর detection যাচাই করে।
  • RoE-তে কী থাকে? সময়, পদ্ধতির সীমা, যোগাযোগ, থামার শর্ত আর ডেটার নিয়ম।
  • CVSS 9.8 কি সবসময় প্রথম? না। CVSS তীব্রতা মাপে; অগ্রাধিকারে asset, exposure আর ব্যবসার প্রভাব লাগে।
  • Finding কখন বন্ধ হয়? Retest-এ সমাধান যাচাইয়ের পরে, বা ঝুঁকি মালিকের স্বাক্ষরিত গ্রহণে আলাদা অবস্থায়।

৯ · VDP আর bug bounty — প্রতিষ্ঠানের দিক থেকে

গবেষকের দিকটি পর্ব ৬-এ দেখেছেন। এখানে প্রশ্ন হলো, আপনি প্রতিষ্ঠান হলে কী করবেন। বাড়ির সামনে একটি চিঠির বাক্স রাখার কথা ভাবুন। কেউ যদি দেখেন আপনার গেটের তালা ভাঙা, তিনি যেন জানানোর একটি পথ পান। সেই বাক্সটিই VDP. Bug bounty হলো তার ওপরে পুরস্কারের ঘোষণা। বাক্স ছাড়া পুরস্কার ঘোষণা করলে অনেক চিঠি এসে ঘরে ছড়িয়ে পড়বে।

VDP শুরু করার ন্যূনতম তালিকা

  1. একটি নীতি পাতা: কোন asset ভেতরে, কোন পদ্ধতি নিষিদ্ধ, ডেটা দেখলে কী করবেন, safe harbor-এর ভাষা, কতদিনে সাড়া আশা করা যায়।
  2. একটি যোগাযোগ পথ: নির্দিষ্ট email বা form, আর /.well-known/security.txt (security.txt, RFC 9116).
  3. একজন মালিক: কে পড়বেন, কে অগ্রাধিকার দেবেন, ছুটির সময় কে থাকবেন।
  4. ভেতরের পথ: রিপোর্ট কীভাবে ticket হবে, কে ঠিক করবেন, গবেষককে কখন জানানো হবে।
  5. আইনি পর্যালোচনা: নীতিটি আইনজীবী দেখবেন। তৃতীয় পক্ষের system-এর অনুমতি আপনি দিতে পারবেন না।

Bug bounty কখন, আর কীভাবে

Bounty শুরুর আগে নিজেকে তিনটি প্রশ্ন করুন: scan আর ভেতরের পরীক্ষায় সহজ ত্রুটি কি কমেছে? প্রতি সপ্তাহে কতগুলো রিপোর্ট সামলানো যাবে? সমাধান করার ক্ষমতা আছে তো? উত্তর “না” হলে আগে VDP. অনেকে প্রথমে সীমিত আমন্ত্রিত প্রোগ্রাম করেন, পরে প্রকাশ্য। HackerOne, Bugcrowd বা Intigriti-র মতো প্ল্যাটফর্ম এই কাজ সহজ করতে পারে, আবার নিজেও চালানো যায়। এগুলো উদাহরণ মাত্র।

সবচেয়ে কঠিন অংশ হলো triage: অনেক রিপোর্ট আসে, তার বড় অংশ বাতিল বা duplicate. Scanner-এর ফল বিনা যাচাইয়ে পাঠানো, আর AI-এ বানানো রিপোর্টও বাড়ছে। নিচের toy simulator ছয়টি বানানো রিপোর্ট একটি নির্দিষ্ট ক্রমে পরীক্ষা করে। পুরস্কার এখানে শুধু কাল্পনিক point, কোনো টাকার হিসাব নয়।

// Toy bounty triage on fictional reports. Rules run in a fixed order.
const scope = ['shop.example.com', 'api.example.com'];
const reward = { High: 500, Medium: 150, Low: 50 };   // toy points, not money
const known = new Set(['api.example.com#invoice-access']);   // already tracked

const reports = [
  { id: 'R1', host: 'blog.example.org', bug: 'open-redirect',  sev: 'Low',    repro: true },
  { id: 'R2', host: 'api.example.com',  bug: 'invoice-access', sev: 'High',   repro: true },
  { id: 'R3', host: 'shop.example.com', bug: 'coupon-reuse',   sev: 'Medium', repro: true },
  { id: 'R4', host: 'shop.example.com', bug: 'coupon-reuse',   sev: 'Medium', repro: true },
  { id: 'R5', host: 'shop.example.com', bug: 'scanner-output', sev: 'High',   repro: false },
  { id: 'R6', host: 'api.example.com',  bug: 'staff-export',   sev: 'High',   repro: true,
    copiedRealData: true },
];
function triage(r) {
  if (!scope.includes(r.host)) return ['OUT-OF-SCOPE', 0];
  const key = `${r.host}#${r.bug}`;
  if (known.has(key)) return ['DUPLICATE', 0];
  if (!r.repro) return ['NEEDS-INFO', 0];
  known.add(key);
  if (r.copiedRealData) return ['VALID, POLICY REVIEW', 0];
  return ['VALID', reward[r.sev]];
}
const tally = {};
let total = 0;
for (const r of reports) {
  const [verdict, pts] = triage(r);
  console.log(`${r.id} ${r.bug.padEnd(15)} ${verdict.padEnd(21)} ${pts} pts`);
  tally[verdict] = (tally[verdict] || 0) + 1;
  total += pts;
}
const valid = (tally['VALID'] || 0) + (tally['VALID, POLICY REVIEW'] || 0);
console.log(JSON.stringify(tally));
console.log(`signal: ${valid} valid of ${reports.length}, ` +
            `${(100 * valid / reports.length).toFixed(1)}%; paid ${total} pts`);

ফল: R1 অন্য domain-এর, তাই OUT-OF-SCOPE. R2 আগে থেকেই জানা, তাই DUPLICATE. R3 প্রথম খবর, VALID, 150 pts. একই ত্রুটি নিয়ে R4 এলো পরে, তাই DUPLICATE. প্রথমে যিনি জানান, পুরস্কার তাঁর, এই নিয়মটি নীতিতে আগে লেখা থাকে। R5 scanner-এর ফল, পুনরুৎপাদন হয়নি, তাই NEEDS-INFO. R6-এ ত্রুটিটি সত্য, কিন্তু গবেষক আসল ডেটা কপি করেছেন, তাই VALID, POLICY REVIEW আর আপাতত 0 pts. শেষ লাইন signal: 2 valid of 6, 33.3%. এই অনুপাতই বলে দেয় প্রোগ্রাম চালাতে triage-এ কত মানুষের সময় লাগবে।

প্রোগ্রাম চালানোর নিয়ম

  • সাড়ার সময় মেনে চলুন। প্রথম সাড়া, triage আর পুরস্কারের সময় ঘোষণা করে সেটি রাখুন। নীরবতা গবেষককে রাগিয়ে তোলে।
  • মাত্রা আর পুরস্কারের একটি প্রকাশ্য তালিকা রাখুন। বিরোধ কমে।
  • সীমা ভাঙার ফল আগেই লিখুন। ভাষা স্পষ্ট রাখুন, তবে প্রতিশোধের ভঙ্গিতে নয়।
  • Bounty-কে ঘটনা লুকানোর পথ বানাবেন না। কেউ আসল ডেটা নিয়ে টাকা চাইলে সেটি গবেষণা নয়, incident response-এর বিষয়।
  • Pentest-এর বিকল্প নয়। Bounty অনিশ্চিত আর জনপ্রিয় অংশে ভিড় করে। পরীক্ষা নিশ্চিত কভারেজ দেয়। দুটি একে অন্যের পরিপূরক।

আরও গভীরে: অর্থ-খাতের নিয়ন্ত্রকেরা threat intelligence-নির্ভর red team কাঠামো তৈরি করেছেন, যেমন যুক্তরাজ্যের CBEST আর ইউরোপের TIBER-EU. সেখানে পরীক্ষার গল্প বানানো হয় সেই খাতের ওপর প্রকাশিত হুমকি দেখে, পরিকল্পনায় একটি নিয়ন্ত্রণকারী দল থাকে। মাত্রা-নির্ণয়ে CVSS ছাড়াও Bugcrowd-এর VRT-র মতো প্রকাশিত শ্রেণিবিন্যাস আছে। NIST SP 800-115 ২০০৮ সালের, তাই cloud-এর যুগের বিষয়গুলো সেখানে কম। কাঠামো হিসেবে পড়ুন, চূড়ান্ত তালিকা হিসেবে নয়।

১০ · AI-এর যুগে pentest-এর ব্যবস্থাপনা

AI রিপোর্টের খসড়া, নমুনা নীতি আর developer-এর জন্য ব্যাখ্যা দ্রুত লিখতে পারে। কিন্তু এই পেশার ভিত্তি অনুমতি, প্রমাণ আর দায়। এই তিনটি কোনো মডেলের হাতে দেওয়া যায় না।

AI যা করতে পারেকেন বিপজ্জনককীভাবে যাচাই করবেন
অস্তিত্বহীন CVE নম্বর বা standard-এর ধারা লেখেরিপোর্টের বিশ্বাসযোগ্যতা শেষNVD আর মূল নথি খুলে মিলিয়ে নিন
দুর্বলতার মাত্রা আত্মবিশ্বাসে বাড়িয়ে বা কমিয়ে বলেভুল অগ্রাধিকার, ভুল বাজেটVector নিজে হিসাব করুন, প্রমাণের সাথে মেলান
পুরোনো সমাধান দেয়: MD5, verify=False, chmod 777, খোলা CORSএক ত্রুটি সারাতে নতুন ত্রুটিসমাধানটি নিজের ল্যাবে পরীক্ষা, diff পর্যালোচনা
পরীক্ষায় স্বয়ংক্রিয় agent scope ছাড়িয়ে চলে যেতে পারেআপনার নামে অননুমোদিত কাজ, অপরাধঅনুমতিতে লিখে নিন, মানুষ নজর রাখুন, প্রতিটি কাজ log করুন
পেস্ট করা client-এর প্রমাণ, token, ব্যক্তিগত তথ্য বাইরে যায়চুক্তি ভঙ্গ, ডেটা ফাঁসClient-এর লিখিত অনুমতি ছাড়া পেস্ট নয়, সব মান কাল্পনিক করুন
Bounty-তে AI-এর বানানো ভুয়া রিপোর্ট আসেTriage-এর সময় নষ্টপুনরুৎপাদন আর প্রমাণ বাধ্যতামূলক করুন

নিচের prompt-টি client-এর সংবেদনশীল তথ্য বাদ দিয়ে একটি রিপোর্টের ভাষা পর্যালোচনা করায়, হামলার পদ্ধতি চায় না।

আমি একটি অনুমোদিত penetration test-এর রিপোর্ট লিখছি। নিচের finding কাল্পনিক নামে লেখা, কোনো আসল তথ্য নেই। [এখানে নাম, ঠিকানা, token বাদ দিয়ে finding লিখুন] ১. Executive summary-র জন্য তিন লাইনে এর ব্যবসায়িক প্রভাব লেখো, প্রযুক্তির শব্দ ছাড়া। ২. মালিকের developer যাতে সমাধান করতে পারে, সমাধানের অংশটি স্পষ্ট করো। ৩. কোন দাবি প্রমাণ ছাড়া মনে হচ্ছে, তা দেখাও। ৪. কোনো CVE বা standard-এর নম্বর বানাবে না। নিশ্চিত না হলে বলবে "যাচাই করুন"। ৫. হামলার নতুন কোনো ধাপ বা কৌশল লিখবে না। শুধু প্রতিরক্ষা আর রিপোর্টের ভাষা।

AI ব্যবহারের আগে চেকলিস্ট

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

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

প্র ০১Pentest রিপোর্টে “কোনো গুরুতর ত্রুটি পাওয়া যায়নি” লেখা থাকলে কি system নিরাপদ বলা যায়?

না। বলা যায় শুধু এটুকু: এই দল, এই সময়ে, এই scope-এ, এই পদ্ধতিতে কোনো গুরুতর ত্রুটি পায়নি। Edsger Dijkstra-র বহু-উদ্ধৃত কথাটি নিরাপত্তায়ও খাটে: পরীক্ষা ত্রুটির উপস্থিতি দেখাতে পারে, অনুপস্থিতি নয়। Karger ও Schell-এর ১৯৭৪ সালের মূল্যায়নের পর থেকেই এই সীমাবদ্ধতার কথা আলোচনায় আছে।

কারণগুলো ব্যবহারিক:

  • সময়ের অসমতা। পরীক্ষকের হাতে ১০ দিন, আক্রমণকারীর হাতে যত সময় খুশি। আর আক্রমণকারীকে একটি পথ পেলেই চলে।
  • Scope-এর সীমা। বাদ পড়া payment অংশ, মানুষের ভুল, vendor বা OWASP Top 10-এর বাইরের ব্যবসার যুক্তি হয়তো দেখা হয়নি।
  • সময়ের প্রবাহ। পরীক্ষার পরদিন নতুন release বা নতুন CVE সব বদলে দিতে পারে। রিপোর্ট একটি তারিখের ছবি।
  • পরীক্ষকের দক্ষতা। দুই দল একই system-এ ভিন্ন ফল পেতে পারে।

তাই ভালো রিপোর্টে “সীমাবদ্ধতা” অংশ থাকে, আর ভালো ব্যবস্থাপক “পাস” শব্দটি ব্যবহার করেন না। পরীক্ষা ফলহীন হলে কখনো সেটি ভালো খবর, কখনো scope ছোট ছিল, এমনটিও হতে পারে। কিছু প্রতিষ্ঠান অডিটের জন্য ইচ্ছা করে সহজ scope বেছে নেয়। তখন রিপোর্ট কাগজে ভালো দেখায়, নিরাপত্তা বাড়ায় না। একে কেউ কেউ নিরাপত্তার নাটক (security theater) বলেন।

আসল ব্যবহার হলো রিপোর্টকে চলমান ব্যবস্থার একটি সংকেত হিসেবে দেখা: নিয়মিত scan, secure SDLC, detection, আর সময়ে সময়ে স্বাধীন পরীক্ষা। “কত ত্রুটি পেলাম” না জিজ্ঞেস করে জিজ্ঞেস করুন, “একই শ্রেণির ত্রুটি কি কমছে?”

মূল উপলব্ধি: Pentest নিশ্চয়তার সনদ নয়, একটি নির্দিষ্ট সময়ের নমুনা পরীক্ষা। সীমা জানলেই এর মূল্য বোঝা যায়।

প্র ০২লিখিত অনুমতি থাকার পরও পরীক্ষকেরা কি বিপদে পড়তে পারেন? ২০১৯ সালের Iowa-র ঘটনা কী শেখায়?

২০১৯ সালের সেপ্টেম্বরে যুক্তরাষ্ট্রের Iowa অঙ্গরাজ্যে একটি নিরাপত্তা প্রতিষ্ঠানের দুই পরীক্ষক একটি county courthouse-এ রাতে শারীরিক নিরাপত্তা পরীক্ষার সময় গ্রেফতার হন। প্রকাশিত প্রতিবেদন অনুযায়ী অঙ্গরাজ্যের বিচার বিভাগের প্রশাসন তাঁদের কাজ দিয়েছিল, লিখিত অনুমতিও ছিল। কিন্তু ভবনটি নিয়ে county-র স্থানীয় কর্তৃপক্ষের সাথে এখতিয়ারের প্রশ্ন ওঠে, আর সেখানকার sheriff কাগজটি মানতে রাজি হননি। তাঁরা জেলে রাত কাটান, গুরুতর অভিযোগ আসে। অভিযোগ পরে প্রত্যাহার হয়, কিন্তু ব্যক্তিগত ও পেশাগত মূল্য চুকাতে হয়, আর বিষয়টি দীর্ঘ আইনি লড়াইয়ে গড়ায়।

এখানে শিক্ষাগুলো সরাসরি এই পর্বের সাথে মেলে:

  • কার অধিকার, স্পষ্ট করুন। সই আছে, এটুকু যথেষ্ট নয়। স্বাক্ষরকারীর সত্যিই এই asset-এর ওপর অধিকার আছে কি? ভবন, cloud বা shared hosting, সব জায়গায় একই প্রশ্ন।
  • Deconfliction. কারা জানবেন, আগে ঠিক করুন। নিরাপত্তারক্ষী বা পুলিশ এলে কে ফোনে সাড়া দেবেন? রাতে সেই মানুষটি সত্যিই ফোন ধরেন তো?
  • সীমাহীন শব্দ এড়িয়ে চলুন। অনুমতিপত্রের অস্পষ্ট বাক্য চাপের মুহূর্তে আপনার বিপক্ষে যেতে পারে।
  • পরীক্ষকের সুরক্ষা। শারীরিক পরীক্ষায় অনুমতিপত্র সাথে রাখুন। গ্রেফতারের ঝুঁকি বাস্তব, তাই আইনি সহায়তার পরিকল্পনা আগে করুন।

ঘটনাটি পেশাজগতে বড় আলোচনা তোলে। অনেক প্রতিষ্ঠান এরপর নিজেদের চুক্তি ও প্রক্রিয়া পর্যালোচনা করে। বাংলাদেশে কাজ করলেও প্রশ্নটি একই: লিখিত অনুমতি প্রয়োজনীয়, তবে একমাত্র শর্ত নয়। অনুমতিটি সঠিক ব্যক্তির হতে হবে, আর সংশ্লিষ্ট মানুষকে আগে থেকে জানতে হবে।

মূল উপলব্ধি: অনুমতিপত্র হলো একটি ব্যবস্থার শুরু। অধিকারের সঠিক উৎস আর যোগাযোগের পরিকল্পনা না থাকলে ভালো কাগজও আপনাকে পুরো রক্ষা করে না।

প্র ০৩কেউ আসল ডেটা হাতে নিয়ে টাকা চাইলে, সেটিকে bug bounty-র পুরস্কার হিসেবে মিটিয়ে ফেলা কি বুদ্ধিমানের কাজ?

না, আর এর একটি প্রকাশিত নজির আছে। মার্কিন Federal Trade Commission (FTC)-এর ২০১৮ সালের প্রকাশিত বিবরণ অনুযায়ী, ২০১৬ সালে Uber-এর একটি cloud storage থেকে অনুপ্রবেশকারীরা বড় পরিমাণ গ্রাহক ও চালকের তথ্য সরিয়ে নেয়। তারা একটি code-sharing সাইটে ফাঁস হওয়া access key ব্যবহার করেছিল বলে জানানো হয়। FTC বলে, কোম্পানি তাদের ১ লাখ ডলার দেয় bug bounty প্রোগ্রামের মাধ্যমে, আর ঘটনাটি প্রায় এক বছর গ্রাহক ও FTC-র কাছে প্রকাশ করেনি। পরে FTC-র সাথে আগের সমঝোতাটি সংশোধন হয়, যাতে bug bounty রিপোর্ট সংরক্ষণের শর্তও যুক্ত হয়।

এর পেছনের নীতিগত পার্থক্যটি বুঝুন:

  • গবেষক ন্যূনতম প্রমাণে থামেন। ডেটা কপি করেন না, টাকার শর্ত দেন না, নীতি মেনে জানান।
  • অনুপ্রবেশকারী ডেটা নিয়ে যান, দাম চান। এটি চাঁদাবাজির মতো। “গবেষক” শব্দটি ব্যবহার করলেও ঘটনাটি incident-ই থাকে।

Bounty-র পথে টাকা দিলে কয়েকটি ক্ষতি হয়। প্রথমত, আইনে জানানোর দায়িত্ব থাকলে সেটি পূরণ হয় না। আপনার দেশে প্রযোজ্য নিয়ম আইনজীবীর সাথে দেখতে হবে। দ্বিতীয়ত, ডেটা সত্যিই মুছে গেছে, এই প্রতিশ্রুতি যাচাই করা যায় না। তৃতীয়ত, প্রোগ্রামের বিশ্বাসযোগ্যতা নষ্ট হয়, আর ভালো গবেষকেরা ভুল সংকেত পান। চতুর্থত, ভেতরের মানুষ যদি প্রকাশ না করার সিদ্ধান্ত নেন, ব্যক্তিগত দায়ও উঠতে পারে। ঘটনাটি নিয়ে যুক্তরাষ্ট্রে আদালতেও বিচার হয়।

প্রতিষ্ঠান হিসেবে ঠিক পথ হলো: রিপোর্টটিকে incident হিসেবে নেওয়া, পর্ব ৬-এর সীমা মেনে আইনি পরামর্শ নেওয়া, পর্ব ৬১-র প্রক্রিয়া শুরু করা, এবং bounty-র triage নিয়মে লিখে রাখা যে ডেটা সরানো হয়েছে কি না কীভাবে সামলানো হবে। তাড়াহুড়োয় সিদ্ধান্ত না নিয়ে একজন বাইরের স্বাধীন চোখ রাখুন।

মূল উপলব্ধি: Bug bounty হলো ত্রুটি জানার পথ, ঘটনা ধামাচাপা দেওয়ার পথ নয়। ডেটা সরে গেলে প্রশ্নটি আর পুরস্কারের থাকে না, দায়িত্বের হয়ে যায়।

প্র ০৪Red team-এর কাজ কি SOC-এর কাছে গোপন রাখা উচিত? গোপনীয়তার লাভ আর ঝুঁকি কী?

দুই দিকেই যুক্তি আছে, তাই উত্তরটি লক্ষ্যের ওপর নির্ভর করে। গোপন রাখলে বাস্তব পরীক্ষা হয়: SOC কি নিজে থেকে ধরতে পারে? ঠিক ব্যক্তিকে জানায়? রাতের পালায় কী হয়? আগে জানা থাকলে মানুষ সতর্ক হয়ে যান, আর ফলাফল বাস্তব থাকে না।

কিন্তু ঝুঁকিও বড়:

  • আসল incident গুলিয়ে যাওয়া। কেউ মহড়া ভেবে আসল হামলা উপেক্ষা করতে পারেন। উল্টোটিও হতে পারে: মহড়াকে আসল ভেবে বড় সার্ভিস বন্ধ, বাইরে জানানো, বা পুলিশকে খবর।
  • বিশ্বাসের ক্ষতি। বারবার গোপন পরীক্ষায় “ফেল” হলে blue team-এর মন ভাঙে। মহড়া তখন শেখার বদলে শাস্তি হয়ে যায়।
  • নিরাপত্তা। কেউ না জানলে থামানোর উপায় থাকে না।

তাই সাধারণ সমাধান হলো trusted agent বা একটি ছোট নিয়ন্ত্রণ দল। দুই-একজন জানেন, তাঁরা প্রতিটি সন্দেহজনক ঘটনার সময় যাচাই করেন এটি মহড়া কি না, আর দরকারে থামাতে পারেন। CBEST আর TIBER-EU-র মতো অর্থ-খাতের কাঠামোতেও একটি নিয়ন্ত্রণকারী দলের ধারণা আছে, যারা গোপনীয়তা ধরে রাখে, আবার ঝুঁকিও সামলায়।

আরেকটি পথ হলো কাজ দুই ভাগ করা। প্রথমে গোপন অংশ, যাতে সত্যিকারের detection মাপা যায়। তারপর purple team সভা, যেখানে প্রতিটি কৌশলের সময় দেখে কোন log ছিল, কোন detection rule কেন কাজ করেনি। পরিমাপ হিসেবে “SOC ধরল কি না” দিয়ে শেষ না করে দেখুন কত সময়ে ধরল, কত সময়ে থামাল।

অল্প-পরিণত প্রতিষ্ঠানে গোপন red team প্রায়ই অপচয়। জানা দুর্বলতাই অনেক, আর SOC ছোট। আগে খোলা পরীক্ষা আর tabletop exercise (পর্ব ৬৬) বেশি শেখায়।

মূল উপলব্ধি: গোপনীয়তা একটি উপায়, লক্ষ্য নয়। লক্ষ্য হলো রক্ষকদের শেখা, আর সেই সাথে নিরাপদে থামানোর একটি নিশ্চিত পথ রাখা।

প্র ০৫একটি মাঝারি প্রতিষ্ঠান কি সরাসরি প্রকাশ্য bug bounty শুরু করবে? “Hack the Pentagon” থেকে কী শেখার আছে?

সাধারণত না, আর ব্যাখ্যাটি মজার। ২০১৬ সালে মার্কিন প্রতিরক্ষা দপ্তর “Hack the Pentagon” পাইলট চালায়, যা মার্কিন সরকারের প্রথম bug bounty বলে পরিচিত। প্রকাশিত হিসাব অনুযায়ী প্রায় ১,৪০০ মানুষ নিবন্ধন করেন, আর ১৩৮টি রিপোর্ট বৈধ ও অনন্য বলে গণ্য হয়। প্রথম রিপোর্ট আসে শুরুর কয়েক মিনিটের মধ্যে। তবে লক্ষ করার বিষয় হলো, সেই পাইলট ছিল সময়ে বাঁধা, নির্দিষ্ট প্রকাশ্য সাইটে সীমিত, নিবন্ধিত অংশগ্রহণকারীদের জন্য। আর পরে দপ্তর একটি স্থায়ী vulnerability disclosure পথও চালু করে। অর্থাৎ বড় প্রতিষ্ঠানও সীমা টেনে শুরু করেছে।

একটি মাঝারি প্রতিষ্ঠানের হিসাব করুন। ধরি মাসে ৪০টি রিপোর্ট আসে, ২৫% বৈধ, প্রতিটি যাচাইয়ে আধা ঘণ্টা (সব সংখ্যা অনুমান)। তাহলে মাসে ২০ ঘণ্টা শুধু যাচাই, আর ১০টি বৈধ ত্রুটি। সেই ১০টি ঠিক করার developer আছেন তো? না থাকলে রিপোর্ট জমবে, গবেষক অপেক্ষা করবেন, হতাশা বাড়বে। কেউ কেউ প্রকাশ্যে বলার কথাও ভাবতে পারেন।

তাই একটি পরিণত ক্রম হলো:

  • নিয়মিত vulnerability management আর স্বাধীন pentest দিয়ে সহজ ত্রুটি কমানো।
  • VDP আর security.txt চালু করা। পুরস্কার ছাড়াই খবর আসার পথ তৈরি হয়।
  • ভেতরের triage আর সমাধান-প্রক্রিয়া এক-দুই মাস পরীক্ষা করা।
  • আমন্ত্রিত, সীমিত scope-এর bounty.
  • তারপর প্রকাশ্য প্রোগ্রাম, যদি সামর্থ্য থাকে।

উল্টো যুক্তিও শুনুন। একটি VDP না থাকলে যিনি ত্রুটি পান, তিনি জানানোর পথই পান না। তাই ছোট প্রতিষ্ঠানেরও অন্তত VDP থাকা উচিত, এই পরামর্শ অনেক জায়গায় দেখা যায়। আর বড় bounty ঘোষণা করলেও আপনার system নিরাপদ হয় না, শুধু খবরের প্রবাহ বাড়ে।

মূল উপলব্ধি: Bug bounty একটি সক্ষমতা, বিজ্ঞাপন নয়। যত রিপোর্ট সামলে ঠিক করতে পারবেন, ততটুকুই দরজা খুলুন।

অনুশীলন

সব কাজ কাগজে বা উপরের toy কোডে। কোনো আসল system-এ কিছু চালাবেন না।

  1. হিসাব: একটি কাল্পনিক finding-এর vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N. (ক) ISS = 1 − (1 − 0.22) = 0.22 ধরে base score বের করুন (AV 0.85, AC 0.77, PR 0.85, UI 0.85). (খ) Likelihood 3, impact 2 হলে এই পর্বের স্কেলে ঝুঁকির মাত্রা কী?

    (ক) Impact = 6.42 × 0.22 = 1.4124. Exploitability = 8.22 × 0.85 × 0.77 × 0.85 × 0.85 = 3.8870. যোগফল 5.2994, রাউন্ড-আপে 5.3, Medium.

    (খ) ৩ × ২ = ৬, যা ৫–৯-এর মধ্যে, তাই Medium. এখানে দুটি মাপ মিলে গেছে, তবে সব সময় মেলে না।

  2. ফল অনুমান: উপরের retest_tracker.js-এর নিয়ম ধরুন। F-02 শুরুতে OPEN. ঘটনার ক্রম: দিন ৪০ fix-claimed, দিন ৪৫ retest-fail, দিন ৫০ retest-pass, দিন ৫২ fix-claimed, দিন ৫৮ retest-pass. প্রতিটি ধাপের পরে অবস্থা কী, আর কোন ঘটনাটি প্রত্যাখ্যাত হবে?

    দিন ৪০: OPEN -> FIXED?. দিন ৪৫: FIXED? -> REOPENED. দিন ৫০: retest-pass REJECTED (state REOPENED), কারণ নতুন সমাধানের দাবি ছাড়া retest হয় না। দিন ৫২: REOPENED -> FIXED?. দিন ৫৮: FIXED? -> CLOSED. Medium-এর SLA ৬০ দিন, তাই ৫৮ দিনে সময়ের মধ্যেই বন্ধ।

  3. নকশা ও সমালোচনা: একটি কাল্পনিক ই-মেইল: “ভাই, আমাদের সব site পরীক্ষা করে দিন। আজ রাতেই শুরু করুন। কিছু পেলে WhatsApp করবেন। রিপোর্ট PDF দিলেই হবে, অডিটের জন্য লাগবে, High কিছু রাখবেন না।” এতে কমপক্ষে পাঁচটি সমস্যা ধরুন, আর উত্তরে আপনি কী চাইবেন লিখুন।
    • “সব site”: scope নেই, মালিকানা অজানা।
    • “ভাই” আর WhatsApp: প্রেরকের অধিকার যাচাই হয়নি, লিখিত অনুমতি নেই।
    • “আজ রাতেই”: সময়, time zone, জরুরি যোগাযোগ, backup কিছুই নেই।
    • WhatsApp-এ finding: সংবেদনশীল তথ্য অনিরাপদ পথে।
    • “High রাখবেন না”: ফল আগেই ঠিক করা। এটি স্বার্থের সংঘাত আর পেশাগত সততার প্রশ্ন।

    উত্তরে চাইবেন: system-এর দায়িত্বশীল ব্যক্তির স্বাক্ষরিত অনুমতিপত্র, asset ও মালিকের তালিকা, RoE, NDA, নিরাপদ যোগাযোগের পথ। আর স্পষ্ট বলবেন, মাত্রা প্রমাণ থেকে ঠিক হয়। ঝুঁকি মেনে নিলে সেটিও রিপোর্টেই থাকবে।

  4. Triage আর VDP: bounty_triage.js-এর নিয়ম ধরুন। নতুন একটি রিপোর্ট এলো: { id: 'R7', host: 'shop.example.com', bug: 'coupon-reuse', sev: 'High', repro: true }, আগের ছয়টির পরে। ফল কী? তারপর নিজের কাল্পনিক প্রতিষ্ঠানের জন্য পাঁচ লাইনে একটি VDP-র খসড়া লিখুন।

    Host scope-এ আছে, কিন্তু shop.example.com#coupon-reuse আগেই known-এ, তাই DUPLICATE, 0 pts. মাত্রা High লিখলেও ফল বদলায় না, কারণ চাবিটি ত্রুটির পরিচয়, দাবি করা মাত্রা নয়। বাস্তবে একজন মানুষ দেখবেন, দুটি রিপোর্ট সত্যিই একই ত্রুটি কি না।

    VDP-র খসড়ায় থাকবে: ভেতরের asset (যেমন shop.example.com), নিষিদ্ধ কাজ (সার্ভিস থামানো, অন্যের ডেটায় প্রবেশ, মানুষকে ধোঁকা দেওয়া), ডেটা দেখলে থেমে জানানো, যোগাযোগের পথ আর প্রথম সাড়ার সময়, সৎ গবেষণার প্রতি আপনার অঙ্গীকার। আইনজীবীর পর্যালোচনার কথাও টুকে রাখুন।

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

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

ক্রমএকটি অনুমোদিত pentest-এর ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. প্রয়োজন আর scope ঠিক করা
  2. লিখিত অনুমতি আর rules of engagement স্বাক্ষর
  3. পরীক্ষা চালানো আর প্রমাণ রাখা
  4. রিপোর্ট দেওয়া আর debrief
  5. Developer-এর সংশোধন
  6. Retest আর finding বন্ধ করা

একটি প্রতিষ্ঠান জানতে চায়, তাদের SOC একটি লক্ষ্যভিত্তিক অনুপ্রবেশ চেষ্টা ধরতে আর থামাতে পারে কি না। কোন কাজটি এই প্রশ্নের সঙ্গে সবচেয়ে মানানসই?

  • Vulnerability scan
  • Red team exercise
  • Public bug bounty
  • White box code review

পরীক্ষক শুধু একটি সাধারণ ব্যবহারকারীর test account আর কিছু API নথি পেয়েছেন, source code পাননি। এটি কোন ধরনের পরীক্ষা?

  • Black box
  • White box
  • Grey box
  • Red box

অনুমোদিত পরীক্ষা চলার সময় পরীক্ষক একটি অচেনা admin account দেখলেন, যা সত্যিকারের অনুপ্রবেশের চিহ্ন হতে পারে। প্রথমে তাঁর কী করা উচিত?

  • সব কাজ থামিয়ে কিছু না বদলে RoE-র জরুরি যোগাযোগে জানানো
  • Account-টি মুছে দেওয়া, যাতে ঝুঁকি কমে
  • Account-টি কী করছে, ভেতরে ঢুকে খতিয়ে দেখা
  • চূড়ান্ত রিপোর্টে একটি লাইন লিখে দেওয়া

একটি finding-এর CVSS base score 6.5, likelihood 4, impact 4 (১ থেকে ৫ স্কেলে, গুণফল ১০–১৬ হলে High). তাহলে কোন বক্তব্যটি ঠিক?

  • দুটি মাপের একটি অবশ্যই ভুল
  • CVSS 6.5 মানেই ব্যবসার ঝুঁকি Medium
  • ব্যবসার ঝুঁকি Critical, কারণ 4 × 4 = 16
  • তীব্রতা Medium, কিন্তু প্রতিষ্ঠানের ঝুঁকি High হতে পারে

Developer লিখলেন “F-07 ঠিক করেছি”। একটি পরিণত প্রক্রিয়ায় এরপর finding-এর অবস্থা কী হবে?

  • সঙ্গে সঙ্গে Closed
  • যাচাইয়ের অপেক্ষায়, retest পাস হলে Closed
  • Risk accepted
  • পুরো pentest আবার শেষ হওয়া পর্যন্ত Open

একটি ছোট প্রতিষ্ঠানে কোনো নিরাপত্তা দল নেই, রিপোর্ট নেওয়ার কোনো পথও নেই। বাইরের মানুষের ত্রুটি জানানোর জন্য প্রথম ভালো পদক্ষেপ কোনটি?

  • প্রকাশ্য bug bounty ঘোষণা করা
  • কোনো ঘোষণা না দিয়ে অপেক্ষা করা
  • একটি VDP আর security.txt চালু করা, একজন মালিক ঠিক করা
  • অন্য প্রতিষ্ঠানের system পরীক্ষা করে অনুশীলন করা

শব্দকোষ

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

মনে রাখুন

  1. লিখিত অনুমতি ছাড়া এই কাজ অপরাধ। অনুমতি সঠিক মালিকের হতে হবে, তৃতীয় পক্ষের অংশ আলাদা।
  2. Scan, pentest, red team, bug bounty চারটি আলাদা প্রশ্নের উত্তর। আগে প্রশ্ন, তারপর কাজ বাছাই।
  3. কাজের ভালো-মন্দ ঠিক হয় কাজ শুরুর আগেই: scope, RoE, যোগাযোগ, ডেটা আর থামার শর্ত।
  4. রিপোর্টই পণ্য। CVSS তীব্রতা, ঝুঁকি আলাদা; প্রতিটি দাবির পেছনে প্রমাণ, প্রতিটি finding-এ সমাধান।
  5. Retest-এ বন্ধ, দাবিতে নয়। VDP আগে, bounty পরে। স্বার্থের সংঘাত আগে জানান।

পরের পর্বে: Software-এর ভেতরে নতুন একটি উপাদান ঢুকেছে, AI. পর্ব ৫১-এ দেখব prompt injection, ডেটা ফাঁস আর AI-র সুরক্ষিত ব্যবহার।

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

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