Глава 5. Пример расследования PowerShell/ Python

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

Интеграция PowerShell и Python предоставляет некую жизнеспособную платформу для локальных или удалённых расследований. Наш "старый" способ удалённого подключения к машинам при помощи DCOM (Distributed Component Object Model) и/ или RPC (Remote Procedure Calls). Эти методы интеграции вовлекали существенные усложнения, а внекоторых случаях и уязвимости, основывающихся на большом числе портов, которое требовалось настраивать.

Наш новый метод имеет название Удалённого PowerShell. Вспомните его основы, которые мы рассматривали в Главе 3 при применении Invoke-Command CmdLet. В этой главе мы предпримем намного более глубокое рассмотрение Удалённого PowerShell. Однако, прежде чем мы начнём пользоваться такими новыми возможностями Удалённого PowerShell, это может потребовать включения в вашей среде. Одним из замечательных свойств Удалённого PowerShell является то, что он запускается через HTTPS и это делается через единственный порт - 5985.

Включение удалённого PowerShell

Самый первый шаг состоит во включении Удалённого PowerShell в вашей машине расследований (той, с которой вы осуществляете все изыскания). Вы скорее всего уже предвосхитили то, что это мы намерены выполнить при помощи CmdLet PowerShell. Достаточно интересно, что он имеет название Enable-PSRemoting. Как всегда, мы начинаем с Get-Help для понимания все параметров и вариантов Листинг 5-1.

 

Листинг 5-1. Get-Help Enable-PSRemoting


PS C:\PS> Get-Help Enable-PSRemoting

NAME
    Enable-PSRemoting

SYNOPSIS
    настраивает ваш компьютер на приём удалённых команд.

SYNTAX
    Enable-PSRemoting [-Confirm] [-Force] [-SkipNetworkProfileCheck] [-WhatIf] [<CommonParameters>]

DESCRIPTION
    CmdLet Enable-PSRemoting настраивает ваш компьютер на приём удалённых команд Windows PowerShell, которые отправляются при помощи технологии WS-Management.

    По умолчанию, в Windows Server® 2012, Удалённый PowerShell Windows включён. Вы можете применять Enable-PSRemoting для включения Удалённого PowerShell Windows в прочих поддерживаемых версиях Windows и для повторного включения удалённой работы в Windows Server 2012 если он стал отключённым.

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

    Начиная с Windows PowerShell 3.0, данный cmdlet Enable-PSRemoting может включать Удалённый PowerShell Windows в верисях клиентов Windows когда такой компьютер пребывает в общедоступной сетевой среде.
    Для получения дополнительных сведений, обратитесь к описанию параметра SkipNetworkProfileCheck.

    Cmdlet Enable-PSRemoting выполняет следующие операции:

    - Выполняет cmdlet Set-WSManQuickConfig , который осуществляет такие задачи:

    ----- Запускает необходимую службу WinRM.

    ----- Настраивает тип запуска в службе WinRM на Automatic.

    ----- Создаёт некое ожидание приёма запросов с любого IP адреса, если его ещё нет.

    ----- Включает исключение межсетевого экрана для взаимодействия WS-Management.

    ----- Ргеистрирует настройки сеансов Microsoft.PowerShell и Microsoft.PowerShell.Workflow, если они пока не были зарегистрированы.

    ----- Регистрирует настройку сеанса Microsoft.PowerShell32 в 64-битных компьютерах, если она ещё не была зарегистрирована.

    ----- Включает все настройки сеанса.

    ----- Изменяет значение дескриптора безопасности всех настроек сеанса для разрешения удалённого доступа.

    ----- Перезапускает саму службу WinRM чтобы все перечисленные изменения вступили в действие.

    Для запуска этого cmdlet, запустите Windows PowerShell воспользовавшись вариантом Run с правами Администратора.
    ПРЕДОСТЕРЕЖЕНИЕ: В системах и с Windows PowerShell 3.0, и с Windows PowerShell 2.0, не применяйте Windows PowerShell 2.0 для запуска cmdlet Enable-PSRemoting и Disable-PSRemoting. Такая команда может выглядеть исполненной, однако удалённая работа не будет настроена должным образом. Удалённые команды и последующие включения и отключения удалённой работы, скорее всего, завершатся неудачно.

