שלושה קבצים שרק אחד מהם זדוני, ומחסנית קריאות מזויפת שמחביאה אותו: SparroWocky תוקפת משרדי ממשלה באמריקה הלטינית
בין הדגימות של דלת אחורית חדשה שתוקפת משרדי ממשלה באמריקה הלטינית מצאו חוקרי ESET בית שלם מתוך "Jabberwocky", השיר של לואיס קרול. זה נראה כמו בדיחה פנימית של מי שכתב את הקוד, ולמעשה זה שריד: השורות האלה הן חלק מווקטורי בדיקה של ספריית ההצפנה Mbed TLS, והתוקפים פשוט הידרו את הספרייה כולה לתוך הנוזקה. את השם SparroWocky, שמחבר בין השיר לבין קבוצת התקיפה FamousSparrow, נתנו לה החוקרים.
ESET פרסמה את הדוח היום, בחתימת אלכסנדר קוטה סיר ורומן דומון (Alexandre Côté Cyr, Romain Dumont). הכלי שהוא מתאר החליף מאוגוסט 2025 את SparrowDoor ככלי המרכזי של הקבוצה, והוא לא גרסה חדשה שלו אלא משפחה נפרדת. בטלמטריה של החברה הקורבנות הם ארגונים ממשלתיים בשמונה מדינות: ארגנטינה, אקוודור, גואטמלה, הונדורס, פנמה, פרו, פורטו ריקו וונצואלה. בהמשך נעבור על שלושת הקבצים שמרכיבים את ההתקנה, על הדרך שבה הנוזקה מסתירה מי באמת קורא לפונקציות המערכת, ועל מה שהיא מקבלת מהשרת ברגע שהיא בפנים.
רקע: ציפור עם עבר
FamousSparrow מוכרת לחוקרים מאז 2019, ובשנים הראשונות הקמפיינים שלה היו מפוזרים גאוגרפית. מאמצע 2025 התמונה השתנתה: לפי ESET, 90% מהמטרות שנרשמו בטלמטריה שלה מאז ממוקמות באמריקה הלטינית, וכולן ארגונים ממשלתיים. אחד המקרים שהחוקרים מזכירים הוא גוף פנמי שהיה מעורב בסכסוך על זיכיון נמל מול מפעילה סינית.
ESET מעריכה שהמיקוד הזה הוא תגובה סינית לעניין המחודש של ארצות הברית באזור, ושהמטרה היא לעקוב אחרי האופן שבו ממשלות מקומיות מגיבות ללחץ האמריקאי. זו הערכה של החברה, לא ממצא טכני, וכדאי לקרוא אותה ככזאת.
לגבי הייחוס עצמו החוקרים זהירים יותר, ומסבירים על מה הוא נשען: בחלק מהתקיפות הראשונות SparroWocky הותקנה דרך SparrowDoor, כלי שנמצא בשימוש בלעדי של הקבוצה, והקורבנות חופפים לארגונים שכבר נפרצו על ידה בעבר. משם הם מגיעים לרמת ביטחון גבוהה. את הקישור הציבורי בין FamousSparrow לבין Salt Typhoon הם דווקא לא מאמצים. "בהיעדר אינדיקטורים טכניים כלשהם, אנחנו עוקבים אחריהן כקבוצות נפרדות", כתבו.
שלושה קבצים, ורק אחד מהם זדוני
כשתוכנה עולה, היא טוענת ספריות עזר לפי שם, בדרך כלל מהתיקייה שבה היא יושבת. מי שמצליח להניח שם קובץ משלו, בשם שהתוכנה מחפשת, מקבל הרצת קוד בתוך תהליך שנראה לגיטימי לחלוטין. לטכניקה הזאת קוראים DLL sideloading, והיא הבסיס לכל שרשרת ההתקנה כאן.
ESET מכנה את המבנה "trident loader", כלומר קלשון בעל שלוש שיניים: קובץ הרצה לגיטימי, ספריית loader שמחליפה אחת מהתלויות שלו, וקובץ נתונים מוצפן עם סיומת dat שנושא את אותו שם כמו קובץ ההרצה. הספרייה הזדונית היא ספרייה אמיתית שעברה השתלה, כשחלק מאזור הקוד שלה הוחלף בקוד של התוקפים ונקודת הכניסה הופנתה לשם. שתיים מהן שזוהו בשטח נקראות winfsp-x64.dll ו-DukeQt.dll.
הקובץ המוצפן בנוי לפי כותרת קבועה: ערך זיהוי (0x11328712), גודל התצורה, גודל המטען, ומפתח RC4 באורך 16 בתים. ה-loader מפרסר את הכותרת, מפענח, ומוצא בפנים קובץ PE שממנו נמחקו חתימות ה-MZ וה-PE. משם הוא ממפה אותו ישירות לזיכרון. התוצאה היא שעל הדיסק לא יושב אף קובץ הרצה זדוני: יש קובץ תקין וחתום, ספרייה שנראית כמו תלות רגילה שלו, וגוש נתונים.
עד כאן איך הנוזקה מגיעה לזיכרון. הצד השני, איך היא יושבת שם בלי שיבחינו בה, מושקע הרבה יותר.
אז איך היא מסתתרת?
מוצר אבטחה שרואה קריאה לפונקציית מערכת רגישה לא מסתפק בשאלה מה נקרא. הוא הולך אחורה במחסנית הקריאות ובודק מי התחיל את השרשרת, כי קריאה שמגיעה מקוד שיושב באזור זיכרון אנונימי חשודה הרבה יותר מקריאה שיצאה מספרייה של מיקרוסופט. SparroWocky מזייפת בדיוק את התשובה הזאת.
היא מאתרת את ההיסטים של RtlUserThreadStart ושל BaseThreadInitThunk, מחפשת בתוך kernel32.dll רצפי הוראות שמתאימים לה, ובונה מהם מחסנית מזויפת שנראית כאילו הקריאה יצאה מפונקציה שגרתית של המערכת. אחרי הקריאה שגרת שחזור מחזירה את המצב לקדמותו. הטכניקה מבוססת על SilentMoonwalk, פרויקט קוד פתוח, והיא מופעלת גם על המודולים שהנוזקה מקבלת מהשרת בהמשך.
ברמת ה-thread היא עושה משהו דומה. "SparroWocky משתמשת בספריית MinHook כדי לחבר hook לפונקציה CreateThread, במטרה להסתיר ממוצרי אבטחה את הפרמטר lpStartAddress המקורי", כתבו החוקרים. במקום כתובת ההתחלה האמיתית של ה-thread מוצגת הכתובת של AnimateWindow, פונקציה גרפית תמימה לגמרי, שתוקנה כך שתקפיץ את ההרצה לכתובת שהוסתרה.
ויש שכבה שלישית. כשהנוזקה טוענת קובץ PE לזיכרון, היא מזייפת עבורו רשומה ברשימת המודולים הטעונים של התהליך, אותה רשימה מקושרת שמוצרי אבטחה נוהגים לסרוק כדי לראות מה בדיוק רץ בפנים. מי שסופר מודולים רואה רשומה שנראית תקינה.
ארגז הכלים שמגיע אחר כך
הדלת האחורית עצמה לא מכילה את כל היכולות מראש. אחת הפקודות (0x14) מקבלת מהשרת גוש קוד קומפקטי, מריצה אותו בתוך הזיכרון של התהליך הקיים, ומחזירה את הפלט. לפורמט הזה קוראים Beacon Object File, והוא נולד בכלי התקיפה המסחרי Cobalt Strike. ESET מציינת שהמימוש כאן מבוסס על הפרויקט הפתוח COFF Loader, ושהוא תואם למודולים שנכתבו ל-Cobalt Strike, ל-Brute Ratel, ל-Metasploit ול-Sliver.
המשמעות המעשית ברורה: התוקפים לא צריכים לכתוב כלי משלהם לכל משימה. כל מודול שכבר קיים לאחת המסגרות האלה רץ כאן, בזיכרון, מאחורי מחסנית קריאות מזויפת.
מעבר לזה יש עשרות פקודות מובנות. איסוף פרטי המכונה והמשתמש, הרצת פקודות דרך cmd.exe, ניהול קבצים מלא, וחילוץ קבצים במקטעים של 4KB. יש proxy מסוג TCP אל כתובת מרוחקת והעברת פורטים דו-כיוונית, יש מיפוי של הסשנים המחוברים למכונה והרצת עותק נוסף של הנוזקה תחת משתמש אחר, ויש צילומי מסך תקופתיים שמעדכנים רק את ההפרש מהתמונה הקודמת כל 500 מילישניות.
כדי לשרוד אתחול הנוזקה בוחרת לפי ההרשאות שיש לה: service בשם ProcAuditManager, או ערך בשם SnapCart תחת מפתח ה-Run ברישום. (התיאור שהיא נותנת ל-service, "Tracks process creation, termination, and related system audit events", הוא ההשקעה היחידה בכל השרשרת שנועדה להיקרא בידי אדם.)
התקשורת עם השרת עוברת ב-TLS דרך Mbed TLS, נפתחת בשליחת ערך קבוע שמסמן שהנוזקה מוכנה, וכל הודעה אחריה מוצפנת שוב ב-RC4 עם מפתח בן 8 בתים. ESET מפרטת שורה ארוכה של כתובות שרת, כשהראשונה שנצפתה, 216.238.110[.]120 בפורט 443, נרשמה ב-11 בדצמבר 2025. הנוזקה יודעת לעבוד גם דרך proxy מסוג HTTP או SOCKS5, ואם לא הוגדר לה כלום היא נופלת חזרה להגדרות ה-proxy של המערכת.
מה שהדוח לא אומר
נקודה אחת בולטת בהיעדרה: ESET לא מציינת איך התוקפים מגיעים למכונה מלכתחילה. שרשרת ההתקנה מתועדת לפרטי פרטים מהרגע שהקבצים כבר יושבים על הדיסק, והשלב שקודם לו נשאר פתוח. למי שמנסה לחסום את הקמפיין ולא רק לזהות אותו בדיעבד, זה בדיוק החלק החסר.
הדגימה שהחוקרים פירקו נושאת חותמת הידור מנובמבר 2025 ומספר גרסה 1.8. מספר כזה אומר שהכלי כבר עבר כברת דרך, וסביר שימשיך להשתנות.
מה זה אומר בפועל
הקמפיין מכוון לממשלות באמריקה הלטינית, אבל אף אחת מהטכניקות שבו לא ייחודית לאזור ולא דורשת משאבים חריגים. אם אתם מגנים על סביבת Windows, שווה לבדוק שהניטור שלכם לא נשען רק על רשימת המודולים של תהליך או על מחסנית הקריאות, כי שתיהן מזויפות כאן בכוונה תחילה. הסימנים המוחשיים יותר הם קובץ dat שיושב ליד קובץ הרצה לגיטימי ונושא את שמו, service בשם ProcAuditManager, וערך רישום בשם SnapCart תחת מפתח ה-Run.
תגובות