
Дослідник виявив 10 000 репозиторіїв на GitHub, які поширюють троян
Розробник, який побачив, що копії його власного проєкту використовують для поширення зловредів, проаналізував публічні дані про події GitHub і знайшов 10 000 репозиторіїв із трояном у zip-архіві.
Розробник, який виявив, що копії його власного проєкту на GitHub використовують для поширення зловредів, опублікував список із 10 000 репозиторіїв, які, за його словами, поширюють троян через посилання, додане до файлу readme. Репозиторії мають різні назви й різних контриб'юторів і не є форками один одного, але їхня схема достатньо стала, щоб її знаходив скрипт.
Дві копії та zip-архів
Розслідування, опубліковане на orchidfiles.com, почалося з пошуку. Шукаючи один зі своїх проєктів, автор знайшов свій репозиторій у результатах Google — а в Bing репозиторій з іншого акаунта з тією ж назвою й описом, повною копією історії комітів і його іменем серед контриб'юторів. За годину до того з'явився коміт, який додав у readme посилання на zip-архів. Другий такий репозиторій знайшовся так само, коли автор переглядав теги GitHub.
Спостерігаючи за обома, він побачив, що кожні кілька годин останній коміт видаляють і завантажують ідентичний знову; єдина його зміна — посилання на архів. Він повідомив про репозиторії підтримку GitHub, два тижні не отримував відповіді, а приблизно через місяць йому повідомили, що їх видалено.
Від 16 мільйонів push-подій до 10 000 репозиторіїв
Щоб оцінити масштаб кампанії, він звернувся до GH Archive, який публікує всі події GitHub за будь-який день, і відфільтрував дані за п'ять днів, залишивши push-події. З 16 мільйонів push-ів близько 3 000 репозиторіїв оновлювалися кожні кілька годин. Оскільки події не вказують, які саме файли змінилися, для кожного кандидата потрібні були додаткові запити до GitHub API — за ліміту 5 000 запитів на годину на токен.
Фільтри на коміти людей, а не ботів, на проміжок понад місяць перед останнім комітом і на більш ніж одного контриб'ютора скоротили список до 14 репозиторіїв. Цей результат був хибним: насправді всі 14 оновилися 20 годин тому, тобто умова «оновлення кожні кілька годин» відкидала більшу частину кампанії. Він також помітив репозиторії, чий останній коміт — усі з назвою «Update README.md» — містив посилання на zip, але жодних змін. Розширення фільтра до репозиторіїв з 1–24 оновленнями на добу дало 40 000 кандидатів; 10 000 із них точно відповідали схемі.
Що містить архів
Кожен zip містить чотири файли: командний скрипт — Application.cmd або Launcher.cmd; виконуваний файл із назвою loader.exe, luajit.exe чи подібною; файл даних; і lua51.dll. Якщо надіслати посилання на архів до VirusTotal, виявлень немає, тоді як сам файл уже показує троян.
За гіпотезою автора, перезапис комітів може допомагати обходити перевірки безпеки GitHub, клонування нових репозиторіїв піднімає їх у видачі за рідкісними запитами, а копіювання історії комітів і контриб'юторів має створювати довіру. Деякі з цих репозиторіїв існують понад рік і не виявляються автоматично. Скрипт для пошуку та повний список опубліковано на GitHub під назвою Git Malware Finder.