Поделиться через


Функции безопасности PowerShell

В PowerShell доступно несколько функций, предназначенных для повышения безопасности среды написания скриптов.

Политика выполнения

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

Дополнительные сведения см. в разделе about_Execution_Policies.

Использование класса SecureString

PowerShell имеет несколько командлетов, поддерживающих использование System.Security.SecureString класса. Как и в любом классе .NET, вы можете использовать SecureString в собственных скриптах. Однако корпорация Майкрософт не рекомендует использовать SecureString для новой разработки. Корпорация Майкрософт рекомендует избегать использования паролей и полагаться на другие средства проверки подлинности, такие как сертификаты или проверка подлинности Windows.

PowerShell продолжает поддерживать класс SecureString для обратной совместимости. Использование SecureString по-прежнему безопаснее, чем использование обычной текстовой строки. PowerShell по-прежнему использует тип SecureString , чтобы избежать случайного предоставления содержимого консоли или в журналах. Используйте SecureString тщательно, так как его можно легко преобразовать в строку обычного текста. Полное обсуждение использования SecureString см. в документации по классу System.Security.SecureString.

Ведение журнала модулей и блоков сценариев

Функция ведения журнала модуля позволяет включить ведение журнала для выбранных модулей PowerShell. Эта настройка эффективна для всех сеансов на компьютере. PowerShell записывает события выполнения конвейера для указанных модулей в журнале событий Windows PowerShell.

Ведение журнала блоков скриптов включает ведение журнала для обработки команд, блоков скриптов, функций и скриптов независимо от того, выполняется ли вызов в интерактивном режиме или посредством автоматизации. PowerShell записывает эти сведения в журнал событий Microsoft-Windows-PowerShell/Operations .

Дополнительные сведения см. в следующих статьях:

Поддержка AMSI

Интерфейс проверки вредоносных программ Windows (AMSI) — это API, позволяющий приложениям передавать действия в сканер защиты от вредоносных программ, например Защитник Windows, для проверки вредоносных полезных данных. Начиная с версии PowerShell 5.1, PowerShell в Windows 10 (и более поздних версиях) передает все блоки скриптов в AMSI.

PowerShell 7.3 расширяет данные, отправляемые в AMSI для проверки. Теперь он включает все вызовы методов .NET.

Дополнительные сведения об AMSI см. в разделе Как AMSI помогает.

Ограниченный языковой режим

Режим ConstrainedLanguage защищает систему путем ограничения командлетов и типов .NET, разрешенных в сеансе PowerShell. Полное описание см. в разделе about_Language_Modes.

Управление приложением

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

Управление приложениями для бизнеса предназначено как компонент безопасности в соответствии с критериями обслуживания, определенными Центром реагирования майкрософт (MSRC). Управление приложениями — это предпочтительная система управления приложениями для Windows.

Дополнительные сведения о том, как PowerShell поддерживает AppLocker и управление приложениями, см. в разделе "Управление приложениями" для защиты PowerShell.

Спецификация программного обеспечения

Начиная с PowerShell версии 7.2 все пакеты установки содержат спецификацию программного обеспечения. Команда PowerShell также создает SBOM для модулей, которые они принадлежат, но передаются независимо от PowerShell.

Файлы SBOM можно найти в следующих расположениях:

  • В PowerShell найдите SBOM в $PSHOME/_manifest/spdx_2.2/manifest.spdx.json.
  • Для модулей найдите SBOM в папке модуля в разделе _manifest/spdx_2.2/manifest.spdx.json.

Создание и публикация спецификации программного обеспечения — это начало модернизации кибербезопасности федерального правительства США и повышения безопасности цепочки поставок программного обеспечения. Дополнительные сведения об этой инициативе см. в записи блога по созданию SBOM с помощью SPDX в Корпорации Майкрософт.

Безопасная передача данных в удаленном выполнении PowerShell

До powerShell версии 7.6-preview5 Session_Key используется для шифрования SecureString перед отправкой удаленного сеанса PowerShell. Протокол удаленного взаимодействия PowerShell (PSRP) выполняет обмен ключами между клиентом и сервером, когда необходимо передать объект SecureString. Обмен включает в себя следующие действия:

  1. Клиентская сторона создает пару открытых и закрытых ключей и отправляет открытый ключ на сервер.
  2. Сервер создает ключ сеанса для симметричного шифрования.
  3. Сервер использует открытый ключ для шифрования ключа сеанса и отправляет его клиенту.
  4. Клиент и сервер используют новый ключ сеанса для шифрования объекта SecureString .

Протокол удаленного взаимодействия PowerShell (PSRP) использует RSAEncryptionPadding.Pkcs1 алгоритм во время обмена ключами. Алгоритм не является безопасным, поэтому обмен ключами не обеспечивает дополнительную безопасность.

Это важно

Необходимо использовать безопасный транспортный уровень, чтобы обеспечить безопасную передачу данных по PSRP.

Начиная с PowerShell версии 7.6-preview.5, обмен ключами не рекомендуется. Версия PSRP была обновлена до 2.4 и включает следующие изменения:

  • Следующие сообщения PSRP устарели, если как клиент, так и сервер имеют версию 2.4 или более поздней версии:

    • PUBLIC_KEY
    • ЗАПРОС ОТКРЫТОГО КЛЮЧА
    • ENCRYPTED_SESSION_KEY (ЗАШИФРОВАННЫЙ_КЛЮЧ_СЕССИИ)
  • Шаги SecureString шифрования и расшифровки пропускаются, если клиент и сервер имеют версию 2.4 или более поздней версии.

Это изменение является обратно совместимым.

  • Для старых клиентов или серверов (версии 2.3 или ниже) обмен ключами по-прежнему используется при необходимости.
  • PSRP может использовать удаленные сеансы именованного канала, если оба клиента и сервера находятся на одном компьютере. Поскольку удаленный клиент потенциально может подключиться к именованному каналу, а данные больше не шифруются с помощью ключа сеанса, именованный канал (используемый для Enter-PSHostProcess) отклоняет подключение удаленного клиента.

Критерии обслуживания безопасности

Для PowerShell действуют Критерии обслуживания безопасности Майкрософт для Windows. Только функции безопасности соответствуют критериям обслуживания.

Функции безопасности

  • Системная блокировка с элементом управления приложениями для бизнеса
  • Режим ограниченного языка с элементом управления приложениями для бизнеса

Подробные функции защиты

  • Блокировка системы с помощью AppLocker
  • Ограниченный языковой режим с appLocker
  • Политика выполнения