راهنمای کامل
راهنمای رفع هک سایت وردپرس و پاکسازی مالور سرور
رفع هک سایت وردپرس دو بخش دارد: پیدا کردن و حذف آلودگی، و پیدا کردن راهی که مهاجم از آن وارد شد. بخش اول سایت را تمیز میکند و بخش دوم جلوی آلودگی دوباره را میگیرد. سایتی که بعد از پاکسازی دوباره هک میشود، معمولاً فقط بخش اول را گذرانده است. توضیحات زیر برای مدیر سایت یا سروری است که نشانه هک دیده و میخواهد ترتیب کار و خطاهای رایج را بشناسد.
ترتیب کار در پاکسازی سایت هکشده
اولین قدم مهار است: سایت در حالت تعمیر قرار میگیرد تا بازدیدکنندهها به سایت مخرب منتقل نشوند. پیش از هر حذف یا ریستور، از فایلها، دیتابیس و لاگها کپی گرفته میشود. این کپی شواهد راه نفوذ را حفظ میکند و اگر فایل سالمی بهاشتباه حذف شود، راه برگرداندنش را باز نگه میدارد. ترتیب بقیه کار این است:
- راستیآزمایی هسته وردپرس با WP-CLI و checksum رسمی و بررسی uploads، wp-config.php و .htaccess
- جستوجوی کاربران ادمین مخفی و کد تزریقی در دیتابیس، از جمله جدول wp_options
- یافتن راه نفوذ از روی access log و زمان ایجاد فایلهای مخرب
- حذف آلودگی و جایگزینی فایلهای اصلی با نسخه سالم
- بهروزرسانی هسته، افزونهها و قالب و بستن آسیبپذیری عامل نفوذ
- تغییر همه رمزها و کلیدها و اسکن دوباره
چرا تغییر رمز پیش از پاکسازی کافی نیست؟
تغییر رمز مدیر وردپرس معمولاً اولین کاری است که صاحب سایت انجام میدهد، ولی مهاجمی که یک فایل PHP در پوشه uploads گذاشته برای ورود به رمز نیازی ندارد. در پشتی ممکن است یک کاربر ادمین مخفی، یک وبشل، یک cron job یا یک کلید SSH اضافهشده باشد. اگر رمزها پیش از حذف این درها عوض شوند، مهاجم رمز تازه دیتابیس را هم از wp-config.php میخواند. به همین دلیل رمز دیتابیس، FTP، کنترلپنل و کاربران مدیر و کلیدهای Salt وردپرس بعد از پاکسازی و یکجا عوض میشوند.
آلودگی سایت یا آلودگی سرور؟
روی هاست اشتراکی و حسابهای cPanel و DirectAdmin، سایتهای یک حساب با یک کاربر سیستم اجرا میشوند و به فایلهای یکدیگر دسترسی نوشتن دارند. یک وردپرس قدیمی در زیردامنهای فراموششده کافی است تا بقیه سایتهای همان حساب هم آلوده شوند، پس همه دامنهها و زیردامنههای حساب اسکن میشوند. تنظیماتی که آلودگی بین حسابها را محدود میکند در راهنمای افزایش امنیت سی پنل آمده است.
نشانههای آلودگی سرور شکل دیگری دارند: پروسه ناشناسی که CPU را پر کرده، صف طولانی ایمیل خروجی، کاربر سیستمی تازه یا سرویس systemd که هیچکس نصبش را به یاد ندارد. در این حالت cron، سرویسها، کلیدهای SSH و مسیرهای موقت بررسی میشوند. اگر مهاجم به دسترسی root رسیده باشد، دیگر نمیشود مطمئن شد همه تغییراتش پیدا شده است. راه مطمئنتر راهاندازی سرور تمیز و انتقال داده سالم است که در خدمت مهاجرت سرور و هاست انجام میشود.
خطاهای رایج بعد از هک شدن سایت
ریستور عجولانه آخرین بکاپ رایجترین خطاست. اگر آلودگی مدتی پیش از دیده شدن نشانهها وارد شده باشد، آخرین بکاپ هم آلوده است و راه نفوذ هنوز باز است. نصب افزونه یا قالب نالشده برای اسکن هم وضع را بدتر میکند، چون نسخههای کرکشده خودشان منبع رایج آلودگیاند. پاک کردن access log و auth log برای آزاد کردن فضا هم تنها سند ورود مهاجم را از بین میبرد.
اسکنر امنیتی داخل وردپرس برای شناسایی اولیه مفید است، اما به cron سرور، کاربران سیستم و سایتهای دیگر همان حساب دسترسی ندارد. اگر اسکن افزونه چیزی پیدا نکرد و نشانهها ادامه دارند، آلودگی احتمالاً بیرون از دسترس آن است. خطای دیگر، بستن پرونده بدون بهروزرسانی هسته، افزونهها و قالب است. آسیبپذیریای که بار اول راه ورود بود، بار دوم هم استفاده میشود.
اگر فایلها رمز شدهاند و یادداشت باج روی سرور است، مسیر کار متفاوت است و اول باید جلوی گسترش رمزگذاری گرفته شود. در این حالت صفحه بازیابی از باجافزار را ببینید.
بعد از پاکسازی: هشدار گوگل، امنسازی و هزینه
اگر گوگل برای سایت هشدار امنیتی نشان داده یا صفحات اسپم ایندکس شدهاند، پس از پاکسازی و اطمینان از سالم بودن سایت، درخواست بازبینی در Search Console ثبت میشود. زمان برداشته شدن هشدار دست گوگل است و صفحات اسپم ایندکسشده هم ممکن است مدتی در نتایج بمانند. پاکسازی سایت را به وضعیت سالم برمیگرداند. سختسازی سرویسها، سیاست دسترسی و فایروال کار جداگانهای است که در امنسازی سرور انجام میشود.
زمان و هزینه رفع هک به تعداد سایتهای آلوده در حساب یا سرور، نوع میزبانی و عمق آلودگی بستگی دارد. پاکسازی یک سایت وردپرس روی هاست اشتراکی با بررسی سروری که دسترسی root آن دست مهاجم بوده قابل مقایسه نیست. لاگهای دسترسی و بکاپهای قدیمیتر، اگر باقی مانده باشند، تحلیل را کوتاهتر میکنند. نوع آلودگی احتمالی و مسیر پاکسازی پس از بررسی اولیه رایگان در تلگرام توضیح داده میشود و قیمت بعد از آن اعلام میشود.