Перейти к основному содержимому
  1. Purpleshift/

Атакуем исследователей безопасности через Visual Studio

·3 минут·

Зачастую злоумышленники, чтобы скомпрометировать хост специалистов по ИБ, создают “вредоносные” PoC, которые, помимо заявленного функционала, имеют в себе и скрытый. Чаще всего подобная техника направлена на эксплуатацию различных IDE-инструментов. Их можно разделить на несколько векторов:

  • PreBuild/PostBuild Events
  • Design-time target execution
  • COM, Type Libraries

Более подробно об этих техниках можно почитать в данной статье.

Относительно недавно появилась ещё одна интересная техника по эксплуатации VS IDE. Направлена она в первую очередь на SUO-файл. Это файл параметров пользователя решения, который содержит в себе различные настройки/пресеты (положение и состояние окон, настройки отладки, настройки для проектов и т.д.). Сам файл создается автоматически при запуске или создании любого проекта и находится в скрытой папке проекта .vs по следующему пути:

...\.vs\[Project name]\v17\.suo

Чтобы понять, как все это работает, давайте посмотрим внутрь библиотеки Microsoft.VisualStudio.dll:

Содержимое библиотеки
Содержимое библиотеки

Здесь мы видим, что для загрузки VsToolboxService (что находится непосредственно в suo-файле) используется функция LoadOptions, которая в свою очередь использует метод BinaryFormatter.Deserialize. Именно здесь и рождаются риски, связанные с десериализацией. Забавно, что сами представители Microsoft в своем блоге не рекомендуют использовать подобные методы обработки данных - однако сами же его и используют:

Предупреждение

Всё это приводит к тому, что при запуске проекта VS (даже такого, в котором не содержится ни строчки кода), будет запускаться пейлоуд, что содержится в SUO-файле. Сам же файл будет перезаписываться новыми пресетами настроек пользователя, что может усложнять в дальнейшем расследование цепочки атаки, если не знать подобные сведения. PoC подобной техники можно найти здесь.

Ловим малвару

Чтобы обнаружить и предотвратить такую атаку ещё до начала её действия, нужно рассмотреть этот пейлоуд в деталях. SUO имеет OLE-структуру, где наc интересует содержание элемента VsToolboxService:

Содержание элемента VsToolboxService

Внутри этого элемента мы как раз и можем обнаружить вредоносный пейлоуд, закодированный в base64:

Закодированный пейлоуд

Для детектирования такого подозрительного файла можно воспользоваться следующим YARA-правилом:

rule suo_deserialization 
{
    strings:
        $header = { D0 CF 11 E0 A1 B1 1A E1 } 
        $s = "VsToolboxService" wide
        $a1 = "AAEAAAD"
        $a2 = "ew0KICAgICckdHl"
        $a3 = "yAoFZNmAU3l"
        $a4 = "kscDYs0KCcYAAAP"
        $a5 = "PFByb3BlcnR5R3J"
        $a6 = "PD94bWwgdm" 
    condition:
       $header at 0 and $s and any of ($a*)
}
 

При применении данного правила на практике мы смогли обнаружить следующий интересный файл на VirusTotal:

Подозрительный файл на VirusTotal

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

Код малвары

Данный файл является малварным и относится к семейству Backdoor.MSIL.XWorm. Запустив его в песочнице, можно увидеть его поведение - он закрепляется в системе через задачи в планировщике и выполняется каждую минуту:

Схема работы малвары

Кроме того, малвара общается с различными pastebin-сервисами в ожидании команд от атакующих (T1102):

Обращение малвары к сервисам

Чтобы обезопасить себя от подобного рода атаки, рекомендуем воспользоваться нашим YARA-правилом, а также постоянно удалять “ненужные” файлы - такие, как SUO (их отсутствие никак не повредит вашему проекту).

Помимо этого, стоит постоянно проводить код-ревью всего, что содержится в проекте, скачанном из недоверенных источников. А также, следуя указаниям в блоге Microsoft, настроить “trusted location” для VS IDE.