ویرگول
ورودثبت نام
روزبه نوروزی
روزبه نوروزی
روزبه نوروزی
روزبه نوروزی
خواندن ۵ دقیقه·۲ روز پیش

لینوکس؛ جایی که شکار تهدید بدون درک وضعیت زنده سیستم ممکن نیست

در دنیای Threat Hunting، بسیاری از ذهن‌ها هنوز با الگوی ویندوزی فکر می‌کنند: لاگ، رجیستری، فایل، و آرتیفکت‌های پایدار. اما لینوکس زمین بازی متفاوتی است. در لینوکس، مهاجم الزامی به نوشتن روی دیسک ندارد و همین ویژگی، فارنزیک و هانت را از «تحلیل آثار باقی‌مانده» به «تحلیل وضعیت زنده سیستم» تبدیل می‌کند. کسی که لینوکس را مانند ویندوز هانت می‌کند، عملاً نیمی از صحنه جرم را نادیده می‌گیرد.

یکی از بنیادی‌ترین تفاوت‌های لینوکس با ویندوز در این است که process محور است نه file محور. در لینوکس، حقیقت سیستم نه در فایل‌ها، بلکه در وضعیت پردازه‌ها، توصیف‌گرهای فایل باز (File Descriptors)، حافظه و namespaceها نهفته است. مهاجم می‌تواند باینری را اجرا کند، آن را unlink کند و همچنان پردازه‌ای کاملاً فعال داشته باشد که هیچ ردپای پایداری روی دیسک ندارد. برای هانتر لینوکس، سؤال اصلی این نیست که «چه فایلی نوشته شده؟» بلکه این است که «چه چیزی اکنون در حال اجراست؟».

