
Обфускатор PowerShell

Invoke-Obfuscation — это обфускатор команд и сценариев PowerShell, совместимый с PowerShell v2.0+.
Осенью 2015 года я решил заняться исследованием гибкости языка PowerShell и начал каталогизировать различные способы выполнения ряда распространённых методов, которые большинство злоумышленников используют на регулярной основе.
Изначально сосредоточившись на закодированных командах и синтаксисах удалённой загрузки (download cradle), я обнаружил, что различные escape-символы, не препятствующие выполнению команды, сохраняются в аргументах командной строки — как в запущенном процессе, так и в журналах событий Security EID 4688 и Sysmon EID 1. Это подтолкнуло меня к систематическому поиску способов обфускации каждого вида «токена», встречающегося в любой команде или сценарии PowerShell.
Затем я исследовал более скрытые методы обфускации на уровне строк, различные методы кодирования/шифрования (например, ASCII/hex/octal/binary и даже SecureString) и, наконец, методы запуска PowerShell для абстрагирования аргументов командной строки от powershell.exe и переноса их в родительский и даже прародительский процесс.
Злоумышленники и массовые вредоносные программы начали использовать крайне примитивные методы обфускации, чтобы скрыть большую часть команды от аргументов командной строки powershell.exe. Я разработал этот инструмент, чтобы помочь Blue Team моделировать обфусцированные команды на основе того, что, как мне известно, синтаксически возможно в PowerShell 2.0–5.0, чтобы они могли тестировать свои возможности обнаружения этих методов.
Единственная цель инструмента — разрушить любые предположения, которые у нас, защитников, могут быть относительно того, как команды PowerShell могут выглядеть в командной строке. Я надеюсь, что это побудит Blue Team переключиться на поиск индикаторов обфускации (Indicators of Obfuscation) в командной строке, а также обновить журналирование PowerShell, включив журналирование модулей, ScriptBlock и транскрипции, поскольку эти источники упрощают большинство аспектов обфускационных методов, создаваемых этим инструментом.
Хотя все уровни обфускации реализованы в виде отдельных сценариев, большинству пользователей будет удобнее всего использовать функцию Invoke-Obfuscation для исследования и визуализации методов обфускации, которые в настоящее время поддерживает эта среда.
Исходный код Invoke-Obfuscation размещён на Github; вы можете загрузить, форкнуть и просмотреть его из этого репозитория (https://github.com/danielbohannon/Invoke-Obfuscation). Сообщайте об ошибках или запросах новых функций через баг-трекер Github, связанный с этим проектом.
Для установки:
Import-Module ./Invoke-Obfuscation.psd1
Invoke-Obfuscation
Invoke-Obfuscation распространяется под лицензией Apache 2.0.
v1.0 — 2016-09-25 DerbyCon 6.0 (Луисвилл, Кентукки, США): ПУБЛИЧНЫЙ выпуск Invoke-Obfuscation.
v1.1 — 2016-10-09 SANS DFIR Summit (Прага, Чехия): Добавлена функция переупорядочивания с помощью оператора -f для всех применимых функций обфускации TOKEN. Также добавлены дополнительные варианты синтаксиса для установки значений переменных.
v1.2 — 2016-10-20 CODE BLUE (Токио, Япония): Добавлена обфускация токена TYPE (прямое приведение типов с опциями обфускации строк для имени типа).
v1.3 — 2016-10-22 Hacktivity (Будапешт, Венгрия): Добавлены два новых LAUNCHER: CLIP+ и CLIP++. Также добавлен дополнительный (и более простой) синтаксис преобразования массива символов для всех функций ENCODING, не требующий For-EachObject/% .
v1.4 — 2016-10-28 BruCON (Гент, Бельгия): Добавлена новая функция ENCODING BXOR. Также улучшена рандомизация регистра для всех компонентов всех функций ENCODING, а также для флагов выполнения PowerShell для всех LAUNCHER. Наконец, добавлена сокращённая опция -EP для -ExecutionPolicy во все LAUNCHER, а также целочисленное представление флага выполнения PowerShell -WindowStyle: Normal (0), Hidden (1), Minimized (2), Maximized (3).
v1.5 — 2016-11-04 Blue Hat (Редмонд, Вашингтон, США): Добавлен LAUNCHER WMIC с некоторой рандомизацией аргументов командной строки WMIC.
v1.6 — 2017-01-24 Blue Hat IL (Тель-Авив, Израиль):
v1.7 — 2017-03-03 nullcon (Гоа, Индия):
v1.8 — 2017-07-27 Black Hat (Лас-Вегас, Невада, США):
v1.8.1 — 2017-12-19:
v1.8.2 — 2018-01-04: