עמוד זה הוא תרגום. הגרסה האנגלית היא הנוסח המחייב. התרגום תואם למקור האנגלי נכון ל-23 באוקטובר 2026. לקריאה באנגלית

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

Rootpacket: ערכת כריית מטבעות זדונית ללינוקס שמסתתרת בקרנל

Kinryū Labs ניתחה את Rootpacket, ערכת כלים לכריית מטבעות על חשבון הקורבן בלינוקס המשגרת רוטקיט ברמת הקרנל לזיוף ניצולת מעבד וזיכרון, מסלימה הרשאות ל-root דרך CVE-2026-31431 (פגם ב-page cache בנתיב 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. מאושר לפרסום פומבי. נאסף ברשת חיישני ה-honeypot של Kinryū Labs. האינדיקטורים שלהלן מנוטרלים.

תקציר מנהלים

  • ~45%ניצולת המעבד ש-top מציג בעוד הוא עובד קרוב ל-100%
  • 3מנגנוני התמדה
  • 7.8CVSS, CVE-2026-31431 (הסלמת הרשאות מקומית ב-page cache דרך 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, היא נסוגה למוד userland המתמיד דרך 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"), כתיבה דטרמיניסטית ל-page cache בנתיב algif_aead של AF_ALG בלינוקס (CVSS 7.8, נחשף באפריל 2026). מכיוון שה-page cache משותף לכל המארח, אותה כתיבה עצמה פורצת מקונטיינר ומשיגה root על המארח, ולכן קונטיינר נגוע הוא מארח שנפרץ (ביטחון גבוה).
  • המפעיל נמצא מעל הרמה האופיינית של חבורות "שחרר וכרה" (ביטחון גבוה). רוטקיט LKM מותאם אישית עם hooks מבוססי ftrace, התמדה דרך DKMS שנבנית מחדש אוטומטית לקרנלים חדשים, מנצל עובד ל-CVE-2026-31431 מעל ה-page cache, והתמדה רב-שכבתית ב-systemd/DKMS/cron הם רמת הנדסה שרוב כורי המטבעות הזדוניים אינם מגיעים אליה.
  • סביר להניח שהמפעיל דובר טורקית (ביטחון בינוני). שמות משתנים, הערות והודעות מצב בטורקית, כגון ROOT ele gecirildi!, פזורים לאורך הערכה.
  • Rootpacket בנוי כדי להשתלט על מארח באופן בלעדי ולשמור עליו. ה-killservice.sh שלו מסיר כורים יריבים ולאחר מכן משבית את השירותים החשופים חיצונית שכורי מטבעות זדוניים משתמשים בהם לגישה ראשונית, ובכללם Docker API בפורטים 2375/2376, אותו וקטור שתיעדנו בדוח RedTail שלנו. החבורות האלה נלחמות על אותן מכונות עם תצורה שגויה.

ארכיטקטורת ערכת הכלים

Rootpacket הוא dropper מודולרי. החלקים:

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 מריץ את getroot אם אינו root כבר, מעתיק את xrandom אל /opt/kernel-kd/, יוצר שירות systemd, מריץ את kernel/install.sh כדי לקמפל ולטעון את הרוטקיט דרך DKMS, מריץ את killservice.sh כדי לפנות את המתחרים, ומפעיל את הכורה כשירות מתמיד.

נסיגה ל-userland. כאשר root אינו בהישג יד, setup.sh מעתיק את xrandom אל ~/.xrandom/, כותב משגר עם מנעול PID, מתקין רשומת crontab שנורית באתחול ובכל דקה, ומשגר את הכורה עם setsid כך שישרוד את מעטפת ההורה.

מאפייןמוד rootמוד userland
מיקום הכורה/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 באמצעות השחתת page cache

getroot הוא בינארי ELF64 x86-64 מקושר סטטית, שסמליו לא הוסרו, שנבנה מ-getroot.c. הוא מנצל את CVE-2026-31431 (“Copy Fail”), פגם לוגי בממשק algif_aead של AF_ALG בקרנל לינוקס שנחשף ב-29 באפריל 2026 (CVSS 7.8). הבאג מספק כתיבה דטרמיניסטית של 4 בתים בשליטת התוקף אל תוך ה-page cache של הקרנל, ו-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)
תת-מערכתAF_ALG algif_aead, תבנית AEAD בשם authencesn(hmac(sha256),cbc(aes))
מושפעיםLinux 4.14 עד 6.19.11 (הפגם שוגר ב-2017, commit 72548b093ee3); תוקן ב-6.18.22, 6.19.12, 7.0+
יעד/usr/bin/su: קטע ה-.text שלו בזיכרון מתוקן בתוך ה-page cache
אמינותדטרמיניסטי, ללא תנאי מרוץ
שימוש / נסיגה./getroot <cmd> [args...]; אם המנצל אינו מצליח, הוא מריץ את הפקודה בהרשאות הנוכחיות בכל מקרה

המנגנון. אופטימיזציה במקום משנת 2017 בקוד ה-AEAD השאירה את דפי ה-page cache שעברו splice נוכחים הן ב-scatterlist של המקור והן בזה של היעד. כאשר תבנית authencesn כותבת את ערך ה-ESN הזמני שלה, באורך 4 בתים, בהיסט שנבחר על ידי התוקף assoclen + cryptlen, הכתיבה נוחתת בתוך דף ה-page cache של קובץ שקריא למשתמש. בדיקת ה-HMAC נכשלת לאחר מכן ו-recvmsg() מחזירה EBADMSG, אך הקרנל אינו מבטל את הכתיבה. getroot מנתח את כותרות ה-ELF של /usr/bin/su כדי לחשב את ההיסט בקובץ של נקודת הכניסה שלו, ולאחר מכן מריץ בלופ splice → sendmsg (הנושאת את 4 הבתים לכתיבה בתוך ה-AAD) → recvmsg, פעם אחת לכל מקטע של 4 בתים מה-shellcode, ומתקן את /usr/bin/su בתוך ה-page cache. לאחר מכן הוא מבצע execve ל-/usr/bin/su: הקרנל טוען את הדף המושחת, ה-shellcode רץ עם SUID-root, ו-getroot מאמת ש-getuid() == 0 לפני הרצת הפקודה של המפעיל (ומדפיס את ההודעה בטורקית [+] ROOT ele gecirildi!). לא נוגעים כלל בקובץ שעל הדיסק, ולכן ניטור שלמות קבצים אינו רואה דבר.

פריצה מקונטיינר אל המארח. ה-page cache של לינוקס הוא גלובלי לכל המארח; קונטיינרים אינם מקבלים page cache נפרד. תהליך בתוך קונטיינר ללא הרשאות מיוחדות שמבצע splice על /usr/bin/su של המארח משחית את העותק השמור במטמון של המארח, ולכן ה-execve מניב root על המארח ולא רק בתוך הקונטיינר. קונטיינר נגוע הוא אפוא מארח שנפרץ, ו-setup.sh ממשיך וטוען את רוטקיט הקרנל אל המארח. עצירת הקונטיינר והסרתו אינן מספיקות; יש לבנות את המארח מחדש.

הרצנו את getroot פעם אחת במכונה וירטואלית מבודדת (Kali, קרנל 6.6.15). הוא ביצע את רצף ה-AF_ALG במלואו אך לא השיג root באותה גרסה ונסוג להרצת הפקודה ללא הרשאות מיוחדות, דבר שמתאים למנצל המכוון לפריסות קרנל ספציפיות. את הכורה לא הרצנו.

xrandom: הכורה

xrandom הוא עותק של XMRig 6.26.0, כורה ה-Monero בקוד פתוח, ששמו שונה והוא ארוז ב-UPX.

מאפייןערך
זהות אמיתית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 רגיל, אף שלשלב ה-handshake של stratum יש טביעת אצבע TLS שונה עבור כל מי שמתבונן מקרוב.

stealth.c: רוטקיט הקרנל

זה החלק המפותח ביותר בערכה. מדובר ברוטקיט LKM שמשתמש ב-function hooking מבוסס ftrace כדי ליירט פונקציות קרנל ולמחוק את עקבות הנוזקה, והוא מתחזה לאורך כל הדרך למנהל התקן חומרה של Intel.

מאפייןערך
שם המודולintel_uncore_freq_aux
מטא-נתונים מזויפיםMODULE_AUTHOR("Intel Corporation"), MODULE_DESCRIPTION("Intel Uncore Frequency Control Driver"), MODULE_VERSION("1.2.0")
Hookingftrace דרך 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 תלויה במוד שבו הוא נוחת. במוד root הוא משלב שני מנגנונים שמחזקים זה את זה; במוד userland הוא נסוג לשלישי.

#מנגנוןמודפירוט
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 ומשמשים נקודות כניסה נפוצות לכריית מטבעות, עוצר, משבית ומסווה כל אחד מהם, מגדיר 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: הסרת רוטקיטים ב-userland. הוא מסיר מ-/etc/ld.so.preload רשומות LD_PRELOAD זדוניות מוכרות (libprocesshider.so, libjdk.so, libpamx.so, libselinux.so.3 מזויף, ו-xhide) ומוחק את הספריות, ובכך מפנה רוטקיטים של מתחרים ב-userland שעלולים להפריע לרוטקיט שלו.

ייחוס

שמות המשתנים, ההערות ומחרוזות המצב בטורקית שבערכה (למשל ROOT ele gecirildi!, “הושג root”) מצביעים על מפעיל דובר טורקית בביטחון בינוני. מצאנו כתובת הפצה או staging ב-linuxutil5.pages[.]dev, המאוחסנת ב-Cloudflare Pages, דבר שמתאים לדפוס של העמדת מטענים זדוניים על תשתית חינמית ובעלת מוניטין כדי להיטמע. ה-rootpacket.tar.gz הפנימי, עותק עצמאי של הערכה כולה, מספק למפעיל חבילה מוכנה לדחיפה אל המארח הבא.

אינדיקטורים לפריצה

רשת

אינדיקטורהקשר
pool.supportxmr.com / pool.supportxmr.com:443בריכת הכרייה הראשית ל-Monero, stratum+ssl
linuxutil5.pages[.]devהפצה / staging (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כורה ומשגר (מוד userland)
/tmp/.xrandom.lockמנעול PID (מוד userland)
/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

אם הרוטקיט טעון

התצוגות ב-userland מושחתות, ולכן הזיהוי חייב לבוא מתחת לרוטקיט או מצידו:

  • השוו את נתוני המעבד ב-/proc/stat מול מוני חומרה באמצעות perf stat. פער גדול הוא הרמז.
  • חפשו hooks של 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 על הדיסק מול התצוגה שלו ב-page cache. sha256sum קורא דרך ה-cache ומציג את העותק המושחת, ולכן קראו את הדיסק ישירות באמצעות dd if=<file> iflag=direct, חשבו את ה-hash על התוצאה, ואז השוו. אי-התאמה בבינארי SUID היא השחתה של ה-page cache.

כלל 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. הסירו את הרוטקיט ממצב ידוע כנקי. אתחלו ממדיית live או שחזור. מחקו את /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+, או backport של ההפצה שלכם). במקומות שבהם אי אפשר לעדכן מיד, השביתו את הממשק הפגיע: echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif-aead.conf ולאחר מכן rmmod algif_aead. בקונטיינרים, חסמו AF_ALG (משפחה 38) בפרופיל ה-seccomp.
  8. הניחו שהמארח נפרץ מתוך הקונטיינר. מכיוון שהכתיבה ל-page cache חוצה את גבול הקונטיינר, התייחסו לכל מארח שהריץ setup.sh, גם אם מתוך קונטיינר, כאל מארח שנפרץ במלואו. בנו את המארח מחדש במקום להסיר רק את הקונטיינר.

מיפוי MITRE ATT&CK

טקטיקהטכניקה
גישה ראשוניתT1190 Exploit Public-Facing Application (Redis, Docker, MongoDB, Elasticsearch, Jenkins, Hadoop YARN, במשתמע)
הרצהT1059.004 Unix Shell
הסלמת הרשאותT1068 Exploitation for Privilege Escalation (CVE-2026-31431, AF_ALG algif_aead); T1611 Escape to Host (page cache משותף)
התמדהT1543.002 Systemd Service; T1053.003 Cron; T1547.006 Kernel Modules (DKMS)
התחמקות מהגנותT1014 Rootkit; T1036.005 Masquerading: Match Legitimate Name; T1027.002 Software Packing (UPX); T1070.004 File Deletion; T1564.001 Hidden Files
גילויT1057 Process Discovery (חיפוש יריבים)
תנועה רוחביתT1570 Lateral Tool Transfer (חבילת ההפצה החוזרת הפנימית)
השפעהT1496 Resource Hijacking (כריית 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 ב-page cache, ולופ הכתיבה splice/sendmsg/recvmsg שבבינארי.
  • דגימות (הערכה ורכיביה) זמינות לחוקרים ולמגנים אחרים לפי בקשה. כתבו אל [email protected] עם הערה קצרה על מי אתם ולשם מה אתם זקוקים להן.
Sample
rootpacket · e2d0dab6b29df89d…
How to cite
Kinryū Labs (2026). Rootpacket: ערכת כריית מטבעות זדונית ללינוקס שמסתתרת בקרנל. https://kinryu.sh/he/reports/rootpacket-linux-cryptojacking-rootkit/