یکی از نقاط کور رایج در هانت لینوکس، tmpfs است. مسیرهایی مانند /dev/shm، /run و /run/user/* فایل‌سیستم‌های مبتنی بر حافظه هستند، نه دیسک. بسیاری از بدافزارهای مدرن لینوکسی، payload خود را دقیقاً در این مسیرها قرار می‌دهند؛ جایی که reboot یا crash همه‌چیز را پاک می‌کند. اگر شکارچی تهدید فقط ایمیج دیسک را بررسی کند، این آرتیفکت‌ها هرگز دیده نمی‌شوند. در لینوکس، صحنه جرم اغلب قبل از خاموش شدن سیستم از بین می‌رود.

فارنزیک حرفه‌ای لینوکس از /proc شروع می‌شود. /proc نه یک دایرکتوری معمولی، بلکه نمای زنده‌ای از وضعیت سیستم است. بررسی /proc/<pid>/exe می‌تواند باینری واقعی در حال اجرا را نشان دهد، حتی اگر فایل اصلی مدت‌ها قبل حذف شده باشد. /proc/<pid>/maps نقشه حافظه پردازه را افشا می‌کند و نشان می‌دهد چه کدهایی در حافظه لود شده‌اند؛ حتی اگر هرگز روی دیسک ذخیره نشده باشند. این دقیقاً همان جایی است که file‑less malware در لینوکس خود را لو می‌دهد.

یکی از جذاب‌ترین جنبه‌های هانت در لینوکس، بررسی File Descriptorها است. در لینوکس، حذف فایل به معنی از بین رفتن آن نیست، بلکه فقط لینک آن حذف می‌شود. اگر پردازه‌ای هنوز فایل را باز داشته باشد، محتوا کاملاً قابل بازیابی است. مسیر /proc/<pid>/fd به شما اجازه می‌دهد فایل‌هایی را ببینید که «وجود ندارند اما هنوز زنده‌اند». بسیاری از reverse shellها، backdoorها و حتی credential harvesterها دقیقاً در همین فضای خاکستری زندگی می‌کنند.

برخلاف ویندوز که artefactهای زیادی برای post‑mortem analysis دارد، لینوکس به شما می‌گوید: «اگر زنده نبینی، نخواهی دید». به همین دلیل Live Response در لینوکس حیاتی است، نه اختیاری. شکارچی حرفه‌ای لینوکس باید بتواند در حال اجرا بودن سیستم، شواهد را جمع‌آوری کند بدون آنکه وضعیت سیستم را به‌هم بزند. این یک مهارت است، نه صرفاً اجرای چند دستور.

در لینوکس مدرن، هانت بدون درک namespace و containerization تقریباً غیرممکن است. پردازه‌ای که در host دیده می‌شود، ممکن است متعلق به یک container باشد، با PID namespace جدا، filesystem متفاوت و network stack ایزوله. مهاجمان این موضوع را خوب می‌دانند. فرار از container، سوءاستفاده از misconfigurationهای cgroup و namespace، و مخفی شدن در میان workloadهای Kubernetes از تکنیک‌های رایج است. شکارچی تهدید باید بداند که «سیستم» الزاماً همان چیزی نیست که host نشان می‌دهد.

یکی دیگر از تفاوت‌های بنیادین لینوکس با ویندوز، نقش environment variableها است. در بسیاری از حملات، اطلاعات حساس، مسیرهای آلوده یا preloadهای مخرب از طریق متغیرهای محیطی تزریق می‌شوند. بررسی /proc/<pid>/environ اغلب اطلاعاتی را نشان می‌دهد که هیچ‌گاه در لاگ‌ها ثبت نشده‌اند. در لینوکس، environment بخشی از سطح حمله است، نه صرفاً تنظیمات اجرایی.

از منظر Threat Hunting، لاگ‌ها در لینوکس مهم‌اند، اما کافی نیستند. لاگ‌ها گذشته را نشان می‌دهند، اما لینوکس بیشتر از هر سیستم‌عاملی به شما می‌گوید: «حال را ببین». پردازه‌ای که اکنون گوش می‌دهد، کانکشنی که همین حالا باز است، حافظه‌ای که همین لحظه کد را نگه داشته؛ این‌ها حقیقت سیستم‌اند. به همین دلیل ابزارهایی مانند lsof، ss، procfs و memory inspection برای هانتر لینوکس حیاتی‌تر از SIEM هستند.

نکته‌ای که بسیاری از تیم‌ها نادیده می‌گیرند این است که لینوکس به‌طور ذاتی شفاف است. برخلاف ویندوز که بسیاری از لایه‌ها abstraction شده‌اند، لینوکس همه‌چیز را در معرض دید قرار می‌دهد؛ به شرطی که بدانید کجا نگاه کنید. مهاجمان از همین شفافیت برای مخفی‌کاری استفاده می‌کنند، چون می‌دانند اکثر مدافعان فقط به فایل و لاگ نگاه می‌کنند، نه به state.

در نهایت، هانت در لینوکس یک تغییر ذهنیت می‌خواهد. اینجا شکار بر اساس «artifact باقی‌مانده» نیست، بلکه بر اساس «رفتار زنده سیستم» است. کسی که لینوکس را بفهمد، می‌داند که امنیت واقعی نه در کنترل‌های بیشتر، بلکه در درک عمیق سیستم‌عامل شکل می‌گیرد. لینوکس به شکارچی حرفه‌ای پاداش می‌دهد، اما برای کسانی که با عینک ویندوزی نگاه می‌کنند، بی‌رحم است.

نکته : حتی نگاه به وضعیت زنده سیستم با ابزارهایی مثل lsof یا ps هم یک نقطه کور خطرناک دارد: زمان. این ابزارها تنها یک «عکس» (Snapshot) لحظه‌ای از سیستم می‌گیرند. در لینوکس، بدافزارهای مدرن و اسکریپت‌های مخرب ممکن است تنها برای چند میلی‌ثانیه اجرا شوند، کارشان را انجام دهند و ناپدید شوند (Short-lived Processes). اگر شکارچی صرفاً به ابزارهای Polling (که هر چند ثانیه وضعیت را چک می‌کنند) تکیه کند، این پروسه‌ها را هرگز نخواهد دید. اینجا قلمرو eBPF و ردیابی سطح کرنل است؛ جایی که شکارچی باید به جای پرسیدن «چه چیزی الان اجراست؟»، تمام رویدادهای execve و connect را در سطح کرنل رصد کند تا حتی گذرا‌ترین تهدیدها هم از تور خارج نشوند.

علاوه بر این، یک شکارچی باهوش می‌داند که در لینوکس، «دیدن» همیشه به معنای «باور کردن» نیست. تکنیک‌های Userland Rootkit با استفاده از قابلیت‌هایی مثل LD_PRELOAD می‌توانند کتابخانه‌های سیستمی را هوک کنند. در این سناریو، وقتی شما دستور ls را می‌زنید تا فایل‌های یک دایرکتوری را ببینید، در واقع دارید از خودِ بدافزار می‌پرسید «چه فایل‌هایی اینجا هستند؟» و او فایل‌های مخرب خودش را از خروجی حذف می‌کند. یا ممکن است نام پروسه در لیست ps جعل شده باشد (Process Masquerading). بنابراین، حقیقت نهایی در خروجی دستورات استاندارد نیست، بلکه در Syscallهایی است که واقعاً به کرنل می‌رسند.

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

در لینوکس، اگر دیر برسی، چیزی برای دیدن باقی نمانده است.

لینوکسامنیت
۳
۱
روزبه نوروزی
روزبه نوروزی
شاید از این پست‌ها خوشتان بیاید