هذه الصفحة ترجمة. النسخة الإنجليزية هي النص المعتمد. وهي مطابقة للمصدر الإنجليزي حتى تاريخ 23 أكتوبر 2026. اقرأه بالإنجليزية

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

Rootpacket: مجموعة أدوات للتعدين الخفي على لينكس تتخفى داخل النواة

حلّلت Kinryū Labs مجموعة الأدوات Rootpacket، وهي مجموعة للتعدين الخفي للعملات المشفّرة على لينكس تأتي مع روتكيت على مستوى النواة لتزييف استخدام المعالج والذاكرة، وترفع صلاحياتها إلى الجذر عبر CVE-2026-31431 (خلل في ذاكرة التخزين المؤقت للصفحات في AF_ALG يتيح كذلك الهروب من الحاوية إلى المضيف)، وتتنكر في هيئة برنامج تشغيل من 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)
  • المضيفصلاحية الجذر انطلاقًا من حاوية غير مميّزة

Rootpacket هي مجموعة أدوات متعددة المكوّنات للتعدين الخفي للعملات المشفّرة على لينكس. تجمع روتكيت على مستوى النواة لأجل التخفي، واستغلالًا لترقية الصلاحيات يستهدف CVE-2026-31431 في واجهة التشفير AF_ALG في لينكس، ونسخة من برنامج تعدين Monero المسمى XMRig 6.26.0 مضغوطة بـ UPX ومعاد تسميتها إلى xrandom، ونصًّا برمجيًّا لتصفية المنافسين. الشيفرة مكتوبة في معظمها بالتركية (أسماء المتغيرات والتعليقات وسلاسل الحالة)، وهو ما يشير إلى مشغّل ناطق بالتركية.

تعمل المجموعة في أحد نمطين. في نمط الجذر تُحمّل وحدة نواة قابلة للتحميل (LKM) تعمل كروتكيت متنكرة باسم intel_uncore_freq_aux، وتثبّتها عبر DKMS لتبقى بعد ترقيات النواة، وتسجّل خدمة systemd، وتنظّف الجهاز من المنافسين. وعندما يتعذّر عليها الحصول على صلاحية الجذر، تتراجع إلى نمط في فضاء المستخدم يحقّق الاستمرارية عبر crontab ويشغّل برنامج التعدين كخدمة خفية. يتصل برنامج التعدين بـ pool.supportxmr.com:443 عبر stratum+ssl ويعدّن Monero بخوارزمية 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). ولأن ذاكرة الصفحات مشتركة على نطاق المضيف بكامله، فإن الكتابة نفسها تهرب من الحاوية لتمنح صلاحية الجذر على المضيف، أي أن أي حاوية مصابة تعني مضيفًا مخترقًا (ثقة عالية).
  • المشغّل أرفع بكثير من الطاقم المعتاد الذي يقتصر على إسقاط برنامج تعدين وتشغيله (ثقة عالية). فروتكيت 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.

نمط الجذر. يشغّل setup.sh الملف getroot إن لم تكن الصلاحية جذرًا أصلًا، وينسخ xrandom إلى /opt/kernel-kd/، وينشئ خدمة systemd، ويشغّل kernel/install.sh لترجمة الروتكيت وتحميلها عبر DKMS، ويشغّل killservice.sh لتصفية المنافسة، ثم يبدأ برنامج التعدين كخدمة دائمة.

التراجع إلى فضاء المستخدم. عندما يكون الجذر بعيد المنال، ينسخ setup.sh الملف xrandom إلى ~/.xrandom/، ويكتب مشغّلًا مع قفل PID، ويثبّت مدخلة crontab تُطلق عند الإقلاع وكل دقيقة، ويطلق برنامج التعدين بـ setsid ليبقى بعد انتهاء الصدفة الأم.

الخصيصةنمط الجذرنمط فضاء المستخدم
موقع برنامج التعدين/opt/kernel-kd/xrandom~/.xrandom/xrandom
الاستمراريةsystemd (kernel-kd.service)crontab (@reboot + */1 * * * *)
الروتكيتنعم (LKM عبر DKMS)لا
تصفية المنافسيننعم (killservice.sh)لا
يعمل بهويةالجذر (systemd)المستخدم الحالي (خدمة خفية بـ setsid)

getroot: الجذر عبر إفساد ذاكرة الصفحات، CVE-2026-31431

getroot ملف تنفيذي ELF64 بمعمارية x86-64، مرتبط استاتيكيًّا وغير منزوع الرموز، مبني من getroot.c. يستغل CVE-2026-31431 (“Copy Fail”)، وهي ثغرة منطقية في واجهة algif_aead التابعة لـ AF_ALG في نواة لينكس، أُعلن عنها في 29 أبريل 2026 (CVSS 7.8). تمنح الثغرة كتابة حتمية بطول 4 بايتات يتحكم فيها المهاجم داخل ذاكرة التخزين المؤقت لصفحات النواة، ويستخدمها getroot لتعديل ملف تنفيذي بخصيصة SUID في الذاكرة والخروج بصلاحية الجذر.

الخصيصةالقيمة
النوعELF 64-bit LSB executable، x86-64، مرتبط استاتيكيًّا، غير منزوع الرموز
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))
المتأثرلينكس 4.14 حتى 6.19.11 (الخلل شُحن في 2017، الإيداع 72548b093ee3)؛ مُصلح في 6.18.22 و6.19.12 و7.0+
الهدف/usr/bin/su: يُعدَّل مقطع .text الخاص به في الذاكرة داخل ذاكرة الصفحات
الموثوقيةحتمي، بلا شروط تسابق
الاستخدام / التراجع./getroot <cmd> [args...]؛ وإن لم ينجح الاستغلال، فإنه يشغّل الأمر بالصلاحيات الحالية على أي حال

الأسلوب. تحسين في المكان أُضيف عام 2017 إلى شيفرة AEAD أبقى صفحات ذاكرة الصفحات المنقولة بـ splice موجودة في قائمة التشتيت المصدر والهدف في الوقت نفسه. وحين يكتب قالب authencesn قيمة ESN المؤقتة بطول 4 بايتات عند الإزاحة التي يختارها المهاجم assoclen + cryptlen، تهبط تلك الكتابة داخل صفحة ذاكرة الصفحات لملف قابل للقراءة من المستخدم. ثم يفشل تحقق HMAC ويعيد recvmsg() القيمة EBADMSG، لكن النواة لا تتراجع عن الكتابة أبدًا. يحلّل getroot ترويسات ELF للملف /usr/bin/su لحساب إزاحة نقطة الدخول داخل الملف، ثم يدور على splice ← sendmsg (حاملًا البايتات الأربعة المراد كتابتها في AAD) ← recvmsg، مرة لكل مقطع من 4 بايتات من الشيفرة الصدفية، فيعدّل /usr/bin/su داخل ذاكرة الصفحات. بعد ذلك ينفّذ execve على /usr/bin/su: فتحمّل النواة الصفحة المفسدة، وتعمل الشيفرة الصدفية بصلاحية SUID للجذر، ويتحقق getroot من أن getuid() == 0 قبل تشغيل أمر المشغّل (مع طبع النص التركي [+] ROOT ele gecirildi!). الملف على القرص لا يُلمَس إطلاقًا، لذا فإن مراقبة سلامة الملفات لا ترى شيئًا.

الهروب من الحاوية إلى المضيف. ذاكرة صفحات لينكس عالمية على مستوى المضيف؛ الحاويات لا تحصل على ذاكرة خاصة بها. وأي عملية داخل حاوية غير مميّزة تنقل بـ splice ملف /usr/bin/su الخاص بالمضيف تُفسد النسخة المخزّنة مؤقتًا للمضيف، فيمنح execve صلاحية الجذر على المضيف، لا داخل الحاوية فقط. ومن ثم فإن الحاوية المصابة تعني مضيفًا مخترقًا، ويمضي setup.sh ليحمّل روتكيت النواة داخل المضيف. إيقاف الحاوية وإزالتها لا يكفي؛ المضيف نفسه يجب أن يُعاد بناؤه.

