LEVEL 10
কম্পিউটার সিকিউরিটি
Computer Security
এই মডিউল যে প্রশ্নের উত্তর দেয়আমার code correct — কিন্তু কি নিরাপদ? পার্থক্যটা কোথায়?
Security কোনো feature না, এটা একটা property। এই module পুরোটাই defensive ও academic — vulnerability কেন জন্মায় সেই mechanism বোঝা, যাতে আপনি এমন system বানাতে পারেন যেখানে সেগুলো জন্মায় না।
লেসন
- 01Threat Modeling ও STRIDE — কী রক্ষা করছি, কার থেকেSecurity মানে 'সবকিছু রক্ষা করা' নয় — আগে জানতে হয় কী রক্ষা করছি, কার থেকে, আর কতটা রক্ষা করার মূল্য আছে; STRIDE সেই প্রশ্নগুলোকে ছয়টা structured category-তে ভেঙে দেয়, আর least privilege ও defense in depth সারা module জুড়ে ফিরে-ফিরে আসা দুই নীতি এখান থেকেই শুরু।
- 02ক্রিপ্টোগ্রাফির ভিত্তি — চারটা লক্ষ্য, একটা নীতিচারটা security goal — confidentiality, integrity, authenticity, non-repudiation — চেনা, আর Kerckhoffs's Principle মেনে বোঝা যে নিরাপত্তা algorithm-এর গোপনীয়তায় নয়, চাবিতে থাকে; এটাই এই module-এর পুরো crypto toolbox-এর ভিত্তি।
- 03Cryptographic Hash Function — ফিঙ্গারপ্রিন্ট, চাবি ছাড়াইএকই input সবসময় একই fixed-size fingerprint দেয়, এক অক্ষর বদলালে আউটপুট প্রায় অর্ধেক বদলে যায়; কিন্তু collision resistance-এর আসল খরচ birthday paradox-এর কারণে অর্ধেক বিটেই নেমে আসে, আর SHA-1-এর SHAttered ধস প্রমাণ করে theoretical দুর্বলতা কবে practical বিপর্যয়ে বদলায়।
- 04Symmetric Encryption ও Block Cipher Mode — একই চাবি, দুই কাজএকই চাবি এনক্রিপ্ট-ডিক্রিপ্ট দুই-ই করে — AES এই যুগের block cipher, কিন্তু আসল যুদ্ধ mode-এ: ECB পুনরাবৃত্তি ফাঁস করে, CBC/CTR সেটা ঢাকে, GCM এক ধাক্কায় authentication-ও দেয়; nonce reuse করলে সেই নিরাপত্তা এক XOR-এই ধসে পড়ে।
- 05Asymmetric Cryptography — Diffie-Hellman ও RSA, চাবি ছাড়াই চাবি বিনিময়Symmetric encryption-এর অচেনা-দুইজনের-key-ভাগাভাগি সমস্যা সমাধান করে asymmetric crypto — Diffie-Hellman প্রকাশ্য চ্যানেলেই একটা গোপন সংখ্যায় একমত হতে দেয়, RSA public key দিয়ে encrypt আর private key দিয়ে decrypt-এর অসাম্য তৈরি করে; দুইটাই discrete-log/factoring trapdoor-এর ওপর দাঁড়িয়ে, আর বাস্তবে ব্যবহার হয় শুধু একটা ছোট session-key wrap করতে — bulk data-র জন্য এখনও symmetric cipher-ই লাগে।
- 06Digital Signature ও PKI — সই তো হলো, কিন্তু কার সই?Digital signature encryption-এর ভূমিকা উল্টে দেয় — private key দিয়ে sign, public key দিয়ে verify — কিন্তু শুধু প্রমাণ করে 'এই key-র মালিক সাইন করেছে', কে সেই মালিক তা নয়; certificate authority আর X.509 chain-of-trust ঠিক এই ফাঁকটাই ভরাট করে, root থেকে leaf পর্যন্ত signature-এর একটা শৃঙ্খল দিয়ে।
- 07TLS-এর নিরাপত্তা-গ্যারান্টি — কী রক্ষা করে, কীভাবে ভাঙেTLS handshake-এর যান্ত্রিকতা আগের লেসনেই দেখা হয়েছে — আজকের প্রশ্ন সেই যন্ত্র আসলে কী প্রতিশ্রুতি দেয়, সেই প্রতিশ্রুতি কোথায় কোথায় ভাঙে (validation-skip, downgrade, Heartbleed), আর কেন ephemeral key exchange ছাড়া কোনো প্রতিশ্রুতিই ভবিষ্যতে টেকে না।
- 08Password Storage — Salt, ধীর KDF, আর Rainbow Table-এর বিরুদ্ধে যুদ্ধপ্রমাণ করে দেখানো হয় কেন প্লেইন SHA-256(password) নিমেষেই precomputed dictionary দিয়ে ভাঙা যায়, কীভাবে একটা random per-user salt সেই precomputation-কে অকার্যকর করে দেয়, আর কেন salting-এর পরেও bcrypt/Argon2-এর মতো ইচ্ছাকৃত-ধীর, memory-hard KDF ছাড়া targeted brute-force ঠেকানো যায় না — সাথে constant-time comparison আর pepper-এর ভূমিকাও বাস্তব সংখ্যায় যাচাই করা হয়।
- 09Authentication — সেশন কুকি, JWT, আর OAuth2-এর যুদ্ধক্ষেত্রPassword যাচাইয়ের পর সার্ভার একটা opaque session ID (stateful, DB-lookup লাগে, instant revoke) অথবা একটা self-contained, signed JWT (stateless, DB-lookup লাগে না, revoke কঠিন) ইস্যু করে — আর alg:none-এর মতো একটা signature-check বাদ পড়া bug পুরো মডেলটাই ভেঙে দিতে পারে, যেখানে OAuth2/OIDC এই দুই primitive-এর ওপর দাঁড়িয়ে delegated authorization আর identity সমাধান করে।
- 10Authorization — কে কী করতে পারবে, RBAC থেকে ABAC পর্যন্তAuthentication বলে দেয় আপনি কে, authorization বলে দেয় আপনি কী করতে পারবেন — RBAC সেই সিদ্ধান্ত role-এর মাধ্যমে সহজ-অডিটেবল কিন্তু coarse-grained রাখে, ABAC policy দিয়ে attribute-ভিত্তিক সূক্ষ্ম সিদ্ধান্ত দেয় কিন্তু audit করা কঠিন করে, আর IDOR — শুধু ID বদলে অন্যের রিসোর্স পাওয়া — থেকে যায় বাস্তব জগতের সবচেয়ে সাধারণ authorization bug।
- 11Stack Buffer Overflow — Return Address দখল করার ক্লাসিক কৌশলএকটা fixed-size stack buffer-এ bounds-unsafe copy attacker-controlled ডেটা দিয়ে উপচে দিলে overflow-এর tail সরাসরি saved return address-কে ওভাররাইট করে দেয় — আর ret অন্ধভাবে সেই মান বিশ্বাস করেই জাম্প করে, তাই একটা সাধারণ copy-বাগ পুরো control flow-এর দখল হয়ে যায়।
- 12Stack Canary, ASLR, NX Bit, CFI — Mitigation-এর চার স্তরStack canary return address ছোঁয়ার আগেই overflow ধরে, ASLR ঠিকানা-অনুমানকে সংখ্যাগতভাবে কঠিন করে, NX bit injected shellcode বন্ধ করে, আর CFI প্রতিটা জাম্প-টার্গেট যাচাই করে — প্রতিটাই আগের লেসনের একটা নির্দিষ্ট ধাপ থামায়, কোনোটাই একা যথেষ্ট না, কিন্তু চারটা একসাথে স্ট্যাক করলে attacker-কে একইসাথে একাধিক স্বাধীন bypass চেইন করতে হয়।
- 13Use-After-Free ও Double-Free — মৃত মেমরির উপর দাঁড়িয়ে থাকা পয়েন্টারfree() করা মেমরি খালি হয় না — শুধু free-list-এ ফিরে যায়, ডেটা আর pointer দুটোই অক্ষত থাকে; এই একটা ফাঁক use-after-free-কে সম্ভব করে, আর double-free সেই একই free-list-কে corrupt করে malloc-কে attacker-নির্ধারিত arbitrary address ফেরত দিতে বাধ্য করতে পারে — আজ এই দুটোই browser আর kernel-এর সবচেয়ে বড় vulnerability class।
- 14Integer Overflow-এর নিরাপত্তা পরিণতি — সংখ্যা থেকে Heap Corruption পর্যন্তএকটা allocation-size calculation বা length-check-এ ঘটা integer wraparound যখন malloc()-এর ইনপুট বা memcpy-র size প্যারামিটার হয়ে যায়, তখন সংখ্যার একটা নিরীহ 'ভুল উত্তর' সরাসরি একটা heap buffer overflow-এ পরিণত হয় — আজকের লেসনে এই combo-bug প্যাটার্নটা toy heap আর প্রকৃত, চালিয়ে-দেখা সংখ্যা দিয়ে প্রমাণ করে দেখানো হবে, memory-safety আর্কের শেষ অধ্যায় হিসেবে।
- 15Injection Attacks — কোড আর ডেটা যখন একই স্ট্রিংSQL injection, command injection, আর SSTI — তিনটাই আসলে একই ভুলের তিনটা পোশাক: untrusted ডেটাকে সরাসরি একটা interpreter-এর CODE/SYNTAX string-এ বসিয়ে দেওয়া; সমাধানও একটাই — ডেটা আর syntax-কে কখনো একই চ্যানেলে মিশতে না দেওয়া।
- 16XSS, CSRF, SSRF — সার্ভার যখন ভুল জিনিস বিশ্বাস করেXSS, CSRF, আর SSRF — তিনটা আলাদা আক্রমণ মনে হলেও আসলে একই ভুলের তিনটা রূপ: সার্ভার (বা ব্রাউজার) কোনো না কোনো input-কে বিশ্বাস করে ফেলে যেটার ওপর করা উচিত ছিল না — user-এর দেওয়া HTML, ব্রাউজারের স্বয়ংক্রিয় cookie সংযুক্তি, অথবা attacker-এর দেওয়া URL।
- 17Sandboxing ও Isolation — seccomp, Capabilities, আর SELinuxnamespace আর cgroup একটা process কী দেখতে পায় আর কতটুকু resource ব্যবহার করতে পারে তা নিয়ন্ত্রণ করে, কিন্তু কোন syscall সে আদৌ চেষ্টা করতে পারে তা নিয়ন্ত্রণ করে না — seccomp সেই ফাঁক ভরাট করে syscall allowlist দিয়ে, capabilities root-এর সর্বব্যাপী ক্ষমতাকে ৪১টা গ্রহণযোগ্য bit-এ ভাঙে, আর SELinux-এর মতো Mandatory Access Control root নিজেকেও একটা নীতি-নির্ধারিত সীমার ভেতরে বেঁধে ফেলে — এই পাঁচটা স্তর একসাথেই defense-in-depth-এর বাইরের দেয়াল তৈরি করে।
- 18Side-Channel Attack, Spectre, Meltdown — যখন CPU নিজেই গোপন কথা ফাঁস করেএকটা প্রোগ্রাম গাণিতিকভাবে নিরাপদ হয়েও শুধু কতক্ষণ সময় নিচ্ছে বা কোন cache line স্পর্শ করছে তা দিয়েই গোপন তথ্য ফাঁস করতে পারে — timing আর cache-timing side channel থেকে শুরু করে দেখা যায় speculative execution-এর architectural rollback কীভাবে microarchitectural cache state আড়াল করে না, আর ঠিক এই ফাঁকটাই Meltdown আর Spectre ব্যবহার করে, প্রথমটা KPTI দিয়ে বন্ধ করা গেলেও দ্বিতীয়টা branch-prediction মেকানিজমের মৌলিক প্রকৃতির কারণে আজও সম্পূর্ণ সমাধানহীন।
- 19Supply Chain Security — যখন দুর্বলতম লিংক আপনার কোড না, আপনার dependency-র dependencyআপনার কোড নিখুঁত হলেও, সেই কোড যে শত-হাজার dependency-র ওপর দাঁড়িয়ে আছে তাদের একটাও malicious হলে পুরো ভরসা ধসে পড়ে — xz-utils-এর দুই-বছরের social-engineering backdoor আর dependency confusion-এর 'সর্বোচ্চ version জেতে' bug দুইটাই প্রমাণ করে আধুনিক আক্রমণকারীরা এখন কোড না, ভরসার সম্পর্কটাকেই টার্গেট করছে।
- 20Secure Code Review — যেভাবে ভাঙা যায়, সেভাবেই পড়াSecurity review মূলত একটা mindset shift — "এটা কাজ করে কিনা" থেকে "এটা কীভাবে ভাঙা যায়" — আর সেই shift-কে trust-boundary-ভিত্তিক checklist দিয়ে ব্যবহারযোগ্য বানানো যায়; একটা ৩৫-লাইনের বাস্তবসম্মত কোডে SQL injection, IDOR, আর unsalted password hash — তিনটা bug হাতে-কলমে খুঁজে, module-এর আগের লেসনগুলোর নির্দিষ্ট mitigation দিয়ে ফিক্স করে দেখানো হয়েছে, আর দেখানো হয়েছে কেন এই দক্ষতা একবার শেখা checklist না, বরং প্রতিটা diff পড়ার একটা স্থায়ী অভ্যাস।
যা যা থাকছে
- Threat modeling — STRIDE, attack surface
- Security principles — least privilege, defense in depth
- Cryptography fundamentals ও Kerckhoffs principle
- Hash functions ও collision resistance
- Symmetric encryption — AES, block modes, GCM
- Asymmetric — RSA, ECC, Diffie-Hellman
- Digital signatures ও PKI
- TLS নিরাপত্তার দিক থেকে
- Password storage — bcrypt, argon2, salting
- Authentication — sessions, JWT, OAuth2, OIDC
- Authorization — RBAC, ABAC
- Memory safety — buffer overflow mechanism
- Stack canaries, ASLR, NX, CFI
- Use-after-free ও double free
- Integer overflow vulnerabilities
- Injection — SQL, command, template
- XSS, CSRF, SSRF
- Sandboxing — seccomp, capabilities, SELinux
- Side channels ও Spectre/Meltdown-এর ধারণা
- Supply chain ও dependency risk
- Secure coding ও code review
প্রজেক্ট
Crypto Primitives Lab
●●●●○SHA-256, AES mode, DH key exchange নিজে implement (শেখার জন্য)।
Overflow Lab (VM-তে)
●●●●○নিয়ন্ত্রিত পরিবেশে overflow দেখা, তারপর প্রতিটা mitigation চালু করে ব্যর্থ হতে দেখা।
Threat Model Document
●●●○○নিজের একটা project-এর পূর্ণ threat model লেখা।
Hardened HTTP Server
●●●●○নিজের server-এ TLS, rate limit, input validation, seccomp।