malware · cryptomining · rootkit · linux · kernel · monero · privilege-escalation · cve-2026-31431 · container-escape

Rootpacket: یک کیت ماینینگ بدافزاری لینوکس که در هسته پنهان می‌شود

‏Kinryū Labs کیت Rootpacket را تحلیل کرد، یک کیت ماینینگ بدافزاری برای لینوکس که یک روت‌کیت در سطح هسته را برای جعل مصرف CPU و حافظه حمل می‌کند، از طریق CVE-2026-31431 (نقصی در حافظهٔ نهان صفحهٔ AF_ALG که از کانتینرها به میزبان هم می‌گریزد) به root ارتقا می‌یابد، خود را به‌جای یک درایور Intel جا می‌زند، و همان سرویس‌های افشاشده‌ای را که ماینرهای رقیب از آن‌ها وارد می‌شوند غیرفعال می‌کند.

نوشتهٔ Davis Zheng·

CVE
CVE-2026-31431
CVSS
7.8 (CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)

TLP:CLEAR. برای انتشار عمومی تأیید شد. این تنها تحلیل ایستاست: هیچ نمونه‌ای اجرا نشد، و هر یافته از استخراج رشته‌ها، واسازی (disassembly)، و بازبینی کد منبع می‌آید. کیف‌پول مونرو، استخر، و زیرساخت مهاجم به‌عنوان نشانگرهای دفاعی منتشر می‌شوند.

خلاصهٔ مدیریتی

  • ~45%آنچه top از CPU نشان می‌دهد در حالی که نزدیک 100% کار می‌کند
  • 3سازوکار پایداری
  • 7.8CVSS، CVE-2026-31431 (ارتقای امتیاز محلی از طریق page-cache در AF_ALG)
  • میزبانroot از یک کانتینر بی‌امتیاز

‏Rootpacket یک کیت ماینینگ بدافزاریِ چندمؤلفه‌ای برای لینوکس است. یک روت‌کیت در سطح هسته برای پنهان‌کاری، یک اکسپلویت ارتقای امتیاز برای CVE-2026-31431 در رابط رمزنگاری AF_ALG لینوکس، یک ماینر مونرو XMRig 6.26.0 بسته‌بندی‌شده با UPX و تغییرنام‌یافته به xrandom، و یک اسکریپت حذف رقیب را گرد هم می‌آورد. کد بیشتر به ترکی نوشته شده (نام متغیرها، توضیحات، رشته‌های وضعیت)، که به یک گردانندهٔ ترکی‌زبان اشاره دارد.

کیت در یکی از دو حالت کار می‌کند. در حالت root یک روت‌کیت از نوع ماژول هستهٔ قابل‌بارگذاری (LKM) را که به intel_uncore_freq_aux جا زده شده بارگذاری می‌کند، آن را از طریق DKMS نصب می‌کند تا از ارتقاهای هسته جان به در ببرد، یک سرویس systemd ثبت می‌کند، و ماشین را از رقبا پاک می‌کند. هنگامی که نمی‌تواند root بگیرد، به یک حالت فضای کاربر بازمی‌گردد که از طریق crontab پایدار می‌ماند و ماینر را به‌عنوان یک دیمن اجرا می‌کند. ماینر از طریق stratum+ssl به pool.supportxmr.com:443 متصل می‌شود و مونرو را با RandomX ماین می‌کند.

مؤلفه‌ای که ارزش درنگ دارد روت‌کیت است. در حالی که ماینر پردازنده را نزدیک صد درصد میخکوب می‌کند، روت‌کیت /proc/stat را بازنویسی می‌کند تا top و htop یک 40 تا 50 درصدِ آرام گزارش دهند، و آن عدد را با jiffies نوسان می‌دهد تا بار واقعی به نظر برسد نه گیرکرده روی یک مقدار ثابت. همین کار را با /proc/meminfo می‌کند، و فهرست‌های دایرکتوری را فیلتر می‌کند تا فرایندها و فایل‌های خودش را پنهان کند.

