تکنیک تازهی اجرای فایللس روی لینوکس که ابزارهای امنیتی نمیبینن
خلاصهٔ کاملتر
فلگ O_TMPFILE، که از کرنل ۳.۱۱ لینوکس وجود داره، بهجای اینکه یه اسم فایل بگیره، یه پوشه میگیره و کرنل مستقیم روی همون فایلسیستم یه inode میسازه؛ inode یعنی نمایش داخلی کرنل از یه فایل شامل داده و مجوزهاش، جدا از دنتری که رابطهی اسم-به-inode رو میسازه و مسیری مثل /tmp/payload رو قابل پیدا کردن میکنه. با O_TMPFILE این دنتری اصلا ساخته نمیشه؛ چون inotify و fanotify هر دو به عملیات دنتری قلاب میزنن، بدون دنتری هیچکدوم فایلو نمیبینن و هیچ رویداد ساخت فایلی ثبت نمیشه.
مرحلهی بعد سیسکال execveat با پرچم AT_EMPTY_PATHه که وقتی با یه مسیر خالی صدا زده بشه، کرنل کل مرحلهی resolve کردن مسیرو رد میکنه؛ دیگه هیچ درختی از پوشهها پیموده نمیشه و هیچ رشتهی مسیری ساخته نمیشه، نه تو آرگومانهای سیسکال و نه تو تاریخچهی پردازش. تنها چیزی که تو تلهمتری کرنل باقی میمونه یه شناسه مثل /tmp/#220 (deleted) هست، یعنی شمارهی inode بهجای اسم فایل، بهعلاوهی پسوند (deleted). پژوهشگر یه لودر نمونه با این روش ساخته که میتونه بار اجرایی رو از ورودی استاندارد، یه آدرس شبکه، یا یه فایل محلی بگیره؛ اسم پردازش رو با prctl جعل کنه تا شبیه یه پردازش شناختهشده مثل sshd دیده بشه؛ و بعد از اجرا، خود لودرو از دیسک پاک کنه.
دلیل اینکه ابزارهای تشخیص فایللس این روشو نمیبینن اینه که امضاهای اونا مخصوص نشونههای memfd_create نوشته شدن، مثل پیشوند memfd: تو مسیر پردازش یا شمارهی مشخص دستگاه؛ چون O_TMPFILE از مسیر عادی open() روی یه فایلسیستم واقعی رد میشه و execveat هم هیچ رشتهی مسیری نمیسازه، هیچکدوم از اون امضاها فعال نمیشن. تنها نشونهی باقیمونده همون پسوند (deleted)ه که خیلی از برنامههای قانونی هم که یه فایلو باز، حذف و بعد اجرا میکنن دقیقا همینو نشون میدن، برای همین بهتنهایی مدرک قابل اعتمادی نیست. پژوهشگر میگه این یعنی امضاهای تشخیصی برای یه عملیات خاص نوشته شدن، نه برای اصل مکانیزم زیرینش، و این ترکیب همون مکانیزمو از یه مسیر دیگه پیاده میکنه.
نکات کلیدی:
- ترکیب O_TMPFILE و execveat(AT_EMPTY_PATH) از کرنل ۳.۱۹ به بعد روی هر لینوکسی کار میکنه
- هیچ دنتری ساخته نمیشه، پس inotify و fanotify هیچ رویدادی نمیبینن
- برخلاف memfd_create، هیچکدوم از نشونههای شناختهشده (پیشوند memfd، دستگاه ۰۰:۰۱، سیسکال ۳۱۹) ساخته نمیشه
- تنها ردپای باقیمونده پسوند (deleted)ه که چون بین برنامههای قانونی هم رایجه، امضای قابلاعتمادی نیست
- این ترکیب تو جدول پوشش عمومی پروژهی FENIX که Elastic منتشر کرده نبود




