Security Misconfiguration؛ وقتی تنظیمات اشتباه، امنیت را از بین می‌برند

Security Misconfiguration: When Incorrect Settings Compromise Security
0 دیدگاه
۱۴۰۵-۰۷-۱۴ ۱۱:۴۹:۲۶

نویسنده: SINISTER | رضا فروزان
برند: صفر و یک سایبر
سطح: متوسط تا پیشرفته
حوزه: Web Application Security
محیط تمرین: آزمایشگاه محلی و مجاز
ابزارها: Burp Suite، DevTools، Nmap، curl


۱. مقدمه؛ همیشه مشکل از کد نیست

وقتی درباره امنیت یک برنامه وب صحبت می‌کنیم، معمولاً ذهنمان به سمت آسیب‌پذیری‌هایی مانند:

  • SQL Injection
  • XSS
  • SSRF
  • Broken Access Control

می‌رود.

اما گاهی برنامه از نظر کدنویسی مشکل واضحی ندارد و بااین‌حال به دلیل تنظیمات اشتباه در معرض خطر قرار گرفته است.

اینجا با مفهوم:

Security Misconfiguration

مواجه می‌شویم.

یعنی یک سرویس، برنامه، سرور یا زیرساخت به شکلی پیکربندی شده که امنیت مورد انتظار را فراهم نمی‌کند.


۲. Security Misconfiguration یعنی چه؟

فرض کن یک برنامه در محیط Development قرار دارد.

در این محیط ممکن است:

  • Debug فعال باشد.
  • خطاهای کامل نمایش داده شوند.
  • اطلاعات داخلی در Response وجود داشته باشد.
  • Directory Listing فعال باشد.
  • سرویس‌های غیرضروری اجرا شوند.
  • Headerهای امنیتی تنظیم نشده باشند.
  • فایل‌های آزمایشی روی سرور باقی مانده باشند.

اگر همین تنظیمات بدون بررسی وارد Production شوند، سطح حمله افزایش پیدا می‌کند.

پس مشکل همیشه این نیست که:

«برنامه چه باگی دارد؟»

گاهی سؤال مهم‌تر این است:

«برنامه چگونه پیکربندی شده است؟»


۳. چهار لایه‌ای که باید بررسی کنیم

برای تحلیل حرفه‌ای، Misconfiguration را فقط در وب‌سایت جست‌وجو نکن.

چهار لایه را بررسی کن:

Application
     ↓
Web Server
     ↓
Operating System
     ↓
Network / Infrastructure

هر لایه می‌تواند تنظیمات ناامن داشته باشد.


۴. لایه اول؛ Application Configuration

در سطح برنامه، موارد زیر اهمیت دارند:

  • Debug Mode
  • Verbose Error Messages
  • Development Endpoints
  • Test Routes
  • Default Configuration
  • افشای اطلاعات داخلی
  • مدیریت نادرست Secretها
  • تنظیمات CORS
  • Session Configuration

مثال

برنامه‌ای در محیط Production با خطای داخلی مواجه می‌شود و به جای یک پیام عمومی:

Something went wrong.

اطلاعات زیادی نمایش می‌دهد:

Database connection failed
Internal module: ...
Stack trace: ...
Application path: ...

حتی اگر این اطلاعات مستقیماً امکان حمله ایجاد نکنند، می‌توانند اطلاعات ارزشمندی برای Recon فراهم کنند.

خطا باید برای کاربر مفید باشد، نه برای مهاجم بیش از حد گویا.


۵. Debug Mode؛ دوست توسعه‌دهنده، دشمن Production

Debug برای توسعه‌دهنده بسیار مفید است.

اما در محیط Production می‌تواند اطلاعاتی مانند:

  • Stack Trace
  • مسیر فایل‌ها
  • نام Moduleها
  • تنظیمات داخلی
  • Queryهای داخلی
  • جزئیات Framework

را افشا کند.

بنابراین یکی از اولین سؤال‌های Pentester:

آیا محیط Production واقعاً با تنظیمات Production اجرا می‌شود؟


۶. HTTP Security Headers

یکی از قسمت‌های مهم Security Configuration، Headerهای HTTP است.

برای مشاهده Response Headers می‌توانی از Burp Suite یا DevTools استفاده کنی.

نمونه Headerهای مهم:

