تست نفوذ (Penetration Testing یا Pentest) حمله‌ای کنترل‌شده و مجاز به سایت، اپلیکیشن یا شبکه‌ی خودتان است که متخصص امنیت انجام می‌دهد تا پیش از مهاجم واقعی، ضعف‌های قابل سوءاستفاده را پیدا کند و راه رفعشان را گزارش دهد. فرقش با هک واقعی دو چیز است: اجازه‌ی کتبی و گزارش.

یک مثال ملموس: فروشگاهی وردپرسی فرم ورود، درگاه پرداخت و پنل مشتری دارد. تست‌کننده متوجه می‌شود یک افزونه‌ی قدیمی اجازه می‌دهد کاربر عادی فایل آپلود کند و با همان فایل روی سرور فرمان اجرا کند. در گزارش، مسیر دقیق حمله، شدت خطر و راه رفع (به‌روزرسانی یا حذف افزونه، محدودکردن نوع فایل) را می‌نویسد. صاحب سایت ضعف را قبل از اینکه کسی سوءاستفاده کند می‌بندد. تعریف کوتاه را در تست نفوذ در واژه‌نامه ببینید.

تست نفوذ با اسکن آسیب‌پذیری و باگ‌بانتی چه فرقی دارد؟#

این سه را زیاد با هم اشتباه می‌گیرند:

روشچه کسی انجام می‌دهدعمقخروجیکی مناسب است
اسکن آسیب‌پذیریابزار خودکارسطحی و گستردهفهرست بلند، با هشدار نادرستبه‌طور منظم و مداوم
تست نفوذمتخصص یا تیم، در بازه‌ی مشخصعمیقگزارش تأییدشده با اولویتسالانه و پس از تغییر بزرگ
باگ‌بانتیپژوهشگران مستقل، مداوممتغیرگزارش تک‌تک یافته‌هاوقتی تیم امنیت آماده‌ی پاسخ دارید
تیم قرمز (Red Team)تیم تهاجمیبسیار عمیق و هدف‌محورسنجش توان شناسایی و واکنش سازمانسازمان‌های بالغ از نظر امنیتی

اسکن خودکار می‌گوید «این نسخه آسیب‌پذیری شناخته‌شده دارد». تست نفوذ می‌گوید «با این آسیب‌پذیری و آن تنظیم اشتباه، می‌شود به دیتابیس مشتری‌ها رسید».

مراحل تست نفوذ#

روش‌شناسی‌های شناخته‌شده‌ای مثل راهنمای آزمون OWASP و PTES جزئیات متفاوتی دارند، ولی اسکلت کار تقریباً همیشه این است:

  1. برنامه‌ریزی و تعیین محدوده (Scope): چه چیزی تست می‌شود، چه چیزی نه، در چه بازه‌ای، از چه آدرس‌هایی، و چه کسی در صورت مشکل پاسخ‌گوست. همه مکتوب و امضاشده.
  2. شناسایی (Reconnaissance): جمع‌کردن اطلاعات عمومی: زیردامنه‌ها، فناوری‌ها، نسخه‌ها، فرم‌ها و نقطه‌های ورودی.
  3. اسکن و تحلیل: پیداکردن پورت‌ها و سرویس‌های باز و ضعف‌های احتمالی، با ابزار و بررسی دستی.
  4. بهره‌برداری (Exploitation): تلاش کنترل‌شده برای سوءاستفاده از ضعف‌ها تا ثابت شود واقعی‌اند؛ مثلاً تزریق SQL، XSS یا دورزدن احراز هویت.
  5. پس از نفوذ: سنجش اینکه از نقطه‌ی نفوذ تا کجا می‌شود پیش رفت و به چه داده‌ای رسید، بدون آسیب‌زدن.
  6. گزارش: شرح هر یافته، شدت، شواهد، مراحل بازتولید و راه رفع، به‌علاوه‌ی خلاصه‌ای برای مدیران.
  7. رفع و تست مجدد: شما ضعف‌ها را می‌بندید و تست‌کننده تأیید می‌کند که واقعاً بسته شده‌اند.

انواع تست نفوذ#

بر اساس میزان اطلاعات#

  • جعبه سیاه (Black Box): تست‌کننده هیچ اطلاعات داخلی ندارد، درست مثل یک مهاجم بیرونی. واقع‌گرایانه است ولی وقت زیادی صرف شناسایی می‌شود.
  • جعبه سفید (White Box): کد منبع، معماری و حساب‌های کاربری در اختیار تست‌کننده است. عمیق‌ترین پوشش را در زمان محدود می‌دهد.
  • جعبه خاکستری (Gray Box): اطلاعات نسبی، مثلاً یک حساب کاربری عادی. برای بیشتر سایت‌ها تعادل خوبی است.

بر اساس هدف#

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

