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

את הערך הזה תיעדו חוקרי Zscaler ThreatLabz בניתוח שפרסמו ב-10 בספטמבר, של משפחת נוזקות חדשה שהם מכנים SloppyRAT וזיהו לראשונה ביוני 2026. להערכתם מדובר בכלי שמשמש גורם שקשור למתקפות כופרה, שנועד לבסס אחיזה ראשונית ברשת ולשמש ממנה קרש קפיצה פנימה. מה שמוזר הוא שאותו קובץ בינארי עצמו, זה שנכשל בפעולה הבסיסית ביותר, מצפין שלוש עשרה מהפונקציות שלו ומפענח אותן רק בזמן ריצה, עוקף את הווים שמוצרי אבטחה מציבים על פונקציות של Windows, ובודק את התעודה של השרת שלו כדי שאף מערכת ניטור לא תצליח לקרוא את התעבורה. נעבור על הדרך שבה הקוד מגיע לזיכרון, על מה שהושקע בו כדי שלא ייראה, ועל הפערים שמסגירים שהוא עדיין בעבודה.

איך הקוד מגיע למחשב

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

מה שמעניין כאן הוא הכלי שהפקודה מפעילה. לא PowerShell ולא סקריפט שהורד, אלא finger.exe, כלי שורת פקודה ותיק שמגיע עם Windows ומדבר בפרוטוקול Finger מעל פורט TCP 79. הכלי מושך סקריפט batch משרת של התוקף, וההמשך נראה כמו תרגיל בהסוואה: הסקריפט מעתיק את curl.exe המקורי של Windows לתיקיית AppData תחת שם שמורכב מספרות ומסיומת com., ובעזרתו מוריד מ-GitHub את IronPython בגרסה 3.4.2, ששמור לדיסק עם סיומת pdf.. IronPython, מפרסר Python לגיטימי, מריץ קוד דחוס ומקודד שמוריד את השלבים הבאים, ובסופם נפרסים CastleLoader ו-CastleRAT, זוג רכיבי הדבקה ושליטה שתועדו על ידי Recorded Future כתשתית שירות שמופצת בעצמה דרך פיתיונות ClickFix.

SloppyRAT מגיע במסלול נפרד. התוקף כותב לדיסק מפרסר Python נוסף במקום להשתמש בזה שכבר קיים, ומריץ באמצעותו סקריפט שיורד מאחסון ענן של Azure. תפקיד הסקריפט הוא להוריד קובץ DLL, ששמו hostfxr.dll ונראה כמו רכיב מערכת שגרתי, ולטעון אותו ישירות לזיכרון בלי לכתוב אותו לדיסק כתוכנית שרצה. הבקשות יוצאות עם מחרוזת זיהוי דפדפן ייחודית, DLLMemLoader/1.0, שהיא כשלעצמה סימן מובהק לחיפוש בלוגים. ThreatLabz מציינים שרוב הארגונים לא צריכים לא את finger.exe ולא את פרוטוקול Finger, כך שחסימת הרצה של הכלי וחסימת תעבורה יוצאת בפורט 79 קוטעות את כל השרשרת עוד לפני השלב הראשון.

עד כאן איך הקוד מגיע לזיכרון. מכאן מתחיל החלק שהושקעה בו עבודה אמיתית.

מה נעשה כדי שהנוזקה לא תיראה

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

מסביבן פזור קוד מיותר שנועד לשבש חתימות: הקצאות זיכרון ששוחררות מיד, קריאות ל-API שתוצאתן לא נבדקת, פעולות חשבוניות שאיש לא משתמש בהן. ויש גם שכבה שלישית. מוצרי הגנה רבים מציבים ווים על פונקציות Windows ומסתכלים על מה שעובר דרכן, ולכן הנוזקה לא קוראת להן בדרך הרגילה: היא מאתרת את הפונקציה בזיכרון לפי גיבוב של שמה, שולפת מתוך ההוראות שלה את מספר קריאת המערכת המתאים, וקוראת לליבה ישירות. הטכניקה מוכרת בקהילה בשם Hell's Gate. ThreatLabz ספרו 21 פונקציות שהנוזקה מאתרת כך, ועשר בלבד שהיא באמת משתמשת בהן.

