Регулярно слышу этот вопрос в разных формулировках. Индикатор сети мигает, когда ничего не открыто. Антивирус молчит, но кажется, что молчит зря. Или человек увидел в диспетчере задач незнакомое имя процесса и теперь не знает, что с этим делать.
Ответ на такой вопрос получается за десять минут стандартными средствами системы, без специальных программ и без переустановки. Показываю порядок действий и то, как отличать нормальное от ненормального — потому что вторая часть обычно оказывается сложнее первой.
Шаг первый: кто с кем соединён
Для Linux и macOS подойдёт ss или lsof. Для Windows — netstat -bano из командной строки с правами администратора либо вкладка «Сеть» в мониторе ресурсов.
ss -tunp state established
tcp 192.0.2.15:43732 203.0.113.20:443 users:(("firefox",pid=2417,fd=143)) tcp 192.0.2.15:41888 203.0.113.87:443 users:(("firefox",pid=2417,fd=18)) tcp 192.0.2.15:39998 198.51.100.44:443 users:(("telegram-desktop",pid=3120,fd=14)) tcp 192.0.2.15:52210 198.51.100.9:443 users:(("packagekitd",pid=1042,fd=22))
Читается слева направо: протокол, мой адрес и порт, адрес и порт собеседника, процесс с его идентификатором. Ключевое здесь — последний столбец: он связывает соединение с конкретной программой, и без этой связки дальше двигаться бессмысленно.
То же самое через lsof, если привычнее:
lsof -i -n -P | grep ESTABLISHED
firefox 2417 user 18u IPv4 TCP 192.0.2.15:41888->203.0.113.87:443 (ESTABLISHED) telegram- 3120 user 12u IPv4 TCP 192.0.2.15:39998->198.51.100.44:443 (ESTABLISHED)
Первое, что нужно сделать с этим списком, — прочитать имена процессов и честно ответить, все ли вы узнаёте. Обычно узнаются почти все: браузер, мессенджер, клиент облачного хранилища, обновлятор системы.
Шаг второй: куда именно
Незнакомый адрес сам по себе ничего не говорит. Смотрим, кому он принадлежит:
dig +short -x 203.0.113.20 whois 203.0.113.20 | grep -iE 'netname|orgname'
20.113.0.203.bc.example-cloud.net. NetName: EXAMPLE-CLOUD-2 OrgName: Example Cloud Provider
Здесь важна одна вещь, которая ломает интуицию: принадлежность адреса крупному облаку не означает ни хорошего, ни плохого. Сегодня в облаках живёт почти всё — и сервисы, которыми вы пользуетесь, и инфраструктура тех, кто вам не нравится. Имя облачного провайдера в обратной записи — это не приговор и не индульгенция.
Гораздо информативнее не адрес, а имя, которое запрашивалось перед соединением.
Шаг третий: какие домены запрашивались
Соединению почти всегда предшествует DNS-запрос. Его видно так:
tshark -i any -f "udp port 53" -T fields -e dns.qry.name -a duration:30
Если DNS у вас зашифрован, этот способ ничего не покажет — тогда смотрите журнал резолвера или статистику на роутере, если он её ведёт.
По списку доменов картина обычно проясняется сразу: телеметрия системы, сервис обновлений, синхронизация заметок, аналитика внутри какого-нибудь приложения. Домены читаются человеком, в отличие от адресов.
Что считать нормой
Тут и начинается настоящая работа, потому что «странное» соединение — почти всегда чьё-то легитимное.
Фоновая активность в простое — норма. Проверка обновлений, синхронизация, тикеты телеметрии, поддержание сессий мессенджеров. Компьютер, у которого при простое ноль исходящих соединений, — редкость.
Много соединений к одному облаку — норма. Один сервис легко открывает десяток параллельных соединений.
Соединения от процессов, о которых вы не думали как о сетевых, — обычно норма. Текстовый редактор проверяет обновления, просмотрщик картинок тянет превью, офисный пакет ходит за шрифтами.
А вот на что стоит посмотреть внимательнее:
Процесс, которого нет ни в одном списке установленного, с именем, похожим на системное, но с опечаткой или из необычного каталога. Проверяется просто:
ls -l /proc/2417/exe # где на диске лежит исполняемый файл
Соединения на нестандартные порты, особенно постоянные. Соединение на порт вроде 4344, которое держится часами, — повод разобрать его до конца, а не пролистать.
Регулярность. Соединение строго раз в пять минут, круглосуточно, к одному адресу — типичное поведение агента, который «отмечается». Агент вполне может оказаться корпоративным и легальным, но знать, что это, полезно.
Резкая активность ночью при выключенном экране, если ничего фонового не настроено.
Чего эта проверка не покажет
Ограничения стоит понимать заранее.
Она показывает срез в момент запуска. Программа, соединяющаяся раз в час, в этот срез не попадёт — нужен либо длинный захват, либо повторные проверки.
Она не расшифрует содержимое: вы увидите, что процесс общается с сервером, но не что именно уходит.
И она не заменяет проверку системы на вредоносное ПО. Достаточно аккуратная программа умеет прятаться от штатных средств, а некоторые вещи вообще живут внутри браузера как расширение — тогда всё исходящее выглядит как обычный браузерный трафик.
Что делать с результатом
Если нашли процесс, который не опознаётся: посмотрите путь к файлу, прогоните его по публичным базам по хешу, поищите имя вместе со словом «служба» — часто это оказывается компонент чего-то установленного.
Если это оказалась программа, которой вы не пользуетесь, — удаляйте её штатно, а не убивайте процесс. Убитый процесс вернётся после перезагрузки, потому что запускается службой или автозагрузкой.
И запомните на будущее самое полезное: не «увидел незнакомый адрес — паникую», а «нашёл процесс, узнал, чей он, решил, нужен ли он мне». Список соединений — это инструмент для второго вопроса, а не для первого.
Пишу про такое регулярно в телеграм-канале «Бендеров решает»: разборы, практика и истории из SOC.