Кажется не так давно это было, примерно в 2015 году, мы начали слышать о хакерах, не использовавших вредоносных программ внутри периметра атакуемой цели. А использовали они то, что было под рукой – это были различные инструменты, находившиеся на целевом сайте. Это оказалось идеальным способом, чтобы сделать свое «грязное дело» не поднимая лишнего «шума».

Этот подход в наше время набрал обороты и стал мейнстримом, в первую очередь из-за обилия готовых инструментариев хакеров, таких как PowerShell Empire.

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

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

Это в свою очередь поднимает большую тему в мире кибербезопасности: ограничение доступа к приложениям, также известную как белые и черные списки доступа. Общая идея в том, чтобы операционная система знала и строго контролировала какие приложения могут быть запущены пользователем, а какие – нет.

Например, будучи homo blogus, мне, как правило, нужны некоторые основные инструменты и приложения (а также теплое местечко, где могу спать ночью), и я прекрасно могу прожить без оболочки PowerShell, netcat, psexec, и всех других команд, о которых я рассказывал в предыдущих постах. То же самое относится к большинству работников в компаниях, и поэтому квалифицированный ИТ-специалист должен быть в состоянии составить список приложений, которые являются безопасными для использования.

В мире Windows, возможно использовать правила на выполнение приложений с помощью специальных ограничивающих политик использования программ, а в последнее время и AppLocker.

Однако, прежде чем мы перейдем к этим передовым идеям, давайте попробуем два очень простых решения, а затем посмотрим, что с ними не так.

ACL и другие упрощения


Мы часто думаем о списках доступа ACL Windows, что они используются для управления доступом к читабельному содержимому. Но они также могут быть применены и к исполняемым файлам — то есть.ехе, .vbs, .ps1 и остальным.

Я вернулся в облако Amazon Web Services, где у меня находится домен Windows для мифической и некогда легендарной компании Acme и там проделал работу с ACL, дабы продемонстрировать некоторые ограничения доступа.

image

PowerShell .exe, любой системный администратор сможет без труда сказать вам, находится в C:\Windows\System32\WindowsPowerShell\v1.0. Я перешел в эту папку, вызвал ее свойства и моментально ограничил права выполнения PowerShell на 2 основные группы: «Администраторов домена» и «Acme-SnowFlakes”, группы опытных пользователей Acme.

Я перезашел на сервер, как Боб, мой амплуа в компании Acme, и попытался вызвать PowerShell. Результаты ниже.

image

На практике, вы могли бы, наверняка, придумать скрипт — почему бы не использовать PowerShell чтобы автоматизировать этот процесс настройки ACL для всех ноутбуков и серверов в небольших и средних по размеру компаниях.

Это не плохое решение.

Если вам не нравится идея изменения ACL на исполняемых файлах, PowerShell предлагает свои собственные средства ограничения. Как пользователь с админ-правами, можно использовать, все что угодно, но проще всего встроенный командлет Set-ExecutionPolicy.

Это уже не настолько «топорное» решение, как установка ACL. Например, вы сможете ограничить PowerShell для работы только в интерактивном режиме – с помощью параметра Restricted — так что он не будет выполнять PS-скрипты, которые могут содержать вредоносные программы хакеров.

Однако, это также заблокирует и скрипты PowerShell, запускаемые вашими ИТ-специалистами. Чтобы разрешить одобренные скрипты, но отключить скрипты злобных хакеров, используйте параметр RemoteSigned. Теперь PowerShell будет запускать только подписанные скрипты. Администраторам, конечно, придется создать их собственные сценарии и затем подписать их с использованием проверенных учетных данных.

Я не буду вдаваться в подробности, как это сделать, в основном потому, что это так легко обойти. Кое-кто тут в блоге описал аж 15 способов обхода ограничений безопасности в PowerShell.

Самый простой – это с помощью параметра Bypass в самом PowerShell. Да! (см.ниже).

image

Похоже на дыру в безопасности, а?

Так что в PowerShell есть несколько основных уязвимостей. Это кстати и понятно, так как это, в конце концов, всего лишь программная оболочка.

Но даже подход ограничений на уровне ACL имеет свои фундаментальные проблемы.
Если хакеры ослабят свою философию, то они смогут запросто скачать, скажем, с помощью трояна удаленного доступа (RAT) — их собственную копию PowerShell.ехе. А затем запустить его напрямую, с легкостью избежав ограничений с разрешениями с локальным PowerShell.