داوری‌های کلیدی

  • هدف ماینینگ بدافزاری است (اطمینان بالا). کیت XMRig 6.26.0، یک کیف‌پول مونروی کدگذاری‌شدهٔ ثابت، و یک پیکربندی ماینینگ pool.supportxmr.com را حمل می‌کند، با کمک به توسعه‌دهندهٔ XMRig که خاموش شده تا همهٔ عواید به گرداننده برسد.
  • ارتقای امتیاز CVE-2026-31431 (“Copy Fail”) است، یک نوشتنِ قطعی در حافظهٔ نهان صفحه روی مسیر algif_aead در AF_ALG لینوکس (CVSS 7.8، افشاشده در آوریل 2026). چون حافظهٔ نهان صفحه در سراسر میزبان مشترک است، همان نوشتن از یک کانتینر می‌گریزد تا روی میزبان root بگیرد، پس یک کانتینر آلوده یک میزبان به‌خطرافتاده است (اطمینان بالا).
  • گرداننده بسیار بالاتر از گروه معمولِ «بینداز-و-ماین-کن» است (اطمینان بالا). یک روت‌کیت LKM سفارشی با قلاب‌های ftrace، پایداری DKMS که برای هسته‌های جدید خود را به‌طور خودکار بازمی‌سازد، یک اکسپلویت کارای حافظهٔ نهان صفحه برای CVE-2026-31431، و پایداری لایه‌ایِ systemd/DKMS/cron، سطحی از مهندسی‌اند که بیشتر ماینرهای بدافزاری هرگز به آن نمی‌رسند.
  • گرداننده به‌احتمال زیاد ترکی‌زبان است (اطمینان متوسط). نام متغیرها، توضیحات، و پیام‌های وضعیتِ ترکی مانند ROOT ele gecirildi! در سراسر کیت جریان دارند.
  • Rootpacket ساخته شده تا یک میزبان را به‌طور انحصاری در اختیار بگیرد و نگه دارد. killservice.sh آن ماینرهای رقیب را برمی‌دارد و سپس سرویس‌های افشاشده به بیرون را که ماینرهای بدافزاری برای دسترسی اولیه به کار می‌برند غیرفعال می‌کند، از جمله Docker API روی 2375/2376، همان برداری که در نوشتهٔ RedTail مستند کردیم. این گروه‌ها بر سرِ همان ماشین‌های بدپیکربندی می‌جنگند.

معماری کیت

‏Rootpacket یک دراپر ماژولار است. اجزا:

setup.sh         Entry point. Checks privilege level, picks a deployment mode.
getroot          Privilege escalation. Exploits CVE-2026-31431 (AF_ALG) for local root.
xrandom          UPX-packed XMRig 6.26.0, renamed to dodge name-based detection.
kernel/
  stealth.c      LKM rootkit, compiled via DKMS, disguised as an Intel driver.
  install.sh     DKMS persistence engine.
killservice.sh   Competitor elimination and "hardening".
rootpacket.tar.gz  An inner copy of the whole toolkit, packaged for redistribution.

حالت root. setup.sh اگر از پیش root نباشد getroot را اجرا می‌کند، xrandom را به /opt/kernel-kd/ کپی می‌کند، یک سرویس systemd می‌سازد، kernel/install.sh را اجرا می‌کند تا روت‌کیت را از طریق DKMS کامپایل و بارگذاری کند، killservice.sh را اجرا می‌کند تا رقابت را پاک کند، و ماینر را به‌عنوان یک سرویس دائمی آغاز می‌کند.

بازگشت به فضای کاربر. وقتی root از دسترس بیرون است، setup.shxrandom را به ~/.xrandom/ کپی می‌کند، یک راه‌انداز با قفل PID می‌نویسد، یک ورودی crontab نصب می‌کند که هنگام راه‌اندازی مجدد و هر دقیقه شلیک می‌شود، و ماینر را با setsid آغاز می‌کند تا از پوستهٔ والد جان به در ببرد.

ویژگیحالت rootحالت فضای کاربر
محل ماینر/opt/kernel-kd/xrandom~/.xrandom/xrandom
پایداریsystemd (kernel-kd.service)crontab (@reboot + */1 * * * *)
روت‌کیتبله (LKM از طریق DKMS)خیر
کشتن رقبابله (killservice.sh)خیر
اجرا به‌عنوانroot (systemd)کاربر کنونی (دیمن setsid)

