این صفحه یک ترجمه است. نسخهٔ انگلیسی متن معتبر است. این ترجمه با منبع انگلیسی تا تاریخ ۱ آبان ۱۴۰۵ مطابقت دارد. خواندن نسخهٔ انگلیسی

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

Rootpacket: جعبه‌ابزاری برای استخراج غیرمجاز رمزارز در لینوکس که در هسته پنهان می‌شود

Kinryū Labs جعبه‌ابزار Rootpacket را تحلیل کرد؛ جعبه‌ابزاری برای استخراج غیرمجاز رمزارز در لینوکس که یک روت‌کیت سطح هسته را برای جعل میزان مصرف پردازنده و حافظه همراه دارد، از طریق 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. مجاز برای انتشار عمومی. گرفته‌شده توسط شبکه حسگرهای هانی‌پات Kinryū Labs. شاخص‌های زیر بی‌خطرسازی شده‌اند.

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

  • ~45%مصرف پردازنده‌ای که top نشان می‌دهد، در حالی که مصرف واقعی نزدیک به 100% است
  • 3سازوکار پایداری
  • 7.8CVSS، CVE-2026-31431 (ارتقای سطح دسترسی محلی از طریق حافظه نهان صفحه در AF_ALG)
  • میزباندسترسی root از یک کانتینر بدون امتیاز ویژه

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

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

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

یافته‌های کلیدی
  • هدف، استخراج غیرمجاز رمزارز است (اطمینان بالا). این جعبه‌ابزار XMRig 6.26.0، یک کیف پول Monero درج‌شده در کد و یک پیکربندی استخراج 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. اگر هنوز root نباشد، setup.sh ابزار getroot را اجرا می‌کند، xrandom را به /opt/kernel-kd/ کپی می‌کند، یک سرویس systemd می‌سازد، kernel/install.sh را اجرا می‌کند تا روت‌کیت از طریق DKMS کامپایل و بارگذاری شود، killservice.sh را برای پاک کردن رقبا اجرا می‌کند، و ماینر را به عنوان یک سرویس پایدار راه می‌اندازد.

حالت جایگزین در فضای کاربر. وقتی root در دسترس نیست، setup.sh فایل xrandom را به ~/.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 است که به صورت ایستا پیوند خورده، نمادهایش حذف نشده و از 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, statically linked, not stripped
CVECVE-2026-31431 “Copy Fail” (CVSS 7.8، AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
زیرسیستمalgif_aead از AF_ALG، قالب 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 مقدار 4 بایتی موقت ESN خود را در آفست انتخابی مهاجم، یعنی assoclen + cryptlen، می‌نویسد، آن نوشتن داخل صفحه حافظه نهان یک فایل قابل خواندن برای کاربر می‌افتد. سپس بررسی HMAC شکست می‌خورد و recvmsg() مقدار EBADMSG برمی‌گرداند، اما هسته هرگز آن نوشتن را برنمی‌گرداند. getroot سرآیندهای ELF فایل /usr/bin/su را تجزیه می‌کند تا آفست فایل برای نقطه ورود آن را محاسبه کند، سپس به ازای هر قطعه 4 بایتی از پوسته‌کد، چرخه splice → sendmsg (که 4 بایت مورد نوشتن را در AAD حمل می‌کند) → recvmsg را تکرار می‌کند و /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، ماینر متن‌باز Monero، است.

مشخصهمقدار
هویت واقعیXMRig 6.26.0
بسته‌بندیUPX 4.2.4 (2.8 MB بسته‌بندی‌شده، 10.1 MB بازشده)
الگوریتم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)

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

  • پوشاندن مصرف پردازنده. تابع 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/ نصب می‌کند؛ از ارتقاهای هسته جان سالم می‌برد
3crontabکاربر@reboot به‌علاوه هر دقیقه (* * * * *)، با قفل PID و setsid

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

killservice.sh: پاکسازی و بستن ماشین

این اسکریپت در سرآیند خود، خودش را «سخت‌سازی ضد استخراج‌کننده غیرمجاز» می‌نامد، و این توصیف از دید گرداننده دقیق است. در سه مرحله اجرا می‌شود.

