דיסני ו-Waze הותקפו, ומי שישלם על זה הם המשתמשים
חבילת האנימציה הפופולרית Lottie Player, שנמצאת בשימוש של אתרים עם מיליוני משתמשים, שחררה בתחילת החודש גרסה חדשה. למה זה מעניין? כי בגרסה הזו תוקף הכניס לה קוד זדוני וגנב ישירות מארנקים של משתמשים פרטיים
מאת: עוז תמיר
עשר בלילה, אתם על הספה ותכף מתארגנים ללכת לישון. ממש כשסיימתם לצחצח שיניים גיליתם שגנבו לכם מאות מיליוני דולרים בחשבונות הקריפטו שלכם. נשמע מופרך? זה קרה בתחילת החודש.
ביום שישי בשעה 22:00 בדיוק שוחררה גרסה חדשה לחבילת האנימציה הפופולרית Lottie Player, כלי שבו משתמשים אתרים ואפליקציות מובילים כמו Disney+, Duolingo, Waze ואחרים. בדרך כלל, זה לא אירוע ראוי לציון – אלא שבשעות שלאחר מכן החלו לזרום דיווחים על כך שאתרי קריפטו תמימים החלו להתנהג כמו אחים נכלוליים ולנסות לשאוב כספים מארנקי הגולשים שלהם.
מה שקרה הוא מתקפת שרשרת-אספקה, שהפכה ברגע אחד מאות אתרים לגיטמיים למלכודות. מתקפת שרשרת-אספקה (או Supply Chain Attack, אם קמתם על ההייטקיסטי שלכם) היא מתקפה בה גורם זדוני מצליח להשתלט על רכיב או ספק המשמש מספר ארגונים. כך, בפעולה אחת הוא זוכה בגישה לאינספור מטרות, ממש כמו נוכל מיומן שיודע איך לזייף מפתח לכל מנעול.
סוג זה של מתקפות קורץ מאוד גם לתוקפים בעולמות הקריפטו – אלא שהפעם, במקום לטרגט ארגונים, היעדים היו כל מי שמשתמש בקריפטו.
גרסה נפוצה של מתקפה זו נקראת Frontend Attack – סוג תקיפה בה הגורם הזדוני מצליח להשיג גישה לממשק הניהול של אתר קריפטו לגיטימי, ומשנה את הקוד כך שכל פעולה שתתבצע באתר תוביל לריקון הארנק של המשתמש ולהעברת כל הכספים שלו אל ארנק שנמצא בשליטת התוקף. אחת המתקפות המפורסמות מסוג זה הייתה התקיפה על Badger ב-2021, והתוצאה? 120 מיליון דולר שנגנבו.
אז מה קרה בעצם?
נתחיל בזה: הפעם לא היה מדובר במתקפה על אתר יחיד, אלא בניסיון לפגוע במאות אתרים בבת אחת. ביום רביעי בשעה 22:00, אחד ממפתחי החברה שלנו קיבל התראה על כך שמאות אתרים שאמורים להיות לגיטימיים – כמו אלה שאתם מבקרים בהם כדי לבדוק כמה ביטקוין עלה ומתבאסים שלא קניתם לפני שבוע – הפכו לפתע לזדוניים. אחד אחרי השני, אתרים מוכרים יותר או פחות בעולם הקריפטו הופכים לזדוניים, ומתחילים לנסות לשאוב את הכספים של כל משתמש שגולש אליהם.
לאחר מחקר קצר, זיהינו את המכנה המשותף לכל האתרים האלו – חבילה בשם Lottie Player. מבדיקה שאנחנו עורכים, אנחנו מגלים ששבע דקות לפני ההתראה הראשונה שקפצה לנו, הועלתה גרסה חדשה של החבילה הזו לשרתי npm.
כשאנחנו בודקים מה השתנה בגרסה החדשה, אנחנו מבינים מיד מה קרה – לקוד הספרייה הודבק Payload זדוני, המוכר לנו כשייך לאחת מקבוצות התקיפה שראינו באירועים קודמים.
איך מתמודדים?
הסוד הוא מהירות. משום שאנחנו מנטרים את כל האינטרנט יש לנו מאגר רחב, שכולל בין היתר נתונים על כל הספריות שכל אתר משתמש בהן, והודות לכך – הצלחנו תוך דקות לצייר תמונת מצב מדויקת ולהבין איפה קיים פוטנציאל פגיעה.
כדי לרכז את המאמץ, פנינו ישירות לכל החברות שנפגעו והקמנו “חדר מלחמה”, שבו ריכזנו את כל המידע ושיתפנו כל פרט שהחוקרים שלנו חשפו. ואכן ככל שהדקות עברו התמונה התבהרה: תוקף זדוני הצליח לשים את הידיים שלו על פרטי ההתחברות של מפתח מהפרויקט, ו״התלבש״ עליו עם קוד זדוני משלו שנועד לגנוב מיליוני דולרים.
אלא שלמרות התגובה המהירה שלנו ושל מפתחי הספרייה, לקח זמן לא מועט עד שהבעיה נפתרה.
למה? לחלק מהאתרים יש הרגלים… נו, נגיד בעדינות – “עצלניים”. כשהם מגדירים תלויות בפרויקטים שלהם, הם מבקשים מהשרת להביא להם את הגרסה האחרונה ששוחררה (latest), ובגלל שהגרסה החדשה ביותר הכילה קוד זדוני, כל האתרים שצרכו את הספרייה בצורה הזו הפכו לזדוניים.
רק אחרי כמה שעות (ולא מעט לחץ) שוחררה גרסה נקייה והאתרים חזרו למסלול – כמעט כרגיל. אבל הנזק כבר נעשה ומשתמשים רבים איבדו כסף. משתמש אחד בלט במיוחד, כשנכנס לאתר למרות אזהרות ותוך רגע איבד עשרה ביטקוין, בשווי של 890 אלף דולר. ההפסדים הכללים מוערכים בשני מיליון דולר, ולדעתנו הם היו יכולים להיות כפולים אם לא היינו עולים על המתקפה בזמן.
אמת לא נוחה
אישית, אירועים מסוג זה מזכירים לי קומיקס של xkcd, שצוחק על איך חלק עצום מתשתיות הקוד של העולם המודרני מבוססות על פרויקטים זעירים שאף אחד לא שמע עליהם. הקומיקס הזה מזכיר לנו אמת לא נוחה – הסתמכות על קוד חיצוני היא חלק מהמציאות של פיתוח תוכנה כיום, ואין בזה שום דבר רע – זו יכולת שמאפשרת לנו לבנות מוצרים ותשתיות בקצב מסחרר.
אבל לצד זה, כל ארגון – ובעולם הקריפטו, גם כל משתמש – צריך להיות מודע לנושא ולהבין שגם כלים מוכרים ומהימנים עשויים להפוך לכלי נשק בידיים הלא נכונות, כדי לנהל את מערך הסיכונים וההגנה בהתאם.
הכותב הוא חוקר אבטחה בחברת Blockaid