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

بدافزار سایت دقیقاً چه چیزی را آلوده می‌کند؟

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

  • فایل‌های هسته وردپرس: فایل‌هایی که ظاهراً متعلق به هسته هستند، اما تغییر یافته‌اند.
  • قالب و افزونه‌ها: کدهای مخفی درون فایل‌های قالب یا افزونه، معمولاً در فایل‌های کم‌بازدید مثل functions.php یا فایل‌های کمکی.
  • پوشه uploads: فایل‌های PHP جاسازی‌شده در پوشه‌ای که فقط باید تصویر و PDF داشته باشد.
  • دیتابیس: کد مخرب درون نوشته‌ها، دیدگاه‌ها، گزینه‌های وردپرس و گاهی جدول‌های افزونه‌ها.
  • کاربران و نقش‌ها: کاربران ادمین یا نقش‌های سفارشی که توسط مهاجم ایجاد شده‌اند.

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

بدافزار سایت، مثل موریانه است: در یک نقطه وارد می‌شود، اما در نقاط مختلف اثر می‌گذارد. اگر فقط نقطه ورود را ببندید و باقی مسیر را رها کنید، دوباره برمی‌گردد.

ذهنیت درست: پاکسازی هدفمند، نه حذف همه‌چیز

بزرگ‌ترین اشتباه در پاک کردن بدافزار، حذف فله‌ای همه‌چیز است؛ یعنی پاک کردن سایت و بازگرداندن بکاپ. سه اصلی که در پروژه‌های واقعی رعایت می‌کنم:

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

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

گام اول: بکاپ لحظه جرم

پیش از هر اقدامی، بکاپ کامل از سایت بگیرید؛ حتی اگر آلوده است. سه دلیل که این کار را ضروری می‌کند:

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

بکاپ لحظه جرم شامل دو بخش است: فایل‌ها (کل پوشه سایت) و دیتابیس. روش‌های بکاپ کامل در چگونه از وردپرس بکاپ بگیریم و چگونه از دیتابیس وردپرس بکاپ بگیریم آمده است.

گام دوم: شناسایی دقیق محل آلودگی

پس از بکاپ، مرحله شناسایی آغاز می‌شود. سه روش که در پروژه‌ها به‌کار می‌برم:

  1. اسکن با ابزارها: ابزارهای اسکن بدافزار مثل Wordfence و Sucuri، فایل‌های هسته، قالب و افزونه‌ها را با نسخه اصلی مقایسه می‌کنند. فهرست کامل در بهترین ابزارهای اسکن بدافزار.
  2. بازبینی دستی فایل‌های حساس: فایل‌های functions.php قالب و افزونه‌ها، wp-config.php و پوشه uploads را به‌طور دستی بازبینی می‌کنم. نشانه‌های کد مشکوک مثل eval()، base64_decode() و file_get_contents() با آدرس بیرونی.
  3. بررسی دیتابیس: جستجوی کدهای مخرب درون جدول‌های wp_posts، wp_options، wp_users و wp_usermeta. نشانه‌ها شامل کاربران ناشناس، گزینه‌های عجیب و اسکریپت‌های درون‌خطی در نوشته‌ها است.

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

گام سوم: پاکسازی هدفمند فایل‌ها و دیتابیس

پس از شناسایی، مرحله پاکسازی آغاز می‌شود. ترتیب کار در پروژه‌های واقعی این‌طور است:

  1. پاکسازی هسته وردپرس: اگر فایل‌های هسته تغییر یافته‌اند، نسخه اصلی را از مخزن رسمی دوباره نصب می‌کنم. این کار، بدون حذف محتوا و دیتابیس انجام می‌شود.
  2. پاکسازی قالب و افزونه‌ها: افزونه و قالب‌های آلوده را از مخزن رسمی یا از سازنده اصلی، دوباره نصب می‌کنم. این کار، هم فایل مخرب را حذف می‌کند و هم نسخه سالم را برمی‌گرداند.
  3. پاکسازی پوشه uploads: فایل‌های اضافه (به‌خصوص PHP) که در پوشه uploads وجود دارند، حذف می‌شوند. تصاویر و PDF معتبر باقی می‌مانند.
  4. پاکسازی دیتابیس: کاربران ناشناس، گزینه‌های اضافه، اسکریپت‌های درون‌خطی و محتوای تزریق‌شده حذف می‌شوند. جزئیات در چگونه دیتابیس وردپرس را پاک‌سازی کنیم.
  5. بازنویسی قالب و افزونه‌ها با نسخه سالم: اگر پاکسازی هدفمند کافی نبود، نسخه سالم از ابتدا نصب می‌شود.

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

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

