Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
RemotePSpy — Инструмент живого мониторинга удалённых сеансов PowerShell с использованием ETW для захвата и декодирования протокола WinRM/PSRP, предоставляющий трассировку выполнения команд и журналирование для анализа безопасности. | Kitploit
Инструменты/GitHubGitHub/withsecurelabs/remotepspy
Оборонительные ИнструментыСетевая безопасностьЦифровая криминалистикаРазведка угрозРеагирование на ИнцидентыАнализ Журналов
GitHubwithsecurelabs/remotepspy

RemotePSpy

Инструмент живого мониторинга удалённых сеансов PowerShell с использованием ETW для захвата и декодирования протокола WinRM/PSRP, предоставляющий трассировку выполнения команд и журналирование для анализа безопасности.

Репозиторий
19896 лет назадЕщё не проверено

Популярное

Смотреть все →

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

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

RemotePSpy

RemotePSpy обеспечивает мониторинг удалённых сеансов PowerShell в реальном времени, что особенно полезно для старых (до версии 5.0) версий PowerShell, в которых нет встроенных комплексных средств ведения журналов.

Инструмент использует Event Tracing for Windows (ETW) для получения данных сообщений из протокола WinRM, который используется в качестве транспорта для удалённого PowerShell, и декодирует различные уровни протокола, чтобы предоставить трассировку выполненных команд сценариев и их ввода/вывода.

В настоящее время это ранний исследовательский прототип, поэтому он не поддерживает все аспекты протокола удалённого PowerShell (PSRP). Тем не менее, он может дать полезное представление о том, что происходит в удалённом сеансе PowerShell.

Установка

Самый простой способ установки — с помощью pip:

root@kitploit:~
pip install remotepspy

Зависимости

