Xygeni הבחינה לאחרונה בדפוס מדאיג בנוף התקפות שרשרת האספקה של תוכנה בשנת 2025., שצץ בשני מנהלי חבילות פופולריים: PyPI ו Npmכחלק ממאמצי מודיעין האיומים המתמשכים שלנו,התרעה מוקדמת מפני תוכנות זדוניות (MEW) של Xygeni הכלי זיהה מקרה ברור אך דומה מבחינה מתודולוגית של חבילה זדונית שהועלתה לרישום אחר בעבר. מקרה זה מדגיש כיצד גורמי איום מתפתחים ומשתמשים מחדש בטכניקות תקיפה במערכות אקולוגיות שונות, במיוחד באמצעות חבילות פייתון זדוניות ו חבילות npm זדוניות, מה שמגביר את הסיכון שחבילות זדוניות יחלחלו לשרשראות אספקה של קוד פתוח.
ה-MEW של Xygeni: איתור הדמיון
כלי MEW של Xygeni בנוי לאיתור ולסמן חבילות זדוניות, במיוחד אלו המקושרות להתקפות שרשרת אספקה של תוכנה בשנת 2025, ברגע שהן מתפרסמות במאגרי קוד פתוח. הוא פועל על ידי ניתוח חבילות חדשות לאיתור התנהגות חשודה.
במקרה זה, היא זיהתה שניים חבילות פייתון זדוניות (graphalgo ב-PyPI) ו חבילות npm זדוניות (express-cookie-parser ב-npm).
חבילות זדוניות של Python ו-npm בהתקפות שרשרת אספקה של תוכנה (2025)
בואו נחקור את המאפיינים המשותפים שהפעילו את ההתראות שלנו:
Tposposquatting
שניהם ניסו לחקות חבילות פופולריות קיימות.
- גרפלגו (PyPI): "חבילת פייתון ליצירה וטיפול בגרפים ורשתות.הועלה על ידי משתמש בשם "לאריטק" ב-13 ביוני 2025, חבילה זו הציגה את עצמה כחלופה של PyPi לפרויקט graphalgo המקורי שאינו זדוני, ששמו שונה מאוחר יותר ל-graphdict.
- מנתח קובצי Cookie express (npm)חבילה זו חיקתה את חבילת מנתח העוגיות הידועה, ואף שיקפה את שלה. README.md. התחזות כזו היא טקטיקה קלאסית למנף אמון קיים.
ערפול כקו הגנה ראשון
שתי החבילות טשטשו את הקוד הזדוני שלהן בתוך הקבצים המקוריים. גרפלגו, הקוד המעורפל נמצא בתוך /utils/load_libraries.py. במקרה של מנתח קובצי Cookie מהיר, cookie-loader.min.js הכיל את המטען המוסתר.
שכבת ערפול ראשונית זו משמשת בדרך כלל כדי להפריע לבדיקה מזדמנת וניתוח סטטי. הערפול היה פשוט למדי: דחיסת ZLib חוזרת ונשנית בתוספת קידוד Base64. סוג זה של ערפול מצביע בבירור על כך שהתוכנה מנסה להסתיר את התנהגותה. יחד עם ראיות אחרות, הדבר איפשר ל-Xygeni MEW לסווג את החבילות כתוכנה זדונית פוטנציאלית. במהלך שלב האישור, הסוקרים שלנו הכינו מיד סקריפט הסרת ערפול שחשף את שלב ה-dropper הזדוני בבירור.
אספקת מטען רב-שלבית ונקודת מוצא משותפת
שתי החבילות תפקדו כ"ראשוניות"טפטפות", מה שסידר את הבמה למטען האמיתי. הם חלקו אלמנט חיצוני משותף"זרעכתובת הקובץ:https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
קובץ ה-seed החיצוני הזהה הוא אינדיקציה חזקה לגורם איום משותף. מעניין לציין, שתוכן קובץ ה-seed הזה נראה כמשתני סביבה פשוטים (למשל, JWT_SECRET, PORT), מה שעלול להטעות את הבדיקה לגבי תפקודו בפועל.
רזולוציית C2 דינמית עם DGA
טקטיקה מתוחכמת שנצפתה בחבילות זדוניות אלו היא שימוש באלגוריתם יצירת דומיינים (DGA) כדי לפתור את שרת הפיקוד והבקרה (C2) באופן דינמי. טכניקה זו, שנראית לעתים קרובות במתקפות שרשרת אספקה מתקדמות של תוכנה בשנת 2025, מסתמכת על גיבוב SHA256 הנגזר מתוכן קובץ ה-seed, בשילוב עם ערכים קשיחים אחרים. בכך, תשתית ה-C2 משתנה לעתים קרובות, מה שהופך את הרשימה השחורה המסורתית להרבה פחות יעילה. במקרה זה, גרסת ה-npm השתמשה בערך קבוע של 496AAC7E כחלק מהלוגיקה של ה-DGA שלה.
ביסוס התמדה
שני התוקפים ניסו לבסס נוכחות מתמשכת במערכות שנפגעו. האסטרטגיה שלהם כללה השמטת קובץ, startup.py (עבור PyPi) או startup.js (עבור npm), לתוך ספריות נתוני משתמש נפוצות של גוגל כרום במערכות הפעלה שונות (Windows, Linux, macOS).
ניקוי לאחר ביצוע
כדי למזער עקבות, שני הסקריפטים הזדוניים ביצעו פעולות ניקוי. זה כלל מחיקת קבצי ה-dropper הראשוניים שלהם (load_libraries.py, cookie-loader.min.js) ושינוי קבצי חבילה לגיטימיים (__init__.py, index.js) כדי להסיר את ההפניות לרכיבים שנמחקו כעת.
אינדיקטורים לפשרה בחבילות זדוניות של Python ו-npm
- חבילת PyPIgraphalgo (פורסם על ידי larrytech, 13 ביוני 2025)
- חבילת npmexpress-cookie-parser (במיוחד גרסה 1.4.12)
- גישה לכתובת URL משותפת של Seed:
https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
- שמות קבצים קבועים:
startup.py(פִּיתוֹן)startup.js(JavaScript) - נתיבים קבועים נפוצים (תלויים במערכת ההפעלה)בתוך ספריות נתוני המשתמש של גוגל כרום (למשל,
AppData\Local\Google\Chrome\UserData\Scripts\על חלונות,~/.config/google-chrome/Scripts/על לינוקס וכו').
כיצד להתגונן מפני חבילות זדוניות במתקפות שרשרת אספקה של תוכנה בשנת 2025
גישה מומלצת למפתחים
אירוע זה משמש כמקרה בוחן חשוב בנוף האיומים המתפתח של מתקפות שרשרת אספקה של תוכנה בשנת 2025. הוא מדגיש כיצד חבילות Python זדוניות וחבילות npm זדוניות יכולות להחליק למערכות אקולוגיות מהימנות, ולעתים קרובות להתחמק מגילוי עד שיהיה מאוחר מדי. זו הסיבה שגילוי מוקדם, כלים חכמים והיגיינת מערכת פרואקטיבית הם כעת חלקים חיוניים בכל זרימת עבודה מאובטחת של DevOps. מפתחים מוזמנים לשקול את הדברים הבאים:
סקירת תלות
אם הפרויקטים שלך כללו גרפלגו or מנתח קובצי Cookie מהיר, יהיה זה נבון להמשיך עם הסרתם.
- עבור PyPI:
pip uninstall graphalgo - עבור npm:
npm uninstall express-cookie-parser
היגיינת המערכת
שקול לבצע סריקת מערכת מקיפה. מומלץ גם לבדוק ידנית את נתיבי ספריית נתוני המשתמש הנפוצים של Chrome לאיתור תופעות בלתי צפויות. startup.py or startup.js קבצים.
אמצעי אבטחה פרואקטיביים
- הערכת תלות חדשותקבעו שגרה להערכה יסודית של חבילות חדשות לפני האינטגרציה, תוך התמקדות באלו של מוציאים לאור לא מוכרים.
- שלב כלי אבטחהכלים כמו MEW של Xygeni, יחד עם כלים אחרים לניתוח הרכב תוכנה (SCA) פתרונות, יכולים לספק שכבת הגנה קריטית על ידי זיהוי התנהגויות חשודות ופגיעויות.
- מינימום פריבילגיההפעלת סביבות פיתוח לפי עקרון ההרשאות הנמוכות ביותר יכולה לסייע בהגבלת ההשפעה הפוטנציאלית של פשרה.
- מודעות לרשתניטור תעבורת רשת יוצאת לאיתור חיבורים חריגים יכול לעיתים לחשוף תקשורת C2 שנוצרה על ידי DGA.
מרכיבי מפתח של load_libraries.py (מתוך גרפאלגו)
download_remote_content(): מטפל באחזור קבצים מכתובות URL שצוינו.run_process()מבצע סקריפטים חיצוניים של פייתון בצורה מנותקת, תוך דיכוי הפלט כדי להישאר דיסקרטי.get_output_file_path()קובע את מיקום המערכת האידיאלי עבור קובץ startup.py המתמיד.remove_self(): מנהל את ניקוי הקבצים הזדוניים הראשוניים ושינויי החבילות לאחר ההפעלה.simple_shift_encrypt()/simple_shift_decrypt()פונקציות קריפטוגרפיות מותאמות אישית להסתרת ערוצי תקשורת, חיוניות ליישום DGA.load_libraries(): הפונקציה המרכזית שמתאמת את כל התהליך הרב-שלבי, החל מההורדה הראשונית ועד לביצוע וניקוי המטען הסופיים.
תוצאה
כמו בחבילות זדוניות פוטנציאליות אחרות שזוהו על ידי MEW, חומת האש של התלויות הגנה מיד על משתמשים שיכללו את החבילות הזדוניות הללו בתלויות שלהם. לאחר האישור, עקבנו אחר נהלי ההתראה עבור שני הרישומים, אשר לאחר סקירה הסירו את שתי החבילות.





