
Арсенал PowerShell для специалистов по безопасности
[!IMPORTANT]
Этот репозиторий теперь заархивирован. Хотя это было интересное путешествие, я думаю, что PSArmoury утратил свою полезность.
PowerShell Armoury предназначен для пентестеров, «вставьте-сюда-цвет»-тимеров и всех остальных, кто использует разнообразные PowerShell-инструменты во время своих заданий. Он позволяет загрузить и хранить все ваши любимые PowerShell-скрипты в одном обфусцированном файле.
Вам не нужно возиться с ручным обновлением Rubeus, PowerView и т.д. Просто создайте файл конфигурации один раз или используйте стандартный, включённый в инструмент. Отныне вам нужно лишь запустить «New-PSArmoury» перед следующим заданием. Кроме того, PSArmoury обфусцирует ваш код и содержит встроенный обход AMSI. Модульная конструкция должна упростить вам изменение кода обхода или обфускации в случае обнаружения.
Текущая версия PSArmoury отдаёт предпочтение модульной конструкции.
New-PSArmoury.ps1
PSArmoury.json
utilities
ConvertTo-Powershell.ps1
Invoke-Shuffle.ps1
modules
evasion.ps1
obfuscation.ps1
Код разделён на основной скрипт-генератор с именем New-PSArmoury.ps1, который вы и запускаете. Код для обхода, обфускации и деобфускации хранится в отдельных файлах .ps1 в каталоге modules. Эти отдельные файлы вызываются основным скриптом и должны упростить изменение конкретных функций (например, обхода AMSI).
Помимо каталога modules, существует также каталог utilities. Здесь вы найдёте отдельные скрипты, которые могут быть полезны в определённых сценариях.
Путь к каталогу modules по умолчанию — .\modules, где точка относится к текущему рабочему каталогу вашей оболочки. Вы можете изменить путь к каталогу modules, используя аргумент -ModulesDirectory команды New-PSArmoury.
Однако имена самих файлов скриптов жёстко закодированы в основном скрипте и всегда должны называться:
Давайте подробнее рассмотрим эти два файла.
Этот скрипт должен содержать код, предназначенный для обхода того, что вы намереваетесь обойти. По умолчанию он содержит широко известный обход AMSI (спасибо amsi.fail). Обратите внимание, что:
Этот скрипт должен содержать код, используемый для обфускации и деобфускации. Стандартный obfuscation.ps1 использует шифрование RC2. Примеры готовых к использованию:
Обратите внимание, что TEMPLATE_obfuscation_empty.ps1 на самом деле ничего не делает и служит шаблоном для создания собственной функции.
Если вы хотите использовать любой из них, просто переименуйте его в «obfuscation.ps1» и удалите файл по умолчанию.
Если вы хотите создать настраиваемую версию, имейте в виду следующие моменты, касающиеся обфускации:
И не забудьте учесть следующие моменты, касающиеся деобфускации:
Каталог utilities содержит полезные отдельные скрипты.
Файл конфигурации должен быть допустимым JSON, состоящим из одного массива с одним или несколькими объектами, где каждый объект интерпретируется как один источник скрипта. Каждый объект имеет следующие атрибуты:
Name (обязательный)
Имя по вашему выбору для идентификации скрипта, включённого в этот объект. Это просто для справки.
URL (обязательный)
Расположение для получения содержимого скрипта. Это может быть URL веб-ресурса (https://), локальный путь (C:) или сетевой ресурс (\...). URL передается в Net.Webclient или Get-Item PowerShell соответственно. Таким образом, практически любой формат, который один из них может обработать по умолчанию, должен работать.
Type (обязательный)
Это даёт подсказку о расположении скрипта для создателя арсенала. Существует три допустимых типа:
FileInclusionFilter (необязательный)
Будет обрабатываться только для объекта типа «GitHub». Сравнивается с полным именем файла с помощью оператора сравнения PowerShell «like», поэтому имейте в виду, что вам нужно включить подстановочные знаки самостоятельно. Не забудьте включить звёздочку (*), если хотите сопоставить часть имени файла. «*.ps1» означает все файлы, заканчивающиеся на «.ps1», а «.ps1» означает просто «.ps1».
Вы не обязаны включать фильтр, но если вы это сделаете, его нужно использовать. Пустой InclusionFilter означает отсутствие файлов.
FileExclusionFilter (необязательный)
Как и InclusionFilter, но, очевидно, наоборот. Исключение имеет приоритет.
Подробнее см. встроенную справку PowerShell (man -full New-PSArmoury).
-Path
Путь к вашему новому файлу арсенала. По умолчанию «.\MyArmoury.ps1».
-FromFile
Загружает ваши PowerShell-скрипты непосредственно из локальной папки или файла, и вам не нужно предоставлять файл конфигурации.
-Config
Путь к вашему JSON-файлу конфигурации. Ознакомьтесь с образцом, поставляемым с этим скриптом, для идей.
-ModulesDirectory
Путь к каталогу modules. По умолчанию «.\modules». Если используется ModulesDirectory, параметры EvasionPath и ObfuscationPath использовать нельзя.
-EvasionPath
Путь к скрипту обхода. Если используются EvasionPath и ObfuscationPath, параметр ModulesDirectory использовать нельзя.
-ObfuscationPath
Путь к скрипту обфускации. Если используются EvasionPath и ObfuscationPath, параметр ModulesDirectory использовать нельзя.
-ValidateOnly