OWASP Top 10

Web Application Security এর ক্ষেত্রে OWASP (Open Worldwide Application Security Project) বিশ্বের সবচেয়ে নির্ভরযোগ্য প্রতিষ্ঠানগুলোর মধ্যে একটি। OWASP সাধারণত কয়েক বছর পরপর Web Application গুলোর সর্বাধিক সাধারণ ও ঝুঁকিপূর্ণ দুর্বলতাগুলোর একটি তালিকা প্রকাশ করে, যা OWASP Top 10 নামে পরিচিত।

এই তালিকাটি ডেভেলপার, সিকিউরিটি ইঞ্জিনিয়ার এবং সিস্টেম অ্যাডমিনিস্ট্রেটরদের জন্য অত্যন্ত গুরুত্বপূর্ণ। এটি দেখায় হ্যাকাররা কীভাবে দুর্বল ওয়েবসাইট ও অ্যাপ্লিকেশন এক্সপ্লয়েট (Exploit) করে এবং কীভাবে এই আক্রমণগুলো প্রতিরোধ করা যায়।

নিচে OWASP Top 10 (2021) এর প্রতিটি ভালনারেবিলিটির বিস্তারিত ব্যাখ্যা দেওয়া হলো:

১. Broken Access Control

Access Control নিশ্চিত করে যে একজন ব্যবহারকারী কেবল তার অনুমোদিত ডেটা বা ফাংশনগুলিতেই অ্যাক্সেস করতে পারবেন। এটি সঠিকভাবে প্রয়োগ করা না হলে একজন অ্যাটাকার অনুমতি ছাড়াই সংবেদনশীল ডেটা দেখতে (Read), পরিবর্তন করতে (Update) বা মুছে (Delete) ফেলতে পারে।