Content-Security-Policy
Strict-Transport-Security
X-Content-Type-Options
Referrer-Policy
Permissions-Policy

هرکدام هدف متفاوتی دارند.

Content-Security-Policy

می‌تواند منابع و رفتارهای قابل اجرای صفحه را محدود کند و در کاهش اثر برخی حملات مانند XSS نقش دفاعی داشته باشد.

Strict-Transport-Security

به مرورگر اعلام می‌کند که ارتباط با سایت باید از HTTPS استفاده کند.

X-Content-Type-Options

به جلوگیری از برخی رفتارهای MIME sniffing کمک می‌کند.

Referrer-Policy

کنترل می‌کند چه اطلاعاتی از Referrer در درخواست‌های بعدی ارسال شود.

Permissions-Policy

دسترسی برخی قابلیت‌های مرورگر را محدود می‌کند.

نکته مهم: وجود یک Header به‌تنهایی به معنی پیکربندی امن نیست. مقدار و Context آن نیز باید بررسی شود.


۷. CORS؛ یک تنظیم کوچک با اثر بزرگ

CORS یا Cross-Origin Resource Sharing تعیین می‌کند مرورگر تحت چه شرایطی اجازه دسترسی یک Origin به منابع Origin دیگر را بدهد.

در بررسی CORS به مواردی مانند این‌ها توجه کن:

Origin
Access-Control-Allow-Origin
Access-Control-Allow-Credentials
Access-Control-Allow-Methods
Access-Control-Allow-Headers

یک اشتباه رایج این است که تصور کنیم:

CORS = Authentication

در حالی که چنین نیست.

CORS مکانیزم کنترل مرورگر است و جایگزین Authorization در سمت سرور نمی‌شود.


۸. Directory Listing

فرض کن سرور به جای ارائه یک صفحه یا خطای مناسب، فهرست فایل‌های یک مسیر را نمایش دهد:

/uploads/

├── image1.png
├── backup.zip
├── test.txt
└── old-config.json

Directory Listing لزوماً به‌تنهایی یک آسیب‌پذیری بحرانی نیست، اما می‌تواند اطلاعاتی درباره ساختار و فایل‌های موجود افشا کند.

Pentester باید بپرسد:

  • آیا این مسیر باید عمومی باشد؟
  • آیا فایل‌های حساس در آن قرار دارند؟
  • آیا Listing لازم است؟
  • آیا دسترسی به فایل‌ها کنترل شده است؟

۹. فایل‌های اضافی و Backupها

گاهی یک برنامه اصلی امن است، اما فایل‌های اضافی روی سرور باقی مانده‌اند.

برای مثال:

backup/
old/
test/
dev/
tmp/

یا فایل‌هایی مانند:

config.old
database.backup
test.php
debug.log

وجود این فایل‌ها به‌تنهایی آسیب‌پذیری را ثابت نمی‌کند.

اما اگر فایل حاوی اطلاعات حساس باشد و از طریق وب قابل دسترسی باشد، موضوع می‌تواند جدی شود.

اصل مهم: هر چیزی که روی Web Server قرار دارد، باید عمداً آنجا باشد.


۱۰. سرویس‌های غیرضروری

در سطح سرور ممکن است سرویس‌هایی اجرا شوند که برنامه اصلاً به آن‌ها نیاز ندارد.

مثلاً:

HTTP
HTTPS
SSH
Database
Admin Service
Development Service

وجود Port باز به‌تنهایی آسیب‌پذیری نیست.

سؤال Pentester این است:

آیا این سرویس باید در دسترس باشد؟

اگر پاسخ منفی است، بهترین راهکار معمولاً حذف یا محدود کردن آن سرویس است.


۱۱. آزمایشگاه عملی امن؛ Zero Config Lab

در این سناریو فقط روی سیستم خودت کار می‌کنیم.

معماری:

┌─────────────┐
│   Browser   │
└──────┬──────┘
       │
       ▼
┌──────────────────┐
│ Local Web Server │
│   127.0.0.1      │
└──────────────────┘

هدف:

پیدا کردن تنظیمات ناامن در یک سرویس محلی.


۱۲. مرحله اول؛ بررسی Response Headers

برنامه آزمایشگاهی خودت را اجرا کن.

سپس:

curl -I http://127.0.0.1:8000/

یا درخواست را از طریق Burp Suite مشاهده کن.

