קובץ ההרצה חתום על ידי OpenAI, והקוד הזדוני יושב ב-DLL שלידו: כך מוציאה Yoba את כתובת השרת שלה מתמונת פרופיל בטלגרם
בתוך ארכיון ה-ZIP שמוצע להורדה מעמוד GitHub שנראה כמו פרויקט קוד פתוח רגיל יש עשרה קבצים. תשעה מהם נשמרו בארכיון ב-30 באוגוסט 2026 ב-15:11, כולם באותה שנייה. העשירי, קובץ בשם winmm.dll, נשמר שלוש דקות אחריהם, והוא גם הודר באותו יום ב-19:14 לפי שעון UTC, בעוד שאר הקבצים הודרו 11 ימים קודם. חוקרי Check Point Research מצביעים על הפער הזה כסימן הראשון שמסגיר איזה קובץ בחבילה הוא הזדוני, עוד לפני שמישהו פתח אותו בכלי ניתוח. ארבע השעות שבין 15:14 המקומיות ל-19:14 ב-UTC הן גם מה שמלמד, לדבריהם, שהתוקף יושב ב-UTC-4.
הדוח, שפורסם היום, מפרק קמפיין שהחברה עוקבת אחריו בחודשיים האחרונים ומכנה Yoba. השיטה פשוטה: מאגרי GitHub שמתחזים לאפליקציות שולחן עבודה של ChatGPT ושל Claude, ובתוך ההתקנה קובץ הרצה אמיתי וחתום של OpenAI או של Anthropic, שלידו יושב ה-DLL של התוקפים. בהמשך נראה איך הקורבנות מגיעים לקבצים האלה, למה הנוזקה מסרבת לעבוד אם לא קוראים לה בשם הנכון, ואיך היא מוציאה את כתובת השרת שלה מתמונת פרופיל בטלגרם.
למה הקוד הזדוני צריך דווקא תוכנה חתומה לידו
כשתוכנית Windows נטענת היא מבקשת ספריות קוד לפי שם, וחלק מהחיפוש מתחיל בתיקייה שבה יושב קובץ ההרצה עצמו. מי שמניח שם קובץ עם השם שהתוכנית מחפשת גורם לה לטעון את הקוד שלו, בתוך תהליך שנראה לכל דבר כמו התוכנה המקורית, כולל החתימה הדיגיטלית התקינה שלה. לטכניקה הזאת קוראים DLL sideloading.
זה בדיוק מה שקורה כאן. בארכיונים sol-setup.zip ו-GPT-6-Astra-Setup.zip קובץ ה-Setup.exe הוא קובץ הרצה חתום ואמיתי של OpenAI, ובארכיון Setup-Claude.zip זה קובץ חתום של Anthropic. שאר הקבצים, בהם snapshot_blob.bin ו-vulkan-1.dll, הם המטען הרגיל שנגרר אחרי אפליקציה מבוססת Chromium, ונועדו לגרום לתיקייה להיראות כמו התקנה אמיתית. רק winmm.dll הוא של התוקפים.
נקודה אחת חורגת מהשגרה. ארכיונים זדוניים בפלטפורמות לגיטימיות מוגנים בדרך כלל בסיסמה, כדי שכלים אוטומטיים לא יוכלו לפרוק ולסרוק אותם. כאן לא הייתה סיסמה, ולפי החוקרים הסיבה היא שהבינאריים ממילא זוהו בשיעור נמוך מאוד, בזכות בדיקות ההתחמקות שנראה מיד.
הפיתיון: מודלים שלא קיימים
המאגרים התחזו לשלוש אפליקציות: GPT-5.6 Sol, GPT-6 Astra ו-Claude Opus. שתי הראשונות אינן מוצר שאף אחת מהחברות הוציאה. לכל מאגר נלווה עמוד GitHub Pages שמתאר את יכולות התוכנה, והנוזקה אוחסנה כ-release של אותו מאגר, עם קישור הורדה ישר מעמוד הנחיתה.
מה שמעניין הוא איך אנשים הגיעו לשם. במאגרים לא נמצא סימן למניפולציה של מדדי מעורבות, לא כוכבים מזויפים ולא forks, ובכל זאת הם הופיעו בין התוצאות הראשונות בגוגל. ההסבר שהחוקרים מציעים הוא התאמה מכוונת של כותרות, תיאורים ודומיינים כדי לטפס בדירוג של מנועי חיפוש חיצוניים, טכניקה שמכונה SEO poisoning. גוגל, בניגוד לחיפוש הפנימי של GitHub, לא מתעניין בכמה כוכבים יש למאגר.
ציר הזמן ארוך מכפי שנראה. המאגר הראשון נפתח ב-16 ביולי 2026, אבל ההורדות הזדוניות הראשונות הועלו רק ב-30 וב-31 באוגוסט, והשלישית כחמישה ימים אחר כך. כל מאגר נרשם מכתובת מייל אחרת ב-Outlook, ואזורי הזמן שב-commit-ים הראשונים שלהם הם UTC+4, UTC-4 ו-UTC+3. לפי החוקרים חוסר העקביות הזה מכוון, וסימנים נוספים שהם לא פירטו מצביעים לדבריהם על מקור רוסי.
מה קורה אם קוראים לקובץ בשם אחר?
הדבר הראשון שה-DLL עושה כשהוא נטען הוא לבדוק באיזה שם נקרא התהליך שהריץ אותו. הוא מחשב hash של שם הקובץ ומשווה אותו לערך קבוע שמוטמע בקוד, והערך הזה תואם ל-Setup.exe. חוקר שמריץ את ה-DLL לבד בתוך סביבה מבודדת נכשל בבדיקה הזאת מיד.
מה שקורה אחרי הכישלון הוא החלק החכם. התהליך לא נסגר ולא מדפיס שגיאה; הוא נכנס ל-200 אלף סבבים של המתנה בת 5.5 שניות, כלומר קצת פחות מ-13 יום, ובכל סבב מצרף מחרוזת מילוי לחוצץ בזיכרון. מי שמסתכל רואה תהליך חי שלא עושה כלום. בסביבת ניתוח אוטומטית, שנותנת לדגימה דקה או שתיים, זה קובץ משעמם.
הבדיקה השנייה מסננת לפי גיאוגרפיה, ובדרך עקומה: במקום להשוות את מזהה פריסת המקלדת לרשימת ערכים, הנוזקה בודקת אם המזהה נופל בטווח מסוים, ואז בודקת סיביות במסכה אחת שמקודדת את כל הרשימה. 11 שפות מוציאות את המחשב מכלל הדבקה, בהן רוסית, בלארוסית, קזחית, ארמנית וגיאורגית. אוקראינית נופלת בתוך הטווח, אבל חריג מפורש מחזיר אותה דווקא לרשימת היעדים. לפי החוקרים גם Bazarloader השתמש בעבר באותה שיטה, עם מסכה אחרת. הבדיקה השלישית היא הגלויה מכולן: אם התהליך לא רץ בהרשאות מנהל, הנוזקה מבקשת מהמשתמש להריץ את התוכנה כמנהל, ונסגרת. היא מבקשת מהקורבן לעשות את העבודה בשבילה.
עד כאן הבדיקות. ההתקנה בפועל קצרה: הנוזקה יוצרת תיקייה בשם WMProcess תחת ProgramData, מעתיקה לתוכה את הקובץ WMPDMC.exe המקורי מ-System32, מפענחת מתוך עצמה את השלב הבא ושומרת אותו לידו בשם wmpdui.dll. אותו תרגיל בדיוק, הפעם עם בינארי של מיקרוסופט במקום בינארי של OpenAI. השרידות נשענת על משימה מתוזמנת מחופשת היטב: המחבר שמופיע בה הוא Microsoft Corporation, התיאור מסביר שהיא אוספת מידע על המכשיר בעבור Windows Media Player, והיא רצה בחשבון Local System שלוש דקות אחרי עליית המערכת.
(מפתח ה-XOR שבו מוצפן השלב השני הוא המילה IRANNUMBERONE. החוקרים לא מייחסים לו משמעות מודיעינית, והוא נראה בדיוק כמו מה שהוא, מחרוזת שמישהו בחר כבדיחה.)
כתובת השרת מגיעה מתמונת פרופיל בטלגרם
השלב השני, שהחוקרים מכנים YobaLoader, בנוי על אותו קוד, כולל אותה בדיקת שם תהליך, הפעם מול WMPDMC.exe. ההבדל המעניין הוא איך הוא מוצא את השרת שיגיש את המטען.
במקום כתובת שמוטמעת בקוד, הוא פונה לעמוד הציבורי של ערוץ טלגרם בשם yoba_fanclub, מפרסר את ה-HTML ושולף ממנו את כתובת תמונת הפרופיל של הערוץ. הוא מוריד את התמונה, לוקח את 50 הבייטים האחרונים שלה ומשתמש בהם כזרע לבחירת שם תואר, שם עצם ופועל משלוש רשימות מילים מוטמעות, ועוד מספר בטווח 0 עד 999. ההרכבה של ארבעת החלקים היא שם הדומיין. לאלגוריתם שמייצר כך כתובות קוראים DGA.
התוצאה היא מתג שליטה פשוט מאוד: די להחליף את תמונת הפרופיל של הערוץ, וכל המכונות הנגועות מתחילות לחפש דומיין אחר. הדומיין נרשם תחת סיומת של deSEC, שירות DNS חינמי, ואת הפקודה הנוזקה לא מבקשת מהשרת הזה ישירות אלא שולפת רשומת TXT עליו דרך ממשק ה-DoH של גוגל, כלומר שאילתת DNS שעוברת כבקשת HTTPS רגילה אל dns.google. מי שמנטר תנועת DNS בשער הארגוני לא רואה שאילתה לדומיין חשוד. הוא רואה פנייה לגוגל.
את התוכן שחוזר ברשומה הנוזקה לא מקבלת כמו שהוא. היא מפענחת אותו מ-Base64, מאמתת חתימה דיגיטלית מול מפתח ציבורי שמוטמע בקוד, ורק אם האימות עובר מפענחת את התוצאה בהצפנה סימטרית. למעשה, שלב האימות אומר שגם מי שמזהה את הדומיין הנוכחי לא יכול לקחת לעצמו שליטה על המכונות הנגועות בלי המפתח הפרטי של המפעילים. בתוך הערך המפוענח יש כתובת להורדת המטען, ולפניה ספרה אחת שקובעת איך להריץ אותו: הזרקה לתוך svchost.exe, שמירה כקובץ הרצה בתיקיית ה-TEMP והרצה ממנה, או שמירה כסקריפט PowerShell שמורץ בחלון מוסתר ובלי מגבלות מדיניות ההרצה. באפשרות השנייה הנוזקה גם מוחקת את הסימון הנסתר ש-Windows מצמיד לקבצים שהורדו מהאינטרנט.
המטען שנצפה בפועל הוא XMRig בגרסה 6.26.0, כורה מטבעות. אבל לא כורה סתם: הוא פורק ומפעיל Tor בגרסה 0.4.9.12 יחד עם lyrebird, כורה אל כתובת onion מעל TLS דרך proxy מקומי, ומצויד בשני גשרים מוטמעים מהסוג שנועד להסתיר תנועת Tor מפני חסימה. הוא מוגדר ל-85 אחוז מהליבות, עוקב אחרי פעילות המשתמש ומשתיק את הכרייה כשמישהו נוגע במכונה, וחוזר לעבוד אחרי ארבע דקות של חוסר פעילות. כלומר, מי שיושב מול המחשב לא שומע את המאווררים עולים. החוקרים מדגישים שה-loader עצמו כללי, ושכל קובץ הרצה או סקריפט PowerShell יכול לעבור באותו צינור.
גם Cursor היה שם קודם
יש אירוניה קטנה בבדיקה שהנוזקה מריצה על שם התהליך: היא זו שמסגירה את הפיתיון. ה-hash מוטמע בקוד, ומי שמנתח גרסה ישנה יכול להצליב אותו עם שמות של תוכנות ולגלות באיזו אפליקציה הנוזקה ציפתה להתחבא. כך התברר שגרסה מוקדמת, מתחילת יוני 2026, נטענה בתוך תהליך בשם Cursor.exe, כלומר סביבת הפיתוח עם סוכן ה-AI. hash שלישי נותר בלי התאמה.
הגרסאות המוקדמות גם עבדו אחרת. השרידות נשענה על קובץ קיצור בתיקיית ה-Startup, שהפעיל בינארי שהועתק לתיקייה בשם Microsaft Difendir, שגיאת כתיב מכוונת. סינון השפות ישב אז ב-loader והוציא רק רוסית, ורק אחר כך עבר לדרופר והורחב לשאר מדינות חבר העמים. ה-DGA ייצר דומיינים תחת סיומת איראנית במקום הסיומת הנוכחית. ומה שבאמת נעלם בין הגרסאות הוא שכבת ההתחמקות הכבדה: ה-loader המוקדם חיפש במערכת עצמים של ליבה שמעידים על נוכחות debugger ונסגר אם מצא אותם, והריץ מערכת ניקוד לזיהוי מכונה וירטואלית שבדקה סיביות של מעבד, מחרוזות זיהוי של hypervisor ונתוני קושחה. בגרסאות החדשות שתי השכבות האלה פשוט לא שם. מה שנשאר הוא בדיקת שם התהליך.
ערוץ הטלגרם ותמונת הפרופיל שמשמשת כזרע, לעומת זאת, זהים בכל הגרסאות. זה מה שקושר את כולן לאותו מפעיל.
מה זה אומר בפועל
החתימה הדיגיטלית על קובץ ההרצה בתיקייה לא אומרת כלום על הקבצים שלידו, והדירוג של מאגר GitHub בגוגל לא אומר כלום על מי שפתח אותו. בארגונים שבהם עובדים מתקינים כלי AI בעצמם זה הווקטור, והחוליה שעוצרת כאן את השרשרת אינה מוצר אבטחה אלא העובדה שהנוזקה נזקקת להרשאות מנהל ומבקשת אותן בקול: מי שעובד בלי הרשאות מנהל מקבל בסך הכול תוכנה שנסגרת. בצד הניטור כדאי לחפש משימות מתוזמנות שמתהדרות בשם Microsoft Corporation אבל מפעילות קבצים מתוך ProgramData, ותנועת DoH אל dns.google מתהליכים שאינם דפדפן.
תגובות