RELATED LINKS
    Online Version: http://go.microsoft.com/fwlink/?LinkId=821475
    Disable-PSSessionConfiguration
    Enable-PSSessionConfiguration
    Get-PSSessionConfiguration
    Register-PSSessionConfiguration
    Set-PSSessionConfiguration
    Disable-PSRemoting

REMARKS
    To see the examples, type: "get-help Enable-PSRemoting -examples".
    For more information, type: "get-help Enable-PSRemoting -detailed".
    For technical information, type: "get-help Enable-PSRemoting -full".
    For online help, type: "get-help Enable-PSRemoting -online"
 	   

При исполнении PSRemoting применяйте параметр -Force чтобы исключать необходимость подтверждений пользователя для данного процесса. Рисунок 5-1. отображает исполнение этого CmdLet.

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

Так как он уже включён в вашей локальной машине, это предоставляет следующую обратную реакцию. Скорее всего при всключении PSremoting будет запрошен windows remote management (WinRM). Все системы, сетевые среды и настройки ОС имеют отличия, поэтому проконсультируйтесь со своим системным администратором на предмет поддержки. Microsoft и сторонние разработчики предоставляют информацию по надлежащей настройке. Обратитесь, пожалуйста, к этим руководствам за дополнительными сведениями. Кроме того, эти настройки следует выполнить в тех компьютерах, в которых вы также намерены проводить расследования.

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/enable-psremoting%253Fview%253Dpowershell-6

https://docs.microsoft.com/en-us/windows/desktop/winrm/winrm-powershell-commandlets

https://www.howtogeek.com/117192/how-to-run-powershell-commands-on-remote-computers/

 

Рисунок 5-1


Включение удалённого PowerShell

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

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

Сбор и анализ удалённых наблюдений

Применение сочетания PowerShell и Python для сбора свидетельств от отличных от той на которой мы работаем систем крайне важно для расширения сферы наших расследований. Давайте для начала рассмотрим крайне полезный для локальных и удалённых расследований CmdLet PowerShell: Get-DNSClientCache.

Кэш Клиента DNS, или иначе DNS преобразователь (resolver) является локальной базой данных, сопровождаемой самой операционной системой. Он содержит свидетельчтва последних посещений на веб сайты и прочие местоположения в Интернете. Проще говоря, кэш DNS Клиента это просто некая запись последних запросов DNS, которые ускоряют доступ к уже определённым IP- адресам вебсайтов. Имейте в виду, что очистка истории вашего веб браузеоа для сокрытия вашей активности не включает кэш преобразователя DNS самих Операционных систем. Многие программы очистки будут очищать этот кэш, однако пользователи могут его пропускать, а он может служить важным свидетельством недавней активности.

Сам DNS, или Doman Name System (Система доменных имён), предоставляет некую трансляцию из дружественных пользователю имён, таких как microsoft.com, google.com и python-forensic.org в IP- адреса, по которым они располагаются. Всякий раз когда вы вводите в своём браузере нечто подобное www.amazon.com, осуществляется поиск DNS для трансляции читаемого человеком адреса в некий IP адрес, по которому можно выполнить доступ.

Запуск процесса Get DNSClientCache после очистки имеющегося кэша приводит к следующим результатам.


PS C:\WINDOWS\system32>  Get-DnsClientCache | Select-Object -Property Entry

		

Естественно, этим CmdLet ничего не возвращается, поскольку кэш пустой.

Для добавления данных в DnsClientCache откройте веб браузер и загрузите домашнюю странице Google, как это показано на Рисунке 5-2.

 

Рисунок 5-2


Запуск браузера и переход на домашнюю страницу Google

Теперь исполнение этого CmdLet доставляет некоторые ожидаемые и неожиданные результаты (Листинг 5-2).

 

Листинг 5-2. Результаты CmdLet Get-DnsClientCache


PS C:\WINDOWS\system32> Get-DnsClientCache | Select-Object -Property Entry

