Как читать сокет VPN, не доверяя имени домена
Имя хоста рядом с процессом — это догадка об адресе. Прочитайте числовые конечные точки, состояние соединения и PID, которому принадлежит сокет, прежде чем винить клиент VPN.
Ваш просмотрщик конечных точек перечисляет процесс VPN рядом с доменом рекламной компании, и эта пара начинает историю, которую данные не могут подтвердить. Имя — это обратный поиск, нарисованный поверх числовой конечной точки, и оно меняется всякий раз, когда меняется поиск. Столбцы, выдерживающие проверку, — это адреса, состояние соединения и PID, которому принадлежит сокет.
Ничто в таблице сокетов не описывает, что прошло внутри соединения. Всё, что несёт имя хоста, уже истолковано за вас.
Разрешённое имя — это перевод, а не поле
Просмотрщик просит распознаватель превратить адрес в имя — так же, как работает запрос PTR в DNS. Ответ может прийти из локального кэша, из записи в файле hosts, из объявления обнаружения соседей или от провайдера, который на прошлой неделе отдал адрес кому-то другому, и у инструмента нет способа различить эти источники. Две машины, наблюдающие одно соединение, могут напечатать разные имена для одного и того же адреса партнёра, что трудно объяснить, если вы верите, что имя пришло с провода. Относитесь к метке как к удобству для человеческого глаза, а не как к утверждению о том, кто получил байты.
Документация TCPView описывает столбцы конечной точки, состояния и процесса и документирует отключение разрешённых имён, что стоит сделать, прежде чем вчитывать в домен какой-либо смысл. Отключение разрешения делает неопределённость видимой, а не создаёт её: адрес у вас по-прежнему есть, а работа по решению, что он значит, просто вернулась к вам.
Читайте числовые столбцы по порядку
Работайте слева направо и остановитесь на первом столбце, который отвечает на ваш вопрос. Локальная конечная точка показывает, к чему привязался процесс, удалённая конечная точка показывает, существует ли вообще партнёр, состояние показывает, живо ли сопоставление, а PID связывает строку с исполняемым файлом.
Три наблюдения ниже — иллюстративные формы, а не вывод, снятый с какой-либо машины здесь. Они сгруппированы по тому, что каждое может подтвердить, потому что именно этот вопрос люди и задают строке сокета:
| What the row shows | What it rules out | What it cannot show |
|---|---|---|
| An open listener with no peer address | Any remote party; nothing beyond this host has reached the port | Whether the local service is well configured, or who is allowed to use it |
| An association in the open state | That the entry is cosmetic; a peer address exists and was accepted | Which application data crossed it, or whether that peer is trustworthy |
| An association whose counters move | That the conversation is idle or already stale | What was requested, what came back, or who started it |
Открытый слушатель, до которого другие машины не могут дотянуться, привязанный к адресу обратной петли, — это способ, которым многие клиенты VPN выставляют собственный канал управления. Привязка к подстановочному адресу означает, что процесс принимал соединения на каждом интерфейсе, и опасно ли это, зависит от брандмауэра хоста, а не от самой строки. Только существующее сопоставление, несущее счётчики, похоже на обвинение, которое люди обычно хотят предъявить, и даже эта строка останавливается перед полезной нагрузкой.
Проверьте принадлежность, прежде чем назвать виновника
Идентичность процесса — это место, где большинство обвинений на самом деле рушится. PID переиспользуются, программы обновления и помощники браузера порождают недолговечных потомков, а клиент VPN может передать свой трафик привилегированной системной службе. Сравнивайте путь исполняемого файла и родительский процесс, а не отображаемое имя, потому что отображаемое имя выбирает тот, кто собрал бинарник.
tcpvcon -n -a
Get-Process -Id 4188 | Select-Object Id, ProcessName, Path
То же чтение существует в Linux, где статистика сокетов может нести сведения о процессе, когда у вас достаточно прав, чтобы видеть сокеты других пользователей. Запрос установленных сокетов, привязанных к порту 443 или от него, сужает вывод до строк, которые важны:
ss -tunp state established '( sport = :443 or dport = :443 )'
Зафиксируйте отметку времени вместе со строкой. Один PID — это движущаяся ссылка, потому что к тому моменту, когда вы откроете диспетчер процессов, сокет может принадлежать преемнику, а путь, который вы проверяете, может быть не тем, что удерживал соединение. Запишите пару конечных точек, состояние и PID как одно наблюдение, и находка переживёт перезапуск или второе мнение.
Чего ещё стоит имя
Имя хоста — не бесполезное доказательство. Оно фиксирует, что кто-то когда-то связал этот адрес с этим именем. Эта связь заслуживает внимания, когда адрес принадлежит провайдеру, обслуживающему тысячи несвязанных клиентов. Это более слабое утверждение, чем пункт назначения, и это единственное утверждение, которое метка может подтвердить.
Когда имя кажется неправильным, сравните адрес с опубликованными диапазонами провайдера, а затем спросите, что процесс делал в тот момент: проверку обновления, вызов лицензии, отправку телеметрии или рукопожатие туннеля. Эти действия оставляют разные формы соединения, и сопоставление формы с моментом информативнее, чем сопоставление имени с компанией, которой вы не доверяете.
Сохраните строку, прежде чем завершить общий помощник или что-то удалить. Защитимый вывод покрывает одну наблюдаемую конечную точку, её состояние и владельца; вердикт в масштабе бренда, построенный на разрешённой метке, не является доказательством, и успокоение, что знакомый хост загрузки обязан быть безвредным, тоже не доказательство.