مرحله 1: خاموش کردن سرویس‌های در معرض دسترسی. سرویس‌هایی را هدف می‌گیرد که روی 0.0.0.0 گوش می‌دهند و نقاط ورود رایج استخراج غیرمجاز رمزارز هستند؛ هر یک را متوقف، غیرفعال و mask می‌کند، روی فایل‌های اجرایی 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، mdrfckr)، sustes، 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 گرفته شد») با اطمینان متوسط به گرداننده‌ای ترکی‌زبان اشاره دارد. یک نشانی توزیع یا استیجینگ در linuxutil5.pages[.]dev یافتیم که روی Cloudflare Pages میزبانی می‌شود و با الگوی قرار دادن بارهای مخرب روی زیرساخت رایگان و خوش‌نام برای هم‌رنگ شدن سازگار است. فایل درونی rootpacket.tar.gz، یک نسخه خودبسنده از کل جعبه‌ابزار، به گرداننده بسته‌ای آماده می‌دهد تا به میزبان بعدی منتقل کند.

شاخص‌های نفوذ

شبکه

شاخصزمینه
pool.supportxmr.com / pool.supportxmr.com:443استخر اصلی استخراج Monero، 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

کیف پول Monero: 46NVDFL6v5STw5Qw4j77PoBSHRTYnHZGZ8WRoGvHmpaMX7ZyhNUP2u24TLV9pNgncz1bZF2Vm8KkaNTzU7SXqrnFUx5zgHQ

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

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

شناسه‌های ساخت: 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 یا کاربر جاری اجرا می‌شود.
  • مقادیر مصرف پردازنده در /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

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

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

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

تشخیص ارتقای سطح دسترسی

  • یک سوکت AF_ALG از نوع SOCK_SEQPACKET که توسط فرایندی غیر از ابزارهای رمزنگاری شناخته‌شده (cryptsetup، openssl، gpg، systemd-cryptsetup) باز شده باشد، نشانه اصلی است. ترتیب کامل این است: socket(AF_ALG) → bind → setsockopt(SOL_ALG) → accept → pipe → splice → sendmsg → splice → recvmsg (تکرارشونده)، و سپس 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 (خانواده 38) را در پروفایل seccomp مسدود کنید.
  8. به خطر افتادن میزبان از طریق کانتینر را مفروض بگیرید. چون نوشتن در حافظه نهان صفحه از مرز کانتینر عبور می‌کند، هر میزبانی که setup.sh روی آن اجرا شده، حتی از داخل یک کانتینر، را کاملاً به خطر افتاده بدانید. میزبان را از نو بسازید، نه آنکه فقط کانتینر را حذف کنید.

نقشه‌برداری MITRE ATT&CK

تاکتیکتکنیک
دسترسی اولیهT1190 بهره‌برداری از برنامه در معرض دسترسی عمومی (Redis، Docker، MongoDB، Elasticsearch، Jenkins، Hadoop YARN؛ استنباطی)
اجراT1059.004 پوسته Unix
ارتقای سطح دسترسیT1068 بهره‌برداری برای ارتقای سطح دسترسی (CVE-2026-31431، algif_aead از AF_ALG)؛ T1611 فرار به میزبان (حافظه نهان صفحه مشترک)
پایداریT1543.002 سرویس Systemd؛ T1053.003 Cron؛ T1547.006 ماژول‌های هسته (DKMS)
گریز از دفاعT1014 روت‌کیت؛ T1036.005 جعل هویت: تطبیق با نام مشروع؛ T1027.002 بسته‌بندی نرم‌افزار (UPX)؛ T1070.004 حذف فایل؛ T1564.001 فایل‌های پنهان
کشفT1057 کشف فرایند (شکار رقبا)
حرکت جانبیT1570 انتقال جانبی ابزار (بسته بازتوزیع درونی)
تأثیرT1496 ربایش منابع (استخراج Monero)

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

  • تحلیل عمدتاً ایستا بود (استخراج رشته‌ها، دیس‌اسمبل، بازبینی کد منبع، تحلیل ساختاری) روی 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] ایمیل بزنید و در چند خط بنویسید چه کسی هستید و نمونه‌ها را برای چه می‌خواهید.
Sample
rootpacket · e2d0dab6b29df89d…
How to cite
Kinryū Labs (2026). Rootpacket: جعبه‌ابزاری برای استخراج غیرمجاز رمزارز در لینوکس که در هسته پنهان می‌شود. https://kinryu.sh/fa/reports/rootpacket-linux-cryptojacking-rootkit/