Зависимости должны устанавливаться автоматически при установке через pip, но если вы хотите установить из исходного кода, они перечислены здесь:

  • Python 3.7
  • pywintrace (https://github.com/fireeye/pywintrace или https://pypi.org/project/pywintrace/)
  • psutils (https://pypi.org/project/pywintrace/)
  • libwim-15.dll из https://wimlib.net/ (для удобства включена в пакет RemotePSpy)

libwim-15.dll требуется только при использовании (рекомендуемого и используемого по умолчанию) поставщика ETW Microsoft-Windows-WinRM в качестве источника данных. Она используется для распаковки определённых потоковых объектов в протоколе WinRM/WSMan, которые содержат фрагменты сообщений PSRP. Просто поместите её в тот же каталог, что и основной скрипт Python.

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

Просто выполните RemotePSpy, чтобы начать мониторинг и ведение журнала, и нажмите Return, когда закончите. Журнал будет записан в текущий рабочий каталог с именем RemotePSpy.log.

Инструмент также выводит в stdout приблизительную копию того, что пользователь удалённого PowerShell видит на своём экране, наряду с более подробной информацией в файле журнала. Доступно более сложное ведение журнала — см. раздел «Ведение журнала» ниже.

Если вы установили Python так, что он находится в вашем PATH, исполняемые скрипты RemotePSpy также будут в вашем PATH. В противном случае вам, возможно, придётся искать их в каталоге site-packages вашего Python.

Версия поставщика ETW PowerShell

По умолчанию RemotePSpy использует (рекомендуемый) поставщик ETW WinRM в качестве источника данных. Если вы хотите использовать поставщик ETW PowerShell, вы можете выполнить RemotePSpy_powershell_prov.

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

Внутреннее устройство

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

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

  • ETWWinRM — получает события ETW от поставщика WinRM.

  • ETWPowerShell — получает события ETW от поставщика PowerShell.

  • PowerShellETWParser — определяет контекст Shell для событий ETW PowerShell, передавая данные фрагментов в PSRPDefragmenter. Также обеспечивает синхронизацию потоков.

  • SoapDefragmenter — повторно собирает полные сообщения SOAP WSMan из событий ETW WinRM, передавая полный SOAP в WSManPS.

  • WSManPS — отфильтровывает WinRM, не связанный с PowerShell, отслеживает контекст Shell, извлекает данные фрагментов PSRP из SOAP WSMan и передаёт данные фрагментов в PSRPDefragmenter.

  • PSRPDefragmenter — повторно собирает фрагменты PSRP в полные сообщения PSRP. Фрагменты собираются по ObjectID, а уникальность ObjectID обеспечивается с учётом контекста Shell. Передаёт окончательные сообщения PSRP в PSRPParser.

  • PSRPParser — декодирует необработанное двоичное сообщение PSRP, извлекая детали заголовка, такие как RPID, Pipeline ID и MessageType. Передаёт декодированные сообщения в SimpleCommandTracer.

  • SimpleCommandTracer — интерпретирует сообщения PSRP с помощью MessageType, извлекает и выводит в журнал/печать команды, аргументы и их вывод. Включает частичное декодирование сериализованных объектов PowerShell. Это не полная реализация всех возможных функций, но она пытается охватить большинство распространённых случаев, чтобы обеспечить трассировку выполнения.

Поток обработки при использовании поставщика ETW Microsoft-Windows-WinRM:

ETWWinRM -> SoapDefragmenter -> WSManPS -> PSRPDefragmenter -> PSRPParser -> SimpleCommandTracer

Поток обработки при использовании поставщика ETW Microsoft-Windows-PowerShell:

ETWPowerShell -> PowerShellETWParser -> PSRPDefragmenter -> PSRPParser -> SimpleCommandTracer

Ведение журнала

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

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

Имя каждого регистратора определяется константой LOGGER_NAME в классе, который его использует. Каждый регистратор определён как дочерний элемент «RemotePSpy» (например, RemotePSpy.etw). Программно регистраторы можно настроить с помощью logging.getLogger() с соответствующим именем журнала.

Для быстрой справки следующие регистраторы и уровни предоставят вам трассировки протокола на разных уровнях протокола:

Ключевые данные журналаКонстанта имени регистратораУровень
Трассировка командSimpleCommandTracer.LOGGER_NAMEINFO
Полная трассировка событий ETWETWWinRM.LOGGER_NAMEDEBUG
Полная трассировка сообщений SOAP WSManSoapDefragmenter.LOGGER_NAMEINFO
Полная трассировка каждого фрагмента PSRPPSRPDefragmenter.LOGGER_NAMEDEBUG
Полная трассировка сообщений PSRPPSRPParser.LOGGER_NAMEDEBUG

Обратите внимание, что SimpleCommandTracer также выводит трассировку в stdout, и эта трассировка пытается в некоторой степени воспроизвести отображение, которое видит пользователь удалённого PowerShell. Это отличается от журнала трассировки команд, который регистрирует каждую команду, вызов метода конвейера и вывод конвейера более точным способом, включая дополнительный контекст, такой как RPID и Pipeline ID.

Более полная сводка того, что появляется в каждом журнале на каком уровне, приведена ниже:

SimpleCommandTracer.LOGGER_NAME

ERROR:

  • Ошибки синтаксического анализа

WARNING:

  • Обнаружен неподдерживаемый тип или метод конвейера

INFO:

  • Фактическая трассировка команд

DEBUG:

  • Метод конвейера вызван без аргументов

PSRPParser.LOGGER_NAME

DEBUG:

  • Полная трассировка сообщений PSRP

PSRPDefragmenter.LOGGER_NAME

ERROR:

  • Получен фрагмент вне порядка

WARNING:

  • Некритичные аномалии отслеживания Shell

INFO:

  • Найден конечный фрагмент
  • Обнаружен отслеживаемый Shell ID в данных фрагмента, который ранее не отслеживался явно

DEBUG:

  • Полная трассировка каждого фрагмента PSRP

WSManPS.LOGGER_NAME

ERROR:

  • Серьёзные ошибки синтаксического анализа

WARNING:

  • Менее серьёзные ошибки синтаксического анализа
  • Перезапись существующих контекстов отслеживания shell/command

INFO:

  • Информация об отслеживании Shell и команд

DEBUG:

  • Полная трассировка сообщений WSMan, которые игнорируются, поскольку не связаны с PowerShell

SoapDefragmenter.LOGGER_NAME

INFO:

  • Полная трассировка сообщений SOAP WSMan

DEBUG:

  • Обработан фрагмент SOAP

PowerShellETWParser.LOGGER_NAME

DEBUG:

  • Информация об отслеживании Shell

ERROR:

  • Ошибки идентификации контекста Shell
  • Перехватывающие все исключения исключения из нижних уровней

ETWWinRM.LOGGER_NAME

DEBUG:

  • Полная трассировка событий ETW

INFO:

  • Запуск/остановка сеанса ETW
Скачать инструмент