روتکیت لینوکس LinkPro
نفوذ اخیر به محیط سرویسهای وب آمازون (AWS) یک روتکیت گنو/لینوکس که قبلاً مستند نشده بود را آشکار کرد که با نام LinkPro ردیابی میشود. این درِ پشتی به دلیل استفاده دوگانه از ماژولهای eBPF قابل توجه است: یک مجموعه برای پنهان کردن مصنوعات و دیگری که به عنوان یک ماشه مخفی عمل میکند - یک «ضربه» که عملکرد فرمان از راه دور را تنها پس از مشاهده یک بسته TCP ساخته شده خاص فعال میکند. زنجیره حمله و مکانیسمهای روتکیت، یک اپراتور پیچیده را نشان میدهد که سوءاستفاده از کانتینر، پنهانسازی در سطح هسته و فعالسازی انعطافپذیر شبکه را برای مختل کردن تشخیص و همبستگی پزشکی قانونی ترکیب میکند.
فهرست مطالب
بردار آلودگی و استقرار اولیه
این نفوذ با سوءاستفاده از یک نمونهی در معرض خطر Jenkins که به CVE‑2024‑23897 (CVSS 9.8) آسیبپذیر است، آغاز شد. از آن نقطه، مهاجمان یک تصویر مخرب Docker (kvlnt/vv، که از Docker Hub حذف شده است) را به چندین کلاستر Kubernetes وارد کردند. این تصویر از یک پایگاه دادهی Kali Linux استفاده میکرد و حاوی یک پوشهی کوچک برنامه بود که برای ایجاد پایداری، دسترسی از راه دور و دانلود یک درب پشتی مرحلهای در نظر گرفته شده بود.
درون تصویر مخرب داکر
پوشهی برنامهی مربوط به تصویر شامل سه فایل کلیدی با نقشهای متمایز بود:
start.sh — یک اسکریپت پوسته که سرویس SSH را راهاندازی کرده و دو مؤلفه دیگر را اجرا میکند.
لینک — یک برنامه متنباز (vnt) که به عنوان یک کلاینت VPN/پروکسی کامپایل/بستهبندی شده و به vnt.wherewego[.]top:29872 متصل میشود. این به مهاجم اجازه میدهد تا از هر جایی به میزبان آسیبدیده دسترسی پیدا کند و از طریق آن به اهداف دیگر متصل شود.
برنامه - یک دانلودکننده مبتنی بر Rust (که به عنوان vGet شناخته میشود) که یک payload رمزگذاری شده vShell را از یک سطل S3 دریافت میکند، سپس یک لینک WebSocket به سرور فرمان و کنترل (C2) خود در آدرس 56.155.98[.]37 برقرار میکند.
بارهای اضافی تحویل داده شده به گرههای Kubernetes
در کنار تصویر مخرب، اپراتورها دو جزء دیگر را نیز روی گرهها قرار دادند: یک دراپر که یک درب پشتی vShell دیگر نصب میکند، و LinkPro، یک روتکیت نوشته شده با زبان Golang. LinkPro طوری طراحی شده است که بسته به پیکربندیاش، در یکی از دو حالت - غیرفعال (معکوس) یا فعال (رو به جلو) - اجرا شود. در حالت غیرفعال، منتظر میماند تا توسط یک بسته شبکه ویژه فعال شود؛ در حالت فعال، ارتباط با خود C2 را آغاز میکند. حالت رو به جلو از پنج پروتکل انتقال (HTTP، WebSocket، UDP، TCP، DNS) پشتیبانی میکند، در حالی که حالت معکوس ارتباطات را به HTTP محدود میکند.
چگونه LinkPro پابرجا میماند؟
رفتار کلی اجرا و ماندگاری بدافزار از یک توالی مشخص پیروی میکند:
- ماژول Hide eBPF را نصب کنید. این ماژول شامل برنامههای Tracepoint و Kretprobe eBPF است که برای پنهان کردن فرآیندها و فعالیتهای شبکه LinkPro استفاده میشوند.
- اگر نصب ماژول Hide eBPF با شکست مواجه شد - یا اگر غیرفعال شده بود - یک کتابخانه مشترک در /etc/libld.so نصب کنید و آن مسیر را به /etc/ld.so.preload به عنوان یک مکانیزم مخفیسازی جایگزین اضافه کنید.
- برای عملکرد معکوس (غیرفعال)، ماژول Knock eBPF را نصب کنید. Knock شامل یک برنامه XDP و یک برنامه TC است، بنابراین کانال C2 فقط پس از دریافت یک «بسته جادویی» خاص فعال میشود.
- با ایجاد یک سرویس systemd، پایداری را برقرار کنید.
- دستورات دریافتی از C2 را اجرا کنید.
- هنگام خاموش شدن یا هنگام دریافت سیگنال (SIGHUP، SIGINT، SIGTERM)، ماژولهای eBPF را حذف نصب کنید و اصلاحیه پیشبارگذاری /etc/libld.so را حذف/بازیابی کنید تا سیستم به حالت قبلی خود بازگردد.
بسته جادویی و مکانیسم فعالسازی ضربهای
فعالسازی غیرفعال LinkPro به یک بسته TCP دقیق بستگی دارد: هر بسته TCP که اندازه پنجره آن برابر با ۵۴۳۲۱ باشد، به عنوان «بسته جادویی» در نظر گرفته میشود. وقتی Knock آن بسته را تشخیص میدهد، IP منبع را ذخیره کرده و آن را با یک برچسب انقضای یک ساعته برچسبگذاری میکند. بستههای TCP بعدی از آن منبع تحت نظارت قرار میگیرند و در صورت لزوم، Knock هدرها را بازنویسی میکند تا ترافیک اپراتور به پورت گوش دادن LinkPro (۲۳۳۳) هدایت شود. بستههای خروجی طوری تنظیم میشوند که پورت اصلی را به شبکه برگردانند (پورت منبع به ۲۲۳۳ بازنویسی میشود). هدف ساده اما مؤثر است: به مهاجم اجازه میدهد از طریق هر پورتی که فایروال front-end اجازه میدهد به LinkPro دسترسی پیدا کند، در حالی که ارتباط دادن گزارشهای فایروال خارجی با فعالیت شبکه داخلی میزبان را دشوار میکند.
چگونه LinkPro خود را پنهان میکند
LinkPro از یک استراتژی پنهانسازی دو لایه استفاده میکند:
پنهانسازی هسته/eBPF : ماژول Hide eBPF برنامههای Tracepoint و Kretprobe را نصب میکند که فراخوانیهای سیستمی مانند getdents (برای پنهانسازی فایلها/دایرکتوریها) و sys_bpf (برای پنهانسازی برنامههای BPF خود) را رهگیری میکنند. این رویکرد نیاز به هستهی ساخته شده با CONFIG_BPF_KPROBE_OVERRIDE فعال دارد.
جایگزینی LD_PRELOAD در فضای کاربر : اگر قابلیت هسته وجود نداشته باشد، LinkPro یک کتابخانه مشترک (libld.so) مینویسد و مسیر آن را در /etc/ld.so.preload قرار میدهد. از آنجا که /etc/ld.so.preload باعث میشود کتابخانه مشخص شده در هر فرآیند پیوند پویا (آنهایی که از /lib/ld-linux.so و glibc استفاده میکنند) بارگذاری شود، libld.so جاسازی شده، توابع libc را زودتر (قبل از رفتار خود glibc) قلاب میکند و بازگشتیهای حاصل از فراخوانیهای libc را تغییر میدهد تا مصنوعاتی را که در غیر این صورت وجود آن را آشکار میکردند، پنهان کند.
قابلیتها و مجموعه دستورات روتکیت
LinkPro از هر دو نوع اقدامات از راه دور تعاملی و خودکار پشتیبانی میکند. ویژگیهای پیادهسازی شده آن عبارتند از:
- شروع یک شبه ترمینال /bin/bash و اجرای جلسات تعاملی پوسته.
- اجرای دستورات دلخواه shell.
- شمارش فایلها و دایرکتوریها و انجام عملیات روی فایلها
- دانلود و نوشتن فایلها روی دیسک.
- ایجاد یک تونل پروکسی SOCKS5 برای چرخش و پروکسی کردن زندگی در خارج از کشور.
پشتیبانی پروتکل شبکه و رفتار C2
در حالت فعال (رو به جلو) LinkPro انعطافپذیر است: میتواند با استفاده از HTTP، WebSocket، UDP، TCP یا DNS ارتباط برقرار کند. در حالت غیرفعال (معکوس) ارتباط آن محدود به HTTP است اما از قابلیت مخفیکاری بهره میبرد زیرا فقط پس از باز شدن یک پنجره فرمان موقت یک ساعته توسط بسته جادویی Knock، به آن گوش میدهد.
رفتار پاکسازی و حذف نصب
اگر فرآیند سیگنالهای خاتمه دریافت کند، LinkPro قصد دارد ردپاها را حذف کند: ماژولهای eBPF نصبشده را حذف میکند و /etc/libld را حذف یا بازیابی میکند و آن را به حالت قبلی خود گروهبندی میکند تا سیستم بدون تغییر به نظر برسد. این روال پاکسازی عمدی نشان میدهد که اپراتور نگران فرار از سیستم و به حداقل رساندن ردپاهای پزشکی قانونی طولانیمدت است.
زمینه عملیاتی و انتساب
این کمپین از یک اکسپلویت جنکینز با شدت بالا، تصاویر کانتینر مخرب، انواع مختلف درب پشتی و مخفیکاری در سطح هسته استفاده کرده است - ترکیبی که به یک اپراتور با انگیزه و توانمند اشاره دارد. هیچ انتساب قطعی به صورت عمومی منتشر نشده است. با این حال، مجموعه ابزارها و استفاده آشکار از این نفوذ برای پروکسی و دسترسی از راه دور مداوم، قویاً نشاندهنده فعالیت با انگیزه مالی (چرخش، پروکسی برای نفوذهای اضافی یا فروش مجدد دسترسی) است.
وابستگی به هسته و رفتار جایگزین
از آنجا که LinkPro برای رهگیری مخفیانه هسته خود به ویژگیهای نادیده گرفتن kprobe در BPF متکی است، تنها زمانی از تکنیک پنهانسازی در سطح هسته استفاده میکند که هسته میزبان CONFIG_BPF_KPROBE_OVERRIDE را در معرض دید قرار دهد. در جایی که این قابلیت هسته وجود ندارد، LinkPro عمداً به روش کتابخانه اشتراکی LD_PRELOAD روی میآورد تا خود را در فضای کاربر پنهان کند و از پنهانسازی در طیف وسیعی از محیطها اطمینان حاصل کند.
نکته پایانی
LinkPro نشان میدهد که چگونه نفوذهای مدرن میتوانند با ترکیب نفوذ کانتینر، لودرهای مرحلهای، ابزار دقیق هسته (eBPF) و ترفندهای هوشمندانه شبکه (فعالسازی بسته جادویی و بازنویسی پورت) مخفیکاری و انعطافپذیری را حفظ کنند. تشخیص و اصلاح نیاز به بازرسی دقیق برای برنامههای eBPF غیرمجاز، ورودیهای غیرمنتظره در /etc/ld.so.preload، سرویسهای غیرمعمول systemd و اتصالات شبکه به زیرساخت مشخص شده دارد (شاخصهای پزشکی قانونی شامل IP 56.155.98[.]37، پورتهای 29872، 2333، 2233 و نام تصویر حذف شده Docker kvlnt/vv است).