تحلیل قانون: اجرای Rundll32 بدون آرگومان

Suspicious Rundll32 no Command Line Arguments - Rule Analysis

چرا این هشدار صادر می‌شود؟

ابزار rundll32.exe به طور طبیعی برای اجرای توابع موجود در فایل‌های DLL طراحی شده است و همیشه نیاز به آرگومان (نام DLL و نام تابع) دارد. اجرای این فایل بدون هیچ آرگومانی در خط فرمان، یک رفتار بسیار مشکوک و غیرطبیعی است. این تصویر نشان می‌دهد که چگونه Rundll32 به طور معمول فراخوانی می‌شود.

Normal: rundll32.exe shell32.dll,Control_RunDLL
Suspicious: rundll32.exe (Empty Command Line)
Technique: Process Injection / Hollowing (T1055)

بدافزارها (به ویژه ابزارهایی مثل Cobalt Strike) این پردازش را اجرا می‌کنند تا بلافاصله کد مخرب خود را درون آن تزریق کنند (Process Hollowing). این کار برای پنهان شدن در پس‌زمینه یک پروسه قانونی ویندوز انجام می‌شود.

دسته‌بندی سناریوهای مشکوک

سناریوهای پرخطر

  • Cobalt Strike Beacon: فریم‌ورک Cobalt Strike به طور پیش‌فرض از rundll32.exe بدون آرگومان به عنوان ظرفی برای اجرای Payload خود استفاده می‌کند.
  • تزریق کد: بدافزار یک پروسه قانونی را اجرا می‌کند، اما قبل از اینکه آرگومان‌ها پردازش شوند، حافظه آن را با کد مخرب جایگزین می‌کند.
  • اجرا توسط ماکرو: یک فایل اکسل یا ورد مخرب، دستور اجرای rundll32.exe خالی را صادر کرده است.

سناریوهای متوسط

  • اسکریپت‌های ناقص: یک اسکریپت ادمین یا فایل Batch که به اشتباه نوشته شده و آرگومان‌ها به درستی به rundll32 پاس داده نشده‌اند.
  • نرم‌افزارهای قدیمی: برخی نرم‌افزارهای قدیمی ممکن است رفتارهای غیراستانداردی در فراخوانی DLLها داشته باشند.

سناریوهای کم‌خطر (مثبت کاذب)

  • خطای کاربر: کاربر یا توسعه‌دهنده‌ای که در حال تست دستورات در خط فرمان است و دستور را اشتباه تایپ کرده است (بسیار نادر).

ارزیابی خطر و تریاژ

برای تشخیص واقعی بودن تهدید، باید "زنجیره اجرا" را بررسی کنید:

نشانه قطعی خطر: اگر rundll32.exe بدون آرگومان اجرا شود و بلافاصله شروع به برقراری ارتباط شبکه‌ای با اینترنت کند.

الزامات داده و مدل‌ها

اطلاعات مورد نیاز

  • Sysmon Event ID 1 (Process Creation)
  • Windows Security Event 4688

دیتامدل‌های مورد استفاده

  • Endpoint.Processes

فیلدهای کلیدی جهت بررسی

process_name (rundll32.exe)
process (CommandLine)
parent_process_name
process_id
parent_process_id
user