سایت را چطور برای تست نفوذ آماده کنیم؟#

تست نفوذ گران‌تر از آن است که وقتش صرف ضعف‌های ساده شود. پیش از دعوت از متخصص، کارهای پایه را انجام دهید:

  1. بهداشت پایه را درست کنید: چک‌لیست امنیت وردپرس را مرور کنید؛ هسته، افزونه‌ها و قالب به‌روز، افزونه‌های بی‌استفاده حذف، رمزهای قوی و ورود دومرحله‌ای فعال.
  2. کد سفارشی را خودتان مرور کنید: اگر افزونه یا تم اختصاصی دارید، الگوهای رایج در امنیت کد PHP را بررسی کنید: کوئری آماده، escape خروجی، nonce و بررسی دسترسی.
  3. بکاپ کامل و آزموده بگیرید: حتی تست محتاطانه ممکن است داده‌ی آزمایشی بسازد یا سرویسی را کند کند. بکاپ خودکار وردپرس و بازگردانی آن را پیش از شروع امتحان کنید.
  4. ترجیحاً نسخه‌ی آزمایشی (Staging) بدهید: کپی دقیق سایت اصلی، تا تست روی مشتری‌های واقعی اثر نگذارد. اگر تست روی سایت اصلی است، زمان کم‌ترافیک را انتخاب کنید.
  5. به هاست یا ارائه‌دهنده‌ی ابری خبر دهید: بعضی‌ها پیش از تست اجازه یا اطلاع می‌خواهند، وگرنه ممکن است ترافیک تست را حمله تشخیص دهند و مسدودش کنند.
  6. حساب‌های آزمایشی بسازید: برای هر نقش (مشتری، نویسنده، مدیر فروشگاه) یک حساب جدا، نه حساب واقعی.
  7. قرارداد را دقیق بنویسید: محدوده، زمان، روش‌های ممنوع (مثلاً حمله‌ی از کاراندازی سرویس)، راه تماس اضطراری و محرمانه‌بودن گزارش.

تست‌کننده را چطور انتخاب کنیم؟#

کیفیت تست نفوذ بیشتر از هر چیز به کسی بستگی دارد که آن را انجام می‌دهد. پیش از قرارداد این‌ها را بپرسید:

  • نمونه‌ی گزارش: یک گزارش نمونه با اطلاعات حذف‌شده بخواهید. اگر فقط خروجی خام ابزار است، تست نفوذ واقعی نمی‌گیرید.
  • روش کار: بپرسید بر اساس کدام روش‌شناسی کار می‌کنند و چه بخشی دستی و چه بخشی خودکار است.
  • تجربه‌ی مرتبط: کسی که با وردپرس، لاراول یا API شبیه سیستم شما کار کرده، ضعف‌های رایج آن را سریع‌تر پیدا می‌کند.
  • تست مجدد: آیا بررسی دوباره پس از رفع ضعف‌ها در قرارداد هست؟
  • محرمانگی: گزارش و داده‌هایی که در طول تست دیده می‌شود چطور نگه‌داری و پس از پایان کار پاک می‌شود؟

قیمت بسیار پایین برای تست «کامل» معمولاً یعنی فقط یک اسکن خودکار با سربرگ تازه.

گزارش را چطور بخوانیم و با آن چه کنیم؟#

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

اشتباه‌های رایج#

  • تست بدون اجازه‌ی کتبی: حتی روی سایتی که فکر می‌کنید «مال خودتان» است ولی روی سرور دیگری میزبانی می‌شود.
  • اکتفا به اسکن خودکار: گزارش ابزار را تست نفوذ ندانید.
  • محدوده‌ی خیلی تنگ: کنارگذاشتن API، زیردامنه یا پنل مدیریت یعنی همان‌جا که آسیب‌پذیرتر است تست نمی‌شود.
  • بایگانی‌کردن گزارش: تست نفوذ بدون رفع و تست مجدد فقط هزینه است.
  • یک‌بار برای همیشه: هر به‌روزرسانی و افزونه‌ی تازه می‌تواند ضعف تازه بیاورد.

خلاصه#

  • تست نفوذ حمله‌ی کنترل‌شده و مجاز است تا ضعف‌ها پیش از هکرها پیدا شوند.
  • اسکن خودکار فهرست می‌دهد؛ تست نفوذ تأیید می‌کند و اثر واقعی را نشان می‌دهد.
  • مراحل اصلی: محدوده، شناسایی، اسکن، بهره‌برداری، پس از نفوذ، گزارش و تست مجدد.
  • جعبه سیاه، سفید و خاکستری از نظر میزان اطلاعات تست‌کننده فرق دارند.
  • پیش از تست، به‌روزرسانی، بکاپ، نسخه‌ی آزمایشی، حساب تست و قرارداد مکتوب را آماده کنید.