פרצת אבטחה זדונית בחבילת תוכנה תמימה אותרה על ידי מפתח רב-תושייה, לפני שהספיקה לאפשר לתוקפים אפשרות כניסה לשרתים הנושאים את הקוד הזדוני
לרשימת כל הכתבות הקוליות באתר
ביום שישי האחרון של חודש מרץ נפל דבר בעולם המחשבים. הצליל העמום היה זה של הלסתות הרבות של מפתחי תוכנה וחוקרי אבטחת מידע ברחבי העולם שנשמטו אל הקרקע. עובד חברת מיקרוסופט, בשילוב של נחישות, תושייה ומידה בלתי מבוטלת של מזל, איתר דלת אחורית – מעקף זדוני שהושתל בקוד כדי לאפשר לתוקפים להתחבר לשרתים ולהריץ עליהם קוד מרחוק (RCE), בלי למסור פרטים מזהים. הפרצה הייתה עלולה להשפיע באופן הרסני על שרתי מחשבים רבים ברחבי העולם. מבצע יזום חסר תקדים, שדרש אופרציה מורכבת לאורך כמה שנים והיקפו עוד מתברר, נבלם בזכות תשומת הלב, רצף של צירופי מקרים, וההתעקשות על הפרטים הקטנים.
לו התוקפים היו משלימים את מזימתם במלואה, תוך חודשים ספורים הם יכלו לקבל גישה חופשית לחלק ניכר מהשרתים המושתתים על מערכת ההפעלה לינוקס. חבילת קוד תמימה בשם xz Utils, שנמצאת בשימוש נרחב בשרתי לינוקס, מכילה כלים המשמשים לדחיסת מידע. לכאורה מדובר בכלי סטנדרטי שאין סיבה טובה שיעורר חשד. לפחות שתי גרסאות שחרור של החבילה, גרסאות מעודכנות שהוכרזו תקינות לשימוש, הסתירו בתוכן קוד זדוני. בתנאים הנכונים הקוד הזה יכול לאפשר לתוקף המחזיק במפתח המתאים לגשת לשרת שנגוע בגרסה זדונית של החבילה ולגרום לו להריץ כל פקודה שיחפוץ, בלי להזדקק לפרטי אימות כגון שם משתמש וסיסמה.
מערכת ההפעלה מבוססת על קוד פתוח ומפותחת בעזרת אנשים רבים שתורמים מזמנם ברחבי העולם. הפינגווין של לינוקס | איור: lewing@isc.tamu.edu Larry Ewing and The GIMP, CC0, via Wikimedia Commons
הגרסאות הזדוניות הצליחו להשתחל לכמה הפצות לינוקס, כולל לשלבים מתקדמים של סבבי הבדיקות בשתי הפצות מובילות, Debian ו-Red Hat. הפצות לינוקס הן מערכות הפעלה המושתתות על ליבת לינוקס ומכילות אוסף של ספריות קוד. ההפצות שונות זו מזו, בין השאר בהרכבי הספריות ובכלים שהן מציעות, בהתאם לקהל היעד, והן מתעדכנות מעת לעת. מאחורי כל הפצה עומדים ארגון או חברה מסוימים שמפיצים אותה באופן בלעדי. בשתי ההפצות, הקוד הזדוני השתחל לגרסאות בדיקה והיה לו סיכוי רב לצלוח בשלום את מסלול הבדיקות ולהיטמע בגרסה הנחשבת יציבה שתצא לשוק בחודשים הקרובים.
חצי שנייה בלבד
מפתח התוכנה אנדרס פרוינד (Freund) נתקל במהלך עבודתו בהתנהגות חשודה של המערכת. הוא השתמש בגרסת בדיקה של הפצת הלינוקס Debian ושם לב שאחת מהפעולות שהיה רגיל לבצע דורשת מעט יותר זמן מהרגיל. הפעולה הייתה התחברות מרחוק באמצעות פרוטוקול נפוץ בשם ssh. פרוינד התמקד בחלק מסוים של תהליך ההתחברות, וראה בבירור כי תחת גרסת הבדיקה החדשה פעולת החיבור נמשכת 0.807 שניות, לעומת 0.299 שניות בגרסה קודמת. הבדל של כחצי שנייה.
חצי השנייה הזו, שרוב האנשים היו מתעלמים ממנה, דרבנה את פרוינד לחפור פנימה. הוא שם לב לשימוש מופרז במשאבי המעבד בעת פעולת חיבור ssh, שנכשלת עקב שימוש בשם משתמש שגוי. המשאבים נוצלו בידי ספרייה בשם liblzma, הנכללת ב-xz Utils. בהמשך התברר שהקשר בין ספריית כיווץ הקבצים לשגיאה בהתחברות לשרת נובע מקוד זדוני שהושתל בספרייה.
רק מקצוען שמכיר היטב את הכלים שהוא עובד בהם יחשוד בעיכוב של חצי שנייה בביצועים:
מבצע מורכב
קוד פתוח הוא גישה לפיתוח תוכנה שבה הקוד נגיש לקריאה עבור הציבור ומתוחזק בפומבי. בחלק מהפרויקטים הפועלים בשיטה הזאת, המשתמשים יכולים להעיר הערות על תקינות פעולת הקוד, להציע שינויים ואף להוסיף שינויים בעצמם תחת הפיקוח של מנהלי הפרויקט. בדרך כלל הסידור הזה מקדם שקיפות, נגישות ושיתופיות בפיתוח תוכנה. במקרה של xz, בעל הפרויקט הוא לאסה קולין (Collin), והוא גם בעל ההרשאות לעדכן ולשנות את קובצי הקוד.
ב-2021 החל משתמש בשם JiaT75 לתרום הצעות לשינויי קוד בפרויקטי קוד פתוח תחת השם ג'יה טאן (Jia Tan). ההצעה הראשונה שלו שהתקבלה לא הייתה לפרויקט xz, וגם היא חשודה כבעייתית. טאן שלח הצעות גם לפרויקט xz, ומתחילת 2022 ואילך החל קולין לקבל אותן ולשלבן בפרויקט. בהמשך אותה שנה התחילו לזרום אל קולין תלונות על תחזוקה לקויה של הפרויקט ועל טיפול איטי בתהליכים. בדיעבד, ספק שהפניות הללו הגיעו ממשתמשים בעלי כוונות טהורות. ייתכן שאלה היו "בובות גרב", משתמשים פיקטיביים שהופעלו כדי להפעיל על קולין לחץ להוסיף שותף לתחזוקה השוטפת כדי להתמודד עם היקף הפעילות הדרושה. בהתכתבויות קולין התגונן ואף חשף שהוא מתמודד עם הפרעה נפשית שמקשה עליו לעמוד בעומס. בהמשך הוא הודיע שטאן מסייע לו רבות בתחזוקה ואף הצהיר שבעתיד טאן עשוי לקחת חלק מרכזי יותר בפרויקט.
בהמשך קיבל טאן הרשאות עצמאיות לעשות שינויים בפרויקט כמתחזק רשמי. במהלך השנים 2022 ו-2023 הוא הכניס שינויים תמימים למראה, אולם בדיעבד נראה שהשינויים האלה נועדו לתרום להוצאה לפועל של המזימה. בניסיון להסתיר את הקוד הזדוני שילב אותו טאן בקובצי בדיקה – קבצים שאינם חלק מהתוכנה המשרתת את המשתמשים, אלא מכוונים למפתחים כדי לוודא את תקינות התוכנה. היתרון בשימוש בקבצים כאלה להסוואה הוא שהם אינם קריאים בצורת טקסט נגיש, ולכן הסיכוי שיחפרו לחפש בהם קטן יותר.
הסתיר קוד זדוני בקובצי בדיקה. "דלת אחורית", פרצה מוסתרת בקוד בינארי | איור: Sudtawee Thepsuponkul, Shutterstock
בהמשך, כעוד נדבך בהסוואה, ארז טאן את קובצי החבילה במארז נפרד מהקוד הפתוח לציבור, למטרת הפצה כגרסת שחרור חדשה של xz Utils. על פי רוב מקובל שתוכן החבילות האלו זהה לקוד הפתוח, ולכן פער בין שני המקורות עלול לחמוק מגילוי. כאמור, בשלב הזה טאן כבר היה שותף בתחזוקת פרויקט, ולכן נחשב סמכות ראויה כשהקבצים שוחררו להפצה.
במארז הקבצים שטאן יצר הוא הוסיף קובץ שמטרתו להוציא לפועל את המזימה. חלקי הקוד הזדוני הוסתרו בקובצי בדיקות ובשלל מקומות ברחבי הפרויקט ולא אמורים לפעול סתם כך. החלק האחרון בפאזל, שמופיע רק במארז השחרור, הוא זה שיחדיר בזמן אמת את הקוד הזדוני ממקומות המסתור שלו לתוך הקוד שיופעל אצל המשתמשים.
אבל מה הקשר בין חבילת כיווץ קבצים, xz Utils, גם אם היא נגועה, לבין חיבור לשרת בפרוטוקול ssh?
נוהג מקובל בתכנות הוא לקשר בין קובץ הרצה של תוכנה לבין ספריות קוד המשרתות אותו. בחלק מהפצות לינוקס, ובפרט בהפצות הנגועות שנתפסו, קיימת חבילת תוכנות וספריות המקובצות יחדיו בשם systemd. החבילה הזאת משמשת לפעולות בסיסיות של מערכת ההפעלה. בין השאר היא מקושרת לספריית liblzma שמגיעה כחלק מ-xz Utils – אותה חבילה שפרוינד זיהה סביבה האטה בביצועים בעת שימוש בפרוטוקול ההתחברות מרחוק ssh.
בהפצות לינוקס הנגועות, שירות ה-ssh מקושר ל-systemd, שבתורה מקיימת גישה ל-liblzma. במקרים מסוימים עצם הקישור של תוכנה לספרייה, יכול לאפשר לספרייה להתערב בפעולת התוכנה עצמה. עקב הקישור שנוצר בין ssh ל-liblzma, ותוכן הקוד הזדוני שנמצא בה, במהלך חיבור ssh רץ קוד נגוע שנמצא ב-liblzma ומאפשר גישה חופשית לתוקף שמחזיק במפתח מתאים.
בדק בית
נראה כי לעת עתה הפרצה הזאת טופלה. טאן נושל מהרשאותיו והגרסאות הנגועות הוחזרו לקדמותן. גישת הקוד הפתוח מושתתת על אמון ועל שיתוף פעולה. חברות ענק רבות מסתמכות על פרויקטים של קוד פתוח, אף שחלקם מתוחזקים בידי אנשים בודדים כתחביב בשעות הפנאי. האירוע הזה מחדד את חוסר האיזון בין תרומה של אדם בודד שפועל בהתנדבות, ועל כן הנטייה היא להניח שכוונותיו טהורות, לבין יכולתו להשפיע על משתמשים רבים ברחבי העולם באופן שלעיתים אין עליו פיקוח הולם. עם זאת גישת הקוד הפתוח היא גם זו שבזכותה מפתח חיצוני גילה את הבעיה, ושאפשרה לחוקרי אבטחה רבים לחקור את התוכנה מכיוונים רבים מיד עם חשיפת פרצת האבטחה.
סביר להניח שקהילת הקוד הפתוח, חוקרי אבטחה וחברות ענק יחזרו לחפש את עקבותיהם של אותם תוקפים עלומים ולבדוק ביתר שאת את שאר הפינות במטרה לאתר דלתות אחוריות נוספות. פרטי המקרה הנוכחי עדיין נמצאים בבדיקה וסדר הגודל של התקיפה, כמו גם מי עומד מאחוריה, עדיין לא ברורים.