אלפי פרויקטים נפגעו: מה קרה ב-GitHub בסופ"ש?

האקרים הוסיפו פקודה זדונית סמויה שהופעלה והובילה לזליגת מידע רחבה - החל ממפתחות פרטיים וסיסמאות ועד סודות קריטיים

מושיקו חסן ואליעד מועלם
19.3.25

תמונה: dreamstime

מה היה קורה אם באמצע העבודה על פרויקט חשוב, כשהכל מתקדם כמתוכנן, הקוד שלכם היה הופך לשער גישה של תוקפים לאלפי מערכות ברחבי העולם? לכאורה, חשבתם שמדובר בפקודה רגילה – להוריד תסריט ולהריץ אותו, פעילות שמתרחשת באופן שוטף בשרתים – אבל הפעם הפקודה הזו שימשה ככלי לפריצה רחבת היקף.

זה בדיוק מה שקרה בסוף השבוע האחרון. התקפת Supply Chain מתוחכמת פגעה באלפי מאגרי קוד ברחבי העולם באמצעות מנגנון ה-GitHub Actions. במהלך הלילה, האקרים הצליחו להעלות גרסה משלהם לספריית הקוד הפופולרית TJ Actions – המכילה קובצי workflow לתהליכי פיתוח. הגרסה החדשה השפיעה על תהליך ספציפי בשם changed-files, המחזיר רשימה של כל הקבצים ששונו בזמן תהליך הפיתוח – פעילות גאונית בפשטותה ומסוכנת בהשלכותיה: הוספת פקודה זדונית סמויה שהופעלה בכל תהליך הבנייה של הקוד. התוצאה הייתה זליגת מידע רחבה – מפתחות פרטיים, סיסמאות וסודות קריטיים מצאו את דרכם לידי התוקפים.

כיצד התוקפים הצליחו להחדיר את הקוד הזדוני? הכל התחיל בפריצה לחשבון הבוט @tj-actions-bot, אשר החזיק ב-Personal Access Token (PAT) שאפשר לו לעדכן קוד בפרויקט. התוקפים השתמשו בגישה זו כדי להעלות גרסה זדונית חדשה של הספרייה, ומאותו רגע כל פרויקט שהשתמש בה – הפך אוטומטית לפגיע. על פי הערכות, יותר מ-23,000 מאגרי קוד ברחבי העולם השתמשו בספרייה הפגועה, מה שהוביל לכך שעשרות אלפי ארגונים הותקפו בו זמנית. אך המתקפה לא הייתה ישירה: היא פעלה דרך תהליכי עבודה (CI/CD) אוטומטיים שבוצעו בשגרה, מה שאפשר לקוד הזדוני להתפשט מבלי שידרש כל צעד אקטיבי מצד הנתקפים.

צילום מסך: יח"צ

GitHub Actions הם כלי קריטי בעולם הפיתוח המודרני, במיוחד עבור תהליכי CI/CD (Continuous Integration/Continuous Deployment). הם מאפשרים למפתחים לאוטומט משימות כמו בדיקות קוד, בניית תוכנה והפצתה. עם זאת, בדיוק בגלל הנוחות שהם מספקים, הם מהווים יעד אטרקטיבי במיוחד עבור תוקפים – מתקפה עליהם יכולה להשפיע על אלפי פרויקטים בבת אחת.

איך זה קרה?

תחילה התוקפים השיגו אחיזה על סביבת הפיתוח והבנייה של הנתקף, כשהם פורצים למנגנוני העבודה השוטפים של המפתחים ומשתילים קוד זדוני. שליטתם התרחבה למתקפה רחבה על שרשרת האספקה, כך שכל פרויקט שנסמך על ספריות הפיתוח הללו הפך חשוף לפגיעה. בשלב הבנייה, שבו נחשפים המפתחות הקריטיים, התוקף ניצל את ההזדמנות כדי להשיג שליטה בפרויקטים ובחשבונות וכך סביבת הלקוחות הפכה לפגיעה במיוחד, בעיקר פרויקטים ציבוריים כמו ספריות קוד או פרויקטים גדולים של חברות ציבוריות.

התקפות מסוג זה אינן חדשות – אחד המקרים הבולטים ביותר היה ב-2021, כאשר ספריית npm פופולרית בשם ua-parser-js נפרצה והפכה לכלי פריצה רחב היקף. מתקפות שרשרת אספקה חוזרות שוב ושוב בגלל הקלות שבה ניתן לנצל רכיבי קוד פתוח ולשתול בהם קוד זדוני ללא ידיעת המשתמשים.

איך אפשר לדעת שלא מדובר בפקודה רגילה?

