پاکسازی سایت هک شده؛ از وحشت تا اقدام درست
وقتی متوجه میشوید سایتتان هک شده، اولین واکنش معمولاً وحشت و حذف فایلهای آلوده است. اما اگر بدون برنامه پیش بروید، هم شواهد را از بین میبرید و هم احتمالاً راه نفوذ را باز میگذارید. پاکسازی سایت هک شده یک فرآیند سیستماتیک است که باید به ترتیب انجام شود: ایزوله، بکاپ، پاکسازی، تغییر رمزها و در نهایت بستن آسیبپذیری. در این مقاله دقیقاً همین مسیر را با دستورات عملی و مثالهای واقعی طی میکنیم.
نکته مهم: اگر سایت شما روی هاست اشتراکی است و چند سایت دیگر روی همان سرور قرار دارند، ریسک آلودگی متقابل بالاست. در این حالت، ابتدا با پشتیبانی هاست هماهنگ کنید و اگر امکانش هست، سایت را به یک محیط ایزوله (VPS یا دایرکتوری جدا) منتقل کنید. سرورنت نیز خدمات میزبانی امن ارائه میدهد که در چنین شرایطی میتواند گزینه مناسبی باشد، اما تمرکز این مقاله بر خود فرآیند پاکسازی است.
گام اول: ایزوله کردن و قطع دسترسی
هدف این مرحله جلوگیری از گسترش آلودگی و حفظ شواهد است. اگر سایت شما روی سرور لینوکسی با SSH است، این دستورات را اجرا کنید:
# قطع دسترسی وب به دایرکتوری سایت
sudo a2dissite your-site.conf
sudo systemctl reload apache2
# یا اگر nginx دارید:
sudo rm /etc/nginx/sites-enabled/your-site
sudo systemctl reload nginx
اگر به SSH دسترسی ندارید (هاست اشتراکی)، از طریق cPanel یا DirectAdmin، سایت را موقتاً غیرفعال کنید یا یک صفحه maintenance.html جایگزین index کنید. این کار باعث میشود بازدیدکنندگان و موتورهای جستجو به محتوای آلوده دسترسی پیدا نکنند.
بررسی اولیه: چه چیزی تغییر کرده است؟
قبل از هر اقدامی، تاریخچه تغییرات فایلها را بررسی کنید. اگر از Git استفاده میکنید:
cd /var/www/your-site
git status
git diff --stat
اگر Git ندارید، فایلهایی که اخیراً تغییر کردهاند را پیدا کنید:
find /var/www/your-site -type f -mtime -7 -exec ls -la {} \;
این خروجی به شما نشان میدهد کدام فایلها در بازه زمانی هک تغییر کردهاند. معمولاً فایلهای .php در دایرکتوریهای آپلود یا قالبها هدف اصلی هستند.
گام دوم: بکاپگیری از سایت آلوده
شاید عجیب به نظر برسد، اما باید از سایت آلوده بکاپ بگیرید. چرا؟ چون این بکاپ برای تحلیل بدافزار و شناسایی الگوی حمله ضروری است. اگر بعداً متوجه شدید که هکر به دیتابیس دسترسی داشته، این بکاپ به کارتان میآید.
# بکاپ کامل از فایلها
tar -czf /backup/compromised-site-$(date +%Y%m%d).tar.gz /var/www/your-site
# بکاپ از دیتابیس (مثال MySQL)
mysqldump -u root -p your_database > /backup/db-compromised-$(date +%Y%m%d).sql
این بکاپها را در یک مکان امن خارج از سرور نگه دارید (مثلاً روی سیستم شخصی یا فضای ابری). بعد از پاکسازی، اگر نیاز به تحلیل داشتید، از همین فایلها استفاده میکنید.
گام سوم: پاکسازی فایلها و دیتابیس
حالا وقت اصلی کار است. پاکسازی سایت هک شده شامل دو بخش است: فایلها و دیتابیس.
پاکسازی فایلها
بهترین راه، مقایسه با نسخه اصلی است. اگر وردپرس دارید، هسته اصلی را با نسخه رسمی مقایسه کنید:
# دانلود وردپرس همنسخه با سایت شما
wget https://wordpress.org/wordpress-6.5.3.tar.gz
tar -xzf wordpress-6.5.3.tar.gz
# مقایسه فایلهای هسته
diff -r wordpress/ /var/www/your-site/wp-admin/ | head -50
diff -r wordpress/ /var/www/your-site/wp-includes/ | head -50
فایلهایی که در مقایسه متفاوت هستند یا در نسخه اصلی وجود ندارند، مشکوکاند. برای قالبها و افزونهها هم همین کار را با نسخه رسمی انجام دهید.
فایلهای مشکوک رایج:
wp-content/uploads/— فایلهای PHP که نباید آنجا باشندwp-content/mu-plugins/— افزونههای مخفی که در پیشخوان دیده نمیشوندwp-config.php— کدهای اضافی در انتهای فایل.htaccess— قوانین بازنویسی مخرب
برای حذف فایلهای قطعاً آلوده:
# حذف فایلهای PHP در پوشه آپلود (مثال)
find /var/www/your-site/wp-content/uploads -name "*.php" -delete
# حذف فایلهای eval و base64 که نشانه بدافزار است
grep -rl "eval(base64_decode" /var/www/your-site --include="*.php" | xargs rm -f
grep، حتماً خروجی را بررسی کنید. گاهی افزونههای قانونی هم از base64_decode استفاده میکنند. ابتدا لیست فایلها را ببینید، بعد تصمیم بگیرید.پاکسازی دیتابیس
هکرها معمولاً کدهای مخرب را در گزینههای قالب یا محتوای پستها تزریق میکنند. با این کوئریها دنبال ردپا بگردید:
-- جستجوی اسکریپتهای مخرب در محتوا
SELECT ID, post_title, post_content
FROM wp_posts
WHERE post_content LIKE '%eval(%'
OR post_content LIKE '%base64_decode(%'
OR post_content LIKE '%%';
-- بررسی گزینههای قالب
SELECT option_name, option_value
FROM wp_options
WHERE option_name LIKE '%theme%'
OR option_name LIKE '%widget%';
اگر محتوای آلوده پیدا کردید، آن را با محتوای سالم جایگزین کنید یا پست را حذف کنید. برای گزینههای قالب، معمولاً بهترین کار بازنشانی قالب به حالت پیشفرض است.
گام چهارم: تغییر همه رمزها
بعد از پاکسازی فایلها، باید فرض کنید همه رمزها لو رفتهاند. این موارد را حتماً تغییر دهید:
- رمزهای FTP/SFTP و SSH
- رمز دیتابیس (و آپدیت
wp-config.php) - رمز پیشخوان وردپرس برای همه کاربران
- رمزهای ایمیل مرتبط با دامنه (مثل
admin@yourdomain.com) - کلیدهای API و توکنهای سرویسهای خارجی
برای تغییر رمز دیتابیس در MySQL:
ALTER USER 'wp_user'@'localhost' IDENTIFIED BY 'NewStrongPassword!2024';
FLUSH PRIVILEGES;
و سپس مقدار DB_PASSWORD را در wp-config.php بهروزرسانی کنید.
همچنین کلیدهای امنیتی وردپرس را تغییر دهید. از این آدرس کلیدهای جدید بگیرید: https://api.wordpress.org/secret-key/1.1/salt/ و مقادیر AUTH_KEY تا NONCE_KEY را جایگزین کنید.
گام پنجم: بستن راه نفوذ
پاکسازی بدون بستن آسیبپذیری بیفایده است. هکرها معمولاً از این راهها وارد میشوند:
1. افزونهها و قالبهای قدیمی
آسیبپذیریهای شناختهشده در افزونههای قدیمی شایعترین راه نفوذ است. همه افزونهها و قالبها را به آخرین نسخه آپدیت کنید. افزونههایی که دیگر پشتیبانی نمیشوند را حذف کنید.
2. رمزهای ضعیف
اگر رمز مدیر سایت admin123 بوده، تعجبی ندارد که هک شده باشید. از رمزهای قوی استفاده کنید و احراز هویت دومرحلهای (2FA) را فعال کنید.
3. ورودهای غیرمجاز به wp-admin
دسترسی به wp-login.php را محدود کنید. در .htaccess میتوانید فقط IPهای خاص را مجاز کنید:
<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from 192.168.1.100
Allow from 203.0.113.5
</Files>
اگر IP ثابت ندارید، از افزونه محدودکننده تلاشهای ورود استفاده کنید.
4. بررسی لاگها
لاگهای سرور را برای یافتن الگوی حمله بررسی کنید:
# بررسی لاگ دسترسی آپاچی
grep "wp-login.php" /var/log/apache2/access.log | tail -20
# جستجوی درخواستهای POST به فایلهای PHP در پوشه آپلود
grep "POST.*uploads.*\.php" /var/log/apache2/access.log | tail -20
این لاگها نشان میدهند هکر از کدام نقطه وارد شده است. اگر الگوی مشخصی دیدید (مثلاً تعداد زیادی درخواست به یک فایل خاص)، آن نقطه را ببندید.
بازگردانی سایت و پایش مداوم
بعد از پاکسازی کامل و بستن آسیبپذیری، سایت را دوباره فعال کنید. اما کار تمام نشده است. برای چند هفته لاگها و فایلها را زیر نظر بگیرید:
# بررسی روزانه فایلهای جدید
find /var/www/your-site -type f -mtime -1 -exec ls -la {} \;
# بررسی تغییرات در فایلهای اصلی
md5sum /var/www/your-site/wp-config.php
همچنین یک افزونه امنیتی (مثل Wordfence یا Sucuri) نصب کنید که فایلها را اسکن و تغییرات را گزارش میدهد.
جمعبندی
پاکسازی سایت هک شده یک فرآیند چندمرحلهای است که نباید عجلهای انجام شود. ترتیب درست کارها: ایزوله کردن، بکاپگیری، پاکسازی فایلها و دیتابیس، تغییر همه رمزها و در نهایت بستن آسیبپذیری. اگر هر مرحله را درست انجام دهید، احتمال بازگشت هکر به حداقل میرسد. به یاد داشته باشید که امنیت یک فرآیند مداوم است، نه یک اقدام یکباره. سایت خود را بهروز نگه دارید، از رمزهای قوی استفاده کنید و لاگها را مرتب بررسی کنید.