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·
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, מקושר סטטית, לא-מקוצץ |
| 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 שלו בזיכרון מתוקן במטמון העמודים |
| אמינות | דטרמיניסטי, ללא תנאי מירוץ |
| שימוש / נסיגה | ./getroot <cmd> [args...]; אם הניצול אינו נוחת, הוא מריץ את הפקודה עם ההרשאות הנוכחיות בכל מקרה |
המנגנון. אופטימיזציה במקום משנת 2017 בקוד ה-AEAD השאירה את עמודי מטמון העמודים שעברו splice יושבים גם ברשימת המבזרים (scatterlist) של המקור וגם של היעד. כשתבנית authencesn כותבת את ערך ה-ESN הזמני שלה בן 4 הבתים בהיסט שנבחר על ידי התוקף assoclen + cryptlen, אותה כתיבה נוחתת בתוך עמוד מטמון העמודים של קובץ הקריא למשתמש. אז בדיקת ה-HMAC נכשלת ו-recvmsg() מחזיר EBADMSG, אך הליבה לעולם אינה מגלגלת את הכתיבה לאחור. getroot מנתח את כותרות ה-ELF של /usr/bin/su כדי לחשב את היסט הקובץ של נקודת הכניסה שלו, ואז מבצע בלולאה splice ← sendmsg (נושא את 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 | שירות systemd | root | kernel-kd.service, Type=simple, Restart=always, RestartSec=3 |
| 2 | מודול DKMS | root | מתקין את הרוטקיט תחת /lib/modules/$(uname -r)/extra/; שורד שדרוגי ליבה |
| 3 | crontab | user | @reboot בתוספת כל דקה (* * * * *), עם נעילת PID ו-setsid |
רשומת ה-DKMS היא העקשנית: היא מתקינה את הרוטקיט דרך מערכת בניית המודולים של הליבה עצמה, כך ששדרוג ליבה שגרתי בונה ומחמש אותו מחדש במקום להסיר אותו.
killservice.sh: פינוי המכונה וסגירתה
הסקריפט מכנה את עצמו “cryptojacker hardening” (“הקשחת כורה מטבעות”) בכרזה שלו, ותיאור זה מדויק מנקודת המבט של המפעיל. הוא רץ בשלושה שלבים.
שלב 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: הסרת רוטקיטים של מרחב-משתמש. הוא שולף רשומות 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-256 | MD5 |
|---|---|---|
rootpacket.tar.gz (חיצוני) | e2d0dab6b29df89d123fe8581047a03ac9b89ae8fa0d1f334b5aefbb93152857 | |
getroot | dda96d8a4bcc39dc7679347a4386bf1024152d2ccc46d333725ad0cda855d952 | |
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)←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 שבר. הוא מגדיר
chmod 000על Redis, Docker, PostgreSQL, MongoDB וקבצים בינאריים אחרים ומוסיף כללי 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(family 38) בפרופיל ה-seccomp. - הניחו פריצת מארח מקונטיינר. מכיוון שכתיבת מטמון העמודים חוצה את גבול הקונטיינר, התייחסו לכל מארח שהריץ
setup.sh, ולו מתוך קונטיינר, כפרוץ לחלוטין. בנו מחדש את המארח במקום רק להסיר את הקונטיינר.
מיפוי MITRE ATT&CK
| טקטיקה | טכניקה |
|---|---|
| Initial Access | T1190 Exploit Public-Facing Application (Redis, Docker, MongoDB, Elasticsearch, Jenkins, Hadoop YARN, במשתמע) |
| Execution | T1059.004 Unix Shell |
| Privilege Escalation | T1068 Exploitation for Privilege Escalation (CVE-2026-31431, AF_ALG algif_aead); T1611 Escape to Host (מטמון עמודים משותף) |
| Persistence | T1543.002 Systemd Service; T1053.003 Cron; T1547.006 Kernel Modules (DKMS) |
| Defense Evasion | T1014 Rootkit; T1036.005 Masquerading: Match Legitimate Name; T1027.002 Software Packing (UPX); T1070.004 File Deletion; T1564.001 Hidden Files |
| Discovery | T1057 Process Discovery (ציד יריבים) |
| Lateral Movement | T1570 Lateral Tool Transfer (חבילת הפצה-מחדש פנימית) |
| Impact | T1496 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] עם פתק קצר על מי אתם ולמה אתם זקוקים להן.