עמוד זה הוא תרגום. הגרסה האנגלית היא הנוסח המחייב. התרגום תואם למקור האנגלי נכון ל-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·
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 |
| 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) |
| תת-מערכת | 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") |
| Hooking | 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 תלויה במוד שבו הוא נוחת. במוד root הוא משלב שני מנגנונים שמחזקים זה את זה; במוד userland הוא נסוג לשלישי.
| # | מנגנון | מוד | פירוט |
|---|---|---|---|
| 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 ומשמשים נקודות כניסה נפוצות לכריית מטבעות, עוצר, משבית ומסווה כל אחד מהם, מגדיר 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: הסרת רוטקיטים ב-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-256 | MD5 |
|---|---|---|
rootpacket.tar.gz (חיצוני) | e2d0dab6b29df89d123fe8581047a03ac9b89ae8fa0d1f334b5aefbb93152857 | |
getroot | dda96d8a4bcc39dc7679347a4386bf1024152d2ccc46d333725ad0cda855d952 | |
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)
}
צעדי תיקון
- הסירו את הרוטקיט ממצב ידוע כנקי. אתחלו ממדיית 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 חייבת להיעלם, אחרת היא נבנית מחדש. - הסירו את השירות:
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 שבר. הוא מגדיר
chmod 000על הבינאריים של Redis, Docker, PostgreSQL, MongoDB ואחרים ומוסיף כללי DROP ב-iptables. התקינו מחדש את החבילות המושפעות וסקרו את חומת האש. - חפשו לרוחב. ה-
rootpacket.tar.gzהפנימי בנוי להפצה חוזרת, ולכן בדקו מארחים אחרים לאיתור אותם אינדיקטורים, וסקרו יומנים לאיתור ניצול של השירותים המופיעים ב-killservice.shכדי למצוא את דרך הכניסה. - סגרו את 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. - הניחו שהמארח נפרץ מתוך הקונטיינר. מכיוון שהכתיבה ל-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] עם הערה קצרה על מי אתם ולשם מה אתם זקוקים להן.