Entry
-----
beacons.gcp.gvt2.com
beacons.gcp.gvt2.com
beacons.gcp.gvt2.com
google.com
google.com
google.com
google.com
google.com
google.com
bolt.dropbox.com
 	   

Разумеется, ожидаемым является DNS местоположение для google.com, так как открывался именно google.com. Однако что это за наведение справок о beacons.gcp.gvt.com? По результатам исследования в интернете, он принадлежит Пщщпдуи применяется ими для отслеживания активности и предоставления автоматической подсказки при вводе в окне поиска Google. Ссылка bolt.dropbox.com не имеет отношения к к доступу к www.google.com, скорее всего к нему выполнялось обращение из- за обычной синхронизации, так как в этой системе работает Dropbox.

Как и прочие CmdLets, Get-ClientDnsCache имеет дополнительные свойства и связанные с ним участвующие функции. Их можно опросить направив конвейером вывод Get-ClientDnsCache в Get-Member, как это показано на Рисунке 5-3.

 

Рисунок 5-3


Участвующие методы и свойства для Get-DnsClientCache

Одним из хороших примеров является свойство TimeToLive, которое предоставляет информацию, относящуюся к тому сколько времени в секундах будет пребывать определённая запись в кэше Клиента DNS. Знание о том, что эти записи присутствуют только ограниченное время, несомненно, требует определённой оперативности в сборе такой информации в процессе расследования. Рассмотрите Листинг 5-3.

 

Листинг 5-3. Получение значения времени жизни для всех записей DnsClientCache


PS C:\WINDOWS\system32> Get-DnsClientCache | Select-Object -Property Entry, TimetoLive

Entry                      TimetoLive
-----                      ----------
www.gstatic.com                    17
ssl.gstatic.com                   292
www.google.com                    244
apis.google.com                   131
apis.google.com                   131
apis.google.com                   131
apis.google.com                   131
apis.google.com                   131
apis.google.com                   131
apis.google.com                   131
google.com                        292
google.com                        292
google.com                        292
google.com                        292
google.com                        292
google.com                        292
fonts.gstatic.com                 292
fonts.gstatic.com                 292
encrypted-tbn0.gstatic.com        292
 	   

Вызов удалённого доступа

Конечно же, более сцщественным приложением Get-DnsClientCache является удалённое исполнение этого CmdLet имея целью находящуюся в расследовании систему. Применяя Invoke-Command с указанием целью компьютера Lenovo-Upstairs для перехвата самых последних DnsClientCaches отображено в Листинге 5-4. Полученный вывод был урезан для выделения представляющих наибольший интерес местоположений, в частности, доступ к dfinews.com, forensicsmag.com и steganography.com.

 

Листинг 5-4. Удалённый вызов Get-DnsClientCache


PS C:\WINDOWS\system32> Invoke-Command -ComputerName Lenovo-Upstairs -Credential Lenovo-Upstairs\Remote-Admin -ScriptBlock {Get-DnsClientCache | Select-Object -Property Entry |Out-String}

Entry
-----
www.dfinews.com
www.dfinews.com
www.forensicmag.com
www.forensicmag.com
www.forensicmag.com
www.forensicmag.com
www.forensicmag.com

...
... reduced results for brevity
...

steganography.com
steganography.com
www.wired.com
www.wired.com
www.wired.com
www.wired.com
 	   

Построение сценария PowerShell Script для получения DnsCache

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

  1. Изменить конспект

  2. Измсенить описание

  3. Поменять входные параметры

  4. Воспользоваться CmdLet Get-ClientDnsCache

Листинг 5-5 показывает необходимый сценарий PowerShell.

 

Листинг 5-5. Сценарий PowerShell CacheAcquire.ps1


<#
.synopsis
Collect ClientDnsCache

- Пользователь определяет компьютер назначения

Этот сценарий выдаст некий простейший файл вывода ascii output, содержащий самый последний DnsCache целевого компьютера

.Description
Данный сценарий собирает DnsCache с назначенного компьютера

.parameter targetComputer
Определит компьтер назначения

