Foundationপ্রথম নীতি থেকে
LEVEL 10কঠিন~১২ ঘণ্টা

Threat Model Document

Threat Model Document

নিজের কোনো প্রজেক্টের জন্য একটা সম্পূর্ণ, পেশাদার-মানের threat model document লিখুন — system overview থেকে STRIDE pass, risk ranking, আর প্রতিটা threat-কে module-এর নির্দিষ্ট lesson-এ mitigation হিসেবে map করা পর্যন্ত।

মাইলস্টোন

আগে যা পড়া দরকার

কেন এই প্রজেক্ট

আগের লেসনে STRIDE শিখেছেন NoteShare নামের একটা কাল্পনিক system দিয়ে — পড়া সহজ, কারণ example-টা কেউ একজন আগে থেকেই সাজিয়ে দিয়েছে। আসল পরীক্ষা তখনই শুরু হয় যখন সামনে কেউ diagram এঁকে দেয় না, কেউ বলে দেয় না কোন আটটা row হবে — শুধু আপনার নিজের, অসম্পূর্ণ, half-documented কোনো প্রজেক্ট থাকে, আর প্রশ্নটা থাকে: এখানে ঠিক কী ভুল হতে পারে?

এই প্রজেক্টে কোনো নতুন কোড লিখবেন না। বরং সবচেয়ে কঠিন এবং সবচেয়ে কম-অনুশীলিত দক্ষতাটা অনুশীলন করবেন — নিজের বা পরিচিত কোনো real system-এর জন্য গোড়া থেকে শেষ পর্যন্ত একটা সম্পূর্ণ threat model document লেখা, এমনভাবে যা আসলেই একটা engineering team ব্যবহার করতে পারবে। প্রতিটা section-এ একটা করে “worked example” থাকবে — একটা illustrative SaaS note-taking app যাকে আমরা এখানে QuickNote বলব (আগের লেসনের NoteShare-এরই একটা বড়, বাস্তবঘেঁষা সম্প্রসারণ — search, password-reset email, আর session store যোগ করা হয়েছে) — কিন্তু আসল deliverable সেটা না, আসল deliverable আপনার নিজের প্রজেক্টের document।

আর সবচেয়ে গুরুত্বপূর্ণ প্রাপ্তিটা document-টা নয়, অভ্যাসটা। এই মডিউলের বাকি ১৯টা লেসন — cryptography থেকে memory safety পর্যন্ত — প্রতিটাই একটা নির্দিষ্ট mitigation শেখায়। কিন্তু কোন mitigation কোথায় দরকার, সেই প্রশ্নের উত্তর কোনো লেসন একা দেয় না — সেটা দেয় থ্রেট মডেল। এই প্রজেক্ট শেষ হলে আপনার হাতে থাকবে একটা reusable skill: যেকোনো নতুন system দেখে, প্রায় যান্ত্রিকভাবে, কোথায় বেশি বিনিয়োগ করবেন সেই সিদ্ধান্ত নেওয়া।

ধাপে ধাপে

১. System overview ও scope

প্রথমেই ঠিক করুন কী নিয়ে লিখছেন — একটা গোটা company না, একটা নির্দিষ্ট system বা service। খুব বড় scope নিলে document কখনো শেষ হবে না; খুব ছোট নিলে trust boundary-ই থাকবে না বিবেচনা করার মতো। ভালো scope-এর আকার: একটা backend service, একটা mobile app + তার API, বা একটা নির্দিষ্ট নতুন feature যেটা কয়েকটা component ছুঁয়ে যায়।

Overview section-এ চারটা জিনিস লিখুন:

  1. এক-প্যারাগ্রাফ বর্ণনা — system কী করে, কারা ব্যবহার করে
  2. Component/service তালিকা — প্রতিটা আলাদা প্রসেস, database, third-party integration যার সাথে system কথা বলে
  3. Adversary model — কে আক্রমণ করতে পারে? (anonymous external, authenticated user, insider/compromised-service — আগের লেসনের তিন স্তর মনে করুন)
  4. Trust boundary তালিকা — কোথায় কোথায় বিশ্বাসের স্তর বদলায়

