אין שרת שליטה, יש הצבעה: CLOSEDQUORUM שואלת ארבעה מודלי AI מה לעשות ופועלת לפי הרוב
המחשב הנגוע מתעורר כל חמש עד חמש-עשרה דקות, אוסף על עצמו כמה פרטים בסיסיים, שם המארח, ארכיטקטורה, מספר הליבות, גרסת Windows והאם המשתמש הנוכחי הוא מנהל, ואורז את הכול לבלוק טקסט אחד. את הבלוק הזה הוא שולח לארבעה שירותי AI מסחריים, בזה אחר זה, יחד עם תפריט סגור של פעולות ובקשה לבחור אחת מהן. כשהתשובות חוזרות הוא סופר אותן ומריץ את הפעולה שקיבלה הכי הרבה קולות. אף אדם לא יושב בלולאה הזאת.
זאת CLOSEDQUORUM, נוזקת Windows שCisco Talos פרסמה עליה ניתוח מפורט ב-22 בספטמבר. החוקר Ryan Fetterman מתאר אותה כ-implant האוטונומי הראשון שתועד בפומבי, כזה שמעביר את החלטות השליטה והבקרה שלו למודלי שפה במקום לשרת של תוקף. לפני שנכנסים למכניקה כדאי לומר מה Talos לא מצאה: "אין לנו אישור להפעלה בשטח", נכתב בדוח, והעותק שהגיע לידי החוקרים בכלל לא עובד. בהמשך נראה איך בנויה ההצבעה, מה עומד על התפריט שהמודלים בוחרים ממנו, ולמה דווקא המבנה הזה מסבך את הזיהוי.
כשה-API של ספק המודל הוא שרת השליטה
נוזקה רגילה צריכה כתובת אחת שאליה תפנה כדי לקבל פקודות ולשלוח בחזרה את מה שאספה. הכתובת הזאת היא גם החוליה החלשה שלה: ברגע שחוקרים מזהים אותה אפשר לחסום את הדומיין, להפיל את השרת ולנתק בבת אחת את כל המכשירים הנגועים. לתשתית הזאת קוראים שרת שליטה ובקרה, בקיצור C2.
ל-CLOSEDQUORUM אין שרת כזה. במקומו היא פונה ל-endpoint-ים של ארבעה ספקי מודלים מסחריים, DeepSeek, Qwen, Mistral ו-Google Gemini, אותם שירותים שאלפי אפליקציות לגיטימיות קוראות להם מדי יום. מה שנגנב מהמחשב יוצא החוצה דרך webhook של Discord. בפועל אין פה תשתית ייעודית לחסום, וזה בדיוק העניין.
הקובץ עצמו הוא קובץ הרצה של 64 ביט בגודל 16.4 מגה-בייט, כתוב ב-Go ומהודר עם CGO_ENABLED=1, כלומר הוא מערבב Go וקוד C כדי לפנות ישירות ל-API של Windows. השם מתאר את הארכיטקטורה, מסבירה Talos: קוורום הוא גוף מחליט שדורש מספר מינימלי של משתתפים כדי לפעול, וכאן המשתתפים הם ארבעת ספקי המודלים. "הישיבה סגורה, בני אדם לא מוזמנים", כתב Fetterman.
אז איך ההצבעה עובדת?
ההוראה שהמודלים מקבלים חולצה מתוך הקובץ הבינארי והיא קצרה: "אתה אסטרטג נוזקות מתקדם. ספק אך ורק החלטות ברות-הרצה". מעליה מוזרקים בזמן ריצה פרטי המחשב הנגוע, ומתחתיה רשימת הפעולות האפשריות. התשובה לא יכולה להיות טקסט חופשי, אלא חייבת לחזור במבנה JSON קבוע עם שדות מוגדרים מראש: ההחלטה עצמה, הנימוק לה, תהליך היעד, סוג הניצול, שיטת ההתחמקות והגדרות המטען. מה שלא נכנס למבנה הזה נזרק.
רכיב בשם ModelOrchestrator שולח את הפנייה לארבעת הספקים אחד אחרי השני ואוסף את התשובות לרשימה, ופונקציה בשם interModelDiscussion סופרת כמה קולות קיבלה כל החלטה ומחזירה את זו שבראש. ריבוי הספקים משרת כאן שתי מטרות ולא רק ספירת קולות: אם מודל אחד נתקל במנגנון בטיחות ומסרב, או פשוט לא עונה בזמן, שלושת האחרים עדיין יכולים להחזיר החלטה תקפה.
ומה קורה כשיש תיקו? אז נכנס סדר עדיפויות קבוע: DeepSeek ראשון, אחריו Qwen, אז Mistral ולבסוף Gemini. זה לא מקרי אלא תוצאה של הקוד, לולאה שמחפשת את המקסימום עם השוואת "<" ממש ולכן שומרת על הראשון שנמצא. Talos מסכמת שההתנהגות "דטרמיניסטית לחלוטין ומוטה לטובת DeepSeek". ואם כל ארבעת המודלים נופלים או מחזירים JSON שבור, ערך ברירת המחדל הוא המחרוזת consensus, שאין לה שום רכיב שמטפל בה. הלולאה נרדמת ומנסה שוב מאוחר יותר. אין פעולת ברירת מחדל.
מה עומד על התפריט
התפריט סגור וכולל ארבע אפשרויות, והן מסבירות למה בכלל היה שווה לבנות את המכונה הזאת. הפעולה steal מפעילה שלוש פונקציות במקביל: אחת מדליקה את ההרשאה SeDebugPrivilege ומשתמשת ב-MiniDumpWriteDump כדי להעתיק את כל תוכן הזיכרון של תהליך LSASS, שם Windows מחזיק את פרטי האימות של המשתמשים; שנייה אוספת סיסמאות שמורות מ-Chrome, מ-Edge ומקובץ logins.json של Firefox; שלישית מחפשת ארנקי קריפטו, ביניהם MetaMask, Exodus וקובצי ארנק של Ethereum.
הפעולה inject בוחרת בין שתי טכניקות לפי שדה סוג הניצול שהמודל החזיר, הזרקה לתהליך מושעה בשיטת Early Bird APC או החלפת תוכן של תהליך מושעה בקוד אחר. persist, שימור האחיזה במחשב, יוצרת שלושה עוגנים בבת אחת: ערך בשם WindowsUpdate במפתח ההרצה האוטומטית של המשתמש, משימה מתוזמנת דרך schtasks.exe, ומנוי אירועים קבוע ב-WMI שמופעל כל 60 שניות דרך שאילתת ביצועי מערכת ומריץ סקריפט PowerShell מהנתיב C:\Windows\Temp\wmi.ps1. הפעולה הרביעית, move, פשוט חסרה מימוש בעותק שפורסם.
מה שנאסף לא נשלח כמו שהוא. הוא מוצפן ב-AES-256-GCM עם מפתח שנגזר מהתאריך הנוכחי ומתחלף מדי יום, מקודד ב-Base64, ואז נחתך לפרוסות של 1,900 בתים שמועלות ל-Discord אחת לשנייה. במקביל ה-implant מנטרל טלמטריה: הוא דורס את הפונקציה EtwEventWrite בהוראת RET אחת, וכך משתיק את מנגנון האירועים של Windows.
איפה נגמרת האוטונומיה
כאן נכנסת המגבלה הגדולה. העותק שנמצא הוא תבנית ריקה, כל מפתחות ה-API של המודלים מאותחלים לערך dummy_api_key וכתובת ה-webhook לערך dummy_webhook_url, כך שהקובץ כפי שהופץ אינו פעיל. מגרסאות פיתוח שנאספו על פני שבעה ימים Talos מסיקה שמדובר בשירות: המפתח מהדר לכל מפעיל קובץ משלו, עם המפתחות והכתובת שלו מוזרקים בזמן ההידור. מאותם ממצאים נקשר המפתח לפרסומים בפורומים פליליים בנושא carding משנת 2025. (אגב, כלל ה-YARA שפרסמה Talos מציין שהמשפחה שינתה שם ב-3 ביולי 2026, מ-BALZAK ל-CLOSEDQUORUM.)
והאוטונומיה עצמה? Talos לא מוכרת אותה כיתרון נקי. הוצאת התוקף האנושי מהלולאה מכניסה חולשות חדשות: סירובים של ספקים, הגבלות קצב, פלט שבור, תיקו שאפשר לחזות מראש, תפריט פעולות מצומצם ותלות מוחלטת ב-API מסחריים. "אוטונומיה לא הופכת את ה-implant לחסין", כתבו החוקרים, "היא מחליפה חלק מהמגבלות האנושיות במגבלות של מודלים ושל תשתית". התקדים שהם מצביעים עליו אינו הנוזקה הזאת אלא מה שהיא מדגימה, שאפשר לקחת שלב תקיפה מוגדר היטב, לצמצם אותו לתפריט סגור, ולתת למודלים לבחור בתוכו.
מה מחפשים בלוגים
הזיהוי צריך להישען על התנהגות ולא על חסימת דומיינים, ממליצה Talos, מהסיבה הפשוטה שהדומיינים כאן לגיטימיים לגמרי. אפליקציות אמיתיות פונות ל-DeepSeek, ל-OpenRouter, ל-Mistral, ל-Gemini או ל-Discord כל הזמן. הרבה פחות מהן פונות לכמה מהם בזה אחר זה ובאותה נשימה ניגשות ל-LSASS, מזריקות קוד לתהליכים מושעים או יוצרות מנוי WMI חדש. הצירוף הוא הסימן, לא הרכיב הבודד.
שני עוגנים נוספים נוחים במיוחד לציד: הסקריפט wmi.ps1 שנשאר על הדיסק תחת C:\Windows\Temp, וההרצה החוזרת במרווחים אקראיים של חמש עד חמש-עשרה דקות. את תוכן הפניות עצמן, ההוראה עם פרטי המחשב, רואים רק דרך פענוח תעבורה מוצפנת או מהטלמטריה של הספק עצמו. באותו יום פרסמה Talos גם את CAIRN, ערכת קוד פתוח לאיתור נוזקות שמשלבות AI, שסורקת מטא-דאטה ומחרוזות בלי להריץ את הקבצים ומריצה עליהן עשרים וארבעה מסננים לאיתור סימנים כמו תבניות הוראות ו-endpoint-ים של ספקי מודלים.
מה זה אומר בפועל
אם אתם מנטרים תעבורה יוצאת, שווה להתחיל להתייחס לפניות ל-API של ספקי מודלים כקטגוריה בפני עצמה ולא כעוד תעבורת HTTPS. תהליך Windows שאין לו שום סיבה לדבר עם מודל שפה ופתאום עושה את זה, ובוודאי אם הוא מדבר עם כמה ספקים ברצף, שווה בדיקה. מעבר לזה, כל מה ש-CLOSEDQUORUM עושה אחרי שההחלטה נופלת, גישה ל-LSASS, הזרקה לתהליך מושעה, מנוי WMI חדש, הוא בדיוק מה שכלי ה-EDR שלכם כבר אמור לתפוס. החידוש הוא מי מחליט, לא מה נעשה.
תגובות