השלב הבא של ההדבקה הגיע מיומן iCloud ציבורי: כך שינתה MacSync את דרך העבודה שלה, ולמה מפתחים הם היעד
אפליקציית ארנק קריפטו בשם Toria קיבלה אתר משלה וקידום ב-X ובטלגרם. מה שלא היה לה זה מוצר: האפליקציה לא קיימת, והקובץ שיורד מהאתר שלה הוא נוזקה. Kaspersky פרסמה היום ניתוח של גרסה חדשה של MacSync, משפחת נוזקות גניבת מידע ל-macOS, והשרשרת שהיא מתארת נראית אחרת לגמרי ממה שתועד עד עכשיו במשפחה הזאת.
הפרט שבולט בה הוא לא הצפנה מתוחכמת ולא חולשה במערכת ההפעלה. הוא כתובת: באחת הדגימות, השלב השני של ההדבקה ירד מיומן ציבורי שמתארח על שרתי iCloud של אפל. החוקר סרגיי פוזן, שכתב את הדוח, מתאר שרשרת של שישה שלבים לפחות שבסופה שני מודולים, אחד שאוסף מידע ואחד שנשאר על המחשב ומתחזה ל-Finder. בהמשך נעבור על איך השרשרת עובדת, מה בדיוק נאסף מהמחשב, ולמה דווקא מפתחים הם הקהל שהתוקפים מחפשים.
מי זאת MacSync, ולמה השם התחלף
המשפחה הזאת צעירה יחסית. לפי Kaspersky היא הוצעה למכירה לראשונה בדארקנט ב-2025 תחת השם Mac.c, ומאוחר יותר המפתחים שינו את שמה ל-MacSync. מודל ההפצה הוא malware-as-a-service, כלומר מי שכתב את הנוזקה לא תוקף בעצמו אלא משכיר אותה ללקוחות, וכל לקוח בוחר איך להגיע לקורבנות. זאת גם הסיבה שאין דרך הדבקה אחת: באותו קמפיין ממש, סביב אותה אפליקציה מזויפת, החוקרים מצאו שתי דרכים שונות שבהן הגיעו המודולים למחשב.
הגרסאות הראשונות נכתבו ב-AppleScript והיו דומות מאוד ל-AMOS, משפחת גניבת המידע הוותיקה שמככבת בזירת ה-macOS מאז 2024 ושגם Unit 42 פרסמה עליה ניתוח לפני שבוע. מאז MacSync התרחקה משם: היא הוסיפה מודול דלת אחורית משלה, ובגרסה הנוכחית החליפה את הסקריפטים בקבצי הרצה מקומפלים שנכתבו ב-Swift וב-Objective-C. כל קבצי ההרצה בשרשרת בנויים בפורמט שרץ גם על מעבדי Apple וגם על Intel.
איך המטען מגיע, מיומן ציבורי ועד שלושה droppers
השרשרת מתחילה בקובץ DMG ובתוכו אפליקציה. הדבר הראשון שהיא עושה כשמפעילים אותה הוא לבדוק אם היא עצמה מסומנת כקובץ שהורד מהאינטרנט, ואם כן, למחוק את הסימון. ב-macOS הסימון הזה הוא attribute בשם com.apple.quarantine, והוא מה שגורם למערכת להציג את האזהרה לפני הרצה של אפליקציה שלא הגיעה מה-App Store. הנוזקה מסירה אותו מעצמה בעזרת xattr, והאזהרה לא מופיעה.
אחר כך היא שולפת מתוך גוף הקובץ שלה כתובת מוצפנת ב-XOR. Kaspersky מתארת קריאה שמתבצעת מהסוף להתחלה: בקצה הקובץ יושבת מילת קסם, SONOMAC1, לפניה שמונה בתים שאומרים כמה ארוך המידע המוצפן, ורק לפי הגודל הזה נקבעים גבולות הבלוק המוצפן עצמו.
וכאן מגיע החלק המעניין. בחלק מהדגימות הכתובת שיוצאת מהפענוח הובילה פשוט לשרת של התוקפים. בדגימה אחת לפחות היא הובילה למקום אחר: יומן שפורסם דרך iCloud, בשירות היומנים של אפל. מה שיורד משם הוא קובץ יומן תקני לגמרי. הסקריפט פותח צינור אנונימי, מפעיל את zsh במצב שבו הוא קורא פקודות מהקלט הסטנדרטי, ושופך לתוכו את תוכן היומן שורה אחרי שורה. שורות של יומן אינן פקודות, אז zsh נכשל עליהן אחת אחרי השנייה, עד שהוא מגיע לשורת התיאור של האירוע. שם מחכה המטען.
היתרון של השיטה ברור: בשלב הזה, התעבורה שיוצאת מהמחשב הנגוע הולכת לדומיין של אפל. מה שהפקודות שבתיאור האירוע עושות בסוף הוא להוריד ארכיון מאותו iCloud, לחלץ ממנו אפליקציה נוספת, להסיר גם ממנה את סימון ההורדה, לחתום אותה בחתימה מקומית ולהריץ.
עד כאן איך המטען נוחת על המחשב. מכאן מתחיל חלק אחר של העבודה, שכולו נועד לוודא שמי שיתפוס את הקובץ בדיעבד לא יוכל לפתוח אותו.
האפליקציה שירדה מהיומן היא dropper, כלומר רכיב שכל תפקידו לפרוק ולהריץ את השלב הבא. היא מפענחת קובץ הרצה דחוס ומוצפן ב-AES וכותבת אותו לתיקיית /tmp תחת שם מוסתר. בפנים יושב dropper נוסף, וזה כבר מגיע עם הגנות: הוא שואל את המערכת שתי שאלות שנועדו לגלות אם הוא רץ בתוך מכונה וירטואלית, ומסמן את התהליך של עצמו בדגל שמונע מ-debugger להתחבר אליו.
את השלב הבא קשה הרבה יותר לשחזר במעבדה, וזה לא במקרה. במקום להצפין את המודולים במפתח קבוע שיושב בתוך הדגימה, התוקפים בנו כלי עזר משלהם בשם pkgunpack, שמייצר על המחשב הנגוע זוג מפתחות, שולח לשרת את הציבורי מביניהם, ומקבל בחזרה את מפתח הפענוח האמיתי כשהוא ארוז בסוד משותף שנגזר מהחלפת מפתחות Curve25519 בין השניים. המשמעות המעשית למי שמנתח דגימה: בלי שרת חי ומשתף פעולה בצד השני, המטען שנמצא על הדיסק נשאר בלוק מוצפן. Kaspersky מוסיפה שהכלי מאפס את אזורי הזיכרון שהחזיקו את המפתחות מיד אחרי השימוש, כנראה כדי להקשות על איסוף ראיות מהזיכרון.
בשלב הזה יורדים שני המודולים. התקשורת מול השרת דורשת כותרת HTTP מותאמת בשם X-Upload-Token, ובלעדיה השרת מחזיר שגיאה. פרט קטן, ושימושי: חוקר שמגיע לשרת בלי ה-token שנמצא בדגימה לא יראה ממנו כלום.
מה הנוזקה אוספת, ומה עוד לא עבד לה
מודול גניבת המידע מגיע כאפליקציה שהליבה שלה כתובה ב-Swift, והצעד הראשון שלו הוא הישן והטוב: לבקש מהמשתמש את סיסמת המנהל, בחלון שמעוצב כך שיתאים לאפליקציה שהנוזקה מתחזה אליה. אחרי שהסיסמה הוקלדה מוצג חלון שנראה כמו הודעת מערכת על אפליקציה פגומה, עם הצעה להעביר אותה לאשפה. הקורבן מוחק את הראיה בעצמו.
הפרט הטכני שמעניין כאן הוא איך הנוזקה בודקת שהסיסמה נכונה. רוב המשפחות בזירת ה-macOS עושות את זה דרך dscl, כלי שורת הפקודה שמדבר עם ספריית המשתמשים של המערכת. MacSync משתמשת במקום זה ב-API של PAM, מנגנון האימות המודולרי שמערכות יוניקס נשענות עליו כדי להכריע אם סיסמה תקפה. לפי Kaspersky זאת טכניקה חדשה יחסית בזירה הזאת, שנצפתה לראשונה ביולי 2026 במשפחה אחרת בשם Pam Stealer, ולהערכתם נראה אותה עוד.
רשימת מה שנאסף אחר כך ארוכה, והיא גם התשובה לשאלה מי הקורבן המבוקש. יש בה את הצפוי: היסטוריית גלישה, עוגיות, סיסמאות שמורות, מידע של תוספי ארנקי קריפטו בדפדפן, נתונים של אפליקציות ארנק, מידע של טלגרם, שם המשתמש והסיסמה של המכשיר וקובץ ה-keychain. ויש בה גם את קובצי ההגדרות של SSH, של ZSH, של AWS, של Kubernetes ושל git, ואת היסטוריית הפקודות של ה-shell. מי שנמצא בצד השני של הרשימה הזאת אינו משתמש ביתי.
רכיב אחד ברשימה עדיין לא עובד. Kaspersky מתארת פונקציה שמנוטרלת בכל הדגימות שנמצאו, שמטרתה לשנות את הגדרות הגישה של רשומות ב-keychain כך שקטגוריות מסוימות של אפליקציות יוכלו לקרוא אותן בלי אישור מהמשתמש ובלי סיסמת ה-keychain. המחרוזות המוצפנות בתוך הנוזקה מגלות אחרי מה התוקפים רודפים שם: המפתחות שבהם Chrome ו-Brave מצפינים את הסיסמאות השמורות. החוקרים מציינים שהניסיון בכל זאת מייצר בקשת אישור על המסך, ומשערים שזאת הסיבה שהפונקציה כבויה בינתיים.
הדלת האחורית שמתחזה ל-Finder
הדלת האחורית עצמה נכתבה ב-Objective-C ומתחזה לאפליקציית Finder. שימור האחיזה שלה במערכת נעשה בשלושה מסלולים במקביל: LaunchAgent בשם com.apple.finder.agent, שורה שנשתלת בקובץ ההגדרות .zshrc ורצה בכל פתיחה של טרמינל, ושורה דומה שנשתלת ב-git hooks הגלובליים, באירועי pre-commit ו-post-checkout. במחשב של מפתח זה אומר שכל commit וכל מעבר בין branch-ים מריצים את סקריפט השחזור של הנוזקה.
הסקריפט הזה בודק אם קובצי הדלת האחורית עדיין קיימים, משחזר אותם מגיבוי שנשמר בתיקייה שהוא יוצר בעצמו תחת Library של המשתמש (תיקייה שלא קיימת ב-macOS כברירת מחדל), ומרכיב מחדש את ה-LaunchAgent. ובאותה הזדמנות הוא הורג שלושה תהליכי מערכת שאחראים על התראות, ביניהם זה שמודיע למשתמש שנוסף פריט הפעלה חדש. ככה החזרה של הנוזקה למערכת נשארת שקטה.
הפקודות שהדלת האחורית מקבלת מהשרת מסתכמות כמעט כולן באותו דבר, הרצה של סקריפט AppleScript שמגיע מקודד בתוך התשובה, אבל השמות שלהן מספרים מה מעניין את התוקפים. deploy_ext משתילה בדפדפן של הקורבן תוסף שהגיע מהשרת. deploy_ledger מחליפה את אפליקציית ארנק החומרה Ledger המותקנת במחשב בגרסה של התוקפים. regrab אוספת מחדש מידע וקבצים ואורזת אותם לארכיון. הרביעית, live_browser, היא היחידה שלא מריצה AppleScript אלא מורידה רכיב נפרד, ולגביה Kaspersky אומרת במפורש שהיא לא יודעת מה הרכיב עושה, ורק משערת לפי שם הפקודה ולפי הדיווחים שהוא שולח שמדובר בניסיון להתערב בתעבורת הדפדפן בזמן אמת.
אז מה בעצם השתנה, ולמה זה נוגע ליותר ממק אחד
הכיוון שהדוח מצביע עליו הוא מעבר מסקריפטים לקוד מקומפל. הגרסאות הקודמות של MacSync הופצו בעיקר דרך ClickFix, אותה טכניקה שבה עמוד באינטרנט מבקש מהמשתמש להדביק פקודה בטרמינל, והמטען היה סקריפט מעורפל. הגרסה הזאת עובדת אחרת לגמרי: droppers בינאריים, מודולים ב-Swift וב-Objective-C, בדיקות נגד מכונות וירטואליות והחלפת מפתחות מול השרת. כל אחד מהשינויים האלה מייקר את העבודה של הצד שמנתח.
ומעבר לזה יש את שאלת הקורבן. Kaspersky כותבת שסוג המידע שנאסף וסוג האפליקציות שהנוזקה מתחזה אליהן מצביעים על מפתחים, על אנשי IT ועל אנשי קריפטו, ושהדבקה של מחשב מפתח פותחת לתוקפים המשך דרך: לא רק החשבונות הפרטיים של אותו אדם, אלא המערכות שהוא ניגש אליהן בעבודה. מחשב פיתוח נגוע הוא בדרך כלל גם מפתח SSH פעיל, גם session פתוח מול ספק ענן, וגם הרשאת דחיפה למאגר קוד.
מה זה אומר בפועל
אם אתם מתקינים תוכנה למק מחוץ ל-App Store, הרצף שכדאי לעצור בו הוא אפליקציה שמבקשת את סיסמת המנהל מיד עם ההפעלה ואז מודיעה שהיא פגומה. על מחשבי פיתוח שווה לבדוק שלושה מקומות ספציפית: LaunchAgent ששמו מתחזה לשם של אפל, שורות שנוספו ל-.zshrc, ו-git hooks גלובליים שמוגדרים דרך core.hooksPath ושאיש לא זוכר שהגדיר. ומי שמוצא משהו כזה צריך להניח שכל מה שיושב על אותו מחשב כבר דלף, כולל ה-keychain, מפתחות ה-SSH וקובצי ההגדרות של הענן.
תגובות