Отслеживание обратного прослушивателя TCP из системного PID 4 (ядро) - PullRequest
2 голосов
/ 09 марта 2020

Постановка проблемы

Когда кто-то смотрит на прослушивающие порты на своей машине и замечает порт, такой как TCP 5985, прослушивающий, но с идентификатором собственного процесса, равным 4 (SYSTEM / kernel), снаружи При поиске номера порта в лучшем случае кажется сложным попытаться отследить истинную программу (двоичную), которая действительно стоит за запросом на прослушивающий порт. В таком примере с портом 5985 я знаю, что это WinRM, так как я включил его вручную и увидел изменение. Хотя я могу гуглить и предполагать, что то, что может вернуться, имеет смысл, это не значит, что я действительно знаю, что на самом деле просит его прослушать на этом порту, и я должен предположить, что в следующий раз Google может не дать однозначного ответа (я план на худшее). Чтобы воссоздать это, можно go в PowerShell (с повышенными правами) и ввести Enable-PSRemoting. Это запустит прослушиватель на 5985 по умолчанию и получит PID 4.

Почему я забочусь

Для настройки политики брандмауэра рабочей станции в большой компании Я запускаю крупномасштабный проект по поиску портов прослушивания на тысячах машин и централизованной агрегации результатов в нашем инструменте управления журналами (с тяжелой фильтрацией / документацией для того, что я уже знаю - так что я ищу только то, что осталось). Для каждого порта я запрашиваю PID-владелец, который его подписал, путь / имя, имя службы, сведения о файле (описание, название продукта и т. Д. c.). Однако с PID 4 это, конечно, недоступно, так как это само ядро. Мне действительно нужно больше знать об истинной программе, чтобы принять более обоснованное решение о ее первоначальной блокировке на этапе тестирования или нет. В любом случае, это должно быть понято и задокументировано относительно того, что это такое и какова причина для прослушивания вообще.

Вопрос

Как тогда можно отследить порт до фактической службы, которая его запросила? Крайне важно иметь возможность прослеживать это обратно программно через PowerShell (5.1 или 7.0 GA) или с помощью другого инструмента командной строки в скрипте - это не может быть GUI. Я не настоящий разработчик, но я довольно приличен с PowerShell - пока кто-то не даст мне однострочник, который заставит меня покачать головой о том, насколько очевидным это должно было быть для меня.

Уже Попробовал

  • Get-NetTCPConnection -State Listen -LocalPort 5985 | Select-Object *
  • Tcpvcon / TCPView
  • ProcessExplorer (в любом случае GUI, мне не поможет)
  • ProcessHacker (в любом случае GUI, мне это не поможет)

Для тех, кто зашел так далеко, и особенно для тех, кто отвечает - СПАСИБО!

...