Headerهای Response را ثبت کن.

برای مثال:

HTTP/1.1 200 OK
Content-Type: text/html
Server: ...

حالا بررسی کن:

  • آیا HTTPS در محیط Production اجباری است؟
  • آیا Headerهای امنیتی موردنیاز وجود دارند؟
  • آیا اطلاعات غیرضروری درباره Server افشا می‌شود؟
  • آیا Cookieها تنظیمات مناسب دارند؟

در یک آزمایشگاه محلی ممکن است برخی Headerها عمداً وجود نداشته باشند؛ هدف تمرین، یادگیری تحلیل است نه اینکه هر Header مفقود را فوراً آسیب‌پذیری اعلام کنیم.


۱۳. مرحله دوم؛ بررسی Error Handling

یک مسیر ناموجود را درخواست کن:

http://127.0.0.1:8000/does-not-exist

Response را بررسی کن.

سؤال:

آیا فقط چنین چیزی دریافت می‌کنی؟

404 Not Found

یا اطلاعات داخلی بیشتری نمایش داده می‌شود؟

مثلاً:

Stack Trace
File Path
Framework Version
Internal Module

اگر اطلاعات اضافی مشاهده شد، آن را مستند کن.

هدف این آزمایش، مشاهده و گزارش است؛ نه تلاش برای استخراج اطلاعات بیشتر.


۱۴. مرحله سوم؛ بررسی فایل‌های عمومی

در محیط آزمایشگاهی، مسیرهای عمومی برنامه را بررسی کن.

مثلاً اگر خودت پوشه‌ای مانند:

/uploads/

ساخته‌ای، بررسی کن:

  • آیا Directory Listing فعال است؟
  • چه فایل‌هایی قابل مشاهده‌اند؟
  • آیا فایل آزمایشی حساس وجود دارد؟
  • آیا دسترسی باید عمومی باشد؟

فقط فایل‌هایی را بررسی کن که متعلق به آزمایشگاه خودت هستند.


۱۵. مرحله چهارم؛ بررسی سرویس‌های شبکه

روی سیستم آزمایشگاهی خودت می‌توانی سرویس‌های در حال Listen را مشاهده کنی.

برای مثال در Linux:

ss -lntup

هدف این دستور در این تمرین، شناخت سطح سرویس‌های سیستم خودت است.

یک جدول بساز:

Port Service موردنیاز؟ دسترسی مورد انتظار
8000 Web App بله Local
9000 Test Service بله Local
… … … …

سپس سرویس‌هایی را که واقعاً موردنیاز نیستند مشخص کن.


۱۶. مرحله پنجم؛ بررسی تنظیمات Cookie

در قسمت‌های قبلی با Session آشنا شدیم.

اکنون Response را از نظر Cookie بررسی کن:

Set-Cookie: session=...

به Attributeهایی مانند:

Secure
HttpOnly
SameSite

توجه کن.

اما مانند همیشه، نتیجه را با Context بسنج.

برای مثال، نبود Secure در یک محیط کاملاً محلی HTTP الزاماً همان اثر امنیتی Production را ندارد.

Pentester باید محیط آزمایش را از محیط واقعی جدا کند.


۱۷. مرحله ششم؛ بررسی CORS در آزمایشگاه

اگر برنامه API دارد، یک درخواست آزمایشی با Header زیر مشاهده یا ارسال کن:

Origin: https://example.test

سپس Response را بررسی کن.

به موارد زیر توجه کن:

Access-Control-Allow-Origin
Access-Control-Allow-Credentials

سؤال مهم:

آیا Originهای غیرمجاز می‌توانند به داده‌ای دسترسی پیدا کنند که باید محدود باشد؟

در تحلیل CORS، فقط Header را نبین؛ رفتار واقعی مرورگر و حساس بودن داده را نیز در نظر بگیر.


۱۸. چالش اصلی قسمت سیزدهم

یک Security Configuration Audit برای آزمایشگاه محلی خودت انجام بده.

حداقل این موارد را بررسی کن:

Application

  • Debug

  • Error Handling

  • Development Endpoints

  • Test Files

Web Server

  • Security Headers

  • Directory Listing

  • Server Information

  • HTTP/HTTPS Configuration

Network

  • Open Ports

  • Unnecessary Services

  • Service Exposure

