TL; DR
חבילת PyPI בשם gcli-control סיפקה כלי גישה מרחוק שלם של Windows: רישום הקשות מקשים, לכידת מצלמת רשת ומיקרופון, ניטור לוח כתיבה, גישה לאישורי דפדפן, בקרת מסך, תמיכה בשמירה, העלאת הרשאות, ו"140+ פקודות" שפורסמו על ידי העצמאות. היא לא הסתירה את מה שהיא: סיכום ה-PyPI של החבילה תיאר אותה כ"כלי גישה מרחוק באמצעות npoint.io".
הפרט ששווה לעצור עליו הוא הביטוי הזה דרך npoint.io. במקום להתקשר הביתה לשרת ייעודי, השתל בו נעשה שימוש נקודה[.]io (שירות חינמי ולגיטימי לאירוח מסמכי JSON קטנים) כממסר פקודה ובקרה. המפעיל כותב פקודות לתוך סל JSON; השתל סורק את הסל הזה, מבצע וכותב את התוצאות בחזרה. אין דומיין בבעלות התוקף לחסום, אין כתובת IP חדשה לסמן: התעבורה עוברת לשירות שמפתחים משתמשים בו מדי יום.
שש גרסאות פורסמו בכשלוש עשרה וחצי שעות, כל אחת מהן מוכשרת יותר מהקודמת. כל אחת מהן קיבלה ניקוד. ml_predicted_safe על ידי מסווג אוטומטי לפני סקירה ידנית שסיווגה מחדש את המשפחה כזדונית.
אנטומיה של התקפה
gcli-control מתקין את חבילת הייבוא gcli, בסיס קוד של פייתון בן 35 מודולים. אין צורך בזמן התקנה. hooks שום דבר לא פועל במהלך pip להתקיןהיכולת נמצאת במודולים עצמם, מופעלת לאחר הפעלת הכלי, ופריסת המודול נראית כמו גיליון מפרט מוצר:
| אזור יכולות | מודולים |
|---|---|
| מעקב מארח | keylog, webcam, audio, clipboard, desktop, monitoring |
| גישה לאישורים ולנתונים | browser, forensics, fileops, transfer, users |
| דריסת רגל והסלמה | persistence, elevator, registry, security |
| איסוף מארח ורשת | system, processes, network_config, wifi, bluetooth, netutils |
| פיקוד ובקרה | client, host, session, protocol, npoint, crypto, encrypt |
ערוץ הפקודה הוא החלק המעניין. רוב כלי הגישה מרחוק מגיעים לשרת ששולט בו המפעיל - IP, דומיין, ספק אירוח שניתן לדווח עליו ולהוריד אותו למצב לא מקוון. gcli-control במקום זאת מטפל ב- שירות JSON-bin חינמי כ-dead-drop. ה נקודה מודול קורא וכותב מסמכי JSON קטנים על נקודה[.]io דרך HTTPS רגיל; קריפטו/להצפין מודולים עוטפים את המטענים שהוחלפו כך שתוכן ה-bin אינו פקודות טקסט רגיל. האפקט הוא ממסר מתווך ומוצפן:
- האופרטור מכניס הוראה (מוצפנת) לקובץ JSON.
- השתל, הפועל על מארח הקורבן, מבצע סקרים של הקובץ המאוחסן בשרת, מפענח, מבצע את אחד ממנהלי הפקודות שלו וכותב את התוצאה (המוצפנת) בחזרה.
- עם צג רשת, הקורבן פשוט מדבר אל נקודה[.]io — שירות עם סיבה לגיטימית להופיע בתנועת המפתחים.
אין כאן הורדה בשלב שני ואין טוען ערום: היכולת נשלחת בשלמותה, בפייתון קריא, וה"הסתרה" היחידה היא בחירת הממסר וההצפנה של המטענים המועברים.
ראוי להסביר מדוע דחיית JSON-bin אטרקטיבית מבחינה תפעולית, משום שזה מסביר מדוע אנו מצפים לראות את התבנית שוב:
- אין נקודת קצה בבעלות המפעיל. אין דומיין C2 לרשום, אין VPS לשכור, ואין דבר עבור מגן או רשם לתפוס. הסרה של חבילה לא נוגע בערוץ; הסרה של ה- ערוץ פירושו לבקש מ-SaaS רב-תכליתי לפקח על מסמך אחד מתוך מיליונים.
- הלבנת מוניטין. HTTPS יוצא לשירות מפתחים ידוע אינו נושא בתוכו את עונשים המוניטין כמו דומיין חדש או כתובת IP גולמית. הגדרות רבות של סינון יציאה מאפשרות זאת באופן מרומז.
- אסינכרוניות והכחשה. מודל סקר - השתל מאחזר מסמך במרווח זמן במקום להחזיק שקע פתוח - מייצר תעבורה שנראית כמו סקר API תקופתי, ולא סשן אינטראקטיבי. הצפנת תוכן המסמך פירושה שאפילו אנליסט שמוצא את ה-bin רואה טקסט מוצפן, לא רשימת פקודות.
- סיבוב טריוויאלימעבר לסל אחר, או לשירות הערות/הדבקות אחר לגמרי, הוא שינוי תצורה של שורה אחת עבור המפעיל. כל רשימת חסימות המותאמת לממסר הספציפי הופכת למיושנת ברגע שהיא נשלחת.
הפשרה שהמפעיל מקבל היא תפוקה והשהיה: ממסר dead-drop איטי יותר ובעל רוחב פס נמוך יותר מאשר חיבור ישיר. עבור שתל מעקב ובקרה שמוציא בעיקר פקודות קצרות ואוסף תוצאות לאורך זמן, קל לעשות את הפשרה הזו.
ציר זמן
המשפחה הסלימה במהירות. חותמות זמן של יצירת כרטיסים עבור הגרסאות המסומנות מציבות את כל הקשת הנצפית בתוך כשלוש עשרה וחצי שעות, וספירת הראיות של הסורק עצמה גדלה במקביל לקוד - מכמה אתרים מסומנים בגרסה הראשונה לארבע עשרה בגרסה האחרונה.
| גִרְסָה | נראה לראשונה (UTC) | הערות |
|---|---|---|
0.1.0 | 2026-07-21 12:59 | העלאה ראשונית; משטח מינימלי עם סימון |
0.5.0 | 2026-07-21 18:01 | היכולת מתרחבת |
0.2.0 | 2026-07-21 18:03 | (מספור הגרסאות אינו מונוטוני עם סדר ההעלאה) |
0.6.0 | 2026-07-22 00:44 | סט מודולים רחב יותר |
0.7.0 | 2026-07-22 01:58 | ערכת כלים כמעט מלאה |
0.7.1 | 2026-07-22 02:28 | הגרסה האחרונה; 35 מודולים, יכולת מלאה |
מספרי הגרסאות לא פורסמו בסדר מדויק, אך הכיוון ברור: גרסה קטנה ראשונה, ולאחר מכן איטרציה מהירה לעבר גרסה 0.7.1 בעלת התכונות המלאות. זוהי צורתו של פרויקט בפיתוח פעיל שנדחף לרישום ציבורי ככל שהוא גדל, לא ירידה חד פעמית.
אינדיקטורים לפשרה
כל האינדיקטורים המפורטים להלן אושרו מול תוכן החבילה שבדיסק וסריקת אינדיקטורים דטרמיניסטית של גרסה 0.7.1; אף אחד מהם אינו ספקולטיבי.
| סוּג | אינדיקטור |
|---|---|
| חבילה (PyPI) | gcli-control, גרסאות 0.1.0, 0.2.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1 |
| ייבוא חבילה | gcli |
| ממסר C2 | npoint[.]io (JSON-bin dead-drop; מטענים מוצפנים) |
| מאגר מוצהר | github[.]com/gcli-control/gcli |
| טביעת אצבע התנהגותית | מודולי מעקב הממוקמים יחד: keylog, webcam, audio, clipboard, browser, בתוספת persistence, elevator, ושכבת פקודות client/host/protocol בחבילה אחת |
| התקן hooks | ללא: היכולת פועלת בזמן ריצת הכלי, לא במהלך ההתקנה |
הערת ההגנה: האות העמיד והחזק ביותר אינו הדומיין (מארח ממסר מסתובב באופן טריוויאלי) אלא ה- לעצבחבילה אחת המאגדת שלושה או יותר פרימיטיבים שונים של מעקב מארח ו מנתב לולאת פקודה/תגובה דרך שירות אירוח תוכן ציבורי. חסימה נקודה[.]io באופן גורף, זה לא מעשי עבור רוב החנויות; התראה על תהליך בלתי צפוי שלוכד גם התקני קלט וגם מדבר עם שירות JSON-bin היא הרבה יותר חזקה.
התנהגות נצפית ומסגור
שני דברים הופכים את המדגם הזה ליוצא דופן, ושניהם עובדות נצפות ולא מסקנות לגבי מניע.
זה פרסם את עצמו. סיכום החבילה שהופץ ב-PyPI מנה את היכולות בשפה פשוטה - גישה מרחוק, בקרת שולחן עבודה, ניהול משתמשים, מצלמת רשת, אודיו, keylogger, persistens, נתוני דפדפן, WiFi, רישום, "140+ פקודות". לא היה ניסיון להציג את הקוד כעוזר בנייה, עטיפת CLI או כלי עזר לסוכן בינה מלאכותית, שהוא התחפושת הנפוצה יותר שאנו רואים ברישומים ציבוריים. האם פתיחות זו משקפת כלי Red Team שפורסם ללא בקרות גישה או משהו אחר, זו שאלה שתוכן החבילה לבדו אינו פותר; מה שבטוח הוא שערכת כלים כללית לגישה מרחוק ומעקב הייתה ניתנת להתקנה על ידי כל אחד עם... פְּעִים.
זה נשען על אמון בשירות שפיר. שימוש נקודה[.]io מכיוון שה-relay הוא הטכניקה המגדירה. זוהי דוגמה לדפוס רחב יותר - ניתוב C2 דרך SaaS לגיטימי (אתרי הדבקה, סלים של JSON, צ'אט אינטרנטhooks, מסמכי ענן) כך שהתעבורה הזדונית משתלבת בפעילות הרגילה של המפתחים ולא תהיה נקודת קצה בבעלות המפעיל לתפוס. המטענים בממסר הוצפנו, כך שתוכן ה-bin לא ייקרא כפקודות לצופה מזדמן.
הסימנים של המוציא לאור הם דלים וגנריים. החבילה הכריזה על מְחַבֵּר של "תורמי gcli" ורישיון MIT, והפנה את שדות דף הבית והמאגר שלו אל github[.]com/gcli-control/gcliשום דבר מזה אינו אימות: מחרוזת מחבר היא טקסט חופשי, כותרת רישיון MIT אינה עולה דבר, וכתובת URL של מאגר במטא-דאטה של החבילה היא טענה, לא הוכחת מקור. התבנית - שם חדש לגמרי, מחבר קולקטיבי כללי, וארגון/מאגר בעל הפניה עצמית שנוצר סביב החבילה - היא איך נראה פרויקט כאשר הוא הוקם במיוחד כדי לשאת את הקוד, ולא ככלי מבוסס שפיתח במקרה תכונת שליטה מרחוק. אנו מציינים זאת כתצפיות; הן עולות בקנה אחד עם, אך אינן כשלעצמן מקימות, הפצה שנבנתה למטרה.
אנו מתארים את הנטייה כזדונית על סמך יכולת ומסירה: שתל גישה ומעקב מרחוק שלם וניתן להפעלה, המופץ באינדקס חבילות ציבורי עם ממסר סמוי. איננו מייחסים מטרה או מניע.
השפעה, מגמות ומה המגינים יכולים לעשות
נקודה עיוורת לטריאז' מוכוון תחפושת. הרבה מפתחות מיון חבילות אוטומטיים על להסוות אותות של תוכנות זדוניות טיפוסיות ברישום — כתמים מעורפלים, זמן התקנה hooks, משפטים קצרים לאיסוף אישורים. חבילה שהיא פשוט בגלוי חולדה, עם קוד נקי וקריא וללא וו התקנה, אינו מציג אף אחד מאותם סימנים ויכול לחמוק מעבר להיוריסטיקה המצפים להסתרה. האותות שתופסים באופן אמין את המחלקה הזו הם מבניים ולא מבוססי הסוואה: מפקד יכולות (כמה פרימיטיבים שונים של מעקב מארח קיימים יחד בחבילה אחת) וניתוח צורת C2 (לולאת פקודה/תגובה המנותבת דרך שירות אירוח תוכן למטרות כלליות). בדיקות אלו מופעלות ללא קשר לכמה כנות או... מטושטשת האריזה היא.
מגמת SaaS-כ-C2. ניצול לרעה של שירות אירוח לגיטימי כ"הורדה של שירותים" אינו דבר חדש, אך הוא ממשיך לעבוד מכיוון שהעלות ההגנתית של חסימת השירות גבוהה והעלות ההתקפית של החלפת שירותים קרובה לאפס. צפו לעוד דברים כאלה. הגנות רשת המותאמות לדומיינים פגומים ספציפיים מתיישנות באופן מיידי; כללי התנהגות ("תהליך זה קורא את הלוח ואת מצלמת הרשת ואז מדבר עם ממשק API של אירוח הערות") לא.
סקיצה לגילוי בטון. הכלל המתמשך אינו מציין שם נקודה[.]io בכלל. זה משלב שתי תצפיות שהן נפוצות כל אחת בנפרד אך נדירות יחד במפתח רגיל או במארח CI:
התראה כאשר תהליך יחיד, בתוך הפעלה אחת, גם:
(א) ניגש לפרימיטיב של מעקב מארח - התקן קלט (וו מקלדת/עכבר), מצלמה, מיקרופון, לכידת מסך, לולאת קריאה של לוח כתיבה או מאגר אישורי דפדפן ("Login נתונים" / "מצב מקומי" / DPAPI); וגם
(ב) מבצע בקשות יוצאות לשירות אחסון תוכן / הדבקה / JSON-bin / chat-webhook ציבורי ולאחר מכן מעלה לבדיקה, ללא קשר לשירות הספציפי ב-(ב).
אף אחד מהם אינו חשוד לבדו: שפע של צילומי מסך של כלים לגיטימיים, והרבה מפרסמים JSON ל-API של אירוח. הצירוף בתוך תהליך קצר מועד הוא האות, והוא שורד כל סיבוב ממסר.
צעדים מעשיים לצוותים:
- התייחסו להתקנות חבילות ציבוריות על מארחי מפתחים ו-CI כגבול ביצוע, לא כנוחות - RAT על סוכן בנייה הוא RAT עם הסודות שלכם.
- העדף מראות פנימיות ברשימת היתרים; חבילה ששמה המילולי הוא שלט רחוק ומתארת לוגר keylogger לעולם לא צריכה להימצא באינדקס תאגידי.
- התראה על ה- שילוב — התקן קלט או לכידת מסך בתוספת תעבורה יוצאת לשירות תוכן/הדבקה/JSON-bin — ולא על כל פרימיטיבי יחיד, שיש לו שימושים שפירים בבידוד.
- אל תסתמכו על ציון "בטוח" אוטומטי כפסק דין סופי עבור חבילות עם יכולת גישה רחבה למארח; נתבו אותן לבדיקה אנושית.
משפחת החבילות סווגה כזדונית והועברה להסרה ברישום. מכיוון ש-C2 מבוסס ממסר אינו משאיר מארח בבעלות מפעיל לבור, הערך ההגנתי העמיד טמון בטביעת האצבע ההתנהגותית שלמעלה, ולא באף ערך ברשימת חסימות יחידה.