הקו אל השרת, ומה שעובר בו

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

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

היכולת שמסבירה למה כלי כזה מעניין דווקא תוקף כופרה נמצאת באותו ערוץ: דרך תשובת ה-heartbeat יכול המפעיל לפתוח חיבור SOCKS הפוך, כלומר להפוך את המחשב הנגוע לשער שדרכו הוא מגיע למערכות אחרות ברשת הפנימית. זו בדיוק התנועה הרוחבית שקודמת להצפנה. כערוץ גיבוי, אם השרת יורד, הנוזקה יודעת לשלוף את כתובת השרת מרשת הבלוקצ'יין Polygon, שבה הכתובת מאוחסנת בחוזה חכם ולא ניתנת להסרה בקלות. לטכניקה קוראים EtherHiding. במקרה הזה היא כנראה עוד לא גמורה: החוקרים לא מצאו ולו דגימה אחת שמכילה כתובת של חוזה חכם.

47 פקודות שנראות כמו PowerShell, בלי PowerShell

כשהמפעיל שולח פקודה, הנוזקה בודקת קודם אם היא אחת מ-47 פקודות מובנות. השמות מוכרים לכל מי שעבד עם PowerShell, בין השאר whoami, ls, Get-Process, Get-Service, Get-LocalGroupMember, Resolve-DnsName ו-Test-NetConnection, אבל אף אחת מהן אינה פקודת PowerShell. כולן ממומשות ב-C++ וקוראות ישירות ל-API של Windows. התוצאה מבחינת המגן היא שרשימת התהליכים, רשימת השירותים, חברי קבוצת המנהלים המקומית ובדיקות הקישוריות הפנימיות נאספות בלי שאף תהליך powershell.exe עולה, ובלי ששורה אחת נכתבת ליומן הפקודות של PowerShell. באותה רשימה יש גם שתי פקודות שקוראות את מצב Microsoft Defender ומשנות את הגדרותיו דרך ממשק הניהול של Windows.

פקודה שלא מופיעה ברשימה מטופלת אחרת. הנוזקה טוענת לתוך התהליך של עצמה את מנוע ההרצה של NET. ואת הספרייה שמממשת את PowerShell, ומריצה את הסקריפט בתוכה. התוצאות נשמרות זמנית בתיקיית ה-TEMP בקובץ עם סיומת png שמתחיל בכותרת תקינה של תמונה, ושאר תוכנו מעורפל ב-XOR. ואם טעינת המנוע נכשלת, למשל כשגרסת NET. במחשב לא מתאימה, יש נפילה אחורה נוספת: הנוזקה מפעילה powershell.exe אמיתי, אבל מגדירה את explorer.exe כתהליך האב שלו. כלי ניטור שמחפש PowerShell שנפתח מתוך תהליך חשוד רואה שרשרת הורים תמימה לגמרי.

אז למה לקרוא לזה Sloppy

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

ThreatLabz לא מייחסים את הכלי לקבוצה מסוימת ולא נוקבים בשם. הם כותבים שהוא "משמש קרוב לוודאי גורם שקשור למתקפות כופרה", וזו מידת הוודאות שכדאי לאמץ. את השורה התחתונה שלהם כדאי דווקא לקרוא כלשונה: "היכולות של SloppyRAT מספיקות לאיסוף מידע, לתצפית ולתנועה רוחבית במתקפות שקשורות לכופרה", כתבו החוקרים. כלי שבור למחצה שמצליח למפות רשת ולשמש שער פנימה הוא עדיין כלי עובד.

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

מה זה אומר בפועל

החסימה הזולה ביותר נמצאת בקצה הראשון של השרשרת: מנעו הרצה של finger.exe וחסמו תעבורה יוצאת בפורט 79, שני דברים שכמעט שום ארגון לא באמת צריך. אחרי זה, שווה לחפש ב-endpoints את העקבות הספציפיים שהניתוח מתאר, ובהם עותק של curl בתיקיית AppData תחת שם של ספרות בלבד, IronPython שנפרס לתיקיית המשתמש, וקבצים עם סיומת png בתיקיית ה-TEMP שלא נפתחים כתמונה.

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