Как журналы транскрипции PowerShell могут повысить безопасность вашей системы

Опубликовано: 15 Марта, 2023
Как журналы транскрипции PowerShell могут повысить безопасность вашей системы

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

Собственные журналы транскрипции PowerShell

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

Изображение 4259
Стенограммы, которые генерирует PowerShell, на самом деле впечатляют. Как вы можете видеть на снимке экрана ниже, командлет Start-Transcript записывает заголовок в файл журнала. В этом заголовке перечислены такие вещи, как имя пользователя, имя компьютера, а также дата и время начала стенограммы (среди прочего). Когда вы вводите команды в PowerShell, механизм транскрипции регистрирует не только команды, но и вывод команды. Например, на рисунке ниже вы можете видеть, что я использовал командлет Get-VM для отображения списка виртуальных машин Hyper-V, существующих на ПК. Стенограмма не только показывает, что этот командлет использовался, но также показывает вывод, который появился в консоли PowerShell при выполнении команды.

Изображение 4260
Какой бы хорошей ни была эта стенограмма, она имеет некоторые существенные ограничения. Во-первых, вы заметите, что в стенограмме не регистрируются дата и время ввода отдельных команд. Возможность определить, когда использовалась команда, может быть важна, если вам когда-либо придется проводить судебный анализ системы.

Второе серьезное ограничение заключается в том, что транскрипцию, по крайней мере, как я уже говорил об этом, необходимо включать вручную. Помните, что PowerShell не начинал расшифровывать мои действия до тех пор, пока я не воспользовался командой Start-Transcript.

Третье серьезное ограничение возможностей транскрипции PowerShell заключается в том, что транскрипция привязана к отдельному сеансу. Если бы я открыл другое окно PowerShell или даже переключился на другое окно PowerShell, которое уже было открыто, команды, которые я ввожу в этом окне, не были бы записаны в стенограмму. То же самое можно сказать и о PowerShell ISE. PowerShell рассматривает каждое отдельное окно PowerShell как отдельный сеанс. При использовании командлета Start-Transcript PowerShell транскрибирует только команды из сеанса, в котором был введен командлет.

Теперь это поднимает важный момент. Несмотря на то, что командлет Start-Transcript не предоставляет общесистемных возможностей транскрипции, это не означает, что в системе нет записей о действиях, выполняемых в системе. Журналы событий Windows регистрируют действия пользователей и системы независимо от того, выполнялись ли эти действия через графический интерфейс или через PowerShell.

Зачем использовать журналы транскрипции PowerShell?

Поскольку собственные возможности транскрипции PowerShell должны включаться вручную и не могут пересекать границы сеанса, я подозреваю, что транскрипция PowerShell, вероятно, была разработана не как функция безопасности, а скорее как инструмент разработки. Иногда я использовал транскрипцию в качестве инструмента при разработке сценария. Я включаю транскрипцию, а затем начинаю вводить команды, которые собираюсь использовать в сценарии. Закончив, я открываю расшифровку и удаляю заголовок, результаты и любые команды, которые не работали так, как я предполагал. Затем я беру то, что осталось, и сохраняю как файл PS1.

Существует лучший способ

Если вам нравится идея использования расшифровки PowerShell в качестве средства безопасности, но вас беспокоят ограничения обычных расшифровок, вы будете рады узнать, что существует лучший вариант. Вместо того, чтобы полагаться на командлет Start-Transcript, вы можете включить транскрипцию на уровне групповой политики.

Для этого откройте редактор объектов групповой политики, а затем перейдите в дереве консоли к Конфигурация компьютера | Административные шаблоны | Компоненты Windows | Windows PowerShell. Как вы можете видеть на рисунке ниже, есть параметр групповой политики под названием «Включить транскрипцию PowerShell». Включение этого параметра приводит к общесистемной транскрипции командлетов PowerShell. Это также избавляет вас от необходимости вручную запускать процесс транскрипции.

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

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

Изображение 4262
Если вам интересно, общесистемная функция расшифровки работает так же, как и командлет Start-Transcript. Единственное отличие состоит в том, что вам не нужно вручную вводить командлет, а транскрипции работают в нескольких сеансах и даже поддерживают PowerShell ISE.

Подробнее о возможностях транскрипции PowerShell

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