নিজের প্রজেক্ট না থাকলে, বা এখনো ছোট বলে যথেষ্ট জটিল না মনে হলে, QuickNote-কে নিজের প্রজেক্ট ধরে পুরো ব্যায়ামটা করুন — কাঠামোটা শিখে নেওয়াই আসল লক্ষ্য।

Worked example — QuickNote system overview:

QuickNote একটা note-taking web app। User account বানিয়ে login করে, note লেখে, ছবি/PDF attach করে, চাইলে একটা note অন্য কাউকে link দিয়ে share করে, আর নিজের সব note-এর ভেতর keyword দিয়ে search করতে পারে। Password ভুলে গেলে email-এ reset link পাঠানো হয়। একজন admin user-account manage করে।

Componentধরনকাজ
Web App / Backend APIProcessসব business logic — auth, note CRUD, search, share
Database (Postgres)Data storeUser, note, session-metadata
File Storage (S3-জাতীয়)Data storeUploaded ছবি/PDF
Session Store (Redis)Data storeActive session token → user-id lookup
Admin PanelProcessUser-account management (আলাদা privileged UI)
Email/SMTP ServiceExternal (third-party)Password-reset email পাঠানো
BrowserExternal entityAnonymous visitor বা logged-in user

Adversary model তিন স্তর: (১) anonymous internet visitor, (২) authenticated user যে অন্য user-এর ডেটা বা admin-ক্ষমতা চায়, (৩) কোনো একটা compromised dependency বা internal service (উদাহরণ: image- processing library-তে RCE)।

Checkpoint: আপনার overview section-এ component তালিকা, adversary model, আর কমপক্ষে দুইটা trust boundary স্পষ্টভাবে লেখা আছে কিনা যাচাই করুন — কেউ আপনাকে না চিনেও শুধু এই section পড়ে system-টা কল্পনা করতে পারলে section-টা যথেষ্ট।

২. Asset ও data classification

প্রতিটা system-এ কিছু জিনিস আছে যা হারালে বা ফাঁস হলে বাস্তব ক্ষতি হয় — সেগুলোই asset। প্রতিটা asset-কে অন্তত তিনটা প্রশ্নে classify করুন: এটা কী ধরনের ডেটা (credential / PII / business data / availability)? কে দেখতে পারবে (public / internal / owner-only / admin-only)? ফাঁস বা নষ্ট হলে ক্ষতির মাত্রা কেমন (low / medium / high / critical)?

Worked example — QuickNote asset classification:

Assetধরনদেখতে পারবেফাঁস হলে ক্ষতি
Password hashCredentialকেউ না (সরাসরি)Critical — offline crack চেষ্টা সম্ভব হয়
Session tokenCredentialশুধু owner (browser cookie-তে)Critical — সরাসরি account takeover
Note contentBusiness data / possibly PIIOwner + যাদের সাথে share করাHigh — ব্যক্তিগত/গোপনীয় তথ্য থাকতে পারে
Uploaded fileBusiness dataOwner + share-প্রাপ্তHigh — একই কারণে note content-এর মতো
User emailPIISystem + user নিজেMedium — enumeration/phishing-এ ব্যবহারযোগ্য
Audit logBusiness dataAdmin-onlyMedium — না থাকলে repudiation, ফাঁস হলে activity-pattern leak
Service availabilityAvailabilityসবাই (uptime)Medium-High — ব্যবসা-নির্ভর কতটা তার ওপর নির্ভর করে

লক্ষ্য করুন classification-টা শুধু “সব গুরুত্বপূর্ণ” বলে থেমে থাকে না — password hash আর user email দুইটাই sensitive কিন্তু একই মাত্রার না, আর এই পার্থক্যটাই পরের ধাপে risk prioritization-কে দিক দেখাবে।

