Является ли PowerShell идеальным инструментом для создания вредоносных программ?

Опубликовано: 5 Апреля, 2023
Является ли PowerShell идеальным инструментом для создания вредоносных программ?

Я никогда не забуду, что был в Редмонде, когда Microsoft представила миру PowerShell. PowerShell, который в то время назывался Monad, должен был стать новым инструментом администрирования для Windows. Во время вопросов и ответов я сказал собравшимся, что, несмотря на свой потенциал в качестве инструмента управления системой, Monad звучит как воплощение мечты автора вредоносных программ. Затем я спросил, что делает Microsoft, чтобы не допустить эксплуатации Monad. Должен признаться, что я не могу вспомнить полученный ответ, если не считать того факта, что он содержал расплывчатые ссылки на встроенную систему безопасности.

После этого пресс-брифинга прошло около десяти лет, и Monad превратилась в Windows PowerShell, встроенную в каждую современную операционную систему Windows. Однако мой вопрос все еще остается: что должно помешать использованию PowerShell для создания вредоносных программ?

Если бы вы задали этот вопрос Майкрософт, ответ, вероятно, касался бы политик выполнения. Для непосвященных политики выполнения — это механизм PowerShell, предназначенный для предотвращения запуска несанкционированного сценария.

Политики выполнения, кажется, работают очень хорошо. Хотя я не смог выделить много времени, я потратил около получаса, пытаясь обойти политики выполнения PowerShell. К сожалению или к счастью, в зависимости от того, как вы на это смотрите, мне не удалось нарушить политику выполнения. Казалось бы, вредоносный сценарий PowerShell просто не может работать, если только политика выполнения не разрешает ему это делать. Так это конец истории, верно? Не совсем. Меньше часа у меня ушло на то, чтобы придумать еще один метод, позволяющий запустить вредоносный PowerShell-скрипт.

Прежде чем рассказать вам, как я это сделал, я хочу сделать шаг назад и ответить на вопрос, лежащий в основе моего подхода. Зачем использовать PowerShell? Почему бы просто не использовать какой-нибудь другой метод?

Причина, по которой я хотел попробовать эксплойт PowerShell, заключается в том, что PowerShell действительно глубоко интегрирован в операционную систему Windows. За некоторыми исключениями, PowerShell может взаимодействовать с каждой ролью, функцией, службой и процессом Windows. PowerShell может получить доступ к реестру Windows, журналу событий Windows и практически ко всему, что автор вредоносных программ может захотеть изменить. Кроме того, PowerShell является частью Windows, а это означает, что вредоносный сценарий PowerShell теоретически может атаковать любое современное развертывание Windows, в том числе работающее в Azure.

Как упоминалось ранее, политика выполнения останавливает вредоносные сценарии PowerShell на своем пути, и, похоже, нет простого способа использовать автоматизированный сценарий (который в первую очередь предотвращает запуск политики выполнения) для изменения политики выполнения.. Я почти уверен, что, если у меня будет достаточно времени, я, вероятно, смогу найти способ использовать сценарий для изменения политики выполнения PowerShell, но есть более простой способ запустить вредоносный код PowerShell.

Что, если операционная система Windows содержит скрытую и полностью незащищенную версию PowerShell? А что, если бы существовал способ запустить сценарий в этой вторичной среде PowerShell? Поскольку вторичная среда PowerShell полностью отделена от «обычной» среды PowerShell, политики выполнения будут полностью игнорировать любые сценарии, которые вы можете запустить.

Теперь я уверен, что некоторые из вас думают: «Подожди, Поузи, такой среды не существует. Microsoft никогда не позволит использовать бэкдор PowerShell, который обходит защиту PowerShell». Что ж, ты будешь прав. Такой среды не существует в Windows. Вы должны скачать его с Microsoft.

Да, вы прочитали это правильно. Microsoft бесплатно предоставляет небезопасную среду PowerShell, которую можно использовать для нарушения политик выполнения PowerShell. Было бы логично предположить, что вам нужно будет найти способ установить эту среду на компьютер жертвы, прежде чем вы сможете запускать вредоносное ПО PowerShell, но вы этого не делаете. Небезопасная среда PowerShell полностью переносима и может быть легко объединена с вредоносным скриптом. Я уже привлек ваше внимание?