Session

  • Secure

  • HttpOnly

  • SameSite

API

  • CORS

  • Error Responses

  • Unnecessary Endpoints


۱۹. جدول گزارش Pentest

نتایج را در چنین قالبی ثبت کن:

مورد وضعیت شدت احتمالی شواهد
Debug Mode فعال/غیرفعال Low/Medium/High Response
Security Headers بررسی شد … Headers
Directory Listing فعال/غیرفعال … Browser
اطلاعات Server افشا/محافظت‌شده … HTTP Response
سرویس اضافی وجود/عدم وجود … ss
Cookie Flags مناسب/نیازمند بررسی … Set-Cookie
CORS امن/نیازمند بررسی … Response

نکته حرفه‌ای: شدت را فقط بر اساس وجود یک تنظیم نادرست تعیین نکن. تأثیر واقعی، قابلیت سوءاستفاده و حساسیت دارایی را نیز در نظر بگیر.


۲۰. چگونه Security Misconfiguration را کاهش دهیم؟

اصل اول: Secure by Default

تنظیمات پیش‌فرض باید تا حد امکان امن باشند.

اصل دوم: کمترین سطح دسترسی

هر سرویس فقط به منابع موردنیاز دسترسی داشته باشد.

اصل سوم: حذف سرویس‌های غیرضروری

چیزی که لازم نیست، بهتر است اجرا نشود.

اصل چهارم: Production ≠ Development

تنظیمات Development را بدون بازبینی وارد Production نکن.

اصل پنجم: Errorها را کنترل کن

کاربر نباید Stack Trace و جزئیات داخلی را دریافت کند.

اصل ششم: Configuration را Version-Control و Audit کن

تغییرات مهم Configuration باید قابل بررسی و ردیابی باشند.

اصل هفتم: Secretها را از کد جدا کن

کلیدها، Tokenها و Credentialها نباید در Repository یا فایل‌های عمومی قرار بگیرند.

اصل هشتم: Monitoring

تغییرات غیرمنتظره در Configuration و رفتار سرویس‌ها باید قابل شناسایی باشند.


۲۱. طرز فکر Pentester

یک متخصص امنیت فقط نمی‌پرسد:

«آیا این برنامه آسیب‌پذیری دارد؟»

بلکه می‌پرسد:

«آیا این برنامه با تنظیمات مورد انتظار سازمان اجرا می‌شود؟»

و مهم‌تر:

«اگر یک تنظیم اشتباه باشد، اثر آن روی زنجیره امنیتی چیست؟»

ممکن است یک Header ناقص به‌تنهایی ریسک کوچکی داشته باشد، اما وقتی در کنار Debug فعال، Errorهای افشاگر، سرویس اضافی و دسترسی بیش از حد قرار گیرد، تصویر کاملاً متفاوتی ایجاد می‌شود.


جمع‌بندی

Security Misconfiguration یادآوری می‌کند که امنیت فقط در Source Code اتفاق نمی‌افتد.

امنیت واقعی حاصل ترکیب:

Secure Code
     +
Secure Configuration
     +
Secure Infrastructure
     +
Secure Network
     +
Continuous Monitoring

است.

یک برنامه ممکن است کدنویسی خوبی داشته باشد، اما یک Configuration اشتباه می‌تواند اطلاعات داخلی را افشا کند، سطح حمله را افزایش دهد یا کنترل‌های امنیتی را تضعیف کند.

یادت باشد:

چیزی که لازم نیست، فعال نگذار.
چیزی که نباید عمومی باشد، عمومی نکن.
چیزی که نباید افشا شود، در Error Response نشان نده.


قسمت بعدی

قسمت ۱۴ — API Security

از Endpointهای مخفی تا Authentication، Authorization، Rate Limiting و خطاهای رایج در APIها؛ جایی که دیگر فقط صفحه وب را بررسی نمی‌کنیم، بلکه مستقیماً با منطق پشت آن صحبت می‌کنیم.

صفر و یک سایبر | آموزش فارسی امنیت سایبری و هک قانونمند

تمام تمرین‌های عملی این مجموعه را فقط روی آزمایشگاه محلی، سیستم شخصی یا اهدافی که مجوز صریح تست آن‌ها را داری انجام بده.

دسته بندی‌ها:

آنچه در این مقاله میخوانید

دیدگاه شما

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *