Глава 7. Слабые стороны и последующие соображения

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

Слабые стороны

Самая первая состоит в применении CmdLet PowerShell Invoke-Command без необходимости отвечать всякий раз в неком всплывающем блоке регистрации, как это показано на Рисунке 7-1.

 

Рисунок 7-1


Запрос полномочий Windows PowerShell

Это можно сделать путём создания некого нового объекта полномочий с применением системы PSCredential Автоматизации управления системой (System Management Automation) PowerShell. Рисунок 7-2 показывает пример сценария PowerShell, который делает выборку из журнала системных событий компьютера PLUTO с применением полномочий пользователя с правами Удалённого Администрирования. Это требует всего четырёх шагов:

  1. Создание двух локальных переменных PowerShell: $targetComputer (название того компьютера, к оторому вы намерены выполнять доступ) и $userName (собственно имя пользователя данного удалённого компьютера).

  2. Создать обычную строку текста, $password, со значением пароля, кторый связан с этим удалённым пользователем. Отметим, что сам пароль здесь скрывается, жизненно необходимо чтобы вы уберегали данный сценарий от несанкционированного доступа.

  3. Этот шаг содержит две важные части:

    1. Во- первых, наш пароль в оычном текстовом виде преобразуется в необходимую безопасную строку, $securePassword. Эта безопасная строка создаётся CmdLet ConvertTo-SecureString, которая затем применяется с прочими CmdLet или функциями, требующими некий параметр с типом SecureString.

    2. Далее создаётся необходимый безопасный объект полномочий, $credential. Это требует $userName и вновь созданного $securePassword в качестве параметров.

  4. Наконец, наша вновь созданная переменная PowerShell $credential может быть передана в виде параметра -Credential внутри соответствующего CmdLet Invoke-Command.

 

Рисунок 7-2


Сценарий PowerShell для сбора событий удалённого журнала со встроенными полномочиями

Выполнение этого сценария выполняет выборку событий из системного журнала в компьютере PLUTO, как это показано на Рисунке 7-3. Отметим, что для краткости данный вывод был усечён.

 

Рисунок 7-3


Образец выполнения EventProcessCred.ps1

Второе улучшение применяет данный подход встроенных полномочий. Основной причиной для встроенных полномочий (помимо удобства) является то, что сценарии могут запрашивать данные с большого числа удалённых компьютеров одним и тем же сценарием без необходимости взаимодействия с ним. Один из способов осуществления этого состоит в создании некого списка названий целевых компьютеров для доступа. Списки PowerShell полезны и могут применяться для циклов при множественном выборе с применением оператора foreach Рисунок 7-4 показывает пример такого запроса системных журналов с двух компьютеров, определённых в неком списке PowerShell.

[Замечание]Замечание

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

 

Рисунок 7-4


Выемка журналов системных событий со множества целевых компьютеров со встроенными полномочиями

Этот сценарий разбит на три этапа:

  1. Первый раздел создаёт объект PowerShell $listOfTargets, который является простым списком строк. Каждая строка представляет само название целевого компьютера. Этот вновь созданный список не имеет элементов. Затем $listOfTargets наполняется с применением метода Add, связанный с тем объектом списка PowerShell, который был создан.

  2. Создаётся переменная значения по умолчанию $remoteUser и устанавливается равной "Remote-Admin", что явдяется учётной записью удалённого пользователя с правами Администратора. Кроме того, создаётся $securePassword, которй будет применяться для доступа ко всем удалённым целям. Отметим, что значение $credential пока не создано, так как требуется его уникальное создание для каждой выборки из цели.

  3. Наконец,создаётся некий цикл, который выполняет следующее:

    1. Отображает название того Хоста, который обрабатывется всякий раз в этом цикле.

    2. Комбинирует значение текущего $targetComputer и применяемого по умолчанию $remoteUser для создания соответствующего уникального $userName для выбранной цели. Например: PLUTO\Remote-Admin.

    3. Далее создаётся уникальный объект $credential с помощью System.Management.Automation PowerShell при каждом проходе итерации цикла с примененем переменных PowerShell $userName и $securePassword.

    4. После этого выполняется Invoke-Command для получения журнала событий системы в текущем $targetComputer и со связанным $credential, требуюшимся для доступа.

Сокращённый вывод этого сцнария приводится на Рисунке 7-5.

 

Рисунок 7-5


Выполнение ыборки журнала системных событий со множества целевых компьютеров

Последующие соображения

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

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

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

Выводы

Эта глава остановилась на паре слабых сторон и улучшила аспекты автоматизации PowerShell путём встраиваемых полномочий в сценариях PowerShell. Такое встраивание делает возможным одновременное получение множества свидетельств, которые затем могут доставляться в элементы Python или обрабатываться ими. Это несомненно расширит получаемое богатство расследований и ускорит получение и анализ собираемых доказательств. {Прим. пер.: Напомним, что асинхронность может также дать свои плюсы при получении данных, поэтому не сковывайте себя синронностью традиционного subprocess и конвейероной обработки!}

Желаю удачи и с нетерпением жду жду общения и совместной работы над новыми исследовательскими решениями, которые уникальным образом объединяют PowerShell и Python.