.parameter user
Задать имя пользователя с правами Администратора для целевого компьютера

.parameter resultFile
Определить значение полного пути к файлу вывода

.example

./CacheAcquire.ps1 -user Lenovo-Upstairs\Remote-Admin -targetComputer Lenovo-Upstairs -resultFile cache.txt
С указанного в назначении компьютера собрать значение последнего DnsCache
#>

# Раздел определения параметров
param(
    [string]$user,
    [string]$targetComputer,
    [string]$resultFile
)

# Получить значение ClientDnsCache с указанного в назначении компьютера и сохранить полученный результат в локальной переменной
$r = Invoke-Command -ComputerName $targetComputer -Credential $user -ScriptBlock {Get-DnsClientCache | Select-Object -Property Entry | Out-String}

# Записать полученный в результате список в простом ascii виде в предписанный локальный файл
$r | Out-File $resultFile -Encoding ascii

 	   

Одно важное замечание: При применении команды Invoke-Command любое создание файла вывода будет иметь место в самом удалённом компьютере. Следовательно, мы перехватываем полученный результат данного сценарий (в данном примере $r) и затем отправляем комвейером эту переменную в запрошенный локальный файл.

Пример исполнения данного сценария из ISE PowerShell отображено в Рисунках с 5-4 по 5-6.

 

Рисунок 5-4


Исполнение CacheAcquire.ps1 и ввод полномочий

 

Рисунок 5-5


Результирующий список кэша

 

Рисунок 5-6


Получаемый в результате файл cache.txt

Как и для предыдущих сценариев PowerShell, Get-Help предоставит все наобходимые подробности, позволяющие прочим пользователям также применять этот сценарий (Листинг 5-6).

 

Листинг 5-6. Отображение подсказки для сценария PowerShell CacheAcquire


PS C:\WINDOWS\system32> Get-Help .\CacheAcquire.ps1

NAME
    C:\PS\CacheAcquire.ps1

SYNOPSIS
    Collect ClientDnsCache

    - Пользователь определяет компьютер назначения

Этот сценарий выдаст некий простейший файл вывода ascii output, содержащий самый последний DnsCache целевого компьютера

SYNTAX
    C:\PS\CacheAcquire.ps1 [[-user] <String>] [[-targetComputer] <String>] [[-resultFile] <String>] [<CommonParameters>]

DESCRIPTION
    Данный сценарий собирает DnsCache с назначенного компьютера

RELATED LINKS

REMARKS
    To see the examples, type: "get-help C:\PS\CacheAcquire.ps1 -examples".
    For more information, type: "get-help C:\PS\CacheAcquire.ps1 -detailed".
    For technical information, type: "get-help C:\PS\CacheAcquire.ps1 -full".
 	   

Сценарий Python и сценарий PowerShell CacheAquire

Теперь, когда у нас имеется надёжный сценарий PowerShell для выборки кэша DNS с удалённых компьютеров, нашим следующим шагом является построение сценария Python, который будет запускать этот сценарий PowerShell, а затем осуществлять поиск в предоставляемых результатах. Основная идея состоит в поиске по выбранному кэшу DNS с применением некого набора ключевых слов, предоставляемых этому сценарию Python из некого файла. Рассмотрите Листинг 5-7).

 

Листинг 5-7. AcquireDNS.py


'''
Acquire DNS Scripts from a Remote Computer
Version 1.0 January 2018
Author: Chet Hosmer
PYTHON Version 3.x is Required

'''

''' Раздел импорта библиотек '''

import subprocess       # subprocess library
import argparse         # argument parsing library
import os               # Operating System Path

''' Раздел разбора аргументов '''

def ValidateFile(theFile):
    ''' Проверяем наличие указанного файла
        он должен иметься, а мы обязаны иметь 
        права на чтение в его папке.
        если это не так,
        возбуждаем соответствующую ошибку
    '''

    # Проверяем наличие указанного файла
    if not os.path.exists(theFile):
        raise argparse.ArgumentTypeError('File does not exist')

    # Проверяем доступ на чтение указанного файла
    if os.access(theFile, os.R_OK):
        return theFile
    else:
        raise argparse.ArgumentTypeError('File is not readable')

