June 3, 2025

[HTB_Sherlock] Subatomic Write-Up

Не так давно на HTB (HackTheBox) увидел такой раздел, который называется Sherlock – если большинство заданий на платформе связаны с наступательной безопасностью (Offensive security), то этот раздел полностью посвящён оборонительной безопасности (Defensive security). Там есть категории DFIR, SOC, Cloud, Threat Intelligence и есть категория Malware Analysis, которая меня особенно заинтересовала.

Как только я её увидел — я понял, что все представленные в этой категории задания, мне необходимо решить, т. к. это может быть хорошим стартом для анализа настоящих вредоносов. Парочку лёгких сэмплов, доступ к которым можно получить без платной подписки, я уже разобрал, писать о них нет особого смысла — там ничего интересного нет, всё довольно просто.

Суть заданий категории Malware Analysis проста — вы скачиваете сэмпл, анализируете его и отвечаете на представленные в задании вопросы по типу «какой ip-адрес у C2-сервера, на который малварь пытается стучаться» или «какие файлы малварь создаёт в заражённой системе».

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

Описание у задания такое:

«Forela is in need of your assistance. They were informed by an employee that their Discord account had been used to send a message with a link to a file they suspect is malware. The message read: "Hi! I've been working on a new game I think you may be interested in it. It combines a number of games we like to play together, check it out!". The Forela user has tried to secure their Discord account, but somehow the messages keep being sent. They need your help to understand this malware and regain control of their account! **Warning:** This is a warning that this Sherlock includes software that is going to interact with your computer and files. This software has been intentionally included for educational purposes and is NOT intended to be executed or used otherwise. Always handle such files in isolated, controlled, and secure environments. Once the Sherlock zip has been unzipped, you will find a DANGER.txt file. Please read this to proceed. »

Упоминается какое-то взаимодействие с Discord, это уже звучит очень интересно.

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

В целом, есть просто миллионы гайдов в гугле, но я пройдусь по основным критериям, которым должно отвечать окружение, в котором вы играетесь с вредоносами:

0х0 | Используйте VM. Очевидный совет, думаю не надо объяснять почему. Обычно используется Linux машина и Windows машина, иногда добавляется третья машина, зависит от ситуации. В целом, использование VM для анализа вредоносных сэмплов считается относительно безопасным, НО, есть нюанс и заключается он в том, что малварь в теории может начать атаковать гипервизор и пытаться как-то сбежать из виртуалки. И никакие меры предосторожности вам в таком случае не помогут. Чтобы не быть голословным из недавнего можно почитать про CVE-2025-30712 (https://github.com/google/security-research/security/advisories/GHSA-qx2m-rcpc-v43v). Вероятность того, что к вам на стол попадёт малварь, которая попытается сбежать и более того - сможет это сделать - довольно мала, особенно если вы ковыряете мейнстримные и учебные сэмплы, принципы работы которых уже хорошо известны, а значит, сюрпризов ждать не приходится. Физическая изоляция тут скорее применима к работе с неизвестными сэмплами - вот с ними, действительно, рисковать не стоит.

0х1 | VM не должны иметь доступ в сеть. Исключение - внутренняя сеть для взаимодействия с другими машинами, но весь пул машин, используемых для анализа, должен иметь сетевой доступ только друг к другу. Для симуляции С2-серверов можно использовать, к примеру, InetSIM.

0х2 | Делайте снапшоты всех машин, используемых для анализа. У каждой машины должен быть как минимум снапшот, сделанный до какого-то взаимодействия с вредоносным файлом. Если что-то пойдёт не так - у вас всегда будет возможность быстро откатить состояние системы назад, это очень удобно.

0х3 | Соблюдайте осторожность с общими папками. В идеале никаких общих с хостом папок, но если всё же решились - режим read-only строго обязателен.

0х4 | FlareVM классная штука.

Пожалуй, основные моменты рассказал, советую почитать гайды в гугле - там больше деталей.

Теперь можно вернуться к заданию.

Файл имеет формат .exe и судя по всему является установщиком

NSIS - Nullsoft Scriptable Install System

0х0 | Выяснить ImpHash файла.

В парадигме Malware Analysis, малварь могут модифицировать или пересобрать и тогда хэш-сумма вредоносного файла поменяется, что приведёт к тому, что попытки детектировать этот файл, сравнивая его с хэш-суммами уже известных сэмплов, ни к чему не приведёт. Но можно собрать информацию о том, что импортирует малварь в процессе работы, захэшировать эти данные и получится ImpHash (Import Hash) – теперь, если один и тот же вредоносный файл попытаются как-то модифицировать с целью изменить его хэш-сумму — он всё равно будет обнаружен, потому что ImpHash не поменяется.

Чтобы посмотреть ImpHash можно использовать скрипт на Python следующего вида:

А ещё можно в Virus Total закинуть хэш-сумму файла (MD5 или SHA256) и он тоже может выплюнуть ImpHash

Предварительно стоит установить через pip модуль pefile.

Запускаем и ловим ImpHash файла:

0х1 | Посмотреть на цифровой сертификат файла и найти что содержится в SpcSpOpusInfo.

SpcSpOpusInfo — это структура, которая содержит поле programName

Можно открыть peStudio и глянуть это поле.

0х2 | Выяснить GUID, который используется в процессе установки.

GUID это уникальный идентификатор который используется для идентификации объектов или сущностей в системе.

Вероятно, GUID должен быть захардкожен где-то в инсталляторе, значит надо в него заглянуть и посмотреть что там может быть полезного. Вообще, инсталлятор NSIS (Nullsoft Scriptable Install System) можно распаковать с помощью 7-Zip и посмотреть что внутри. Но есть кое-что, что 7-Zip не покажет - .nsi файлы. Файлы с этим расширением являются скриптами для NSIS и надо полагать содержат параметры установки. Можно предположить, что там получится найти GUID.

7-Zip умел доставать .nsi с версии 9.34 и потом эту фичу убрали в версии 15.06 из-за «проблем с безопасностью кода».

В общем-то вменяемого user-frendly инструментария практически нет — он либо без каких-то инструкций, либо требует чрезмерно много мучений для запуска.

Самый нормальный вариант — установить 7-Zip 15.05 и он отобразит .nsi скрипт в архиве.

Открываем декомпилированный скрипт, пробегаемся по строкам с каталогами реестра и находим GUID.

0х3 | Прочитать package.json

package.json должен находиться где-то внутри приложения.

Можно распаковать содержимое установщика и глянуть какие файлы там есть.

Искомого файла нет, но есть упоминание фреймворка Electron, который используется для создания десктопных приложений с использованием JS, HTML и CSS, поэтому то, что приложение написано на JS - вполне похоже на правду. В папке resources есть файл app.asar – это архив, в котором лежат сурсы приложения.

Теперь надо распаковать этот архив и для того, чтобы это сделать, в первую очередь нужен Node.js

Затем, через npm необходимо установить пакет asar, который позволит извлечь файлы из .asar архива. (npm install -g asar)

После чего отправляемся в папку resources и в ней выполняем команду asar extract app.asar app, в результате чего в этой директории создаётся папка app, которая содержит файлы приложения — теперь можно их исследовать и package.json находится там, в нём можно найти поле license и его содержимое, которое необходимо указать в качестве ответа.

0х4 | Выяснить доменное имя C2-сервера, с которым малварь устанавливает соединение

В файлах, которые удалось вытащить с помощью asar также имеется файл app.js, это, надо полагать, код приложения, но он обфусцирован и нечитабелен.

Деобфускаторы, к сожалению, не сделали код более читабельным, поэтому остаётся вариант отслеживать поведение приложения в динамике. В целом, можно начать с просмотра трафика.

Теперь мы знаем доменное имя C2-сервера и можем впоследствии пометить его как вредоносное. Ещё один пункт в копилку IOC.

0х5 | Выяснить как малварь проверяет внешний IP-адрес заражённой машины

Теперь можно попробовать отследить выполнение кода в динамике через VSCode – возможно получится увидеть что-то интересное.

Но для того, чтобы это сделать, необходимо переустановить модули primno и sqlite3, потому что скорее всего будут проблемы с версиями.

Выполняем команды:

del .\node_modules\@primno\

del .\node_modules\sqlite3

npm install @primno/dpapi

npm install @primno/sqlite3

При попытке установить sqlite3 npm может ругаться на отсутствие инструментария для C++ в MVSC, я долго пытался это исправить, но не вышло. Скажу только, что на FlareVM такой проблемы нет.

FlareVM это некая надстройка над Windows (имеется в виду VM на которой вы будете запускать вредоносные семплы), которая позволяет сразу забить систему необходимыми инструментами, пакетами итд итп, потом вы просто делаете снапшот начального состояния и спокойно работаете.

В общем, запускаем код в VSCode и пытаемся сразу остановить выполнение, если вам повезло и вы попали в нужное место, то вы должны увидеть в стеке вызовов интересный пунктик под названием <anonymous> eval – здесь код приобретает читабельный вид и можно пробежаться по нему, поискав какие-нибудь артефакты.

Сразу можно подметить функции, связанные с Discord и браузером, значит малварь копается ещё и в браузере.

В строке 177 находим ответ:

0х6 | Выяснить на какой именно эндпоинт С2-сервера стучится малварь

Ответ на этот вопрос можно найти в начале файла

0х7 | Выяснить какой ключ используется для отправки ID пользователя C2-сервера в теле отправляемых web-запросов

Полистав код, этот момент тоже не составляет труда обнаружить

0х8 | Необходимо найти список хостнеймов, с которыми программа сверяет хостнейм на той системе, где она запущена

Согласно заданию, есть хостнейм, начинающийся на „arch“ — надо его найти.

Всё это располагается в самом начале.

0х9 | Необходимо найти список процессов, наличие которых программа проверяет в системе

Можно увидеть, что малварь пытается убить конкретные процессы, часть из них связана с VM, также можно увидеть некоторый инструментарий, который используют при анализе вредоносного ПО.

Ответом будет элемент списка, который оканчивается на „y“

0х10 | Выяснить как будет вести себя программа, если она не обнаружит в системе cmd.exe

Можно увидеть, что программа проверяет наличие cmd.exe по его дефолтному пути.

Если он не будет найден, то малварь затянет свою командную строку и разместить её в %USERPROFILE%\Documents\cmd.exe

0х11 | Выяснить как малварь находит куки для Firefox

Используется команда 'where /r . cookies.sqlite'

0х12 | Выяснить какой из модулей Discord подвергается модификации в процессе работы программы

Эту функцию тоже довольно просто найти

Вот, собственно, и всё. Впечатления от сэмпла не самые положительные (а кто обещал, что будет легко), но это был полезный опыт. Дальше буду пытаться разбирать сэмплы с уровнем сложности Hard/Insane.