Checkpoint: আপনার asset তালিকায় কমপক্ষে একটা credential-শ্রেণির, একটা PII/business-data-শ্রেণির, আর availability নিজেই — এই তিন ধরনের asset আলাদা row হিসেবে আছে কিনা দেখুন।

৩. Data flow diagram

Diagram-এর লক্ষ্য জটিল না — চারটা shape যথেষ্ট: external entity (box, system-এর বাইরের কেউ — browser, third-party service), process (round-corner box, ডেটা নিয়ে কিছু করে), data store (দুই-লাইনের box, ডেটা জমা রাখে), আর data flow (তীরচিহ্ন, ডেটা একদিক থেকে আরেকদিকে যায়)। যেখানে তীর একটা trust-level থেকে আরেকটায় পার হয়, সেখানে একটা trust boundary লাইন আঁকুন — এই লাইন পার-হওয়া প্রতিটা তীরই পরের ধাপে STRIDE-এর candidate।

Worked example — QuickNote data flow diagram:

                    trust boundary #1 (internet ↔ app)
                    ═══════════════════════════════════
 ┌───────────┐      login/search/share    ┌──────────────┐
 │  Browser  │ ─────────────────────────► │  Backend API  │
 │(anon/user)│ ◄───────────────────────── │  (process)    │
 └───────────┘                            └───────┬───────┘
                                                    │
                    ┌───────────────┬───────────────┼───────────────┐
                    ▼               ▼               ▼               ▼
             ┌────────────┐  ┌────────────┐  ┌────────────┐  ┌────────────┐
             │  Postgres  │  │File Storage│  │   Redis    │  │ SMTP/Email │
             │(data store)│  │(data store)│  │(data store)│  │ (external) │
             └────────────┘  └────────────┘  └────────────┘  └────────────┘

                    trust boundary #2 (app ↔ admin)
                    ═══════════════════════════════
 ┌───────────┐      manage users          ┌──────────────┐
 │   Admin   │ ─────────────────────────► │ Admin Panel  │──► Postgres
 │(operator) │ ◄───────────────────────── │  (process)    │
 └───────────┘                            └──────────────┘

                    trust boundary #3 (app ↔ third-party)
                    ═══════════════════════════════════════
                    Backend API ──reset-email──► SMTP Service (বাইরের, নিয়ন্ত্রণের বাইরে)

তিনটা trust boundary — লেসনে দুইটা ছিল (internet↔app, app↔admin), এখানে তৃতীয়টা যোগ হলো কারণ SMTP service একটা third-party — সেই বিশ্বাসের মাত্রা internal component-এর চেয়ে ভিন্ন, তাই সেটাও নিজের মতো একটা boundary।

Checkpoint: ডায়াগ্রামে প্রতিটা component অন্তত একবার আসছে কিনা, আর প্রতিটা trust boundary-পার-হওয়া arrow স্পষ্টভাবে চিহ্নিত কিনা যাচাই করুন — যা ডায়াগ্রামে নেই তা STRIDE pass-এ ভুলে যাওয়ার সবচেয়ে বড় কারণ।

৪. STRIDE pass — প্রতিটা component-এ, একটাতেও নয়

এইটাই document-এর সবচেয়ে ভারী অংশ। আগের লেসনের নিয়মটা মনে করুন — প্রতিটা element-এ STRIDE-এর প্রাসঙ্গিক subset প্রশ্ন করা, “প্রযোজ্য না” হলেও সেটা একটা লেখা সিদ্ধান্ত, চুপচাপ বাদ দেওয়া না। এবার সেটা পুরো diagram-এর ওপর সিস্টেমেটিকভাবে করুন — শুধু একটা component না, প্রতিটা component আর প্রতিটা boundary-crossing flow-এ।

Worked example — QuickNote-এর সম্পূর্ণ STRIDE pass:

আগের লেসনের আটটা row-এর ওপর ভিত্তি করে, এখানে নতুন component (search, email, session store)-এর জন্য threat যোগ করে পুরো তালিকাটা দাঁড় করানো হলো:

ComponentSTRIDEনির্দিষ্ট threatMitigation
Session / loginSpoofingPredictable token বা credential-stuffing দিয়ে impersonationRandom session id, rate-limit, MFA
Note content (write path)TamperingIDOR — note_id বদলে অন্যের note editPer-object ownership check প্রতিটা write-এ
Note content (write path)TamperingString-concat query দিয়ে SQL injectionসবসময় parameterized query
Delete/upload actionRepudiationকে করল প্রমাণ নেই, অস্বীকার করা যায়Append-only audit log, আলাদা storage
File storageInformation DisclosureSequential path enumerate করে অন্যের ফাইল দেখাRandom storage key + per-access permission check
Upload endpointDenial of ServiceSize-limit-হীন upload দিয়ে disk/CPU নিঃশেষSize limit, rate limit, processing timeout
Uploaded file servingElevation of PrivilegeWebroot-এ script হিসেবে চালানোWebroot-বাইরে storage, fixed content-type
Admin panelElevation of Privilegeশুধু URL-secrecy, কোনো role-check নেইExplicit role-check middleware
Search endpointTamperingString-concat search query দিয়ে SQL injectionParameterized query / ORM query-builder
Search endpointInformation DisclosureOwner-filter ছাড়া search অন্য user-এর note ফেরত দেয়প্রতিটা search query-তে বাধ্যতামূলক user_id filter
Email/SMTP flowInformation DisclosureReset-response ভিন্ন হলে (email আছে/নেই) account enumeration সম্ভবইমেইল থাকুক বা না থাকুক একই generic response
Email/SMTP flowDenial of ServiceRate-limit ছাড়া বারবার reset-request পাঠিয়ে email-bombing বা SMTP quota শেষPer-account ও per-IP rate limit reset-endpoint-এ
Session store (Redis)Information DisclosureAuth ছাড়া internal network-এ session store expose, compromised service সব session পড়তে পারেRedis-এ auth চালু, network segmentation, internal-only access
Session store (Redis)Denial of ServiceTTL ছাড়া session জমে memory নিঃশেষপ্রতিটা session-এ expiry/TTL, eviction policy

চৌদ্দটা row — আগের আটটার ওপরে নতুন ছয়টা, কারণ নতুন component মানেই নতুন প্রশ্ন করার জায়গা। লক্ষ্য করুন প্রতিটা component অন্তত একবার, আর কিছু component (search, email, session store) একাধিকবার আসছে — কারণ একটা component-এ একাধিক STRIDE category প্রযোজ্য হতে পারে, সেটাই স্বাভাবিক।

নিজের document লেখার সময় প্রতিটা component-এর পাশে ছয়টা অক্ষরই মনে-মনে বলে যান — Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, Elevation of Privilege — এমনকি “এখানে প্রযোজ্য না” হলেও এক লাইনে কেন লিখে রাখুন, ছয় মাস পরে সেই যুক্তিটাই আবার মনে করিয়ে দেবে কেন কিছু বাদ দেওয়া হয়েছিল।

Checkpoint: আপনার document-এ কমপক্ষে পাঁচটা component-এর জন্য সবগুলো STRIDE category বিবেচনা করা হয়েছে কিনা যাচাই করুন — এমনকি “প্রযোজ্য না” লেখা row-ও গণনায় ধরুন, শুধু “চিন্তা করা হয়েছে” প্রমাণ থাকাই দরকার।

৫. Risk prioritization

চৌদ্দটা threat একসাথে ঠিক করার বাজেট কারও নেই — তাই এবার র‍্যাংক করুন। সহজ সূত্র: Likelihood (১-৫) × Impact (১-৫) = Risk Score। Likelihood মাপুন — কতটা সহজে exploit করা যায়, adversary-র কতটুকু ক্ষমতা লাগে। Impact মাপুন — asset classification (ধাপ ২) থেকে সরাসরি টানুন, critical asset ছুঁলে impact বেশি।

Worked example — QuickNote risk ranking (উপরের তালিকা থেকে শীর্ষ ছয়টা):

ThreatLikelihood (১-৫)Impact (১-৫)Scoreর‍্যাংক
Note-edit IDOR (Tampering)৪ — কোনো special tool লাগে না, শুধু id বদলানো৫ — অন্য user-এর ডেটা সরাসরি বদলে যায়২০১
Search/note SQL injection (Tampering)৩ — চেনা payload, কিন্তু ORM ব্যবহার হলে auto-block৫ — পুরো database-এ read/write১৫২
Admin panel role-check অনুপস্থিত (EoP)২ — URL গুঁজে পাওয়া লাগে৫ — পুরো admin ক্ষমতা১০৩
Password-reset user enumeration (Info Disclosure)৪ — স্বয়ংক্রিয়ভাবে scan করা সহজ৩ — সরাসরি takeover না, কিন্তু targeted attack-এর প্রথম ধাপ১২৩ (tie)
File-path enumeration (Info Disclosure)৩ — sequential id অনুমান৪ — private file দেখা যায়১২৩ (tie)
Session store DoS — TTL নেই (DoS)২ — সময় লাগে জমতে৩ — availability কমে, ডেটা হারায় না৬৬

র‍্যাংকিং-এর সিদ্ধান্ত স্পষ্ট এখন — IDOR আর SQL injection প্রথমে fix হবে, session-TTL সবার শেষে। এইটাই risk-prioritization-এর আসল কাজ: “সব ঠিক করব” থেকে “এই দুইটা আগে, বাকিগুলো এই ক্রমে” — একটা বাস্তব sprint-planning-এ অনুবাদযোগ্য সিদ্ধান্তে বদলে দেওয়া।

Checkpoint: আপনার document-এর সবগুলো threat-এর একটা risk-score আছে, আর top-৩ threat আলাদাভাবে highlight করা আছে কিনা যাচাই করুন — স্কোর ছাড়া তালিকা শুধু একটা brainstorm, স্কোর-সহ তালিকা একটা কাজের-পরিকল্পনা।

৬. Mitigation mapping — module-এর lesson-গুলো এবার কাজে লাগবে

এতদিন যা শিখেছেন সেটার আসল পরীক্ষা এই ধাপ — প্রতিটা উল্লেখযোগ্য threat-এর পাশে শুধু “ঠিক করব” লিখলে চলবে না, ঠিক কোন technique, আর সেই technique-টা এই module-এর কোন লেসনে শেখানো হয়েছে তা নাম করে লিখুন। এটাই document-কে “ভালো নিয়ত”-এর তালিকা থেকে actionable engineering-plan-এ বদলে দেয়।

Worked example — QuickNote mitigation mapping (মডিউলের লেসন-নাম-সহ):

