Этот документ описывает структуру зрелости для PowerShell таким образом, чтобы уравновесить требования безопасности и бизнес-требования организаций. Эта структура зрелости позволит организациям предпринять дополнительные шаги по обеспечению безопасности PowerShell в своей среде.
Этот документ описывает структуру зрелости для PowerShell таким образом, чтобы уравновесить требования безопасности и бизнес-требования организаций. Эта структура зрелости позволит организациям предпринять дополнительные шаги по обеспечению безопасности PowerShell в своей среде.
PowerShell интегрирован с .NET Framework и имеет полный доступ к компонентной объектной модели (COM) и инструментарию управления Windows (WMI). Кроме того, он имеет полный доступ к интерфейсу программирования приложений Windows (WinAPI) через .NET Framework. Установка PowerShell по умолчанию содержит большое количество встроенных командлетов, которые представляют собой небольшие программы .NET, к которым PowerShell обращается с помощью простых команд. Это обеспечивает мощный и простой в использовании интерфейс для базовой системы и позволяет автоматизировать широкий спектр задач.
PowerShell можно запускать локально или по сети с помощью функции, известной как Windows Remote Management (WinRM) [1]. Для облегчения использования WinRM на удаленных рабочих станциях и серверах, на которых выполняется код, необходимо включить удаленное взаимодействие. В Microsoft Windows Server 2012 и более новых операционных системах Microsoft Windows удаленное взаимодействие включено по умолчанию.
PowerShell вызывает две основные проблемы безопасности:
Обратите внимание на следующее:
Четыре уровня в структуре зрелости для PowerShell следующие:
Можно принудительно применить политику выполнения сценария через групповую политику. Рекомендуемая политика выполнения сценария - AllSigned (все сценарии должны быть подписаны доверенным издателем). В качестве альтернативы, для рабочих станций, на которых разрабатываются сценарии, политика выполнения сценария должна быть RemoteSigned (только удаленно загруженные сценарии должны быть подписаны доверенным издателем). Организации должны использовать сертификаты подписи кода, которым доверяют во всей среде, чтобы гарантировать единообразное выполнение скриптов во всей среде.
См. Приложение B для более подробной информации о реализации политик выполнения скриптов.
Детали реализации для управления приложениями на основе ролей будут различаться в зависимости от задействованных операционных систем и функциональных уровней Active Directory (AD). Следует проконсультироваться с соответствующей документацией поставщика, чтобы убедиться в эффективности внедрения.
Использование правильно настроенного продукта управления информацией и событиями безопасности (SIEM) для сбора и анализа журналов событий PowerShell и Windows может помочь в обнаружении подозрительной активности, что позволяет быстрее выявлять вредоносное поведение PowerShell в сети.
См. Приложение E для получения дополнительных сведений об обнаружении подозрительного поведения PowerShell в журналах.
Организациям также следует рассмотреть возможность использования защищенного журнала событий для предотвращения утечки конфиденциальной информации, такой как пароли в блоках сценариев, которые регистрируются в журнале событий.
См. Приложение F для получения дополнительных сведений о применении разрешений через групповую политику к разделам реестра и папкам с файлами.
Языковой режим в конфигурации ограниченной конечной точки должен быть установлен на NoLanguage, что позволяет запускать только утвержденные командлеты и функции и запрещает блоки сценариев и другие языковые функции. Ограничения языкового режима можно обойти с помощью внедрения кода, поэтому важно проверить утвержденные настраиваемые командлеты, функции и модули, чтобы убедиться, что внедрение кода невозможно.
Конфигурации ограниченной конечной точки должны быть предоставлены правильные разрешения с самого начала, в отличие от ее настройки для работы от имени другой учетной записи. Это предотвратит сохранение учетных данных учетной записи на рабочей станции или сервере.
Ограничение ограниченных конечных точек заключается в том, что пользователи с локальными административными привилегиями смогут обходить ограниченные конечные точки, поскольку эти пользователи могут удаленно запускать команды оболочки (включая выполнение powershell.exe ) с помощью Windows Remote Shell (WinRS), тем самым обходя политику конечных точек. Кроме того, WinRS нельзя отключить, не отключив удаленное взаимодействие PowerShell. Есть два решения этой проблемы:
Важно понимать ограничения политики выполнения сценария в отношении защиты PowerShell. Следует отметить, что о многочисленных методах обхода политики выполнения сценария сообщалось много. По этой причине политика выполнения сценария - лишь небольшая часть общего плана управления безопасностью PowerShell.
Введение
PowerShell - это мощный язык сценариев оболочки, разработанный Microsoft для предоставления интегрированного интерфейса для автоматизированного системного администрирования. Это важная часть инструментария системного администрирования из-за его повсеместного распространения и простоты, с которой его можно использовать для полного управления системами Microsoft Windows. Однако это также опасный инструмент постэксплуатации в руках противника.Этот документ описывает структуру зрелости для PowerShell таким образом, чтобы уравновесить требования безопасности и бизнес-требования организаций. Эта структура зрелости позволит организациям предпринять дополнительные шаги по обеспечению безопасности PowerShell в своей среде.
Резюме
PowerShell - это последняя версия оболочек командной строки Microsoft Windows, таких как MS-DOS и cmd.exe. Хотя в Microsoft Windows есть консоль cmd.exe , ее способность выполнять действия ограничена по сравнению с действиями, которые может выполнять PowerShell.PowerShell интегрирован с .NET Framework и имеет полный доступ к компонентной объектной модели (COM) и инструментарию управления Windows (WMI). Кроме того, он имеет полный доступ к интерфейсу программирования приложений Windows (WinAPI) через .NET Framework. Установка PowerShell по умолчанию содержит большое количество встроенных командлетов, которые представляют собой небольшие программы .NET, к которым PowerShell обращается с помощью простых команд. Это обеспечивает мощный и простой в использовании интерфейс для базовой системы и позволяет автоматизировать широкий спектр задач.
PowerShell можно запускать локально или по сети с помощью функции, известной как Windows Remote Management (WinRM) [1]. Для облегчения использования WinRM на удаленных рабочих станциях и серверах, на которых выполняется код, необходимо включить удаленное взаимодействие. В Microsoft Windows Server 2012 и более новых операционных системах Microsoft Windows удаленное взаимодействие включено по умолчанию.
Проблемы с безопасностью
Сам PowerShell не менее безопасен, чем другие среды сценариев Microsoft Windows. Однако PowerShell предоставляет противнику удобный интерфейс для перечисления и управления хост-системой после того, как злоумышленник добился выполнения исходного кода.PowerShell вызывает две основные проблемы безопасности:
- PowerShell обычно используется после выполнения кода во время первоначальной эксплуатации. Противники будут продолжать развивать наступательные кибер-возможности, и имплантаты на базе PowerShell, вероятно, станут более распространенными в будущем.
- PowerShell позволяет злоумышленникам выполнять внедрение кода из среды PowerShell в другие процессы, не сбрасывая вредоносный код на диск, эффективно обеспечивая выполнение произвольного кода, минуя многие средства защиты и практически не оставляя остаточных артефактов в системе. Это не связано с какой-либо уязвимостью в системе безопасности PowerShell, а скорее свидетельствует о ее тесной интеграции с .NET Framework, что обеспечивает чрезвычайно мощный и простой в использовании интерфейс для важных системных функций.
Использование PowerShell для администрирования вашей среды
Оценка последствий для безопасности разрешения PowerShell в организации может привести к немедленному желанию заблокировать доступ к PowerShell. Однако это не рекомендуется, поскольку использование правильно настроенной среды PowerShell вместо других методов администрирования среды приведет к реальным и ощутимым преимуществам безопасности для организации.Обратите внимание на следующее:
- Удаленное использование PowerShell значительно снизит потребность администраторов в интерактивном входе на рабочие станции и серверы через службы удаленных рабочих столов (RDP), что приведет к снижению подверженности организации атакам Pass-the-Hash. Атаки Pass-the-Hash - чрезвычайно мощная и распространенная техника бокового движения для противника, и организации всегда следует искать способы уменьшить свою подверженность этой технике.
- Обычная структура для администрирования среды будет лучше масштабироваться, чем специальная конфигурация разнородных административных инструментов. Это снизит сложность сетевых конфигураций (например, правил брандмауэра), что приведет к снижению рисков безопасности, связанных с неправильными конфигурациями.
- В PowerShell версии 5.0 мощные параметры ведения журнала позволяют организации активно анализировать свою среду для выявления вредоносной активности. Злоумышленник, который не понимает, что в организации действует эффективный режим журнала и анализа, и который впоследствии использует PowerShell, будет обнаружен намного легче.
- Сопротивляясь первоначальному импульсу отключить PowerShell и вместо этого стремясь снизить известные риски безопасности, связанные с PowerShell, организация будет в гораздо лучшем положении для защиты своих ценных ресурсов и реагирования на кибер-вторжение.
Платформа зрелости для PowerShell
Этот документ описывает структуру зрелости для PowerShell. Уровни в структуре зрелости для PowerShell позволяют организации определить текущее состояние безопасности в отношении PowerShell. Уровни также позволяют организации определять будущие улучшения для более эффективного управления рисками безопасности, связанными с развертыванием PowerShell. Визуальное представление структуры зрелости для PowerShell приведено в Приложении A.Четыре уровня в структуре зрелости для PowerShell следующие:
- Уровень 0: организация использует PowerShell в своей конфигурации по умолчанию без учета рисков безопасности, связанных с его использованием.
- Уровень 1. Организация настраивает список утвержденных сценариев PowerShell. Кроме того, политика выполнения сценариев PowerShell настроена на запуск только сценариев PowerShell, подписанных доверенным издателем, с любыми сертификатами подписи кода, защищенными от неправомерного использования. PowerShell версии 5.0 предоставляет более широкие возможности ведения журнала и должен использоваться там, где это возможно. Наконец, действия, связанные с PowerShell, централизованно регистрируются и анализируются.
- Уровень 2: Организация блокирует хосты PowerShell [2] для пользователей, выполняющих задачи, требующие возможности использования PowerShell. Это форма управления приложением на основе ролей. Для повышения безопасности удаленного PowerShell развернута усиленная конфигурация удаленного управления Windows (WinRM).
- Уровень 3: организация развертывает настраиваемые конечные точки с ограничениями для PowerShell. Это ограничивает функциональность PowerShell для данного пользователя заранее определенным списком.
Рекомендуемые смягчения
Утвержденные скрипты PowerShell
Организациям следует использовать список утвержденных сценариев PowerShell, чтобы уменьшить вероятность выполнения вредоносных сценариев PowerShell.Политика выполнения скрипта
PowerShell может применять политику, контролирующую выполнение скриптов и модулей PowerShell. Политика выполнения сценария PowerShell часто объявляется решением для защиты PowerShell; однако его часто можно обойти, и на него не следует полагаться для обеспечения безопасной среды PowerShell.Можно принудительно применить политику выполнения сценария через групповую политику. Рекомендуемая политика выполнения сценария - AllSigned (все сценарии должны быть подписаны доверенным издателем). В качестве альтернативы, для рабочих станций, на которых разрабатываются сценарии, политика выполнения сценария должна быть RemoteSigned (только удаленно загруженные сценарии должны быть подписаны доверенным издателем). Организации должны использовать сертификаты подписи кода, которым доверяют во всей среде, чтобы гарантировать единообразное выполнение скриптов во всей среде.
См. Приложение B для более подробной информации о реализации политик выполнения скриптов.
Версия PowerShell
Организации должны установить PowerShell версии 5.0, где это возможно, из-за превосходных возможностей ведения журнала, предоставляемых по сравнению с более ранними версиями.Управление приложениями на основе ролей
Хосты PowerShell должны быть ограничены привилегированными учетными записями, выполняющими административные действия, или пользователями с определенной потребностью. Указание только утвержденных хостов PowerShell является предпочтительным подходом к ограничению доступа к хостам PowerShell по умолчанию, поскольку он также будет эффективен против настраиваемых хостов PowerShell; однако блокировка хостов по умолчанию ( powershell.exe и powershell_ise.exe ) лучше, чем отсутствие ограничений. В доступе к узлам PowerShell следует запретить использование технических средств контроля для пользователей, у которых нет бизнес-потребностей.Детали реализации для управления приложениями на основе ролей будут различаться в зависимости от задействованных операционных систем и функциональных уровней Active Directory (AD). Следует проконсультироваться с соответствующей документацией поставщика, чтобы убедиться в эффективности внедрения.
Регистрация и анализ
Поскольку полностью защитить PowerShell сложно, централизованное ведение журнала и анализ журналов действий на основе PowerShell должны стать основой безопасного развертывания PowerShell. С помощью PowerShell версии 5.0 можно принудительно вести журнал широкого спектра действий PowerShell. Возможность активного анализа журналов значительно повысит способность организации выявлять необычные действия. Ряд параметров ведения журнала можно настроить с помощью групповой политики, что делает развертывание относительно простым.Журнал событий PowerShell
Дополнительные сведения о реализации следующих параметров ведения журнала можно найти в Приложении C:- Ведение журнала жизненного цикла ядра: PowerShell регистрирует запуск и завершение работы узлов PowerShell. PowerShell версии 5.0 имеет возможность регистрировать аргументы командной строки, передаваемые узлу PowerShell, включая код PowerShell, передаваемый в powershell.exe через командную строку. Ведение журнала жизненного цикла ядра включено по умолчанию, и его можно найти в журнале приложений и служб \ Microsoft \ Windows \ PowerShell \ Operational log.
- Ведение журнала модуля / конвейера: PowerShell версии 3.0 и более поздних может регистрировать события конвейера в журналах событий Windows для каждого модуля или на глобальном уровне. Это можно настроить с помощью групповой политики.
- Отслеживание блока сценария: PowerShell версии 5.0 может регистрировать подробную информацию, в том числе, какой код был запущен, и выводить ее в журнал операционных событий Windows.
- Транскрипция: PowerShell версии 5.0 позволяет транскрипцию [3] кода на всех хостах PowerShell и может управляться групповой политикой. Несмотря на то, что записи очень эффективны, они не интегрируются в журналы событий Windows, и с ними нужно будет работать как с файлами на диске.
Журнал событий Windows
Microsoft Windows должна быть настроена с помощью групповой политики для аудита определенных системных событий, таких как создание и завершение процесса, а также доступ к файлам и реестру. Особое внимание следует уделить:- Профили PowerShell
- Информация о конфигурации PowerShell (реестр)
- Параметры групповой политики PowerShell (реестр).
Анализ журнала событий
Базовый план для нормального поведения PowerShell для сети должен быть выполнен, чтобы помочь в анализе журналов, созданных PowerShell. Организациям следует рассмотреть возможность проведения следующего базового анализа для сборок рабочих станций и серверов, чтобы все детали были задокументированы, чтобы к ним можно было обратиться позже.- Поведение кода: нужен ли не вредоносный код PowerShell для доступа к Интернету, открытия сетевых подключений, использования криптографических операций или доступа к реестру и системным файлам? Определение подмножества функций PowerShell, необходимых для выполнения системного администрирования в домене, упрощает обнаружение аномального поведения.
- Первоначальное выполнение кода: как обычно выполняется код PowerShell (например, из файла сценария, командной строки, ввода с консоли)?
- Пользователь и компьютер: какие учетные записи пользователей должны иметь возможность выполнять код PowerShell в домене, поддомене или на конкретном компьютере?
- Удаленное взаимодействие: каковы обычные шаблоны удаленного взаимодействия для пользователей, а также исходных и целевых рабочих станций и серверов?
Использование правильно настроенного продукта управления информацией и событиями безопасности (SIEM) для сбора и анализа журналов событий PowerShell и Windows может помочь в обнаружении подозрительной активности, что позволяет быстрее выявлять вредоносное поведение PowerShell в сети.
См. Приложение E для получения дополнительных сведений об обнаружении подозрительного поведения PowerShell в журналах.
Предотвратить изменение и включить аудит параметров конфигурации и стенограмм
Чтобы усложнить обфускацию злонамеренного поведения PowerShell, организация должна гарантировать, что стандартным пользователям не предоставлено разрешение на изменение соответствующих ключей реестра или на изменение папки с транскрипцией.Организациям также следует рассмотреть возможность использования защищенного журнала событий для предотвращения утечки конфиденциальной информации, такой как пароли в блоках сценариев, которые регистрируются в журнале событий.
См. Приложение F для получения дополнительных сведений о применении разрешений через групповую политику к разделам реестра и папкам с файлами.
Конфигурация удаленного взаимодействия
Конфигурация удаленного взаимодействия PowerShell хорошо задокументирована Microsoft в их публикации «Установка и настройка для удаленного управления Windows» по адресу https://docs.microsoft.com/en-au/wi...d-configuration-for-windows-remote-managementУкрепление WinRM
После настройки основного удаленного взаимодействия необходимо настроить следующие параметры с помощью групповой политики для безопасной настройки клиента и службы WinRM. Следующие параметры включены по умолчанию, однако их следует подтверждать при любом безопасном развертывании PowerShell:- удалить все протоколы, кроме Kerberos и Negotiate
- отключить сохраненные учетные данные и CredSSP
- отключите устаревшие порты (80 и 443).
Ограниченные конечные точки
Ограниченные конечные точки - это средство обеспечения заблокированной функциональности PowerShell. Это полезно для включения делегирования полномочий на основе ролей. Например, разделение ролей для администрирования веб-сервера и файлового сервера на одном компьютере.Языковой режим в конфигурации ограниченной конечной точки должен быть установлен на NoLanguage, что позволяет запускать только утвержденные командлеты и функции и запрещает блоки сценариев и другие языковые функции. Ограничения языкового режима можно обойти с помощью внедрения кода, поэтому важно проверить утвержденные настраиваемые командлеты, функции и модули, чтобы убедиться, что внедрение кода невозможно.
Конфигурации ограниченной конечной точки должны быть предоставлены правильные разрешения с самого начала, в отличие от ее настройки для работы от имени другой учетной записи. Это предотвратит сохранение учетных данных учетной записи на рабочей станции или сервере.
Ограничение ограниченных конечных точек заключается в том, что пользователи с локальными административными привилегиями смогут обходить ограниченные конечные точки, поскольку эти пользователи могут удаленно запускать команды оболочки (включая выполнение powershell.exe ) с помощью Windows Remote Shell (WinRS), тем самым обходя политику конечных точек. Кроме того, WinRS нельзя отключить, не отключив удаленное взаимодействие PowerShell. Есть два решения этой проблемы:
- доступ к привилегиям локального администратора должен строго контролироваться, с делегированием административных привилегий на основе ролей, предоставляющим вместо этого требуемый доступ
- ограничение прав входа в сеть должно строго контролироваться.
Дальнейшая информация
Следующие ссылки предоставляют дополнительные сведения о защите PowerShell и связанных компонентов:- Microsoft - PowerShell ♥ синяя команда на https://devblogs.microsoft.com/powershell/powershell-the-blue-team/ .
- FireEye - расследование атак PowerShell на https://www.fireeye.com/content/dam...zanciyan-investigating-powershell-attacks.pdf.
Приложение А. Структура зрелости
Приложение B. Политика выполнения сценария PowerShell
Следующий параметр групповой политики должен быть настроен для принудительной подписи сценария для всех сценариев PowerShell.Настройка групповой политики | Ценность |
Конфигурация компьютера \ Политики \ Административные шаблоны \ Компоненты Windows \ Windows PowerShell \ Включить выполнение сценария | Разрешить только подписанные скрипты |
Приложение C: Настройка требований к ведению журнала PowerShell
Следующие параметры групповой политики должны быть настроены для принудительного ведения соответствующего журнала для действий на основе PowerShell [4].Действия записаны | Настройка групповой политики | Ценности |
Модуль / Ведение журнала | Конфигурация компьютера \ Политики \ Административные шаблоны \ Компоненты Windows \ Windows PowerShell \ Включить ведение журнала модуля | Имена модулей: * |
Трассировка блока скрипта | Конфигурация компьютера \ Предпочтения \ Параметры Windows \ Реестр | HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ Windows \ PowerShell \ ScriptBlockLogging \ EnableScriptBlockLogging = 1 (DWORD) |
Расшифровка [5] | Конфигурация компьютера \ Предпочтения \ Параметры Windows \ Реестр | HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ Windows \ PowerShell \ Transcription \ EnableTranscripting = 1 (DWORD) |
HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ Windows \ PowerShell \ Transcription \ OutputDirectory = <папка транскриптов> (SZ) |