#Конец ValidateFile ===================================

''' Определяем и выполняем разбор командной строки, проверяем полученные аргументы и возвращаем результаты'''

parser = argparse.ArgumentParser('Remote Client DNS Cache with PowerShell  - Version 1.0 January 2018')

parser.add_argument('-c', '--computer',  required=True,
                    help="Определите компьютер назначения для выборки данных")

parser.add_argument('-u', '--user',      required=True,
                    help="Задайте учётную запись удалённого пользователя")

parser.add_argument('-t', '--tmp',       required=True,
                    help="Определите файл временного разультата для сценария PowerShell")

parser.add_argument('-s', '--srch',      required=True,
                    type=ValidateFile, help="Определите файл искомых ключевых слов")

args = parser.parse_args()

computer = args.computer
user     = args.user
tmp      = args.tmp
srch     = args.srch

print("Получение кэша DNS\n")

print("Target:       ", computer)
print("User:         ", user)
print("Keyword File: ", srch)

'''Раздел загрузки ключевых слов '''

print("Лбрабатываем ввод ключевых слов")
try:
    with open(srch, 'r') as keywordFile:
        words = keywordFile.read()
        word = words.lower()
        words = words.strip()
        wordList = words.split()
        wordSet = set(wordList)
        keyWordList = list(wordSet)
        print("\nКлючевые слова поиска")
        for eachKeyword in keyWordList:
            print(eachKeyword)
        print()
except Exception as err:
    print("Ошибка обработки файла ключевых слов: ", str(err))
    quit()

''' Основной раздел сценария '''

if __name__ == '__main__':
    try:
        "' Раздел исполнения POWERSHELL "'
        print()
        command = "powershell -ExecutionPolicy ByPass -File C:/PS/CacheAcquire.ps1"+" -targetComputer "+
        computer+ " -user "+user+ "
        -resultFile "+tmp

        print("Executing: ", command)
        print()

        powerShellResult = subprocess.run(command, stdout=subprocess.PIPE)

        if powerShellResult.stderr == None:
            '''DNS CACHE SEARCHING SECTION '''
            hitList = []
            try:
                with open(tmp, 'r') as results:
                    for eachLine in results:
                        eachLine = eachLine.strip()
                        eachLine = eachLine.lower()
                        for eachKeyword in keyWordList:
                            if eachKeyword in eachLine:
                                hitList.append(eachLine)
            except Exception as err:
                print("Error Processing Result File: ", str(err))

            '''Раздел вывода результата '''

            print("Найденный в кэше DNS подозрительные записи")
            for eachEntry in hitList:
                print(eachEntry)

            print("\nСценарий выполнен")
        else:
            print("Ошибка PowerShell:", p.stderr)

    except Exception as err:
        print ("Не могу создать файл вывода: "+str(err))
        quit()
 	   

Наш сценарий был разбит на приводимые ниже разделы. Мы дадим пояснения по каждому из них:

  • Импорт библиотек

  • Разбор аргументов

  • Загрузка ключевых слов

  • Исполнение PowerShell

  • Поиск в кэше DNS

  • Вывод результата

Импорт библиотек: Как и указывает само название, именно здесь загружаются необходимые библиотеки Python. Они включают:

  • subprocess: Применяется для запуска сценарий PowerShell

  • os: Используется для проверки файла и папки

  • argparse: Служит для разбора аргументов командной строки

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

  • -c предписывает название компьютера назначения

  • -u задаёт имя пользователя удалённого компьютера

  • -t определяет временный файл, который будет применяться нашим сценарием PowerShell для хранения получаемых данных кэша DNS

  • -s указывает название локального файла, который содержит ключевые слова для поиска

Библиотека argparse из Python автоматически обрабатывает значение командной строки и проверяет что наш пользователь ввёл все необходимые аргументы. Эта баблиотека также предоставляет создаваемую её подсказку в случае такой необходимости. Для получения подсказки просто исполните данный сценарий с единственным параметром -h, как это показано в Листинг 5-7).

 

Листинг 5-7. AcquireDNS.py


