این صفحه یک ترجمه است. نسخهٔ انگلیسی متن معتبر است. این ترجمه با منبع انگلیسی تا تاریخ ۱ آبان ۱۴۰۵ مطابقت دارد. خواندن نسخهٔ انگلیسی
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·
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 |
| CVE | CVE-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 | سرویس systemd | root | kernel-kd.service، Type=simple، Restart=always، RestartSec=3 |
| 2 | ماژول DKMS | root | روتکیت را زیر /lib/modules/$(uname -r)/extra/ نصب میکند؛ از ارتقاهای هسته جان سالم میبرد |
| 3 | crontab | کاربر | @reboot بهعلاوه هر دقیقه (* * * * *)، با قفل PID و setsid |
مدخل DKMS سرسختترین مورد است: روتکیت را از طریق سامانه ساخت ماژول خود هسته نصب میکند، پس یک ارتقای معمولی هسته آن را به جای حذف، بازسازی و دوباره مسلح میکند.
killservice.sh: پاکسازی و بستن ماشین
این اسکریپت در سرآیند خود، خودش را «سختسازی ضد استخراجکننده غیرمجاز» مینامد، و این توصیف از دید گرداننده دقیق است. در سه مرحله اجرا میشود.
مرحله 1: خاموش کردن سرویسهای در معرض دسترسی. سرویسهایی را هدف میگیرد که روی 0.0.0.0 گوش میدهند و نقاط ورود رایج استخراج غیرمجاز رمزارز هستند؛ هر یک را متوقف، غیرفعال و mask میکند، روی فایلهای اجرایی chmod 000 میگذارد، و قواعد DROP در iptables اضافه میکند:
| سرویس | پورت |
|---|---|
| Redis | 6379 |
| Docker | 2375/2376 |
| PostgreSQL | 5432 |
| MongoDB | 27017 |
| Elasticsearch | 9200/9300 |
| Memcached | 11211 |
| Hadoop YARN | 8088 |
| Jenkins | 8080 |
| Confluence | 8090 |
خط 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-256 | MD5 |
|---|---|---|
rootpacket.tar.gz (بیرونی) | e2d0dab6b29df89d123fe8581047a03ac9b89ae8fa0d1f334b5aefbb93152857 | |
getroot | dda96d8a4bcc39dc7679347a4386bf1024152d2ccc46d333725ad0cda855d952 | |
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)
}
پاکسازی و اصلاح
- روتکیت را از یک وضعیت پاک و مطمئن حذف کنید. از رسانه زنده یا بازیابی بوت کنید.
/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 باید برود، وگرنه خودش را بازسازی میکند. - سرویس را حذف کنید:
systemctl stop kernel-kd; systemctl disable kernel-kd; rm /etc/systemd/system/kernel-kd.service; systemctl daemon-reload. - ماینر را حذف کنید:
rm -rf /opt/kernel-kd/ ~/.xrandom/ /tmp/.xrandom.lock، سپسpkill -9 -f xrandom. - cron را پاک کنید از خطوط
# xrandom-userland-autostart. - آنچه killservice.sh خراب کرده بازگردانید. این اسکریپت روی فایلهای اجرایی Redis، Docker، PostgreSQL، MongoDB و دیگران
chmod 000میگذارد و قواعد DROP در iptables اضافه میکند. بستههای آسیبدیده را دوباره نصب کنید و دیوار آتش را بازبینی کنید. - شکار جانبی انجام دهید. فایل درونی
rootpacket.tar.gzبرای بازتوزیع ساخته شده است، پس سایر میزبانها را برای همین شاخصها بررسی کنید، و گزارشها را برای بهرهبرداری از سرویسهای فهرستشده درkillservice.shبازبینی کنید تا مسیر ورود را بیابید. - 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 مسدود کنید. - به خطر افتادن میزبان از طریق کانتینر را مفروض بگیرید. چون نوشتن در حافظه نهان صفحه از مرز کانتینر عبور میکند، هر میزبانی که
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] ایمیل بزنید و در چند خط بنویسید چه کسی هستید و نمونهها را برای چه میخواهید.