در دنیای امنیت سایبری، وب شل (Web Shell) یکی از خطرناکترین و مخربترین ابزارهایی است که یک هکر میتواند در سرور شما کار بگذارد.
این ابزار به ظاهر ساده، یک درپشتی (Backdoor) قدرتمند است که به مهاجم اجازه میدهد کنترل کامل سرور شما را در دست بگیرد، اطلاعات را به سرقت ببرد و حملات بیشتری را سازماندهی کند. درک اینکه وب شل چیست، چگونه کار میکند و چگونه میتوان آن را شناسایی و حذف کرد، برای هر مدیر سرور یا صاحب وبسایتی حیاتی است.
به زبان ساده، فایل وب شل یک اسکریپت مخرب است که توسط مهاجم بر روی سرور قربانی آپلود میشود. این اسکریپت معمولاً به زبانهایی مانند PHP، ASP، JSP، پایتون یا پرل نوشته میشود (که نمونه وب شل PHP و نمونه وب شل ASP از رایجترین آنها هستند) و از طریق یک آسیبپذیری در برنامه وب (مانند آسیبپذیری آپلود فایل یا اجرای کد از راه دور) به سرور راه پیدا میکند.
پس از آپلود، مهاجم میتواند از طریق مرورگر وب خود به این فایل دسترسی پیدا کند. وب شل یک رابط کاربری (اغلب گرافیکی) در اختیار مهاجم قرار میدهد که به او اجازه میدهد:
• دستورات سیستمی را روی سرور اجرا کند (گویی که به ترمینال web shell در لینوکس یا Command Prompt در web shell در ویندوز دسترسی دارد).
• فایلها و دایرکتوریها را مرور، ویرایش، حذف یا آپلود کند.
• به پایگاه داده دسترسی پیدا کرده و اطلاعات آن را استخراج یا دستکاری کند.
• اطلاعات حساس سرور (مانند فایلهای پیکربندی، رمزهای عبور) را به سرقت ببرد.
• از سرور شما به عنوان یک پلتفرم برای حملات بیشتر (مانند ارسال اسپم، حملات DDoS یا نفوذ به سرورهای دیگر) استفاده کند.
تشخیص web shell میتواند چالشبرانگیز باشد، زیرا مهاجمان اغلب سعی میکنند آنها را در مکانهای غیرمنتظره یا با نامهای فریبنده پنهان کنند. با این حال، شاخصهای وجود وب شل متعددی وجود دارد که میتوانید به دنبال آنها باشید.
یکی از اولین نشانههای وب شل، وجود فایلهای مشکوک در سرور شماست. به خصوص مراقب موارد زیر باشید:
• فایلهایی با تاریخ اصلاح (Modification Time) مشکوک: به دنبال فایلهایی باشید که اخیراً ایجاد یا ویرایش شدهاند، به خصوص فایلهایی که شما یا تیمتان آنها را تغییر ندادهاید.
•   مکانهای مشکوک: دایرکتوریهای آپلود (مانند /wp-content/uploads/ در وردپرس) مکانهای رایجی برای پنهان کردن وب شلها هستند.
•   نامهای فایل فریبنده: مهاجمان ممکن است از نامهایی مانند c99.php، r57.php یا نامهای تصادفی مانند x.php استفاده کنند. همچنین ممکن است از تکنیکهایی مانند “double extension” (مانند image.jpg.php) برای فریب دادن مدیران سرور استفاده کنند.
• فایلهایی با حجم بسیار کم یا بسیار زیاد: یک وب شل ساده میتواند فقط یک خط کد باشد، در حالی که وب شلهای پیشرفتهتر میتوانند صدها کیلوبایت حجم داشته باشند.
لاگهای سرور وب (مانند access log و error log) گنجینهای از اطلاعات برای detection وب شل هستند. به دنبال الگوهای غیرعادی باشید:
•   درخواستهای HTTP (به خصوص POST) به فایلهایی که نباید درخواستی دریافت کنند (مانند فایلهای .php در دایرکتوری آپلود تصاویر).
• درخواستهایی با User-Agent های عجیب یا مشکوک.
• درخواستهایی از آدرسهای IP غیرمنتظره که به فایلهای حساس یا ناشناخته دسترسی پیدا میکنند.
• کدهای خطای 404 زیاد که نشاندهنده تلاش برای اسکن فایلها و دایرکتوریها توسط مهاجم است.
استفاده از ابزارهای خودکار میتواند فرآیند اسکن وب شل را بسیار تسریع کند. ابزارهای شناسایی وب شل متعددی وجود دارند:
• ClamAV: میتوان از clamav برای وب شل استفاده کرد. با بهروزرسانی منظم پایگاه داده امضاهای آن، میتواند بسیاری از وب شلهای شناختهشده را شناسایی کند.
•   YARA: ابزاری قدرتمند برای تطبیق الگو است. با نوشتن yara برای وب شل (قوانین YARA)، میتوانید فایلهایی را که حاوی توابع یا رشتههای متنی رایج در وب شلها هستند (مانند shell_exec, passthru, eval) پیدا کنید.
• اسکنرهای اختصاصی وب شل: ابزارهایی مانند Linux Malware Detect (LMD) یا اسکنرهای PHP مخصوص، برای پیدا کردن کدهای مخرب در فایلهای متنی بهینهسازی شدهاند.
اگر یک وب شل پیدا کردید، وحشت نکنید. اما باید سریع و با دقت عمل کنید.
آموزش حذف وب شل شامل مراحل زیر است:
۱. سرور را ایزوله کنید: اولین قدم، قطع دسترسی سرور از اینترنت (در صورت امکان) یا مسدود کردن دسترسی خارجی به آن است تا جلوی فعالیت بیشتر مهاجم گرفته شود.
۲. شناسایی کامل فایلها: مهاجمان به ندرت فقط یک فایل وب شل باقی میگذارند. با استفاده از روشهای بالا، تمام فایلهای آلوده وب شل و درپشتیها را پیدا کنید.
۳. تحلیل وب شل (اختیاری اما توصیهشده): قبل از حذف، یک کپی از فایل مخرب بردارید (در یک محیط امن) تا آن را تحلیل وب شل کنید. این کار به شما کمک میکند بفهمید مهاجم چه کارهایی انجام داده و (مهمتر از همه) از کدام آسیبپذیری برای نفوذ استفاده کرده است.
۴. حذف فایلهای مخرب: تمام فایلهای وب شل شناساییشده را حذف کنید.
۵. پیدا کردن و پچ کردن آسیبپذیری: این مهمترین مرحله است. اگر فقط وب شل را حذف کنید اما راه نفوذ را نبندید، مهاجم به سادگی بازمیگردد. آسیبپذیری میتواند یک پلاگین قدیمی webshell در وردپرس، یک فرم آپلود غیرمجاز فایل یا یک ضعف امنیتی دیگر باشد.
۶. بررسی بکدورهای دیگر: مهاجم ممکن است کاربران جدیدی در سیستم، تسکهای زمانبندیشده (Cron Jobs) یا تغییراتی در فایلهای سیستمی ایجاد کرده باشد. آنها را بررسی و پاکسازی کنید.
۷. تغییر تمام رمزهای عبور: بلافاصله تمام رمزهای عبور (SSH، FTP، ادمین CMS، پایگاه داده) را تغییر دهید.
گاهی اوقات، بهخصوص اگر نفوذ عمیق باشد، بازگردانی از بکاپ پس از وب شل سادهترین و مطمئنترین راه است.
اما مراقب باشید:
• باید از یک بکاپ “پاک” که قبل از تاریخ نفوذ گرفته شده، استفاده کنید.
• قبل از بازگردانی بکاپ، باید آسیبپذیری اولیه (مثلاً پلاگین قدیمی) را شناسایی و رفع کنید. در غیر این صورت، سایت شما بلافاصله پس از بازگردانی دوباره هک خواهد شد.
امنیت سرور در برابر وب شل نیازمند یک رویکرد چندلایه است. نحوه پیدا کردن web shell مهم است، اما جلوگیری از ورود آن مهمتر است.
• سطوح دسترسی فایل: اطمینان حاصل کنید که فایلها و دایرکتوریها دارای سطوح دسترسی صحیحی هستند. هیچ دایرکتوری نباید قابل نوشتن عمومی (777) باشد. دایرکتوریهای آپلود نباید اجازه اجرای اسکریپت را داشته باشند.
•   هاردنینگ PHP علیه وب شل: در فایل php.ini، توابع خطرناکی را که اغلب توسط وب شلها استفاده میشوند، غیرفعال کنید. توابعی مانند: exec, passthru, shell_exec, system, proc_open, popen.
بسیاری از وب شلها از طریق فرمهای آپلود فایل نفوذ میکنند.
برای محافظت از آپلود فایل:
• اعتبارسنجی سمت سرور: هرگز به اعتبارسنجی نوع فایل در سمت کلاینت (جاوا اسکریپت) اعتماد نکنید.
•   لیست سفید (Whitelist) پسوندها: فقط به پسوندهای مجاز (مانند .jpg, .png, .pdf) اجازه آپلود بدهید و بقیه را مسدود کنید. هرگز از لیست سیاه (Blacklist) استفاده نکنید.
• تغییر نام فایلها: پس از آپلود، نام فایل را به یک رشته تصادفی و منحصر به فرد تغییر دهید.
• ذخیره در خارج از ریشه وب: در صورت امکان، فایلهای آپلود شده را در دایرکتوری خارج از ریشه اصلی وبسایت (document root) ذخیره کنید.
• سرو از دامنه دیگر: فایلهای آپلودی کاربران را از یک زیردامنه یا CDN دیگر سرو کنید که قابلیت اجرای اسکریپت در آن غیرفعال است.
یک فایروال برنامه وب (Web Application Firewall) میتواند بسیاری از حملات رایج را قبل از رسیدن به سرور شما مسدود کند. قوانین WAF برای وب شل (یا قواعد WAF برای web shell) میتوانند الگوهای آپلود فایلهای مخرب یا درخواستهای مشکوک به وب شلهای موجود را شناسایی و بلاک کنند.
• بهروزرسانی: تمام نرمافزارها، از جمله CMS (مانند وردپرس و پلاگینهای آن)، فریمورکها و نرمافزارهای سرور (web shell در لینوکس و web shell در ویندوز) را همیشه بهروز نگه دارید. وب شل و نفوذ به وردپرس اغلب به دلیل پلاگینهای قدیمی اتفاق میافتد.
• مانیتورینگ: به طور مداوم لاگها و یکپارچگی فایلها را (ترجیحاً با ابزارهای خودکار) رصد کنید.
یک وب شل ابزاری قدرتمند در دست مهاجم است، اما قابل شناسایی و پیشگیری است.
با درک شاخصهای نفوذ web shell، اجرای یک چکلیست پاکسازی وب شل قوی و اعمال لایههای دفاعی متعدد، میتوانید امنیت سرور در برابر وب شل را به طور قابل توجهی افزایش دهید. به یاد داشته باشید که امنیت یک فرآیند مداوم است، نه یک اقدام یکباره.