usage: Remote Client DNS Cache with PowerShell- Version 1.0 January 2018
       [-h] -c COMPUTER -u USER -t TMP -s SRCH

optional arguments:
  -h, --help            show this help message and exit
  -c COMPUTER, --computer COMPUTER
                        Определите компьютер назначения для выборки данных
  -u USER, --user USER  Задайте учётную запись удалённого пользователя
  -t TMP, --tmp TMP     Определите файл временного разультата для сценария PowerShell
  -s SRCH, --srch SRCH  Определите файл искомых ключевых слов
 	   

Загрузка ключевых слов: Данный раздел открывает файл обозначенных ключевых слов и создаёт список уникальных ключевых слов поиска в полученном файле Рисунок 5-7. Этот раздел расщепляет все поступающие извне сиволы для всех записей и обеспечивет чтобы все записи были представлены в нижнем регистре для наилучшего поиска соответствий.

 

Рисунок 5-7


Образец файла ключевых слов

Исполнение PowerShell: Данный раздел запускает наш сценарий PowerShell. Вначале он создаёт некую переменную с названием command, которая будет применяться методом subprocess.run() для запуска этого сценария PowerShell. Она определяет наш сценарий PowerShell CacheAcquire.ps1. В процессы выполнения данного подпроцесса команды, выполняется проверка на успаешность завершения по наличию стандартной ошибки или stderr. Результатом обязан быть None. Если это не так, наш сценарий Python выдаст сообщение об ошибке, выработанное PowwerShell.

Поиск в кэше DNS: Этот раздел обрабатывает все строки из полученного результата кэша, выработанного PowerShell. Каждая строка затем проверяется на предмет определения находится ли в ней какое- то из заданных ключевых слов. Если выявлено некое ключевое слово, вся такая строка целиком сохраняется в переменной Python hitList.

Вывод результата: Данный раздел выполняет итерации по имеющейся переменной Python hitList и выводит на печать на экран все результаты.

Рисунок 5-8 отображает успешное выполнение нашего сценария Python AcquireDNS.py, который воспользовался сценарием PowerShell CacheAcquire.ps1. Этот сценарий был выполнен из соответствующей командной строки Windows с полномочиями Администратора.


C:\PS>python AcquireDNS.py -c PYTHON-3 -u PYTHON-3\USER-HIDDEN -t c:\ps\tmp.txt -s c:\ps\keywords.txt
		
 

Рисунок 5-8


Выборка удалённого DNS в действии

Данный вывод прежде всего отображает следующее:

  1. Выделенные из командной строки детали:

    1. Компьютер назначения

    2. Имя удалённого пользователя

    3. Локальный файл ключевых слов

  2. Дикодированный список ключевых слов, которые выделены из вашего локального файла ключевых слов

  3. Подробности командной строки PowerShell

  4. Найденные записи кэша DNS, которые содержат ключевые слова из списка искомых ключевых слов.

Обзор получения и поиска DNS Cache клиента

Данный пример расширяет нашу модель, которая применяет сильные стороны PowerShell совместно с неким сценарием Python, который выполняет поиск в получаемых результатах. Что ещё важнее, данная модель применяется для получения данных кэширования DNS Клиента удалённого компьютера при помощи CmdLet Invoke-Command.

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

Задачи для изучения: Получение DNSCache для нескольких целевых компьютеров

Воспользуйтесь тем что вы узнали об исполнении сценариев PowerShell из Python и данной модели для предоставления:

  • Расширения данного решения, предоставлением загружаемого списка компьютеров назначения совместно с необходимыми учётными записями пользователей.

  • Дополнительно к поиску во всех получаемых в результате кэшированных данных DNS, выявляйте какие из записей DNS являются общими во всех выбранных вами компьютерах.

Выводы

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

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

Главе 6 обсудит некоторые дальнейшие вопросы которые могут расширить получаемое сочетание PowerShell и Python для целей расследований. Кроме того, наше вложенное дополнение предоставляет примеры сочетания и PowerShell, и Python/ PowerShell, которые составляют крепкую основу для последующих расследований и расширений.