چطور پلاگین وردپرس را بررسی کنیم تا مطمئن شویم ویروسی نیست؟ (راهنمای کامل و ابزارها)
راهنمای جامع بررسی ایمن پلاگین وردپرس — چگونه قبل از نصب بفهمیم پلاگین ویروسی یا مخرب نیست
مقالهای عملی و گامبهگام برای توسعهدهندگان و مدیران سایت که توضیح میدهد چگونه یک فایل ZIP پلاگین وردپرس را بهصورت ایمن و آفلاین بررسی کنند، از اسکنهای چندموتوره تا آنالیز دستی کد و تشخیص الگوهای مخرب. شامل مراحل آپلود در سایتهای چندموتوره، آنالیز دینامیک (sandbox)، اسکن سایت تست و راهکارهای پاکسازی.
خلاصهٔ مقاله (Executive Summary)
این مقاله یک چکلیست و راهنمای عملی برای بررسی امنیتی پلاگینهای وردپرس — پیش از نصب روی سایت زنده — ارائه میدهد. مراحل از آمادهسازی یک محیط ایزوله (VM یا دستگاه تست)، آپلود و اسکن در سرویسهای چندموتوره (مثل VirusTotal، MetaDefender)، تحلیل دینامیک (Hybrid-Analysis / sandboxes)، تا آنالیز دستی فایلها و تشخیص الگوهای رایج بدافزار را پوشش میدهد. هدف نهایی جلوگیری از آلودهشدن سایت تولید (Live) و ارائهٔ دستورالعملهای قابل اجرا برای مدیران وب است.
فهرست مطالب
- مقدمه و هشدارهای ایمنی
- آمادهسازی محیط تست
- آپلود و اسکن چندموتوره (فایل ZIP)
- بررسی دستی کد — راهنمای کامل
- آنالیز دینامیک (Sandbox) و ابزارهای رفتاری
- اسکن سایت تست (پس از نصب در محیط ایزوله)
- ابزارها و اسکریپتهای کمکی (دستورات آماده)
- چگونه تشخیص دهیم که نتیجهٔ بررسی «بدافزار» است یا خیر
- در صورت مشاهدهٔ رفتار مخرب — اقدامات ضروری
- نمونهٔ گزارش کوتاه برای مدیر سایت
- چکلیست نهایی برای انتشار یا عدم انتشار پلاگین
- پرسشهای متداول (FAQ)
- منابع و مطالعهٔ بیشتر
1. مقدمه و هشدارهای ایمنی
هرگز فایل پلاگینی که دربارهٔ منبع آن اطمینان ندارید را مستقیماً روی سایت تولید نصب نکنید. همهٔ بررسیها باید در محیطی ایزوله (مانند VM آفلاین، ماشین فیزیکی جدا یا کانتینر) انجام شوند. آپلود فایل به سرویسهای آنلاین ممکن است اطلاعاتی دربارهٔ نمونهٔ شما را با جامعهٔ امنیتی به اشتراک بگذارد؛ اگر این موضوع برای شما حساس است، ابتدا تحلیل محلی انجام دهید.
2. آمادهسازی محیط تست
- ایجاد یک دایرکتوری کاری اختصاصی و ذخیرهٔ نسخهٔ اصلی ZIP.
- تهیهٔ هش SHA256 از فایل ZIP و ثبت آن برای بازبینی و ردگیری.
دستورات نمونه:
mkdir ~/plugin-audit && cd ~/plugin-audit
cp /path/to/suspect-plugin.zip .
sha256sum suspect-plugin.zip > suspect-plugin.zip.sha256
sha256sum -c suspect-plugin.zip.sha256
نکته: در ویندوز از PowerShell استفاده کنید و تمام عملیات را در VM یا ماشین جدا انجام دهید.
3. آپلود و اسکن چندموتوره (فایل ZIP)
آپلود فایل ZIP یا فایلهای استخراجشده به سرویسهای چندموتوره سریعترین راه برای پیدا کردن تشخیصهای شناختهشده است. این مرحله همیشه اولین گام نیست—اگر نمونه حساسی است، ابتدا تحلیل محلی انجام دهید—اما برای اکثر حالات عمومی مفید است.
سرویسهای پیشنهادی و کاربرد آنها
- VirusTotal: آپلود فایل یا URL، نمایش نتایج از چندین آنتیویروس، نمایش رفتار شبکه (برای فایلهای اجرایی) و مشاهده هشی که میتوانید به اشتراک بگذارید.
- MetaDefender / OPSWAT: بررسی از چندین موتور با جزئیات متادیتا.
- Hybrid-Analysis / JoeSandbox: تحلیل رفتار (dynamic) برای انواع فایلها (مفید برای شناسایی تماسهای شبکهای و رفتار runtime).
نکات عملی هنگام آپلود
- قبل از آپلود، هش SHA256 را ذخیره کنید تا بتوانید بعداً نسخهٔ آپلود شده را مطابقت دهید.
- اگر فایل حاوی اطلاعات حساس یا دادهٔ کاربری است، از آپلود خودداری کنید یا نسخهای از فایل را پاکسازی کنید (ولی این کار ممکن است نشاندهندهٔ تغییر در نمونه شود).
- نتایج ابزارها ممکن است مثبت کاذب داشته باشند — ترکیب با بررسی دستی و دینامیک ضروری است.
4. بررسی دستی کد — راهنمای کامل
این بخش گامبهگام کارهایی را که باید برای بررسی دستی انجام دهید پوشش میدهد.
4.1 استخراج و ثبت
unzip suspect-plugin.zip -d suspect-plugin
cd suspect-plugin
نسخهٔ ZIP و پوشهٔ استخراجشده را نگه دارید و هشها را ثبت کنید.
4.2 اسکن الگوهای خطرناک با grep
برای یافتن الگوهای شناختهشده:
grep -R --line-number -E "eval\(|base64_decode\(|gzinflate\(|gzuncompress\(|str_rot13\(|create_function\(|preg_replace\(.*/e|shell_exec\(|exec\(|passthru\(|system\(|popen\(|proc_open\(|fsockopen\(|curl_exec\(|curl_multi_exec\(|file_put_contents\(|fopen\(|fwrite\(|chmod\(|chown\(|unlink\(|move_uploaded_file\(|add_option\(|update_option\(|delete_option\(|wp_schedule_event|register_activation_hook" .
همچنین برای جاوااسکریپت و URLها:
grep -R --line-number -E "eval\(|atob\(|unescape\(|document.write\(|setTimeout\(|setInterval\(" .
grep -R --line-number -E "https?://|http://|//[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" .
4.3 بررسی اندازه فایلها و سایر مشاهدات ساختاری
فایل خیلی بزرگ یا خیلی کوچک میتواند نشانهٔ obfuscation یا دادهٔ جاسازیشده باشد:
find . -type f -printf "%s\t%p\n" | sort -n | tail -n 30
find . -type f -printf "%s\t%p\n" | sort -n | head -n 30
4.4 بررسی سینتکس PHP
find . -name '*.php' -print0 | xargs -0 -n1 php -l
4.5 تحلیل قطعات Obfuscated
- هرگز خروجی را در محیط تولید اجرا نکنید. برای decode کردن رشتههای base64/gzinflate از VM آفلاین استفاده کنید.
- نمونهٔ استخراج و decode:
# استخراج رشتهی base64 (روش ممکن بسته به کد متفاوت است)
sed -n "1,200p" path/to/file.php | sed -n "s/.*base64_decode(\'\([^']*\)\').*/\1/p" > suspect.b64
cat suspect.b64 | base64 -d > suspect.decoded.txt
less suspect.decoded.txt
- برای gzinflate ممکن است لازم باشد خروجی base64 را ابتدا decode و سپس gzinflate کنید؛ این کار بهتر است با یک اسکریپت PHP محدود در VM آفلاین انجام شود.
4.6 بررسی Hookها، کرونها و توابع دیتابیس
جستجو برای توابعی که هنگام نصب یا به صورت زمانبندیشده اجرا میشوند:
grep -R --line-number -E "register_activation_hook|register_deactivation_hook|register_uninstall_hook|wp_schedule_event|add_action|add_filter|$wpdb->query|$wpdb->insert|update_option" .
فایلهایی که callback این توابع را ثبت میکنند را باز کنید و بررسی کنید آیا آنها به آدرسهای خارجی متصل میشوند یا عملیات نوشتن گستردهای انجام میدهند.
4.7 استخراج دامنهها و آیپیهای خارجی
grep -RhoE "https?://[A-Za-z0-9./?_%:-]*" . | sort -u > external-urls.txt
grep -RhoE "[0-9]{1,3}(\.[0-9]{1,3}){3}" . | sort -u > ips.txt
این لیست را بررسی کنید و در صورت مشکوک بودن دامنهها آنها را در WHOIS یا سرویسهای تهدیدسنجی جستجو کنید.
4.8 بررسی dependencyها و فایلهای اجرایی
اگر composer.json
یا package.json
وجود دارد، dependencyها را بررسی و در صورت وجود vendor/
یا node_modules/
مراقب فایلهای واردشدهٔ خارجی باشید.
4.9 راهنمای عملی تحلیل خروجیهای مشکوک
- هر مورد
eval(base64_decode(...))
را پرچم کنید. - فراخوانی توابع exec/system به همراه URL خارجی یا نوشتن در فایلهای کانفیگ را خطرناک بدانید.
- اگر کد صرفاً افزودن shortcodes، widget یا صفحهٔ تنظیمات است و مستندات و فایلها با نسخهٔ رسمی همخوانی دارد، معمولاً بیخطر است.
5. آنالیز دینامیک (Sandbox) و ابزارهای رفتاری
آنالیز رفتار runtime میتواند تماسهای شبکهای، دسترسی به فایلسیستم و رفتارهای دیگر را آشکار کند.
ابزارها
- Hybrid-Analysis / JoeSandbox: اجرای فایلها در محیط کنترلشده و ارائهٔ گزارشهای ترکیبی از رفتار شبکه، فایلها و شاخصهای تهدید.
- Cuckoo Sandbox: اگر میخواهید خودتان sandbox راهاندازی کنید.
نکات استفاده
- فایل یا نمونهٔ استخراجشده را (در صورت امکان) به سرویس ارسال کنید و گزارش رفتار را تحلیل کنید.
- به دنبال تماسهای DNS، اتصالات HTTP/HTTPS، تلاش برای اجرای کد خارجی یا بارگذاری فایلها باشید.
- گزارشها معمولاً شامل Indicators of Compromise (IoCs) مانند domain, IP, file hashes هستند — آنها را ثبت کنید.
6. اسکن سایت تست (پس از نصب در محیط ایزوله)
پس از اطمینان از عدم وجود بدافزار آشکار، میتوانید پلاگین را در یک سایت تست نصب کنید و با ابزارهای زیر اسکن کنید:
- Wordfence: اسکن فایلها، پلاگینها و الگوهای شناخته شده.
- Sucuri SiteCheck: بررسی صفحات و شاخصهای بدافزاری شناختهشده.
- WPScan: بررسی آسیبپذیریهای شناختهشده مربوط به پلاگین.
نکته: این اسکنها باید روی محیط تست انجام شود و نه روی سایت تولید.
7. ابزارها و اسکریپتهای کمکی (دستورات آماده)
اسکریپت سادهٔ جمعآوری یافتهها:
#!/bin/bash
out="suspicious-findings.txt"
> "$out"
patterns=("eval\(" "base64_decode\(" "gzinflate\(" "shell_exec\(" "exec\(" "passthru\(" "fsockopen\(" "curl_exec\(" "file_put_contents\(" "wp_schedule_event" "register_activation_hook")
for p in "${patterns[@]}"; do
echo "=== PATTERN: $p ===" >> "$out"
grep -R --line-number -E "$p" . >> "$out" || true
done
echo "Results in $out"
جمعآوری URL/IP:
grep -RhoE "https?://[A-Za-z0-9./?_%:-]*" . | sort -u > external-urls.txt
grep -RhoE "[0-9]{1,3}(\.[0-9]{1,3}){3}" . | sort -u > ips.txt
بررسی سینتکس PHP:
find . -name '*.php' -print0 | xargs -0 -n1 php -l
8. چگونه تشخیص دهیم که نتیجهٔ بررسی «بدافزار» است یا خیر
- مواردی که تقریباً همیشه خطرناکاند:
eval(base64_decode(...))
، کدهایی که به URLهای خارجی متصل میشوند و سپسfile_put_contents
یاwp-config
را دستکاری میکنند، ثبت cron که از URL خارجی payload میگیرد. - مواردی که نیاز به بررسی بیشتر دارند: کد minified یا packed که عملکرد معقولی دارد (مثلاً JS که برای UI مفید است). این موارد ممکن است بیضرر باشند اما بررسی دستی لازم است.
- مثبت کاذب: بعضی کتابخانهها یا ابزارها از توابع مشابه استفاده میکنند (مثلاً base64 برای دادهٔ مجاز). همیشه متن decode شده را بررسی کنید و ببینید آیا منطق معقولی دارد یا خیر.
9. در صورت مشاهدهٔ رفتار مخرب — اقدامات ضروری
- فایل/پلاگین را حذف کنید از محیط تست و هر محیطی که ممکن است نصب شده باشد.
- اگر نصب روی سایت تولید انجام شده است:
- سایت را به حالت آفلاین ببرید و از دسترسیهای مهاجمان جلوگیری کنید.
- از آخرین بکآپ سالم restore کنید.
- همهٔ پسوردهای admin و سرویسهای مرتبط را تغییر دهید (FTP, DB, SSH).
- فایلهای لاگ و دیتابیس را برای IoCها (دامنهها، IPها، الگوهای تغییر فایل) بررسی کنید.
- در صورت نیاز از سرویسهای پاکسازی حرفهای مثل Sucuri استفاده کنید.
- گزارش نمونهٔ آلوده را در VirusTotal و به تیم وردپرس (در صورت جعل هویت plugin) ارسال کنید.
10. نمونهٔ گزارش کوتاه برای مدیر سایت
Plugin: suspect-plugin
SHA256(zip): <hash>
Date analysed: 2025-10-17
Environment: VM offline Ubuntu 22.04
Findings:
- files with eval/base64: includes wp-includes/some.php (line 45)
- external urls: http://45.33.12.5/payload.php
- register_activation_hook used to create cron job calling remote URL
- php -l : no syntax errors
Recommendation:
- Do NOT install on production. Remove plugin. If installed, restore from backup and change wp salts and admin passwords.
- Submit files to VirusTotal and report to WordPress plugin team if plugin claims to be from wordpress.org but differs.
11. چکلیست نهایی برای انتشار یا عدم انتشار پلاگین
- فایل ZIP را در VM ایزوله باز کردم و هش SHA256 را ثبت کردم.
- فایل را در VirusTotal و MetaDefender آپلود کردم و نتایج را ذخیره کردم.
- grep الگوهای خطرناک را اجرا کردم و یافتهها را بررسی کردم.
- همهٔ توابع hook/cron که خارجی صدا میزنند را بررسی کردم.
- تمامی دامنهها/IPهای استخراجشده را بررسی کردم.
- پلاگین را در سایت تست نصب کردم و با Wordfence/Sucuri/WPScan اسکن کردم.
- اگر شواهد مخرب بود: حذف، restore و تغییر پسوردها انجام شد.
اگر همهٔ آیتمها پاک بودند و کد با نسخهٔ رسمی (در صورت وجود) همخوانی داشت، میتوانید پلاگین را در محیط تولید منتشر کنید.
12. پرسشهای متداول (FAQ)
س: آیا آپلود به VirusTotal دائماً امن است؟
ج: آپلود نمونهها معمولاً بیخطر است اما توجه داشته باشید که برخی سرویسها دادهها را با محققان یا عمومی به اشتراک میگذارند؛ اگر نمونه حساس دارید ابتدا تحلیل محلی انجام دهید.
س: اگر کد obfuscated باشد، چطور اطمینان پیدا کنم؟
ج: decode/pretty-print را در VM آفلاین انجام دهید. اگر پس از decode منطق معقولی ندیدید یا چند لایه obfuscation بود، نمونه را در sandbox اجرا و یا برای یک تحلیلگر ارسال کنید.
س: بعضی نتایج اسکنها مثبت کاذب است — چطور قطعی کنم؟
ج: همیشه ترکیبی از اسکن چندموتوره، بررسی دستی و (در صورت نیاز) آنالیز دینامیک را استفاده کنید. بررسی متن decode شده و نحوهٔ استفادهٔ توابع مشکوک راهحل خوبی است.
13. منابع و مطالعهٔ بیشتر
(در این سند نسخهٔ منابع قرار نگرفته؛ هنگام انتشار در سایت میتوانید لینکهای مرجع به VirusTotal، MetaDefender، Hybrid-Analysis، WPScan، Sucuri و Wordfence را اضافه کنید.)