Политики Ограничения Использования Программ


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

В мире Windows, эти силы известны как политики ограничения использования программ (SRP) — для ознакомления, посмотрите это — они настраиваются через редактор Групповых политик.
С их помощью вы сможете контролировать, какие приложения могут быть запущены на основании расширения файла, имен путей, и было ли приложение подписано цифровой подписью.

Самый эффективный, хоть и самый болезненный подход, это запретить все, а потом добавлять туда приложения, которые вам действительно нужны. Это известно как внесение в „белый список“.

Мы разберем это более подробно в следующей части.

В любом случае, вам потребуется запустить редактор политик, gpEdit и перейдите к политике Local Computer Policy>Windows Settings>Security Settings>Software Restriction Polices>Security Levels. Если Вы нажмете на “Запретить (Disallowed)”, то вы можете сделать это политикой безопасности по-умолчанию — не запускать любые исполняемые файлы!

image

Белый список: запретить по-умолчанию, а затем добавить разрешенные приложения в “Дополнительные правила (Additional Rules)”.

Это больше похоже на тактику выжженной земли. На практике, потребуется ввести “дополнительные правила”, чтобы добавить обратно разрешенные приложения (с указанием их наименования и пути). Если вы выходите из оболочки PowerShell, то вы фактически отключаете этот инструмент на месте.

К сожалению, вы не можете подстроить правила политик ограничения использования программ на основании отдельных групп или пользователей. Блин!

И теперь это логично приводит нас к последнему достижению безопасности Microsoft, известному как AppLocker, который имеет свои уникальные особенности, чтобы разрешить открыть приложение. Поговорим об этом в следующий раз.

Комментарии (4)


  1. vesper-bot
    26.02.2018 13:06

    И теперь это логично приводит нас к последнему достижению безопасности Microsoft, известному как AppLocker

    который хотя и работает, но эффект имеет только в версии enterprise 10 и не ниже ultimate для семерки. Вкусно, но бабла не стоит в таком объеме. Правда, если у кого есть enterprise, то он таки рулит.


  1. rbobot
    26.02.2018 15:39
    +1

    Какое-то глупое решение, не стоит его советовать даже как пример для фичи.
    Достаточно политиками задать выполнение только подписанных скриптов и подписывать свои рабочие скрипты.


  1. ApeCoder
    27.02.2018 08:59

    Если хакеры ослабят свою философию, то они смогут запросто скачать, скажем, с помощью трояна удаленного доступа (RAT) — их собственную копию PowerShell.ехе. А затем запустить его напрямую, с легкостью избежав ограничений с разрешениями с локальным PowerShell.

    Если они такое могут сделать, то почему они не могут скачать и запустить что-то еще — например свою программу — которая сделает все, что угодно?


  1. Sergey-S-Kovalev
    01.03.2018 10:03

    Простите меня. Вся статья какая то полная непроглатываемая хрень.

    Powershell сам по себе не дает юзерам админских прав в системе, и можно запускать миллион скриптов с байпассом и получить… ничего. Загрузить из интернетов вирусню или эксплойт под юзерскими правами можно чем угодно, и Powershell дает такую возможность наравне с нативными cmd/vbs, или любым скомпилированным на системе нативным кодом.

    Имея шелл в инфраструктуре с админскими привилегиями уже становится абсолютно всеравно что использовать, все ограничено только личными предпочтениями злоумышленника.

    Фокусирование на Powershell.exe абсолютно бесполезно, если не обращать внимания на cmd.exe и cscript.exe и множество других вещей.

    зыю
    Подписывание скриптов PS1 используется для исключения возможности подмены кода внутри скрипта размещенного в не полноценно ограниченной или контролируемой среде. Вы не можете менять код в нем, иначе подпись станет неверна, и не можете добавить байпас, поскольку не знаете пароля от доменной сервисной учетной записи из под которой запускается выполнение скрипта. А вот обеспечить такую защиту с cmd/bat/vbs у вас не получится.

    Нытье про байпасы и set-executionpolicy возникает от незнания и непонимания как инструмент работает. Раз в квартал на хабре появляется очередной срыватель покровов, который по ощущением первый раз увидел Powershell менее месяца назад и бегло погуглил доказательства от таких же срывателей покровов в интернетах.