ThreatMitigation techniqueকোন লেসনে শেখা
Note-edit IDORপ্রতিটা write-এ per-object ownership/role checksecurity/authorization
Search/note SQL injectionParameterized query, কখনো string-concat নাsecurity/injection-attacks
Admin panel-এ role-check অনুপস্থিতExplicit role-check middleware, URL-secrecy নাsecurity/authorization
Password-reset user enumerationUniform response, timing-consistent handlingsecurity/authentication
Session token predictable/spoofableCryptographically random token, HttpOnly+Secure+SameSite cookie flagsecurity/authentication, security/cryptography-fundamentals
Password hash দুর্বল/plaintextAdaptive hash (bcrypt/argon2), salt, work-factorsecurity/password-storage
File-path enumerationRandom storage key (UUID/CSPRNG), owner-checksecurity/hash-functions, security/cryptography-fundamentals
Uploaded file-content tamper/integrityContent checksum যাচাই আপলোড ও ডাউনলোডেsecurity/hash-functions
Note content transport-এ eavesdropTLS বাধ্যতামূলক, weak cipher বন্ধsecurity/tls-security
Repudiation — কে delete করল প্রমাণ নেইAppend-only, hash-chained audit logsecurity/hash-functions, security/digital-signatures-pki
Note-এ malicious script injected হয়ে অন্য user-এর browser-এ চলাOutput encoding, Content-Security-Policysecurity/xss-csrf-ssrf
Share-link click-এ state-changing action জোর করে করানোCSRF token, SameSite cookiesecurity/xss-csrf-ssrf
File-preview ফিচার internal URL fetch করেSSRF-প্রতিরোধী URL validation, allowlistsecurity/xss-csrf-ssrf
Image-processing native library-তে crafted-file crashBounds-checked parsing, fuzz-testingsecurity/memory-safety-buffer-overflow
File-size check integer overflow দিয়ে bypassSafe-arithmetic check, unsigned-overflow guardsecurity/integer-overflow-vulnerabilities
Native extension-এ freed মেমরি আবার ব্যবহার (crash/RCE)Ownership discipline, sanitizer-চালিত টেস্টsecurity/use-after-free-double-free
উপরের সব native-code bug-এর blast radius কমানোStack canary, ASLR, NX, CFI বিল্ড-ফ্ল্যাগsecurity/mitigations-canaries-aslr-nx-cfi
Image-processing subprocess পুরো host-এ RCE ঘটালেSubprocess sandbox/isolation, least-privilege process usersecurity/sandboxing-isolation
Third-party npm/pip dependency-তে backdoor বা known-CVEDependency pinning, lockfile audit, SBOMsecurity/supply-chain-security
Encrypted file-at-rest দরকার (compliance/sensitivity)Symmetric encryption, key-rotationsecurity/symmetric-encryption
Share-লিংক-এ end-to-end encrypted note দরকার হলেPublic-key encryption note-content-এর ওপরsecurity/asymmetric-crypto
Merge করার আগে এই সব bug ধরার প্রক্রিয়াChecklist-ভিত্তিক secure code review PR-এsecurity/secure-coding-review
Shared-hosting/cloud VM-এ cross-tenant তথ্য-leak-এর ঝুঁকিInfra নির্বাচনে speculative-execution isolation বিবেচনাsecurity/side-channels-spectre-meltdown

লক্ষ্য করার মতো: প্রতিটা row-এর ডান কলামে module-এর প্রায় প্রতিটা লেসন অন্তত একবার এসেছে। এটাই এই প্রজেক্টের গোপন উদ্দেশ্য — আপনি সবেমাত্র পুরো security module শেষ করেছেন, কিন্তু আলাদা-আলাদা লেসনে শেখা টুকরাগুলো এখনো একটা connected map হয়ে ওঠেনি। Mitigation mapping সেই map-টাকেই কাগজে নামিয়ে আনে।

Checkpoint: আপনার mitigation-mapping টেবিলে risk-prioritization-এ top-৫-এর মধ্যে থাকা প্রতিটা threat-এর জন্য একটা নির্দিষ্ট technique এবং একটা নির্দিষ্ট lesson-slug লেখা আছে কিনা যাচাই করুন — শুধু “encrypt করব” যথেষ্ট না, “কোন লেসনের কোন primitive দিয়ে” পর্যন্ত নির্দিষ্ট হতে হবে।

৭. Document assembly ও review cadence

শেষ ধাপ — এই সাতটা section-কে একটা document-এ জোড়া দিন, আর সবচেয়ে গুরুত্বপূর্ণ, এটাকে living document হিসেবে ট্রিট করুন, একবারের artifact না। তিনটা practical অভ্যাস:

  • Version করুন — প্রতিটা বড় revision-এ একটা version number (v1.0, v1.1…) আর তারিখ, যাতে কেউ জিজ্ঞেস করলে বলতে পারেন “এই threat model কবে শেষবার আপডেট হয়েছিল”
  • Review trigger ঠিক করুন — নতুন major feature, নতুন third-party integration, বা architecture-বদল হলেই এই document ফিরে দেখা; পাশাপাশি একটা নিয়মিত interval (যেমন প্রতি quarter) রাখুন পুরনো অংশ revisit করার জন্য, এমনকি কিছু না বদলালেও — লেসনের চার-প্রশ্ন framework-এর চতুর্থ প্রশ্নটাই (“কাজটা ভালো হলো কিনা”) এই loop-এর উৎস
  • সহজে খুঁজে পাওয়া যায় এমন জায়গায় রাখুন — repo-র সাথে (যেমন docs/threat-model.md), যাতে code-review-এর সময় পাশাপাশি খোলা যায়, কোনো আলাদা wiki-তে হারিয়ে না যায়