Хорошо, я знаю, что сделал несколько действительно диковинных заявлений, поэтому позвольте мне показать вам, насколько просто запустить вредоносный код PowerShell в защищенной системе. Для этой демонстрации я буду использовать Windows 10.

Я начал свой эксперимент, установив для политики выполнения моего компьютера значение Restricted, как показано ниже. Это должно препятствовать запуску любых сценариев PowerShell на компьютере. Как вы можете видеть на снимке экрана, я использовал командлет Get-ExecutionPolicy, чтобы убедиться, что политика выполнения действительно ограничена.

Итак, помните ту незащищенную среду PowerShell, о которой я упоминал? Что ж, как оказалось, Microsoft не предлагает его в качестве инструмента для создания вредоносных программ. Представьте себе, что. Вместо этого небезопасная среда PowerShell существует в утилите PS2EXE.

PS2EXE — это бесплатный инструмент для преобразования сценариев PowerShell в исполняемые файлы. Однако на самом деле нет способа скомпилировать сценарий PowerShell в EXE-файл. Поскольку PS2EXE не может выполнять настоящее преобразование, он инкапсулирует сценарий PowerShell в EXE-файл вместе с облегченной (и небезопасной) средой PowerShell. Это означает, что при запуске EXE-файла сценарий PowerShell выполняется в совершенно отдельной среде PowerShell.

Стоит отметить, что PS2EXE не может обрабатывать все сценарии PowerShell. Это особенно верно для сценариев, которые вызывают.NET или используют определенные модули. Тем не менее, PS2EXE позволяет запускать сценарий PowerShell, несмотря на политики выполнения компьютера.

Первым шагом в этом процессе является создание сценария PowerShell, который вы хотите запустить. Для моей первой попытки я сделал простой скрипт под названием Payload.ps1. Этот сценарий просто отображает слова «Hello World», а затем ожидает нажатия клавиши.

Второй шаг в этом процессе — использование PS2EXE для преобразования сценария в EXE-файл. Для этого введите команду PS2EXE, за которой следует параметр -Inputfile, имя вашего скрипта и имя EXE-файла, который вы хотите создать. Вы можете увидеть, как это работает ниже.

Как только я создал свой исполняемый файл, основанный на «вредоносном» скрипте, я попытался его запустить. После этого мое антивирусное программное обеспечение сразу же сработало и идентифицировало исполняемый файл как потенциальную угрозу, как показано на снимке экрана ниже. Однако через несколько секунд мое антивирусное программное обеспечение отклонило угрозу, и сценарий был запущен.

Как вы можете видеть на следующем снимке экрана ниже, я запустил сценарий PowerShell в своей системе, несмотря на политику выполнения, запрещающую это.

Хорошо, я буду первым, кто признает, что между скриптом «Hello World» и вирусом есть большая разница. Тем не менее, я проиллюстрировал доказательство концепции.

Я решил попробовать перейти на следующий уровень, поэтому я изменил свой скрипт Payload.ps1, чтобы он продемонстрировал поведение, немного более похожее на вирус. Я не хотел делать ничего разрушительного, но я разработал сценарий для создания файла с именем Evil Trojan и размещения файла на жестком диске компьютера. Вот как выглядит код:

$A = «Вставьте сюда вредоносный код»

$А | Исходящий файл «C:dataEvil-Trojan.txt»

После изменения файла полезной нагрузки я заново создал свой EXE-файл, а затем снова установил для политики ограничений значение Restricted. Вы можете увидеть доказательство ниже.

Когда я запустил EXE-файл, мое антивирусное программное обеспечение обнаружило потенциальную проблему, но разрешило выполнение сценария. Как и предполагалось, на моем жестком диске был создан файл «Evil-Trojan».

Вывод: будьте готовы

Немного расстраивает мысль, что утилиту PS2EXE можно использовать для обхода защиты PowerShell. Лучшая защита от такого рода атак — использование белого списка приложений для предотвращения запуска неавторизованных EXE-файлов. Вы можете использовать Windows AppLocker или любые сторонние утилиты.