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

Rootpacket: ערכת כריית מטבעות ל-Linux שמתחבאת בליבה

Kinryū Labs ניתחה את Rootpacket, ערכת כריית מטבעות ל-Linux הנושאת רוטקיט ברמת הליבה לזיוף ניצול המעבד והזיכרון, מסלימה ל-root דרך 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. אושר לפרסום ציבורי. זהו ניתוח סטטי בלבד: שום דגימה לא הורצה, וכל ממצא מגיע מחילוץ מחרוזות, פירוק (disassembly), וסקירת קוד מקור. ארנק המונרו, המאגר, והתשתית של התוקף מתפרסמים כמחווני הגנה.

תקציר מנהלים

  • ~45%מה ש-top מציג מהמעבד בעוד הוא רץ קרוב ל-100%
  • 3מנגנוני התמדה
  • 7.8CVSS, CVE-2026-31431 (הסלמת הרשאות מקומית דרך page-cache ב-AF_ALG)
  • המארחroot מקונטיינר ללא הרשאות

‏Rootpacket היא ערכת כריית מטבעות רב-רכיבית ל-Linux. היא מאגדת רוטקיט ברמת הליבה להתחמקות, ניצול הסלמת הרשאות ל-CVE-2026-31431 בממשק ההצפנה AF_ALG של Linux, כורה מונרו XMRig 6.26.0 ארוז ב-UPX ושמו שונה ל-xrandom, וסקריפט חיסול מתחרים. הקוד כתוב ברובו בטורקית (שמות משתנים, הערות, מחרוזות מצב), מה שמצביע על מפעיל דובר טורקית.

הערכה רצה באחד משני מצבים. במצב root היא טוענת רוטקיט מסוג מודול ליבה הניתן לטעינה (LKM) המחופש ל-intel_uncore_freq_aux, מתקינה אותו דרך DKMS כדי שישרוד שדרוגי ליבה, רושמת שירות systemd, ומנקה את המכונה מיריבים. כשהיא אינה מצליחה להשיג root, היא נסוגה למצב מרחב-משתמש שמתמיד דרך crontab ומריץ את הכורה כתהליך רקע (daemon). הכורה מתחבר ל-pool.supportxmr.com:443 דרך stratum+ssl וכורה מונרו עם 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 ב-Linux (CVSS 7.8, נחשפה באפריל 2026). מכיוון שמטמון העמודים משותף לכל המארח, אותה כתיבה בורחת מקונטיינר כדי להשיג root על המארח, כך שקונטיינר נגוע הוא מארח שנפרץ (ביטחון גבוה).
  • המפעיל הרבה מעל לצוות “השלך-וכרֶה” הטיפוסי (ביטחון גבוה). רוטקיט LKM מותאם אישית עם וו-ויי ftrace, התמדת DKMS שמשחזרת את עצמה אוטומטית לליבות חדשות, ניצול page-cache עובד ל-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 מריץ את getroot אם אינו כבר root, מעתיק את 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 מקושר סטטית ולא-מקוצץ (not stripped), הבנוי מ-getroot.c. הוא מנצל את CVE-2026-31431 (“Copy Fail”), פגם לוגי בממשק algif_aead של AF_ALG בליבת Linux שנחשף ב-29 באפריל 2026 (CVSS 7.8). הבאג מעניק כתיבה דטרמיניסטית של 4 בתים בשליטת התוקף אל מטמון העמודים של הליבה, ו-getroot משתמש בה כדי לתקן קובץ בינארי SUID בזיכרון ולצאת כ-root.

מאפייןערך
סוג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)
תת-מערכת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 שלו בזיכרון מתוקן במטמון העמודים
אמינותדטרמיניסטי, ללא תנאי מירוץ
שימוש / נסיגה./getroot <cmd> [args...]; אם הניצול אינו נוחת, הוא מריץ את הפקודה עם ההרשאות הנוכחיות בכל מקרה

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

בריחת קונטיינר אל המארח. מטמון העמודים של Linux הוא גלובלי-למארח; לקונטיינרים אין משלהם. תהליך בתוך קונטיינר ללא הרשאות שמבצע splice על ה-/usr/bin/su של המארח משחית את העותק המוטמן של המארח, כך ש-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 (נפתר דרך 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, מסתיר מזהי תהליך (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 עצמה.
  • הסתרה עצמית. בטעינה הוא מסיר את עצמו מ-/proc/modules ומ-/sys/module/ עם list_del_init, מוחק את אובייקט ה-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, 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מאגר כריית המונרו הראשי, 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 או כמשתמש הנוכחי.
  • נתוני מעבד ב-/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)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 שבר. הוא מגדיר 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 (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: ערכת כריית מטבעות ל-Linux שמתחבאת בליבה. https://kinryu.sh/he/reports/rootpacket-linux-cryptojacking-rootkit/