উদাহরণ:

  1. Unauthenticated URL Access:

    • দৃশ্যপট: প্রোফাইল দেখার URL: [https://example.com/user/profile/123](https://example.com/user/profile/123)

    • আক্রমণ: ইউজার URL পরিবর্তন করে .../124 দিলে যদি অন্যের প্রোফাইল দেখা যায়, তাকে IDOR (Insecure Direct Object Reference) বলে, যা Broken Access Control এর একটি রূপ।

  2. Unauthorized Role Escalation (Privilege Escalation):

    • দৃশ্যপট: ফ্রন্টএন্ডে <input type="hidden" name="role" value="user"> আছে।

    • আক্রমণ: ব্রাউজার ডেভ টুলস দিয়ে value পরিবর্তন করে admin করে সার্ভারে পাঠানো। সার্ভার যাচাই না করলে সে অ্যাডমিন এক্সেস পেয়ে যাবে।

প্রতিরোধ (Mitigation):

  • নন-পাবলিক রিসোর্সের জন্য ডিফল্টভাবে 'Deny Access' পলিসি রাখুন।

  • সার্ভার-সাইডে Authorization চেক (যেমন: RBAC - Role-Based Access Control) এনফোর্স করুন।

  • লগআউটের পর সেশন ইনভ্যালিডেট (Invalidate) করুন।

  • API এক্সেস লিমিট (Rate limiting) করুন।

২. Cryptographic Failures

আগে এটি Sensitive Data Exposure নামে পরিচিত ছিল। সংবেদনশীল ডেটা (যেমন: পাসওয়ার্ড, ক্রেডিট কার্ড নম্বর) সঠিকভাবে এনক্রিপ্ট করা না হলে এই ফেইলিউর ঘটে।

উদাহরণ:

  1. Plain Text Password: ডেটাবেজে পাসওয়ার্ড সরাসরি 'mypassword123' হিসেবে সেভ করা।

  2. Weak Algorithms: MD5 বা SHA-1 এর মতো পুরনো হ্যাশিং অ্যালগরিদম ব্যবহার করা, যা সহজেই ব্রুট-ফোর্স করে ভাঙা যায়।

  3. Hardcoded Keys: সোর্স কোডে encryption_key = "1234567890abcdef" লিখে রাখা।

প্রতিরোধ (Mitigation):

  • পাসওয়ার্ডের জন্য Salting সহ শক্তিশালী হ্যাশিং (BCrypt, Argon2, PBKDF2) ব্যবহার করুন।

  • ডেটা আদান-প্রদানের সময় সবসময় HTTPS (TLS 1.2 বা 1.3) ব্যবহার করুন।

  • অপ্রয়োজনীয় সংবেদনশীল ডেটা সংরক্ষণ করা এড়িয়ে চলুন।

  • Environment Variables বা Secrets Manager (যেমন: AWS Secrets Manager, HashiCorp Vault) ব্যবহার করে Key ম্যানেজ করুন।

৩. Injection

যখন কোনো অ্যাপ্লিকেশন ইউজার ইনপুটকে যথাযথভাবে যাচাই বা ফিল্টার না করে সরাসরি সিস্টেমে (ডেটাবেস বা ওএস) এক্সিকিউট করতে পাঠায়, তখন ইনজেকশন ঘটে।

উদাহরণ:

  1. SQL Injection (SQLi): query = "SELECT * FROM users WHERE username = '" + user_input + "';" ইউজার যদি admin' OR '1'='1 দেয়, তবে কোয়েরি শর্ত সবসময় সত্য হয়ে পুরো ডেটাবেস লিক হতে পারে।

  2. Command Injection: Python-এ os.system("ls " + user_input) ব্যবহার করা। ইনপুটে ; rm -rf / দিলে সিস্টেমের ফাইল মুছে যাবে।

প্রতিরোধ (Mitigation):

  • সর্বদা Prepared Statements (Parameterized Queries) এবং ORM ব্যবহার করুন।

  • ইনপুট ভ্যালিডেশন, স্যানিটাইজেশন এবং এসকেপিং (Escaping) নিশ্চিত করুন।

  • Command Execution এর ক্ষেত্রে os.system() এর বদলে নিরাপদ অপশন (যেমন: subprocess.run()) ব্যবহার করুন।

৪. Insecure Design

এটি ডেভেলপমেন্টের ডিজাইনিং বা আর্কিটেকচার পর্যায়ের ত্রুটি। অর্থাৎ, কোডিং ঠিক থাকলেও সিস্টেমের মূল ডিজাইনেই নিরাপত্তার অভাব রয়েছে।

উদাহরণ:

  1. মাল্টি-টেন্যান্ট (Multi-Tenant) অ্যাপ্লিকেশনে ডেটা আইসোলেশনের (Data Isolation) ডিজাইন না থাকা।

  2. পাসওয়ার্ড রিকভারি মেকানিজমে সিকিউরিটি কোয়েশ্চেন (Security Question) হিসেবে সহজেই অনুমানযোগ্য প্রশ্ন (যেমন: আপনার প্রিয় রং কী?) ব্যবহার করা।

প্রতিরোধ (Mitigation):

  • "Secure by Design" নীতি অনুসরণ করুন।

  • সিস্টেম তৈরির আগে Threat Modeling করুন।

  • বিজনেস লজিক সিকিউরিটি টেস্ট করুন।

৫. Security Misconfiguration

এটি অ্যাপ্লিকেশনের সবচেয়ে সাধারণ ত্রুটি। সার্ভার, ক্লাউড বা ডেটাবেস অনিরাপদভাবে কনফিগার করা হলে এটি ঘটে।

উদাহরণ:

  1. Default Credentials: ডেটাবেসের ইউজারনেম admin এবং পাসওয়ার্ড admin123 অপরিবর্তিত রাখা।

  2. Debug Mode: প্রোডাকশনে DEBUG = True রাখা, যার ফলে এরর মেসেজে ডেটাবেস ক্রেডেনশিয়াল বা স্ট্যাক ট্রেস (Stack Trace) লিক হওয়া।

  3. অপ্রয়োজনীয় পোর্ট (যেমন: 21 FTP, 23 Telnet) ওপেন রাখা।

প্রতিরোধ (Mitigation):

  • প্রোডাকশনে যাওয়ার আগে সমস্ত ডিফল্ট ক্রেডেনশিয়াল পরিবর্তন করুন।

  • "Least Privilege" এবং "Server Hardening" নীতি অনুসরণ করুন।

  • প্রোডাকশনে কাস্টম এরর পেজ ব্যবহার করুন এবং Debug Mode বন্ধ রাখুন।

৬. Vulnerable and Outdated Components

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

উদাহরণ:

  1. jQuery 1.7.2 ব্যবহার করা, যেখানে পরিচিত XSS দুর্বলতা আছে।

  2. পুরনো CMS (যেমন: WordPress এর ব্যাকডেটেড ভার্সন) বা পুরনো TLS (1.0) ব্যবহার করা।

প্রতিরোধ (Mitigation):

  • নিয়মিত লাইব্রেরি এবং ফ্রেমওয়ার্ক আপডেট করুন (Patch Management)।

  • Dependency Scanner (যেমন: Snyk, OWASP Dependency-Check, Dependabot) ব্যবহার করুন।

  • অপ্রয়োজনীয় ডিপেনডেন্সি প্রজেক্ট থেকে রিমুভ করুন।

৭. Identification and Authentication Failures

যখন অ্যাপ্লিকেশনে লগইন, সেশন ম্যানেজমেন্ট বা অথেনটিকেশন ব্যবস্থা দুর্বল হয়।

উদাহরণ:

  1. Weak Password Policy: '123456' বা 'password' এর মতো দুর্বল পাসওয়ার্ড গ্রহণ করা।

  2. Missing MFA: সেনসিটিভ সিস্টেমে মাল্টি-ফ্যাক্টর অথেনটিকেশন (MFA) না থাকা।

  3. Session in URL: URL-এর মধ্যে সেশন আইডি পাঠানো (যেমন: ?sessionid=ABC123XYZ)।

প্রতিরোধ (Mitigation):

  • শক্তিশালী পাসওয়ার্ড পলিসি এবং MFA বাধ্যতামূলক করুন।

  • ব্রুট ফোর্স অ্যাটাক ঠেকাতে রেট লিমিটিং (Rate Limiting) এবং অ্যাকাউন্ট লকআউট চালু করুন।

  • সেশন ম্যানেজমেন্টের জন্য Secure, HttpOnly এবং SameSite কুকি ব্যবহার করুন।

৮. Software and Data Integrity Failures

কোড, সফটওয়্যার আপডেট বা ডেটার অখণ্ডতা (Integrity) যাচাই করা না হলে এই সমস্যা হয়। CI/CD পাইপলাইনের দুর্বলতাও এর আওতাভুক্ত।

উদাহরণ:

  1. অনিশ্চিত সোর্স (HTTP) থেকে সফটওয়্যার আপডেট ডাউনলোড করা (MITM অ্যাটাকের ঝুঁকি)।

  2. আনট্রাস্টেড CDN থেকে থার্ড-পার্টি প্লাগইন বা স্ক্রিপ্ট যাচাই ছাড়া লোড করা (Supply Chain Attack)।

  3. CI/CD পাইপলাইনে সিক্রেট (API keys, Tokens) এক্সপোজড থাকা।

প্রতিরোধ (Mitigation):

  • সফটওয়্যার বা আপডেটের অখণ্ডতা যাচাই করতে ডিজিটাল সিগনেচার (Code Signing) ব্যবহার করুন।

  • বিশ্বস্ত সোর্স থেকে লাইব্রেরি নিন এবং integrity অ্যাট্রিবিউট (Subresource Integrity - SRI) ব্যবহার করুন।

  • CI/CD পাইপলাইনে প্রপার এক্সেস কন্ট্রোল এবং সিক্রেটস ম্যানেজমেন্ট ব্যবহার করুন।

৯. Security Logging & Monitoring Failures

যদি অ্যাপ্লিকেশন সন্দেহজনক বা অননুমোদিত কার্যকলাপ লগ এবং মনিটর না করে, তবে হ্যাকাররা বিনা বাধায় সিস্টেম ধ্বংস করতে পারে।

উদাহরণ:

  1. একনাগাড়ে ভুল লগইন প্রচেষ্টা (Brute Force) লগ না করা।

  2. Mass Enumeration (একসাথে হাজার হাজার API রিকোয়েস্ট) শনাক্ত করতে না পারা।

  3. লগ ফাইল লোকাল সার্ভারে রাখা, যা হ্যাকাররা এক্সেস পেয়ে মুছে ফেলতে পারে।

প্রতিরোধ (Mitigation):

  • সন্দেহজনক কার্যকলাপ এবং ফেইলিউরগুলোর লগ রাখুন।

  • সেন্ট্রালাইজড লগিং সিস্টেম (Remote Logging) এবং SIEM Tools (Splunk, ELK) ব্যবহার করুন।

  • লগ ফাইলের অখণ্ডতা বজায় রাখতে তা Immutable (যা পরিবর্তন করা যায় না) রাখুন।

১০. Server-Side Request Forgery (SSRF)

SSRF তখন ঘটে যখন হ্যাকার একটি অ্যাপ্লিকেশনকে ম্যানিপুলেট করে সেই সার্ভারের তরফ থেকে অন্য কোনো অভ্যন্তরীণ বা বাহ্যিক সিস্টেমে অননুমোদিত রিকোয়েস্ট পাঠায়।

উদাহরণ:

  1. ইউজার ইনপুটে [http://169.254.169.254/latest/meta-data/](http://169.254.169.254/latest/meta-data/) দিয়ে ক্লাউড সার্ভারের (AWS) মেটাডেটা চুরি করা।

  2. সার্ভারকে ব্যবহার করে অভ্যন্তরীণ নেটওয়ার্কের (Internal Network) পোর্ট স্ক্যান করা (যেমন: http://localhost:3306)।

প্রতিরোধ (Mitigation):

  • ইউজার ইনপুটের ক্ষেত্রে Allowlist (Whitelist) ব্যবহার করুন (শুধু নির্দিষ্ট এবং বিশ্বস্ত ডোমেইনে রিকোয়েস্ট করতে দিন)।

  • Local IP (127.0.0.1, 169.254.x.x) এবং অভ্যন্তরীণ নেটওয়ার্ক ব্লক করুন।

  • আউটেবাউন্ড (Outbound) রিকোয়েস্টের জন্য ফায়ারওয়াল রুল সেট করুন এবং নেটওয়ার্ক সেগমেন্টেশন করুন।