شغّلنا getroot مرة واحدة في جهاز وهمي معزول (Kali، نواة 6.6.15). نفّذ تسلسل AF_ALG كاملًا لكنه لم يحصل على صلاحية الجذر على ذلك البناء وتراجع إلى تشغيل الأمر بدون صلاحيات، وهو ما يتوافق مع استغلال يستهدف تخطيطات نواة محددة. لم نشغّل برنامج التعدين.

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 (يُحَل بواسطة kprobe على النوى 5.7 وما بعدها)
التحكم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، فيخفي معرّفات العمليات التي تطابق أسماؤها مجموعة مضمّنة في الشيفرة: 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 نفسه.
  • إخفاء الذات. عند التحميل يزيل نفسه من /proc/modules ومن /sys/module/ باستخدام list_del_init، ويحذف كائن kobject الخاص به في sysfs، ويزيد عدّاد مراجعه عبر try_module_get بحيث لا يستطيع rmmod إنهاء تحميله.

قائمة الإخفاء هذه دلالة في ذاتها: فإلى جانب برنامج التعدين تحجب masscan وsshruns وransomx، أي أنه من المرجّح أن المشغّل يشغّل ماسحًا وقد يكون في حقيبته أكثر من برنامج تعدين.

الأثر العملي أن المسؤول الذي يراقب top يرى جهازًا مشغولًا لكن طبيعيًّا، ولا يجد عملية مارقة، ولا يستطيع رؤية وحدة النواة التي تقوم بالتزييف. الدلائل مادية وخارج النطاق: الجهاز يسخن، والمراوح تتسارع، وسحب الطاقة يرتفع، ولا شيء من ذلك يمكن للروتكيت تزييفه.

الاستمرارية: ثلاث آليات موزّعة حسب النمط

تتوقف استمرارية Rootpacket على النمط الذي تهبط فيه. في نمط الجذر تُضيف طبقتين من الآليات تعزّز كل منهما الأخرى؛ وفي نمط فضاء المستخدم تتراجع إلى آلية ثالثة.

#الآليةالنمطالتفصيل
1خدمة systemdالجذرkernel-kd.service، Type=simple، Restart=always، RestartSec=3
2وحدة DKMSالجذرتثبّت الروتكيت تحت /lib/modules/$(uname -r)/extra/؛ تبقى بعد ترقيات النواة
3crontabالمستخدم@reboot إضافة إلى كل دقيقة (* * * * *)، مع قفل PID وsetsid

مدخلة DKMS هي الأعند: فهي تثبّت الروتكيت عبر نظام بناء الوحدات الخاص بالنواة نفسها، بحيث تعيد ترقية نواة روتينية بناءها وتسليحها بدلًا من إزالتها.

killservice.sh: تنظيف الجهاز وإغلاقه

يسمّي النص نفسه “تحصينًا ضد التعدين الخفي” في لافتته، وهذا الوصف دقيق من وجهة نظر المشغّل. يعمل على ثلاث مراحل.

المرحلة 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، 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!، أي “تم الاستحواذ على الجذر”) تشير إلى مشغّل ناطق بالتركية بثقة متوسطة. وقد وجدنا عنوانًا للتوزيع أو التجهيز عند 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نقاط نهاية واجهة 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ملف التعدين التنفيذي (نمط الجذر)
~/.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 تعمل بصلاحية الجذر أو بصلاحية المستخدم الحالي.
  • أرقام استخدام المعالج في /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. فهو يضع chmod 000 على ملفات Redis وDocker وPostgreSQL وMongoDB وغيرها من الملفات التنفيذية ويضيف قواعد 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، ولم يحصل على صلاحية الجذر على ذلك البناء، وتراجع إلى تشغيل الأمر بدون صلاحيات. لم يُشغّل برنامج التعدين، ولم يُحمّل أي شيء إلى الخارج.
  • مكوّن ترقية الصلاحيات هو 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/ar/reports/rootpacket-linux-cryptojacking-rootkit/