בעולם שבו מיליוני פקודות רצות בכל שנייה בשרתים ברחבי העולם, האתגר המרכזי הוא להבחין בין פעולה לגיטימית לבין פעולה זדונית המסתתרת בתוך השגרה. זיהוי איומים אינו מסתמך רק על זיהוי חתימות ידועות או סריקות קוד, אלא בעיקר על הבנת ההקשר ודפוסי ההתנהגות.

מכונה בענן פועלת לרוב בצורה מחזורית וצפויה – היא מבצעת משימות מסוימות, בתזמונים קבועים ובעלת גישה למשאבים מוגדרים. כאשר מכונה חורגת מהשגרה שלה, למשל על ידי ביצוע חיבורים בלתי צפויים, משיכת נתונים בהיקפים חריגים או הרצת פקודות שמעולם לא נראו קודם לכן – מדובר בדגל אדום המחייב בדיקה.

משכך, הדרך היחידה לעצור מתקפות כאלו אינה באמצעות סריקה קבועות, אלא באמצעות מעקב בזמן אמת אחרי דפוסי השימוש של המערכת. כאשר ניתן לזהות לא רק מה הקוד מבצע, אלא אם הדבר הגיוני ביחס להתנהגות ההיסטורית של המכונה – ניתן לבלום מתקפות לפני שהן יוצאות משליטה.

צילום מסך: יח"צ

משהו לא הסתדר

הכול התחיל באנומליה קטנה – שורת פקודות שנראתה תמימה לחלוטין. עשרות שרתים החלו לבצע קריאות לזיכרון במקביל, פעולה שבמבט ראשון נראתה תקינה. אך עם הזמן התברר דפוס חריג: מספר רב של שרתים ביצעו גישה לזיכרון בו זמנית, ופקודות חדשות, שמעולם לא הופיעו בעבר, הופעלו יחד באופן לא צפוי.

ניטור המערכת חשף כי ההתנהגות הזו חורגת מהתבנית הרגילה (Out of Baseline), מה שהוביל לזיהוי אפשרי של פעילות זדונית. גישה בלתי מזוהה, משיכת מידע בהיקפים חריגים וביצוע פקודות לא מוכרות – כולם סימנים המעידים על פעילות חריגה שמצריכה בדיקה מיידית. כתוצאה מכך, הופעלה מערכת התרעה שסייעה בזיהוי התקיפה בשלבים מוקדמים, לפני שהתוקפים הספיקו להעמיק את אחיזתם.

מה שגילינו במהלך התקיפה הזו הוא אולי רק חלק קטן מתמונה גדולה בהרבה. אם נסתכל על הדפוס, נראה שהמטרה של התוקפים לא הייתה רק לפגוע במאגרי קוד ספציפיים – אלא לנצל את נקודות התורפה של שרשראות אספקה ברחבי העולם. מתקפות מסוג זה אינן רק אירועים נקודתיים; הן חוליות בתוך מערך סייבר מתוחכם שמטרתו לחדור עמוק יותר ולפגוע בגורמים קריטיים מבלי להותיר עקבות ברורות.

אז איך נמנעים מהתקפה הבאה?

בעולם שבו איומי סייבר מתפתחים בקצב מסחרר, האתגרים עימם מתמודדות מערכות האבטחה רק הולכים וגדלים. מתקפות אינן עוד ניסיונות ישירים לפרוץ דרך חומות ברורות, אלא הופכות למורכבות, חמקמקות ומתוחכמות יותר. במקרה הזה, הקוד הזדוני היה רדום – לא זוהה על ידי סריקות סטנדרטיות ולא עורר חשד, עד אשר הופעל באופן טבעי בתוך המערכת. זהו שינוי הפרדיגמה בתפיסת האיומים: לא עוד מתקפה שניתן לזהות מראש, אלא תהליך שמוטמע בשגרה ומנצל אותה לטובתו. כדי להתמודד עם איומים כאלה, נדרשת גישה אחרת – אבטחה בזמן אמת, כזו שמנטרת, מזהה חריגות ומגיבה באופן מיידי. רק הבנה עמוקה של דפוסי הפעולה השוטפים של מערכות ענן תאפשר להבחין מתי פעולה שגרתית לכאורה היא למעשה סימן למתקפה בהתהוות. בעולם שבו כל שנייה קריטית, השאלה היא לא האם תהיה מתקפה נוספת – אלא האם נהיה מוכנים לזהות אותה לפני שיהיה מאוחר מדי.

כותבי המאמר הם מושיקו חסן – ראש חטיבת המחקר ב-Upwind, ואליעד מועלם – חוקר בצוות אבטחת הענן של Upwind

משרות פתוחות

קטגוריות

זה המקום להכיר את החברות, המשרדים וכל מי שעושה את ההייטק בישראל (ויש גם מלא משרות פתוחות!) #תוכן מקודם