Document-এর শেষে একটা ছোট “Open questions / accepted risk” section রাখুন — যে threat-গুলো এখনই fix করার মতো priority পায়নি, কিন্তু সচেতনভাবে accept করা হয়েছে, সেগুলো লিখে রাখুন। এইটাই আগের লেসনের misconception-খণ্ডনের ঠিক প্রয়োগ — “perfect security” লক্ষ্য না, সচেতন সিদ্ধান্ত লক্ষ্য।

Checkpoint: আপনার document-এ একটা version/date header আছে, একটা নির্দিষ্ট review-trigger লেখা আছে, আর কমপক্ষে একটা “accepted risk” সচেতনভাবে লেখা আছে কিনা যাচাই করুন।

নিজেকে চ্যালেঞ্জ করুন

  1. একজন সহকর্মী বা বন্ধুকে দিয়ে আপনার threat model-টা “red-team” করান — উদ্দেশ্য একটাই, কোন component বা flow আপনি একেবারে বাদ দিয়ে গেছেন সেটা খুঁজে বের করা
  2. এমন একটা system থ্রেট-মডেল করুন যেটা আপনি নিজে বানাননি — একটা open-source project-এর README আর architecture-doc পড়ে বাইরে থেকে একটা STRIDE pass চালান, তারপর maintainer-দের security-doc-এর সাথে তুলনা করুন
  3. একই system-এর জন্য STRIDE-এর বদলে একটা হালকা framework (যেমন শুধু “top ৫ প্রশ্ন” checklist) দিয়ে আবার চালান — কোনটা দ্রুত, কোনটা বেশি ফাঁক ধরে, লিখে তুলনা করুন
  4. Risk-prioritization টেবিলটা DREAD (Damage, Reproducibility, Exploitability, Affected users, Discoverability) দিয়ে আবার স্কোর করুন — likelihood×impact-এর র‍্যাংকিং-এর সাথে কতটা মেলে, কোথায় আলাদা হয়
  5. আপনার document-এর mitigation-mapping অংশ থেকে সবচেয়ে high-risk একটা item বেছে নিয়ে বাস্তবে implement করুন — শুধু কাগজে না, কোডে
  6. তিন মাস পরে ক্যালেন্ডারে reminder সেট করে সত্যিকারের review cadence টেস্ট করুন — architecture কতটা বদলেছে, কতগুলো threat এখনো প্রাসঙ্গিক, নতুন কী যোগ করতে হবে

যা এখানে শিখলেন, পরে যেখানে লাগবে

এখানেপরে
Scope-করা system overview লেখাDesign-review meeting-এ architecture সংক্ষেপে উপস্থাপন করা
Asset classificationCompliance/audit-এর প্রথম প্রশ্ন — “কী ধরনের ডেটা রাখেন”
Data flow diagram + trust boundarySecurity architect-দের সাথে কথা বলার একটা সাধারণ ভাষা
সিস্টেমেটিক STRIDE passCode-review-এ “এই PR-এ নতুন কোনো threat এল কি” প্রশ্ন করার অভ্যাস
Likelihood × impact prioritizationIncident-এর পরে postmortem-এ severity নির্ধারণ
Lesson-নাম-সহ mitigation mappingTicket লেখার সময় সরাসরি “কোন primitive” নির্দিষ্ট করা
Living-document review cadenceTeam-এর নিয়মিত security-review process ডিজাইন করা