
חוקר איתר 10,000 מאגרים ב-GitHub שמפיצים תוכנת טרויאן
מפתח שגילה כי עותקים של הפרויקט שלו משמשים להפצת תוכנה זדונית ניתח את נתוני האירועים הפומביים של GitHub ואיתר 10,000 מאגרים בחשבונות שונים שמפיצים טרויאן דרך קישור לקובץ ZIP.
מפתח שגילה כי עותקים של הפרויקט שלו ב-GitHub משמשים להפצת תוכנה זדונית פרסם רשימה של 10,000 מאגרים שלטענתו מפיצים תוכנת טרויאן דרך קישור שנוסף לקובץ ה-readme שלהם. למאגרים שמות ותורמים שונים והם אינם forks זה של זה, אך הדפוס שלהם עקבי מספיק כדי שסקריפט ימצא אותם.
שני עותקים וקובץ ZIP
החקירה, שפורסמה בבלוג orchidfiles.com, החלה בחיפוש. כשחיפש את אחד הפרויקטים שלו, מצא המחבר את המאגר שלו בתוצאות של Google — ובבינג מאגר בחשבון אחר, עם אותו שם ותיאור, העתק מלא של היסטוריית הקומיטים, ושמו שלו ברשימת התורמים. שעה קודם לכן נדחף קומיט שהוסיף ל-readme קישור לקובץ ZIP. מאגר שני נמצא באותה דרך בזמן שגלש בתגיות של GitHub.
כשעקב אחרי שניהם, גילה שכל כמה שעות נמחק הקומיט האחרון ונשלח שוב קומיט זהה; השינוי היחיד בו הוא הקישור לארכיון. הוא דיווח על המאגרים לתמיכה של GitHub, לא קיבל תשובה במשך שבועיים, וכעבור כחודש נמסר לו שהם הוסרו.
מ-16 מיליון דחיפות ל-10,000 מאגרים
כדי לאמוד את היקף הקמפיין הוא פנה ל-GH Archive, שמפרסם את כל האירועים ב-GitHub לפי יום, וסינן נתונים של חמישה ימים לאירועי push בלבד. מתוך 16 מיליון דחיפות, כ-3,000 מאגרים התעדכנו כל כמה שעות. מכיוון שהאירועים אינם מתעדים אילו קבצים השתנו, כל מועמד דרש קריאות נוספות ל-API של GitHub — במגבלה של 5,000 בקשות בשעה לכל טוקן.
מסננים לקומיטים של בני אדם ולא של בוטים, לפער של יותר מחודש לפני הקומיט האחרון וליותר מתורם אחד צמצמו את הרשימה ל-14 מאגרים. התוצאה הזו הייתה שגויה: בפועל כל 14 עודכנו 20 שעות קודם לכן, כלומר תנאי "עדכון כל כמה שעות" פסל את רוב הקמפיין. הוא גם הבחין במאגרים שהקומיט האחרון שלהם — כולם בשם "Update README.md" — הכיל קישור ל-ZIP אך ללא שינויים כלל. הרחבת המסנן למאגרים שמתעדכנים בין פעם ל-24 פעמים ביום הניבה 40,000 מועמדים; 10,000 מהם התאימו לדפוס בדיוק.
מה יש בארכיון
כל קובץ ZIP מכיל ארבעה קבצים: סקריפט פקודה — Application.cmd או Launcher.cmd; קובץ הרצה בשם loader.exe, luajit.exe או דומה; קובץ נתונים; ו-lua51.dll. שליחת הקישור לארכיון ל-VirusTotal אינה מעלה שום זיהוי, ואילו שליחת הקובץ עצמו חושפת את הטרויאן.
לפי השערת המחבר, כתיבה מחדש של קומיטים עשויה לעזור לעקוף את בדיקות האבטחה של GitHub, שכפול מאגרים חדשים ממקם אותם גבוה בתוצאות חיפוש למונחים נדירים, והעתקת היסטוריית הקומיטים והתורמים נועדה לבנות אמון. חלק מהמאגרים האלה קיימים יותר משנה ואינם מזוהים אוטומטית. סקריפט לאיתור והרשימה המלאה פורסמו ב-GitHub בשם Git Malware Finder.