getroot: CVE-2026-31431، root از طریق خرابی حافظهٔ نهان صفحه

getroot یک باینری ELF64 x86-64 پیوندخوردهٔ ایستا و strip‌نشده است، ساخته‌شده از getroot.c. از CVE-2026-31431 (“Copy Fail”) بهره می‌برد، یک نقص منطقی در رابط algif_aead در AF_ALG هستهٔ لینوکس که در 29 آوریل 2026 افشا شد (CVSS 7.8). این باگ یک نوشتنِ قطعیِ 4 بایتیِ تحت‌کنترل مهاجم را به حافظهٔ نهان صفحهٔ هسته می‌دهد، و getroot از آن برای وصله کردن یک باینری SUID در حافظه و بیرون رفتن به‌عنوان root استفاده می‌کند.

ویژگیمقدار
نوعELF 64-bit LSB executable، x86-64، پیوندخوردهٔ ایستا، strip‌نشده
CVECVE-2026-31431 “Copy Fail” (CVSS 7.8، AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
زیرسامانهAF_ALG algif_aead، الگوی AEAD authencesn(hmac(sha256),cbc(aes))
متأثرLinux 4.14 تا 6.19.11 (نقص در 2017، کامیت 72548b093ee3 وارد شد)؛ در 6.18.22، 6.19.12، 7.0+ رفع شد
هدف/usr/bin/su — بخش .text آن در حافظه درون حافظهٔ نهان صفحه وصله می‌شود
اطمینان‌پذیریقطعی، بدون وضعیت رقابتی
کاربرد / بازگشت./getroot <cmd> [args...]؛ اگر اکسپلویت فرود نیاید، فرمان را در هر صورت با امتیازهای کنونی اجرا می‌کند

سازوکار. یک بهینه‌سازیِ درجا در کد AEAD در سال 2017، صفحه‌های حافظهٔ نهان صفحهٔ splice‌شده را هم در فهرست پراکندگیِ (scatterlist) مبدأ و هم مقصد باقی گذاشت. وقتی الگوی authencesn مقدار موقت ESN ‏4 بایتی‌اش را در آفست برگزیدهٔ مهاجم assoclen + cryptlen می‌نویسد، آن نوشتن درون صفحهٔ حافظهٔ نهان صفحهٔ یک فایل خواندنی توسط کاربر فرود می‌آید. آنگاه بررسی HMAC شکست می‌خورد و recvmsg() مقدار EBADMSG بازمی‌گرداند، اما هسته نوشتن را هرگز بازنمی‌گرداند. getroot سرآیندهای ELF فایل /usr/bin/su را تجزیه می‌کند تا آفست فایلِ نقطهٔ ورود آن را محاسبه کند، سپس splicesendmsg (که 4 بایت برای نوشتن را در AAD حمل می‌کند) ← recvmsg را، یک‌بار برای هر تکهٔ 4 بایتیِ شل‌کد، در حلقه اجرا می‌کند، و /usr/bin/su را درون حافظهٔ نهان صفحه وصله می‌کند. سپس /usr/bin/su را execve می‌کند: هسته صفحهٔ اکنون‌خراب‌شده را بارگذاری می‌کند، شل‌کد به‌عنوان SUID-root اجرا می‌شود، و getroot پیش از اجرای فرمان گرداننده getuid() == 0 را تأیید می‌کند (و رشتهٔ ترکیِ [+] ROOT ele gecirildi! را چاپ می‌کند). فایل روی دیسک هرگز لمس نمی‌شود، پس پایش یکپارچگی فایل چیزی نمی‌بیند.

گریز از کانتینر به میزبان. حافظهٔ نهان صفحهٔ لینوکس سراسری-برای-میزبان است؛ کانتینرها نسخهٔ خودشان را ندارند. فرایندی درون یک کانتینر بی‌امتیاز که /usr/bin/su میزبان را splice می‌کند نسخهٔ نهان‌شدهٔ میزبان را خراب می‌کند، پس execve روی میزبان root می‌دهد، نه فقط در کانتینر. بنابراین یک کانتینر آلوده یک میزبان به‌خطرافتاده است، و setup.sh ادامه می‌دهد تا روت‌کیت هسته را در میزبان بارگذاری کند. متوقف کردن و حذف کانتینر کافی نیست؛ میزبان باید از نو ساخته شود.

getroot را یک‌بار در یک ماشین مجازی جدا (Kali، هستهٔ 6.6.15) اجرا کردیم. توالی کامل AF_ALG را اجرا کرد اما روی آن ساخت root نگرفت و به اجرای فرمان بی‌امتیاز بازگشت، که با اکسپلویتی که چیدمان‌های هستهٔ خاص را هدف می‌گیرد هم‌خوان است. ماینر را اجرا نکردیم.

xrandom: ماینر

xrandom یک نسخهٔ تغییرنام‌یافته و بسته‌بندی‌شده با UPX از XMRig 6.26.0، ماینر مونروی متن‌باز، است.

ویژگیمقدار
هویت واقعیXMRig 6.26.0
بسته‌بندیUPX 4.2.4 (2.8 مگابایت بسته، 10.1 مگابایت بازگشایی‌شده)
الگوریتمRandomX (rx/0)
استخرpool.supportxmr.com:443 از طریق stratum+ssl
کیف‌پول46NVDFL6v5STw5Qw4j77PoBSHRTYnHZGZ8WRoGvHmpaMX7ZyhNUP2u24TLV9pNgncz1bZF2Vm8KkaNTzU7SXqrnFUx5zgHQ
سطح کمک0 (کمک به توسعه‌دهندهٔ XMRig غیرفعال)

ماینینگ از طریق پورت 443 با TLS اجازه می‌دهد ترافیک در نگاه نخست با HTTPS معمولی درآمیزد، هرچند دست‌دهیِ stratum برای کسی که از نزدیک می‌نگرد اثرانگشت TLS متفاوتی دارد.

stealth.c: روت‌کیت هسته

این پرورده‌ترین بخش کیت است. یک روت‌کیت LKM است که از قلاب‌گذاری توابع ftrace برای رهگیری توابع هسته و پاک کردن ردِ بدافزار استفاده می‌کند، و سراسر خود را به‌جای یک درایور سخت‌افزار Intel جا می‌زند.

ویژگیمقدار
نام ماژولintel_uncore_freq_aux
فراداده‌های جعلیMODULE_AUTHOR("Intel Corporation")، MODULE_DESCRIPTION("Intel Uncore Frequency Control Driver")، MODULE_VERSION("1.2.0")
قلاب‌گذاریftrace از طریق kallsyms_lookup_name (در هسته‌های 5.7 و جدیدتر از طریق یک kprobe حل می‌شود)
کنترلsysfs در /sys/kernel/intel_uncore_freq/ (enabled، cpu_lo، cpu_hi، mem_lo، mem_hi، hide_tag)

چه چیزی را قلاب می‌کند و چرا:

  • نقاب‌گذاری CPU. show_stat را قلاب می‌کند تا /proc/stat را بازنویسی کند، و بهره‌وری را میان مرزهای قابل‌تنظیم (پیش‌فرض 40 تا 50 درصد) جعل می‌کند و با jiffies نوسان می‌دهد تا عدد مانند یک بار واقعی حرکت کند نه آنکه ثابت بنشیند.
  • نقاب‌گذاری حافظه. meminfo_proc_show را قلاب می‌کند تا /proc/meminfo را بازنویسی کند، و MemFree، MemAvailable، Buffers، Cached، Active، و Inactive را جعل می‌کند.
  • پنهان‌سازی فرایند. iterate_dir را قلاب می‌کند تا فهرست‌های /proc را فیلتر کند، و PIDهایی را که نامشان با یک مجموعهٔ کدگذاری‌شدهٔ ثابت تطبیق می‌کند پنهان می‌کند: stealth، masscan، sshruns، ransomx، cpumask، xrandom، cpm_، kcpm، mask_helper، ftrhook، kintel_aux. یک گرداننده می‌تواند نام‌هایی را در زمان اجرا از طریق /sys/kernel/intel_uncore_freq/hide_tag بیفزاید.
  • پنهان‌سازی فایل. مسیرهای تطبیق‌یافته با stealth، cpumask، kintel_aux، intel_uncore_freq_aux، و خودِ دایرکتوری sysfs را پنهان می‌کند.
  • خودپنهان‌سازی. هنگام بارگذاری خود را با list_del_init از /proc/modules و /sys/module/ برمی‌دارد، شیء kobject خود در sysfs را حذف می‌کند، و شمارندهٔ ارجاع خود را با try_module_get افزایش می‌دهد تا rmmod نتواند آن را تخلیه کند.

آن فهرست پنهان‌سازی نیز یک سرنخ است: در کنار ماینر، masscan، sshruns، و ransomx را پنهان می‌کند، پس گرداننده به‌احتمال زیاد یک اسکنر اجرا می‌کند و ممکن است در کیت بیش از یک ماینر داشته باشد.

اثر عملی این است که مدیری که top را تماشا می‌کند یک ماشین شلوغ-اما-عادی می‌بیند، هیچ فرایند سرکشی نمی‌یابد، و نمی‌تواند ماژول هسته‌ای را که دروغ می‌گوید ببیند. سرنخ‌ها فیزیکی و خارج-از-باندند: ماشین داغ می‌شود، فن‌ها تند می‌چرخند، و مصرف برق بالا می‌رود، و روت‌کیت هیچ‌کدام را نمی‌تواند جعل کند.

پایداری: سه سازوکار، تقسیم‌شده بر اساس حالت

پایداری Rootpacket به حالتی که در آن فرود می‌آید بستگی دارد. در حالت root دو سازوکار را که یکدیگر را تقویت می‌کنند روی هم می‌چیند؛ در حالت فضای کاربر به یک سومی بازمی‌گردد.

#سازوکارحالتجزئیات
1سرویس systemdrootkernel-kd.service، Type=simple، Restart=always، RestartSec=3
2ماژول DKMSrootروت‌کیت را زیر /lib/modules/$(uname -r)/extra/ نصب می‌کند؛ از ارتقاهای هسته جان به در می‌برد
3crontabuser@reboot به‌علاوهٔ هر دقیقه (* * * * *)، با یک قفل PID و setsid

ورودی DKMS سرسخت است: روت‌کیت را از طریق سامانهٔ ساخت ماژولِ خودِ هسته نصب می‌کند، پس یک ارتقای معمول هسته به‌جای حذفش، آن را از نو می‌سازد و دوباره مسلح می‌کند.

killservice.sh: پاک کردن ماشین و بستن آن

اسکریپت در بنر خود را “cryptojacker hardening” (“سخت‌سازی ماینر بدافزاری”) می‌نامد، و آن توصیف از دید گرداننده دقیق است. در سه فاز اجرا می‌شود.

فاز 1: خاموش کردن سرویس‌های افشاشده. سرویس‌هایی را هدف می‌گیرد که روی 0.0.0.0 گوش می‌دهند و نقاط ورود رایج ماینینگ بدافزاری‌اند، و هر یک را متوقف، غیرفعال و ماسک می‌کند، روی باینری‌ها chmod 000 می‌گذارد، و قواعد DROP در iptables می‌افزاید:

سرویسپورت
Redis6379
Docker2375/2376
PostgreSQL5432
MongoDB27017
Elasticsearch9200/9300
Memcached11211
Hadoop YARN8088
Jenkins8080
Confluence8090

خط Docker بافت پیونددهنده به گزارش RedTail ماست: Rootpacket دقیقاً همان درِ 2375/2376 را که RedTail از آن می‌گذرد می‌بندد. گرداننده‌ای که نخست فرود می‌آید روی میزبان ماین می‌کند و سپس گروه بعدی را بیرون قفل می‌کند، و ماشین را در برابر فنونی که آن‌ها به کار می‌بردند سخت‌سازی می‌کند.

فاز 2: حذف ماینرهای رقیب. فرایندها را می‌کشد، فایل‌ها را حذف می‌کند، کارهای cron را پاک می‌کند، و کلیدهای SSH گره‌خورده به خانواده‌های شناخته‌شدهٔ ماینینگ بدافزاری را پاک‌سازی می‌کند، از جمله XMRig، Kinsing (kdevtmpfsi)، TeamTNT (tntrecht، mdrfckrsustes، watchdogs، و minerd، در کنار اسکنرهایی مانند masscan، pnscan، و zgrab.

فاز 3: حذف روت‌کیت‌های فضای کاربر. ورودی‌های مخرب شناخته‌شدهٔ LD_PRELOAD (libprocesshider.so، libjdk.so، libpamx.so، یک libselinux.so.3 جعلی، و xhide) را از /etc/ld.so.preload بیرون می‌کشد و کتابخانه‌ها را حذف می‌کند، و روت‌کیت‌های فضای کاربر رقبا را که ممکن است با مال خودش تداخل کنند پاک می‌کند.

انتساب

نام متغیرها، توضیحات، و رشته‌های وضعیتِ ترکیِ کیت (برای نمونه ROOT ele gecirildi!، «root به دست آمد») با اطمینان متوسط به یک گردانندهٔ ترکی‌زبان اشاره دارند. یک URL توزیع یا صحنه‌چینی در linuxutil5.pages[.]dev یافتیم، میزبانی‌شده روی Cloudflare Pages، که با الگوی صحنه‌چینی محموله‌ها روی زیرساختی رایگان و خوش‌نام برای درآمیختن هم‌خوان است. rootpacket.tar.gz درونی، یک نسخهٔ خودبسندهٔ کل کیت، به گرداننده یک بستهٔ آماده برای هل دادن به میزبان بعدی می‌دهد.

نشانگرهای نفوذ

شبکه

نشانگرزمینه
pool.supportxmr.com / pool.supportxmr.com:443استخر اصلی ماینینگ مونرو، stratum+ssl
linuxutil5.pages[.]devتوزیع / صحنه‌چینی (Cloudflare Pages)
api.xmrig.com، randomx.xmrig.com:443نقاط پایانی API و محک XMRig
donate.v2.xmrig.com، donate.ssl.xmrig.comاستخرهای کمک به توسعه‌دهندهٔ XMRig (موجود، کمک غیرفعال)
stratum+ssl:// به پورت 443ترافیک ماینینگِ خروجی روی TLS

کیف‌پول مونرو: 46NVDFL6v5STw5Qw4j77PoBSHRTYnHZGZ8WRoGvHmpaMX7ZyhNUP2u24TLV9pNgncz1bZF2Vm8KkaNTzU7SXqrnFUx5zgHQ

فایل‌ها (SHA-256)

فایلSHA-256MD5
rootpacket.tar.gz (بیرونی)e2d0dab6b29df89d123fe8581047a03ac9b89ae8fa0d1f334b5aefbb93152857
getrootdda96d8a4bcc39dc7679347a4386bf1024152d2ccc46d333725ad0cda855d952
xrandom (بسته‌بندی‌شده)ec3ef3dce99fa6cbc480f0f0b0c292676afed68704c44396271c7dc6afea2937

‏Build ID: getroot 148d8d902efd93ed892a541972fbcea3a99d05a3، xrandom d7a91225bdd2e3ab67cabded9d7809bcc724401f.

آثار روی میزبان

مسیرزمینه
/opt/kernel-kd/xrandomباینری ماینر (حالت root)
~/.xrandom/xrandom، ~/.xrandom/run.shماینر و راه‌انداز (حالت فضای کاربر)
/tmp/.xrandom.lockقفل PID (حالت فضای کاربر)
/etc/systemd/system/kernel-kd.serviceواحد systemd مخرب
/usr/src/intel_uncore_freq_aux-1.2.0/منبع DKMS روت‌کیت
/sys/kernel/intel_uncore_freq/رابط کنترل روت‌کیت در sysfs
/lib/modules/*/extra/intel_uncore_freq_aux.koماژول روت‌کیت کامپایل‌شده

رفتاری

  • فرایندی به نام xrandom که به‌عنوان root یا کاربر کنونی اجرا می‌شود.
  • اعداد CPU در /proc/stat که با شمارنده‌های کارایی سخت‌افزار (perf stat)، یا با سرعت فن و مصرف برق، نمی‌خوانند.
  • یک سرویس systemd به نام kernel-kd (فعال، Type=simple، Restart=always).
  • یک ورودی cron با برچسب # xrandom-userland-autostart.
  • یک ماژول هسته intel_uncore_freq_aux که هنگام بوت بارگذاری می‌شود اما از lsmod غایب است.

شناسایی

اگر روت‌کیت بارگذاری نشده باشد

systemctl status kernel-kd.service
ls -la /opt/kernel-kd/ ~/.xrandom/
dkms status | grep intel_uncore_freq
crontab -l | grep xrandom
lsmod | grep intel_uncore

اگر روت‌کیت بارگذاری شده باشد

نماهای فضای کاربر به‌خطر افتاده‌اند، پس شناسایی باید از زیرِ روت‌کیت یا از کنار آن بیاید:

  • CPU را از /proc/stat با شمارنده‌های سخت‌افزار از طریق perf stat مقایسه کنید. یک شکاف بزرگ سرنخ است.
  • مراقب قلاب‌های ftrace روی show_stat، meminfo_proc_show، و iterate_dir باشید.
  • ناهم‌خوانی میان CPU گزارش‌شده و برق، گرما، یا سرعت فنِ واقعی را یک نشانهٔ قوی بدانید.

به دام انداختن ارتقای امتیاز

  • یک سوکت AF_ALG، SOCK_SEQPACKET که توسط فرایندی باز شود که ابزار رمزنگاری شناخته‌شده‌ای نیست (cryptsetup، openssl، gpg، systemd-cryptsetup) سرنخ اصلی است. ترتیب کامل این است: socket(AF_ALG)bindsetsockopt(SOL_ALG)acceptpipesplicesendmsgsplicerecvmsg (تکراری)، سپس execve(/usr/bin/su).
  • بایت‌های روی دیسکِ هر باینری SUID را با نمای آن در حافظهٔ نهان صفحه مقایسه کنید. sha256sum از طریق حافظهٔ نهان می‌خواند و نسخهٔ خراب را نشان می‌دهد، پس دیسک را مستقیم با dd if=<file> iflag=direct بخوانید و درهمِ آن را بگیرید، سپس تفاوت بگیرید. یک ناهم‌خوانی در یک باینری SUID خرابیِ حافظهٔ نهان صفحه است.

قاعدهٔ YARA نامزد

rule Rootpacket_Cryptojacker
{
    meta:
        description = "Rootpacket Linux cryptojacking toolkit"
        reference   = "Kinryu Labs CTI 2026-06-16"
    strings:
        $wallet = "46NVDFL6v5STw5Qw4j77PoBSHRTYnHZGZ8WRoGvHmpaMX7ZyhNUP2u24TLV9pNgncz1bZF2Vm8KkaNTzU7SXqrnFUx5zgHQ" ascii
        $svc    = "kernel-kd" ascii
        $cron   = "xrandom-userland-autostart" ascii
        $mod    = "intel_uncore_freq_aux" ascii
    condition:
        $wallet or 2 of ($svc, $cron, $mod)
}

ترمیم

  1. روت‌کیت را از یک وضعیت پاکِ شناخته‌شده بردارید. از رسانهٔ زنده یا بازیابی بوت کنید. /lib/modules/*/extra/intel_uncore_freq_aux.ko* را حذف کنید و dkms remove intel_uncore_freq_aux/1.2.0 --all را اجرا کنید، سپس /usr/src/intel_uncore_freq_aux-1.2.0/ را حذف کنید و initramfs را از نو بسازید (update-initramfs -u، dracut -f، یا mkinitcpio -P). ورودی DKMS باید برود وگرنه از نو ساخته می‌شود.
  2. سرویس را بردارید: systemctl stop kernel-kd; systemctl disable kernel-kd; rm /etc/systemd/system/kernel-kd.service; systemctl daemon-reload.
  3. ماینر را بردارید: rm -rf /opt/kernel-kd/ ~/.xrandom/ /tmp/.xrandom.lock، سپس pkill -9 -f xrandom.
  4. cron را پاک کنید از خطوط # xrandom-userland-autostart.
  5. آنچه killservice.sh شکست را بازگردانید. روی Redis، Docker، PostgreSQL، MongoDB و دیگر باینری‌ها chmod 000 می‌گذارد و قواعد DROP در iptables می‌افزاید. بسته‌های متأثر را از نو نصب کنید و دیوار آتش را بازبینی کنید.
  6. به‌صورت جانبی شکار کنید. rootpacket.tar.gz درونی برای توزیع مجدد ساخته شده، پس میزبان‌های دیگر را برای همان نشانگرها بررسی کنید، و لاگ‌ها را برای بهره‌کشی از سرویس‌های killservice.sh بازبینی کنید تا راه ورود را بیابید.
  7. CVE-2026-31431 را ببندید. به یک هستهٔ رفع‌شده وصله کنید (6.18.22، 6.19.12، 7.0+، یا بک‌پورت توزیع‌تان). جایی که نمی‌توانید یک‌باره وصله کنید، رابط آسیب‌پذیر را غیرفعال کنید: echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif-aead.conf سپس rmmod algif_aead. برای کانتینرها، AF_ALG (family 38) را در پروفایل seccomp مسدود کنید.
  8. نفوذ به میزبان از یک کانتینر را فرض بگیرید. چون نوشتنِ حافظهٔ نهان صفحه از مرز کانتینر می‌گذرد، هر میزبانی را که setup.sh را اجرا کرده، حتی از درون یک کانتینر، کاملاً به‌خطرافتاده بدانید. میزبان را از نو بسازید نه آنکه فقط کانتینر را بردارید.

نگاشت MITRE ATT&CK

تاکتیکتکنیک
Initial AccessT1190 Exploit Public-Facing Application (Redis، Docker، MongoDB، Elasticsearch، Jenkins، Hadoop YARN، تلویحی)
ExecutionT1059.004 Unix Shell
Privilege EscalationT1068 Exploitation for Privilege Escalation (CVE-2026-31431، AF_ALG algif_aead); T1611 Escape to Host (حافظهٔ نهان صفحهٔ مشترک)
PersistenceT1543.002 Systemd Service; T1053.003 Cron; T1547.006 Kernel Modules (DKMS)
Defense EvasionT1014 Rootkit; T1036.005 Masquerading: Match Legitimate Name; T1027.002 Software Packing (UPX); T1070.004 File Deletion; T1564.001 Hidden Files
DiscoveryT1057 Process Discovery (شکار رقبا)
Lateral MovementT1570 Lateral Tool Transfer (بستهٔ توزیع مجدد درونی)
ImpactT1496 Resource Hijacking (ماینینگ مونرو)

روش‌شناسی و یادداشت‌های تحلیلگر

  • تحلیل بیشتر ایستا بود (استخراج رشته‌ها، واسازی، بازبینی کد منبع، تحلیل ساختاری) روی Kali Linux x86-64. همچنین getroot را یک‌بار در یک ماشین مجازی جدا (هستهٔ 6.6.15) اجرا کردیم تا رفتارش را ببینیم: توالی AF_ALG را آزمود، روی آن ساخت root نگرفت، و به اجرای فرمان بی‌امتیاز بازگشت. ماینر اجرا نشد، و چیزی بارگذاری نشد.
  • مؤلفهٔ ارتقای امتیاز CVE-2026-31431 است، که از الگوی authencesn(hmac(sha256),cbc(aes)) گره‌خورده به سوکت AF_ALG، هدف حافظهٔ نهان صفحهٔ /usr/bin/su، و حلقهٔ نوشتنِ splice/sendmsg/recvmsg در باینری شناسایی شد.
  • نمونه‌ها (کیت و مؤلفه‌هایش) به‌درخواست در اختیار دیگر پژوهشگران و مدافعان قرار می‌گیرند. به [email protected] با یادداشتی کوتاه دربارهٔ اینکه که هستید و چرا به آن‌ها نیاز دارید ایمیل بزنید.
How to cite
Kinryū Labs (2026). Rootpacket: یک کیت ماینینگ بدافزاری لینوکس که در هسته پنهان می‌شود. https://kinryu.sh/fa/reports/rootpacket-linux-cryptojacking-rootkit/