گام چهارم: سخت‌سازی و بستن مسیر ورود

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

گام پنجم: تأیید پاکسازی و پایش پس از آن

پس از پاکسازی و سخت‌سازی، مرحله تأیید آغاز می‌شود. سه مرحله تأیید در پروژه‌ها:

  1. اسکن کامل دوباره: با ابزار اسکن، کل سایت را دوباره بررسی می‌کنم. نتیجه پاک باشد، گام بعدی؛ در غیر این‌صورت، بازبینی پاکسازی.
  2. بررسی وضعیت در ابزارهای بیرونی: Google Search Console، Safe Browsing و ابزارهای مشابه. اگر سایت در فهرست سیاه بود، درخواست حذف داده می‌شود و تا تأیید، سایت زیر نظر می‌ماند.
  3. پایش هفتگی در ماه اول: در چهار هفته اول پس از پاکسازی، هفتگی سایت اسکن می‌شود. اگر در این بازه، آلودگی برنگشت، احتمال بازگشت بعدی کم است.

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

اشتباهات رایج در پاک کردن بدافزار

در پروژه‌هایی که پاک کردن بدافزار انجام شده، چند الگوی تکراری دیده‌ام که باعث بازگشت آلودگی یا از دست رفتن داده می‌شود:

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

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

پرسش‌های پرتکرار درباره پاک کردن بدافزار

  • چگونه سایت را از بدافزار پاک کنیم؟ با بکاپ لحظه جرم پیش از هر تغییر، شناسایی دقیق محل آلودگی در فایل‌ها و دیتابیس، پاکسازی هدفمند هسته و قالب و افزونه‌ها، تغییر همه رمزها و فعال‌سازی 2FA، سخت‌سازی سرور و وردپرس، و پایش هفتگی در ماه اول پس از پاکسازی.
  • آیا باید سایت را کامل پاک کنیم و از بکاپ بازگردانیم؟ نه به‌طور پیش‌فرض. اگر بکاپ از دوره آلودگی باشد، بازگشت، آلودگی را برمی‌گرداند. پاکسازی هدفمند، امن‌تر و سریع‌تر از بازگرداندن بکاپ است.
  • چگونه بفهمیم بکاپ آلوده است؟ با اسکن بکاپ در محیط لوکال و بررسی فایل‌های حساس با ابزار اسکن بدافزار. اگر بکاپ حاوی کدهای مشکوک باشد، باید از نسخه قدیمی‌تر و پاک استفاده شود.
  • پس از پاکسازی، چه مدت باید پایش کنیم؟ حداقل یک ماه، هفته‌ای یک‌بار. اگر در این بازه، آلودگی برنگشت، احتمال بازگشت بعدی کم است. اما پایش دوره‌ای ماهانه همچنان لازم است.
  • آیا باید به مشتریان اطلاع بدهیم؟ اگر داده کاربران تحت تأثیر قرار گرفته، بله. اعلام شفاف، اعتماد را بهتر حفظ می‌کند از پنهان‌کاری که در صورت کشف، اعتماد را کاملاً از بین می‌برد.

پاکسازی، پایان نیست؛ شروع دوره پایش است

پاک کردن بدافزار، یک مرحله حساس و پراسترس است، اما پایان کار نیست. تجربه‌ام می‌گوید سایت‌هایی که پس از پاکسازی، دوره پایش منظم را جدی می‌گیرند، در برابر حمله بعدی مقاوم‌تر می‌شوند؛ سایت‌هایی که پاکسازی را پایان ماجرا می‌بینند، معمولاً چند ماه بعد با حادثه مشابه روبه‌رو می‌شوند. اگر امروز فقط یک کار می‌کنید، همین حالا رمزهای سایت خودتان را تغییر دهید و 2FA را برای کاربران مدیریتی فعال کنید. اگر در پروژه‌ای حادثه بدافزار را پشت سر گذاشته‌اید، برای من جالب است بدانید مهاجم از کدام مسیر وارد شده و کدام اقدام بعدی، بازگشت را متوقف کرد؛ تجربه‌تان را در دیدگاه‌ها بنویسید تا برای خواننده بعدی، مسیر روشن‌تری ساخته شود. 🛡️