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

نشانه‌ها

نشانه کجا بررسی کنم
۱. عنوان و توضیح عجیب در نتایج گوگل (زبان دیگر، دارو، قمار) جستجوی site:yourdomain.com
۲. بازدیدکننده به سایت دیگری پرت می‌شود، مخصوصاً از موبایل یا از گوگل از نتیجه‌ی گوگل، با گوشی و در پنجره‌ی ناشناس وارد شوید
۳. هشدار قرمز مرورگر سرچ کنسول، Security issues (هشدار قرمز گوگل)
۴. کاربر مدیری که نساخته‌اید پیشخوان، کاربران، فیلتر مدیر کل
۵. فایل‌ها و پوشه‌هایی با نام تصادفی File Manager، مرتب‌سازی بر اساس تاریخ
۶. فایل PHP در پوشه‌ی uploads جستجوی File Manager
۷. مصرف CPU یا پردازش بالا بدون افزایش بازدید Resource Usage
۸. ایمیل‌هایی که شما نفرستاده‌اید، یا پر شدن سقف ارسال Track Delivery
۹. صفحه‌ها و لینک‌هایی که نساخته‌اید سرچ کنسول، گزارش Pages و Links
۱۰. تبلیغ، پاپ‌آپ یا اسکریپت ناآشنا View Source صفحه؛ دامنه‌های بیرونی ناشناس
۱۱. تغییر در htaccess، index.php یا wp-config.php تاریخ آخرین تغییر فایل
۱۲. کرون‌جاب یا اکانت FTP ناشناس Cron Jobs و FTP Accounts در سی‌پنل

چرا خودتان نمی‌بینید؟

کد مخرب معمولاً شرطی است تا صاحب سایت متوجه نشود:

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

برای همین، تست را با گوشی، اینترنت موبایل، پنجره‌ی ناشناس و از طریق نتیجه‌ی جستجو انجام دهید. در سرچ کنسول هم URL Inspection و View crawled page نشان می‌دهد گوگل چه می‌بیند.

بررسی سریع در سی‌پنل

  1. Imunify360: فهرست فایل‌های مشکوک و آلوده. (Imunify360)
  2. File Manager: در public_html روی ستون Last Modified بزنید. فایل‌های هسته‌ای که همین اواخر تغییر کرده‌اند و شما دست نزده‌اید، مشکوک‌اند. (File Manager)
  3. لاگ دسترسی: درخواست POST به فایل‌های PHP ناآشنا، مخصوصاً با کد ۲۰۰. (لاگ دسترسی)
  4. Cron Jobs: هر خطی که نساخته‌اید.
  5. FTP Accounts و Email Forwarders: حساب یا فورواردر ناشناس.
  6. پرمیشن‌ها: فایل‌هایی با ۰۰۰ را اسکنر قرنطینه کرده؛ فایل‌های ۷۷۷ راه نفوذ هستند. (پرمیشن فایل‌ها)

جاهایی که کد مخرب پنهان می‌شود

محل چه شکلی
ابتدای فایل‌های PHP یک خط خیلی بلند و نامفهوم با توابعی مثل eval، base64_decode، gzinflate
wp-content/mu-plugins افزونه‌ای که خودکار بار می‌شود و در فهرست افزونه‌ها دیده نمی‌شود
wp-content/uploads فایل PHP با نام شبیه تصویر
فایل‌هایی با نام شبیه هسته wp-confg.php، wp-login2.php، class-wp-cache.php
htaccess قانون ریدایرکت با شرط HTTP_REFERER یا User-Agent
دیتابیس تگ script در نوشته‌ها، ابزارک‌ها یا تنظیمات قالب
functions.php قالب تابعی که کاربر مدیر می‌سازد

از کجا وارد شده‌اند؟

راه نفوذ سهم پیشگیری
افزونه یا قالب قدیمی و آسیب‌پذیر بیشترین آپدیت منظم
قالب و افزونه‌ی نال‌شده زیاد استفاده نکنید
رمز ضعیف یا لو رفته زیاد محافظت از ورود
کامپیوتر آلوده‌ی مدیر یا طراح متوسط اسکن؛ رمز را در مرورگر ذخیره نکنید
سایت دیگری روی همان هاست متوسط نصب‌های رهاشده را حذف کنید (چند سایت روی یک هاست)
فایل بکاپ یا تنظیمات در دسترس وب کم بستن فایل‌های حساس

اگر نشانه‌ای دیدید

  1. وحشت نکنید و چیزی را بی‌برنامه پاک نکنید.
  2. یک بکاپ از وضعیت فعلی بگیرید؛ برای بررسی بعدی لازم می‌شود.
  3. رمزها را عوض کنید.
  4. پاک‌سازی را شروع کنید، یا با ذکر نشانه‌ها تیکت بزنید. (پاک‌سازی وردپرس هک‌شده)

بررسی دوره‌ای

ماهی یک بار، ده دقیقه: جستجوی site: در گوگل، نگاه به فهرست مدیران، Security issues در سرچ کنسول، نتیجه‌ی اسکن Imunify360 و Resource Usage. بیشتر نفوذها اگر در هفته‌ی اول دیده شوند، قبل از آسیب جدی به رتبه و اعتبار جمع می‌شوند. (چک‌لیست امنیت وردپرس)

سوال‌های رایج

سایتم کوچک است؛ چه کسی هکش می‌کند؟

هیچ‌کس شخصاً. ربات‌ها همه‌ی سایت‌ها را برای حفره‌های شناخته‌شده اسکن می‌کنند و اندازه‌ی سایت برایشان مهم نیست.

اسکنر چیزی پیدا نکرد ولی نشانه‌ها هست.

اسکنر همه‌چیز را نمی‌گیرد، مخصوصاً کد داخل دیتابیس. نشانه‌ها را ملاک بگیرید.

برگرداندن بکاپ کافی است؟

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