NUTS
Нам даны файлы диска C:
, журналы $J
, $MFT
, папки пользователей, prefetch-файлы — в общем, частичный дамп простой пользовательской системы.
Уникальность лабораторной работы в том, что к ней нет никакого описания, поэтому строить вектор атаки и искать необходимые артефакты мы будем, опираясь на имеющиеся вопросы.
Первоначальный доступ
Начать поиск артефактов можно с простого просмотра файлов и каталогов системы. Перейдя в папку Users
, мы увидим, что на хосте существует один пользователь Administrator
. Если проанализировать его домашнюю директорию, то можно понять, что в стандартных папках Documents
, Downloads
, Desktop
, Searches
нет ничего интересного, кроме установщика Visual Studio в загрузках.

Внимание привлекает папка .
с находящимся внутри каталогом пакета PublishIgnor
. Значит, в системе установлен NuGet.
NuGet — это бесплатный пакетный менеджер c открытым исходным кодом, служащий для .NET и .NET Core механизмом совместного использования кода. Официально поддерживается фирмой Microsoft. Другими словами, это система распространения ПО, которая позволяет разработчикам загружать и включать в свои проекты готовые к работе библиотеки .NET. Легко интегрируется с MSBuild и Visual Studio, установщик которого мы заметили ранее.
С имеющимися сведениями попробуем ответить на первый вопрос.
Как Алекс (администратор) интегрировал пакет, экономящий время, в процесс развертывания?
Можем предположить, что пользователь как раз пытался интегрировать PublishIgnor
в Visual Studio. Он мог попробовать установить пакет с помощью cmd.
или powershell.
.
В предоставленных файлах нет никаких журналов логирования Visual Studio или NuGet, однако удалось найти журнал PowerShell вот в такой директории:
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline
В файле ConsoleHost_history.
видно две попытки установки пакета.

Теперь необходимо понять, как предположительно вредоносный пакет попал на хост. Если просмотреть установленное ПО в директории C:\
, можно заметить пару браузеров: Microsoft Edge и Google Chrome. Проверим историю Chrome на наличие интересующих нас ссылок и загрузок.
База данных, хранящая историю поиска и интересные URL, расположена в Google\
. Откроем файл History
утилитой DB Browser.

Видим 19 таблиц, но из них весьма полезными могут оказаться только две. В таблице clusters_and_visits
можно заметить URL страницы установленного пакета PublishIgnor.

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

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

Менеджер пакетов NuGet создает в директории пользователя папку .
, которую мы видели ранее, в нее он сохраняет пакеты. С помощью MFTExplorer мы можем просмотреть $MFT
и узнать время загрузки пакета.

Тайпсквоттинг
Как именно был скомпрометирован пакет? В сети описано много случаев компрометации NuGet самыми разными способами, в том числе при помощи тайпсквоттинга.
info
Typosquatting — это форма атаки типа социальной инженерии. Техника заключается в подмене названий легитимных сайтов, доменов, имен файлов и прочих адресов. В данном случае метод предполагает создание пакетов с именами, очень похожими на популярные и проверенные. Что позволяет легко обмануть разработчиков, которые могут не заметить тонких различий.
Официальный и легитимный пакет называется PublishIgnore
, но найденный на зараженном хосте пакет назван иначе — PublishIgnor
.

На схеме выше показана типичная атака через цепочку поставок. В данном случае разработчик добавляет вредоносный код в пакет A, который затем распространяется вместе с исходным кодом и устанавливается на системы конечных пользователей. Вредоносная программа, получив контроль над системой, выполняет удаленную команду от злоумышленника.
Вот некоторые TTPs по MITRE, используемые злоумышленниками в подобных атаках:
- T1189 — компрометация без установки программного обеспечения;
- T1035 — выполнение службы;
- T1105 – передача инструмента проникновения;
- T1027 — обфусцированные или замаскированные файлы или информация;
- T1564.001 — сокрытие артефактов: скрытые файлы и каталоги.
Закрепление в системе
Обычно такие зараженные пакеты выполняют свои функции при сборке. Здесь же сценарий выполнения вредоносных действий прописан в следующем файле:
C:\Users\Administrator\.nuget\packages\publishignor\1.0.11-beta\tools\init.ps1

Сначала скрипт отключает функции защиты, позже устанавливает соединение с С2-сервером 54.
и скачивает файл uninstall.
. Время вредоносной активности можно посмотреть в журнале PowerShell (не забываем переводить формат времени в UTC).

Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»