В настоящий момент всё большее распространение получает вредоносное программное обеспечение, соответствующее следующим двум условиям:
- Вредоносное ПО использует легальные инструменты операционных систем и средств администрирования.
- На жестких дисках тело вредоносной программы присутствует на протяжении короткого времени, необходимого для деобфускации программного кода и запуска программы. После этого тело удаляется с жесткого диска и хранится только в контексте оперативной памяти.
Примером подобного вредоносного ПО может служить недавно нашумевший Nodersok. Сейчас есть неплохие исследования от компаний Microsoft и Cisco. В статье мы попробуем рассмотреть основные этапы работы данного вредоносного ПО и описать, каким образом можно обнаружить его активность.
Первичное заражение
Согласно проведенным исследованиям, заражение начинается с загрузки вредоносного файла HTA. При этом не стоит надеяться, что это будет стандартное письмо с ссылкой, когда вам могут помочь примитивные запреты передачи ссылок или создание «белых списков». В нашей практике встречались ситуации, когда заражение инфраструктуры происходило через ресурс контрагента или партнера. Например, мы можем вспомнить случай, когда вредоносный файл был получен с сайта клиники, в которой обслуживались полисы ДМС клиентов.
Что же касается самого файла HTA, данный формат файлов был разработан для «помощи» в администрировании и управлении инфраструктурой, но, как и в случае с SMB, разработчики не озаботились вопросами безопасности. Сам по себе файл представляет из себя специально подготовленный HTML‑документ, в котором незначительно изменяется один из тегов заголовка, но при этом остается доступным весь функционал скриптовых языков в рамках реализации HTML. Стоит учитывать, что файл выполняется не в контексте браузера, в котором давно внедрены функции самозащиты. В рекомендациях Microsoft указывается, что стоит внимательно относиться к неизвестным файлам HTA и использовать только те, что были получены из доверенных источников. Поэтому первой нашей рекомендацией будет регистрация подобных файлов на жестких дисках и в вашей локальной сети. Делать это можно следующими способами:
На базе IDS
alert tcp $External_net any -> $Home_net any (msg:"Dowload HTA File from External networks, posible exploit"; flow:to_client,established; content:"<hta:application"; nocase; classtype:misc-activity; sid:40000;rev:1)
На базе Sysmon
…
<span name="create critical file" grouprelation="or">
<span onmatch="include">
…
<span name="critical file type" condition="end with">.hta</span>
…
</span>
</span>
…
Кроме того, стоит учитывать, что данные файлы могут быть легальными, часто их нельзя однозначно определить как угрозу. Например, HTA-файлами являются некоторые файлы помощи. Однако получение подобного файла из произвольного участка глобальной сети рекомендуется рассматривать как индикатор угрозы.
Продвижение
После того, как файл загрузится, он попытается при помощи JavaScript выполнить ряд действий:
- Загрузить очередной модуль (в нашем случае xsl или JS).
- Выполнить скрипт PowerShell.
Данные действия приведут к загрузке еще нескольких файлов, среди которых будет зашифрованный на базе RC4 основной код, необходимый для этапа закрепления, и обфусцированный ключ для дешифровки данного кода.
Что мы можем сделать на данном этапе? Начнем с того, что самый первый скрипт файла HTA запустится от процесса mshta.exe. На данном этапе мы можем отслеживать создание дочернего процесса powershell.exe или cmd.exe от родительского процесса mshta.exe. Cделать это можно либо через стандартное событие Windows Security Log Event ID 4688, либо через событие Sysmon Event ID 1 (предварительно не забыв настроить фильтры). В данных событиях вы всегда будете получать «имя процесса» (NewProcess Name или Image) и «имя родительского процесса» (Creator Process Name или ParentImage).
Кроме того, можно отследить сетевую активность процесса mshta.exe, направленную на внешние сети (путем контроля полей Image и DestinationIp события Sysmon Event ID 3). Стоит отметить, что если при отслеживании сетевой активности процесса mshta.exe возможны ложноположительные срабатывания (например, Sysmon может пометить как подозрительную активность вполне легальный процесс, когда файл справки динамически подгружает необходимый ему контент), то при отслеживании создания дочерних процессов ложных срабатываний будет намного меньше, за исключением случаев, когда системный администратор решит автоматизировать какой-либо процесс через использование HTA и скриптов в его теле (что само по себе странно, так как есть способы проще и удобнее). Одновременное срабатывание обоих этих событий будет говорить о злонамеренности действий с вероятностью, стремящейся к 1.
Таким образом, для обнаружения вредоносного ПО можно использовать, например, такое правило:
<
title: Nodersok_1
status: experemintal
description: start malware nodersok
references:
- https://www.microsoft.com/security/blog/2019/09/26/bring-your-own-lolbin-multi-stage-fileless-nodersok-campaign-delivers-rare-node-js-based-malware/
author: iz-soc
date: 2019/09/29
logsource:
product: windows
detection:
script:
EventID:
- 1
- 4688
ParentImage|reg: ‘(?i).*?mshta\.exe.*’
Image|reg:’ (?i).*?(cmd|powershell)\.exe.*’
Netconection:
EventID: 3
Image: ‘(?i).*?mshta\.exe.*’
Condition: script and Netconection
falsepositive:
- Unknown
Level: critical
>
Выполнение скрипта PowerShell, к сожалению, однозначно определить не выйдет. Все дальнейшие действия вредоносного ПО уже не будут выглядеть подозрительно, так как будут основываться на использовании легальных инструментов и «чистого» ПО (исключение будут составлять передаваемые им инструкции, но их мы скорее всего не увидим).
В исследовании Microsoft рассказывается об очень интересной особенности JS‑скриптов, которая позволяет вредоносной программе запустить PowerShell и при этом оставаться максимально незаметной:
a.Enviroment(‘Process’)(“deadbeff”) = “iex([Text.Encoding]::ASCII…
a.Run(“\””+p=”\” –Enc LgAoACIAewAwAH0AewAxAH0AIgAgAC0AZgA…
По сути эти две строчки говорят о следующем:
- Вредоносный скрипт PowerShell разработчики скрывают в переменных среды окружения (в данном случае используется переменная deadbeff, но злоумышленник может использовать и другие имена).
- Запуск производится закодированной командой.
Учитывая эту особенность, если есть возможность помещать файлы на автоматическую проверку, можно использовать, например, такое YARA‑правило:
rule AnomalyPSexecution
{
string:
$System_var_create = /\.Enviroment\(\'Process\'\)\(\"[\w\d]+\"\)\s?=\s?/ nocase
$Obfuscation_Start = /\.Run\(\"\\\"\"\+[\w\d]+\s?=\"\\\"\s+?[–-]Enc\s+?\w{10,}.*?\)/ nocase
condition:
$System_var_create and $Obfuscation_Start in ($System_var_create..filesize)
}
Однако точность данного метода не является достаточно высокой, чтобы можно было полностью полагаться на него.
Всё вышеописанное показывает, каким образом можно обнаружить вторжение в систему вредоносного программного обеспечения типа Nodersok. При этом стоит обратить внимание на то, что мы в своей работе стараемся не привязываться к конкретным паттернам в рамках обнаружения вредоносной активности. В ходе анализа всегда необходимо помнить о том, что всё, что может быть изменено, – будет изменено. Таким образом, прежде всего стоит обращать внимание на нетипичные модели поведения исследуемого ПК.
В следующей части мы разберем способы обнаружения вредоносной активности уже после заражения.