Scalpel: دنبال رد پای نفوذگر تو پروژهٔ لاراول
خلاصهٔ کاملتر
Laravel Scalpel یه اسکنر شواهد نفوذه که Harry Agustiana نوشته و داخل خود اپ لاراول اجرا میشه. تو معرفیش اومده که کارش با ابزارهایی مثل Ward و Checkpoint فرق داره: اونها کد و تنظیمات و وابستگیها رو دنبال مشکل امنیتی میگردن، ولی Scalpel دنبال این میگرده که آیا تو یه اپ مستقر شده، فایلی اضافه، عوض یا حذف شده یا نه.
دستور scalpel:scan بهصورت پیشفرض شش اسکنر رو اجرا میکنه. اسکنر ساختاری دنبال فایلهای اجرایی PHP تو جاهایی میگرده که نباید باشن، یعنی public/ و storage/، و پسوندهای کمتر شناختهشده مثل .phtml و .phar و اسمهای دوپسوندی مثل avatar.php.jpg رو هم میگیره. اسکنر کد مبهم دنبال الگوهای رایج بکدور مثل eval(base64_decode(...)) و اجرای ورودی مستقیم درخواست میگرده. دو تا اسکنر دیگه هم .htaccess و .user.ini رو چک میکنن، مخصوصا دستور auto_prepend_file که مهاجم باهاش یه فایل مخفی رو سر هر درخواست اجرا میکنه.
اسکنر محیط هم نبود یا خالی بودن .env، قرار گرفتنش زیر public/، دسترسی خوندن برای همه، و APP_KEY خالی رو گزارش میده. اگه APP_ENV روی production باشه، فعال بودن APP_DEBUG رو هم پرچم میزنه. اسکنر ششم کار متفاوتی داره و به جای محتوا، وضعیت فعلی رو با یه اسنپشات ذخیرهشده مقایسه میکنه.
اون اسنپشات با دو تا دستور ساخته و مقایسه میشه که برای هر فایل هش SHA-256، اندازه و زمان تغییر رو نگه میدارن:
php artisan scalpel:baseline
php artisan scalpel:diffاین baseline رو فقط وقتی بساز که مطمئنی اپ سالمه. حالت پیشفرض strict ه و هر بار همهٔ فایلها رو هش میکنه؛ گزینهٔ --fast اول اندازه و زمان تغییر رو نگاه میکنه و سریعتره، ولی اگه مهاجم اندازه و تاریخ فایلو دستنخورده نگه داره ممکنه از دستش در بره. امضای HMAC هم هست، با SCALPEL_SIGNING_ENABLED و یه کلید جدا از APP_KEY، که جلوی ساختن دوبارهٔ baseline توسط مهاجمو میگیره.
نویسندهٔ مقاله نسخهٔ ۱.۹.۰ رو روی یه لاراول ۱۳.۳۱ تازه تست کرده و با baseline سالم، اسکن پیشفرض هیچ یافتهای نداشته. ولی به یه نکتهٔ مهم برای CI برخورده: بعد از php artisan optimize، ویوهای کامپایلشده زیر storage/framework/views باعث ۱۰۰ یافتهٔ MEDIUM و دو تا HIGH شدن. راهحلش یا پاک کردن کش قبل از اسکنه یا اضافه کردن اون مسیر به content_scan_excluded_paths. آخر کار هم یادآوری میکنه که Scalpel تو همون پروسه و با همون دسترسی اپ اجرا میشه، پس کسی که بتونه کد اپو عوض کنه میتونه خود اسکنرم دستکاری کنه.
نکات کلیدی:
- نیاز به PHP 8.2 به بالا و پشتیبانی از لاراول ۱۰ تا ۱۳
- شش اسکنر پیشفرض: ساختاری، کد مبهم، .htaccess، .user.ini، محیط، و مقایسه با baseline
- خروجی table، JSON، انوتیشن GitHub Actions و SARIF؛ --fail-on پیشفرض روی HIGH
- کد خروج ۰ یعنی تمیز، ۱ یعنی یافته بالای آستانه، ۲ یعنی یافتهٔ پایینتر یا اسکن ناقص
- بعد از هر اسکن رویداد ScanFinished با یافتهها و مدت زمان اجرا دیسپچ میشه
- Scalpel فقط شواهد نفوذ رو پیدا میکنه و نقش فایروال یا مهار مهاجمو نداره




