SSH דרך דלת אחורית
מתחזק מרושע או פרוץ הוסיף התנהגות זדונית בספרייה בשם ליבלזמה, חלק מכלי וספריות הדחיסה של xz, וכתוצאה מכך נוצרת דלת אחורית ב-SSH. זוהי מתקפת שרשרת אספקה מתקדמת של תוכנה, שכן הספרייה שונתה במכוון עבור הדלת האחורית, עם טכניקות ערפול והתגנבות להסתרת מטען ההתקפה מהסוקרים.
התגלה ונחשף לאחרונה (ב-29 במרץ האחרון), והטיפול במתקפה נמשך. עם זאת, התקלה נבלמה במהירות מכיוון שנראה שהיא משפיעה רק על גרסאות טרום-הפצה של קבוצה מוגבלת של סביבות (חבילות DEB ו-RPM, עבור ארכיטקטורת x86_64, ובנויה עם GCC). בכל מקרה, ה- CVE קיבל ציון בסיס CVSS מתוך 10, אשר שמור לפגיעויות הסייבר הקריטיות ביותר. אם הוא ייכנס להפצות יציבות, ההשפעה תהיה עצומה.
הניתוח הטכני של התקיפה, כולל הסבר מעמיק על דלת אחורית של xx, נותח במקום אחר. פוסט זה יתמקד בציר הזמן של התקיפה, כיצד ניתן היה לזהות אותה, כיצד טופל האירוע עד כה, ואילו לקחים ניתן להפיק מהתקיפה.
הזנב הארוך של הדלת האחורית נמשך גם מעבר לתיקון הראשוני. באוגוסט 2025, יותר משנה לאחר ש-CVE-2024-3094 נחשף, חוקרי אבטחה ב-Binarly מצאו שהדלת האחורית עדיין קיימת בתריסר תמונות דביאן Docker שפורסמו ב-Docker Hub, כאשר צוות דביאן סירב להסיר אותן, והתייחס אליהן כאל ממצאי פיתוח היסטוריים ולא כאל סיכון פעיל. בנפרד, OpenSSF ו-OpenJS פרסמו אזהרה משותפת זמן קצר לאחר תקרית XZ כי ניסיונות השתלטות דומים של הנדסה חברתית כבר כוונו נגד פרויקטים של JavaScript, דבר המצביע על כך שדפוס ההתקפה מסוג "מתחזק-אמון" המשמש כאן נמצא בשימוש חוזר במקומות אחרים.
כיצד הוזרקה הדלת האחורית של ה-XZ
הערה: מאגר ה-git נמצא ב git.tukaani.org. עם זאת, היה גם מאגר המתארח ב-GitHub (חסום כעת) שבו חשבון GitHub פרסם את השינויים ששולבו מאוחר יותר במאגר Git.
נראה שחלק אחד מהדלת האחורית נמצא רק בקבצי ה-tarball המבוזרים עבור גרסאות 5.6.0 ו-5.6.1, לא במאגרי git ומסתמך על... שורה אחת בקובץ build-to-host.m4 קובץ מאקרו המשמש את autoconf. החלק השני היה בשני קבצי בדיקה לכאורה bad-3-corrupt_lzma2.xx ו טוב-גדול_דחוס.lzma
שהיו commitטד על ידי חשבון GitHub "ג'יה טאן" (JiaT75) בתוך ה מאגר xz ב-23 בפברואר. זה היה שינוי תמים שהוסיף קבצי בדיקה (כביכול בלוקים דחוסים של .lzma ו-.xz). מעניין לציין שקבצי הבדיקה לא היו בשימוש על ידי הבדיקות! השורה בקובץ .m4 מזריקה סקריפט מעורפל (כלול בקובץ tarball) שיבוצע בסוף ההגדרה אם תנאים מסוימים תואמים. זה משנה את ה-Makefile עבור ה- ליבלזמה ספרייה שתכיל קוד שמחלץ נתונים מקובץ .xz, אשר לאחר סיום ההסרת ערפול בתסריט הזה, מופעל בסוף תהליך ההגדרה. הוא מחליט אם לשנות את תהליך הבנייה כדי להזריק קוד: רק תחת GCC ומקשר GCC, תחת דביאן או rpm, ורק עבור x86_64 לינוקס. כאשר הקוד המוזרק תואם, הוא עוצר את הביצוע על ידי החלפת שניים איפונק רזולוטורים כך שקריאות מסוימות מוחלפות. זה גורם לניתוח טבלאות הסמלים בזיכרון (זה לוקח זמן, מה שהוביל לזיהוי, כפי שמוסבר בהמשך).
ואז הדברים נהיים מעניינים: הדלת האחורית מתקינה וו audit בתוך המקשר הדינמי, ומחכה להגעת סמל הפונקציה RSA_public_decrypt, אשר מופנה לנקודה מסוימת בקוד הדלת האחורית, אשר בתורו קורא חזרה. libcrypto, כנראה כדי לבצע אימות רגיל. והמטען מופעל אם לתוכנית הפועלת יש את שם התהליך /usr/sbin/sshdהיה ברור ששרתי SSH היו המטרה. באופן מסורתי, sshd שרתים כמו OpenSSH לא היו מקושרים אליהם ליבלזמה, אבל sshd כן לעתים קרובות מתוקנים כדי לתמוך ב-systemd-notify כך ששירותים אחרים יוכלו להפעיל כאשר sshd פועל. ואז liblzma נטען בעקיפין על ידי system, סוגרת את המעגל.
הדלת האחורית עדיין לא נותחה במלואה, אך נראה שכן מאפשר ביצוע פקודות מרחוק (RCE) עם הרשאות של הדמון sshd, הפועל בהקשר של טרום אימות. מידע מהאישור המרוחק, כאשר הוא תואם לדלת האחורית, מפוענח באמצעות ChaCha20, וכאשר הוא מפענח בהצלחה הוא מועבר ל- מערכת()אז זהו בעצם RCE מגודר, גרוע בהרבה מעקיפת מפתח ציבורי גרידא.
קובץ tarball מאוחר יותר בגרסה 5.6.1 הראה מאמצים נוספים להסתיר את העקבות, תוך הוספת ערפול נוסף לשמות סמלים וניסיון לתקן את השגיאות שנצפו. מנגנון הארכה שם חיפשו קבצי בדיקה נוספים עבור חתימות מסוימות להוספה לדלת האחורית.
מתקפה מתוחכמת למדי זו עלולה לחלוף מבלי משים עד שיגיעו להפצות לינוקס יציבות. למרבה המזל, יש אנשים שאוהבים לבדוק מדוע דברים חריגים קורים.
גילוי מתקפת הדלת האחורית של XZ
פעמים רבות נחשפת התנהגות זדונית שהוזרקה במקרה או במקרה. דוגמה טובה לכך הייתה אזהרת הוצאה משימוש ("למי אכפת מאזהרות?") שהובילו לגילוי ה- מתקפת זרם אירועים באוקטובר 2018. משתמש נוסף הוא זה שהזהיר קודקוב באפריל 2021 שסקריפט מעלה הקבצים שלהם ל-bash לא עבר את בדיקת סכום ("מי מאמת את שלמותם של ארטיפקטים באמצעות בדיקת סכומי"?) אנומליות ותסמינים מוזרים עם SSH loginשל (login(שגוזל הרבה מעבד וזמן שחלף מוגבר, שגיאות valgrind) עוררו את סקרנותם של אנדרס פרוינד, מפתח PostgreSQL ערני אך לא אנליסט אבטחה (כפי שצייןלאחר חקירה מסוימת עם OpenSSH על דביאן סיד, הוא הגיע למסקנה שבעיית זמן התגובה מסתמכת על ספרייה, ליבלזמה, חלק xz- כלים ספריית דחיסה. הסיבה: "מאגר xz במעלה הזרם וקובצי ה-tarball של xz עברו דלת אחורית"האבחון הזה היה כל כך מדויק!" ב-29 במרץ 2024 פרסם אנדרס ב-Openwall את הניתוח הראשון:דלת אחורית במעלה הזרם xz/liblzma המובילה לפריצה לשרת SSH"עובדה: קבצי tarball של XZ Utils 5.6.0 ו-5.6.1 מכילים דלת אחורית. קבצי tarball אלה נוצרו ונחתמו על ידי חשבון ג'יה טאן הנ"ל. He פורסם במסטודון מאוחר יותר באותו יום, והבין שהתגלית הייתה מקרית ודרשה הרבה צירופי מקרים. התגובות של משתמשים אחרים שוות קריאה. משתמש גיטהאב אותו סם (הידוע גם כסם ג'יימס) פרסם כתבה נחמדה שאלות נפוצות על הדלת האחורית של xz-utils היכן שסוכמה ההתקפה, תוך קישור לעוד ניתוחים מעמיקים של מטען ההתקפה. ניתוחים אלה היו עסיסיים מבחינה טכנית, ועזרו לנו להבין טוב יותר את ההזרקה, אשר הייתה מורכבת מאוד:- xz/liblzma: הסבר על ערפול בשלבי ה-Bashניתוח נחמד של הדה-אובוסקציה על ידי סקריפט ההזרקה, בארבעה "שלבים".
- שרשור הכחול-שמיים של פיליפו ולסורדה ניתוח של הדלת האחורית עצמה ב-RSA_public_decrypt, אשר מראה את טבעה: RCE, לא מעקף אימות, ומגודר (מקבל את המפתח הפרטי של המחבר ואם לא, חוזר להתנהגות רגילה) / בלתי ניתן לפירעון. המחבר התכוון לשמור על פרופיל נמוך כדי להימנע מגילוי!
- ניתוח דלת אחורית של XZ מאת @smx-smx (עבודה פעילה) – ניתוח נוסף של הדלת האחורית (כמעט הלכתי לאיבוד בהתחלה 😀)
- ויקי תיעוד של דלת אחורית של xz, ניתוח נוסף של סקריפט ההזרקה 5.6.1.
כיצד טופל האירוע
הגילוי על ידי אנדראס פרוינד היה זהיר משום, במילותיו שלו:"בהתחשב במעורבות לכאורה במעלה הזרם, לא דיווחתי על באג במעלה הזרם. מכיוון שחשבתי בתחילה שמדובר בבעיה ספציפית לדביאן, שלחתי דוח ראשוני יותר לכתובת security@...ian.org. לאחר מכן, דיווחתי על הבעיה לכתובת distros@." CISא' קיבל הודעה באמצעות חלוקה.
מי נמצא תחת מתקפה?
או שחשבון GitHub JiaT75 נפרץ (זכרו ש-GitHub חייב לאחרונה 2FA) או שהמשתמש הפיזי שבבעלותו החשבון עבר לצד האפל. אבל ישנן סיבות משכנעות לחשוב על איום מתמשך מתקדם (APT), אולי מגובה על ידי המדינה, עקב התחכום הטכני של המתקפה. חקירה נוספת של סוכנויות אבטחת סייבר ואכיפת החוק תגלה... ערך זה בחדשות האקר של YCombinator על ג'יה טאן שופך אור על ה"מי" ופעילותו. מומלץ! זה נותן הרבה מידע על איך הרעים מנסים להונות משתמשים אחרים, באמצעות הנדסה חברתית."מעצבן מאוד - לכאורה מחבר הדלת האחורית היה בקשר איתי (rwmj) במשך מספר שבועות בניסיון להוסיף את גרסה 5.6.x של xz לפדורה 40 ו-41 בגלל "התכונות החדשות והנהדרות" שלה. אפילו עבדנו איתו כדי לתקן את בעיית valgrind (שמתברר כעת שנגרמה על ידי הדלת האחורית שהוא הוסיף). היינו צריכים לרוץ אתמול בלילה כדי לתקן את הבעיה לאחר שבירת האמברגו בשוגג. הוא היה חלק מפרויקט xz כבר שנתיים, והוסיף כל מיני קבצי בדיקה בינאריים, ולמען האמת, עם רמת התחכום הזו, הייתי חושד אפילו בגרסאות ישנות יותר של xz עד שיוכח אחרת."
ג'יה טאן נקטה באמצעים כדי למנוע מעקב: נראה שהיא השתמשה ב-VPN (vpn.singapore.witopia.net) כדי להתחבר - וזה בסדר כשלעצמו. ונראה ששינויים רבים מגובים במיילים זמניים, חד פעמיים (במקרה זה מ-ProtonMail) הקוראים למזג את השינויים.
ייתכן שהשחקן מתכוון להעמיק עוד יותר, עד לגרעין לינוקס, כתורם ל- משובץ ב-xy הפרויקט. ניתוח ראשוני לא מצא ראיות להפלה, נכון להיום.
הערה: עוד אחד תורם XZ חסר פרופיל "הנס יאנסן" (משתמש GitHub "hansjans162") הוא תחת בדיקההחשבון שלו בדביאן הוא כעת חסוםהוא ביצע עדכונים רבים למשחקי דביאן כדי להסתיר את זה שרצה ב-debian/xz-utils, עדכון לגרסה 5.6.1 כדי לזרז את הפצת הדלת האחורית ל- דביאן/לא יציב.
כל מה שאנחנו יכולים לומר, כרגע, הוא שמדובר ב-APT (עדיין לא מזוהה) המשתמש בחשבונות שונים, שעובד לפחות שנתיים על קמפיין זה, ועובד בסבלנות על השתלת RCE ב-SSH.
נכון לכתיבת שורות אלה, הזהות מאחורי "ג'יה טאן" נותרה בלתי מאומתת. לא אומת בפומבי ייחוס אמין לאדם, ארגון או גורם מדיני ספציפי, דבר המחזק את יעילותה של המשמעת המבצעית של הפרסונה.
האם ניתן היה למנוע את מתקפת הדלת האחורית של ה-XZ?
די קשה.
ראשית, חלק מהדלת האחורית שהוזרקה נכנס לקבצי בדיקה דחוסים שלא היו בשימוש על ידי הבדיקות. במבט לאחור, זה יכול היה לעורר כמה אזעקות (רועשות), אבל למי אכפת לבדוק שכל קבצי הבדיקה נמצאים בשימוש על ידי בדיקות בפועל בעולם האמיתי? שנית, חלק מהדלת האחורית שהוזרקה נכנס לקבצי מאקרו לתוך קבצי ה-tarball של הגרסה, וקשה לבדוק ידנית הבדלים עם ה-tarball הצפויים. אוטומציה היא גם מורכבת, מכיוון שהתוצאה הצפויה מהבנייה עצמה (לכל מי שיודע איך automake/autoconf עובד) קשה למידול לצורך ניתוח אם ה-tarball האמיתי תואם את הציפיות. חלק הציגו את זה as "התאמות של קבצי ה-tarball מעץ ה-git הן תכונה, לא באג"מקורם של קבצי tarball בינאריים מקוד המקור שלהם הוא בעיה לא פתורה.
מוניטין של משתמש? ובכן, חשבון ה-GitHub של JiaTan75 לא עשה דברים סוררים לפי העבר. commitש. זה הושעה רק לאחר שהצטברו ראיות, אבל עד 29 במרץ זה היה משתמש קבוע שביצע עסקים רגילים. ובכן, לא כל כך רגיל. מאוחר יותר commitשל (זֶה, זֶה, זֶה, ו זֶה אשר התאמת קוד הניצול) ניסתה לתקן את שגיאות וקריסות valgrind בתצורות מסוימות, עקב הבדלים בפריסת המחסנית הצפויה על ידי הדלת האחורית. Commit ביקורות יכלו לזהות זאת, אבל למי יש סבלנות לנתח שינויים בקובץ בדיקה בינארי או את המוטיבציה האמיתית לשינוי בתכונות GCC בקוד המקור של C?
האם צריך להפעיל אזעקה כאשר SSH login לוקח 800 מילישניות במקום 300 מילישניות? כנראה שרק אנשים זהירים במיוחד ישימו לב. קיקרו אמר, "פזיזות שייכת לנעורים; זהירות לזקנה."
תשתית ifunc נוספה ביוני 2023 על ידי "הנס יאנסן" ו"ג'יה טאן". זהו הראשון commit הוספת תמיכה של ifunc ל- crc64_fast.c (ששימש מאוחר יותר להחדרת ה- backdoor). חודשים לפני הזרקת הקבצים הבינאריים של ה- backdoor לקבצי הבדיקה!

הערה: מחבר ו commitיש הבדלים כאן, אבל זה נורמלי: לאסה קולין הוא מתחזק הפרויקט, והוא מיזג את השינויים. הוא אפילו מודה ל"הנס יאנסן"...
אף אחד לא העלה חששות לפני הפוסט של אנדרס פרוינד וה-CVE שנוצר על ידי RedHat. אם אתה רואה רצף של כלים שיזהו את זה, הם מזהים את הרכיב המושפע עכשיו, לשעבר לאחר מכן.
כנראה שהמניעה הטובה ביותר נבעה מאופיין של הפצות לינוקס, וכיצד גרסאות לא יציבות ומתקדמות עוברות רק להפצות יציבות במורד הזרם לאחר תהליך בקצב קבוע.
לקחים שנלמדו מהתקפת bBackdoor של XZ
שמנו לב כמה קשה לזהות מְכוּוָן דלתות אחוריות. יש להתייחס לדלתות אחוריות כאיום פנימי, מכיוון שהן מושתלות על ידי צוות פנימי או דרך חשבונות פנימיים שנפרצו. והאנשים האלה זוכים לרוב לאמון. וכאשר הדלת האחורית מושתלת בחפץ המבוזר, זה מקשה על גילויה.
ישנם סופרים כמו קווין ביומונט הצביע על מערכת, אשר פותחת משטח תקיפה גדול של שירותי צד שלישי לדלת אחורית. זה מה שהשחקן הרע ניצל לרעה כאן. ל-Systemd יש הרבה עין, אבל XZ היא ספרייה לא ברורה במעלה השרשרת. "כאשר הזרם נגוע, כולם שותים מים מורעלים במורד הזרם".
בקשת שינוי לא קשורה במערכת עבור טעינה דינמית של ספריות דחיסה, אשר תסיר את הדלת האחורית, כבר מוזג לתוך המערכת אך טרם סופק. התלות הנוספות שהוצגו על ידי libsystemd עשויות להיות מקור הפגיעויות, ואתמול בקשה זו נפתחה.
A הערה ב-"xz: השבת את ifunc כדי לתקן את הבעיה" commit נתן תובנה חדה לגבי היכן למקד את הפוקוס אם ברצוננו למנוע פעילות כזו (ההדגשה היא שלי):
"הלקח שעלינו ללמוד כקהילה הוא יותר לאבטח" software supply chain security באופן הוליסטי, ביקורת על מערכות בנייה מעבר לקוד המקור בלבד. כמו הפריצה של SolarWinds שבה תוקפים שינו עדכוני תוכנה עבור תוכנת ניטור בקוד סגור של SolarWinds."
שאלות נפוצות
האם הדלת האחורית של ה-XZ עדיין מהווה סיכון כיום?
ברובו נבלע, אך לא נעלם לחלוטין. באוגוסט 2025, חוקרים מצאו שהדלת האחורית עדיין קיימת במספר תמונות של דביאן Docker Hub, שטופלו על ידי דביאן כממצאים היסטוריים לא פעילים. צוותים צריכים לוודא שהם לא בונים על תמונות בסיס מיושנות ולא מתוקנות במקום להניח שהתיקון של 2024 סגר לחלוטין את הדלת.







