Что такое Wireshark и зачем он нужен
Wireshark - это свободно распространяемый анализатор сетевых протоколов с графическим интерфейсом. Он позволяет перехватывать трафик, проходящий через сетевой интерфейс вашего компьютера, и представлять его в удобочитаемом виде. В отличие от простых снифферов, Wireshark умеет декодировать сотни протоколов, от классических TCP и UDP до специализированных промышленных протоколов. Вы можете увидеть не просто последовательность байтов, а структурированную информацию: какие флаги установлены в заголовке TCP, какие домены запрашиваются через DNS, какие данные передаются в HTTP-запросах и ответах.
Сфера применения Wireshark в тестировании безопасности широка. С его помощью можно обнаружить передачу паролей в открытом виде, выявить подозрительную активность, связанную с вредоносным ПО, проанализировать, как приложение взаимодействует с сервером, и найти ошибки в конфигурации сети. При проведении пентеста Wireshark часто используется вместе с атаками типа ARP-спуфинг, когда трафик жертвы перенаправляется через систему атакующего и становится доступным для анализа. Также Wireshark незаменим при разборе инцидентов: если вы подозреваете, что система была скомпрометирована, захват трафика поможет восстановить картину происходящего.
Установка и первый запуск
В Kali Linux Wireshark уже установлен по умолчанию. Если по какой-то причине его нет, установить можно командой:
| 1 | sudo apt install wireshark |
Для других дистрибутивов Linux и macOS используются соответствующие пакетные менеджеры. В Windows Wireshark устанавливается с официального сайта, при этом в процессе установки будет предложено также установить Npcap - драйвер для захвата пакетов.
При первом запуске Wireshark может потребовать права администратора, поскольку для перехвата трафика нужен доступ к сетевым интерфейсам на низком уровне. В Linux это решается либо запуском от имени суперпользователя, либо добавлением пользователя в группу wireshark. Второй вариант предпочтительнее с точки зрения безопасности, поскольку не требует постоянного использования root-прав. Чтобы добавить себя в группу, выполните:
| 1 | sudo usermod -aG wireshark $USER |
После этого нужно выйти из системы и войти снова, чтобы изменения вступили в силу.
Интерфейс и захват трафика
После запуска Wireshark вы увидите главное окно, в котором перечислены доступные сетевые интерфейсы. Это может быть eth0 для проводного подключения, wlan0 для Wi-Fi или lo для локальной петли.
Выберите нужный интерфейс и нажмите кнопку с изображением плавника - начнётся захват пакетов. С этого момента Wireshark будет отображать все пакеты, проходящие через выбранный интерфейс, в реальном времени.
Окно Wireshark разделено на три панели. Верхняя содержит список пакетов с краткой информацией: номер, время, IP-адреса источника и назначения, протокол и краткое описание. Средняя панель показывает детали выбранного пакета, разбитые по уровням модели OSI. Нижняя панель отображает содержимое пакета в шестнадцатеричном и ASCII-формате. Такое разделение позволяет быстро переключаться между общим обзором и детальным анализом.
Однако захватывать весь трафик подряд не всегда удобно. Если сеть активна, список пакетов будет расти очень быстро, и найти в нём что-то конкретное станет сложно. Здесь на помощь приходят фильтры. В Wireshark есть два типа фильтров: фильтры захвата (capture filters), которые определяют, какие пакеты записывать, и фильтры отображения (display filters), которые управляют тем, что показывать из уже захваченного. Фильтры захвата задаются до начала сессии и используют синтаксис BPF. Например, чтобы захватывать только HTTP-трафик, можно указать:
| 1 | port 80 |
Фильтры отображения применяются к уже захваченным данным. Они более гибкие и позволяют использовать логические операторы. Например, чтобы показать только пакеты, связанные с определённым IP-адресом:
| 1 | ip.addr == 192.168.1.1 |
А чтобы отфильтровать HTTP-запросы с методом GET:
| 1 | http.request.method == "GET" |
Фильтры можно комбинировать с помощью && (И), || (ИЛИ) и ! (НЕ). Например, чтобы найти все пакеты, адресованные на порт 443, но не с определённого IP:
| 1 | tcp.port == 443 && ip.src != 192.168.1.100 |
Анализ распространённых протоколов
Наибольший интерес для тестировщика представляют протоколы прикладного уровня. Рассмотрим несколько примеров.
HTTP - это текстовый протокол, поэтому Wireshark показывает его содержимое в открытом виде. Если приложение передаёт данные без шифрования, вы сможете увидеть не только заголовки, но и тело запроса или ответа. Для этого нужно выбрать пакет с протоколом HTTP, развернуть раздел Hypertext Transfer Protocol в средней панели и посмотреть на содержимое. Чтобы извлечь все HTTP-запросы из захвата, используйте фильтр:
| 1 | http.request |
А чтобы увидеть только ответы сервера:
| 1 | http.response |
DNS - ещё один протокол, который часто анализируют. С его помощью можно узнать, какие домены запрашивает система. Это полезно при анализе вредоносного ПО, которое обращается к командным серверам. Фильтр для DNS-запросов:
| 1 | dns.qry.name |
Например, чтобы найти все запросы к домену example.com:
| 1 | dns.qry.name == "example.com" |
TCP - транспортный протокол, лежащий в основе большинства сетевых взаимодействий. Wireshark позволяет увидеть все детали TCP-соединения: трёхстороннее рукопожатие, передачу данных, завершение соединения. Если вы хотите проследить за конкретным потоком, щёлкните правой кнопкой на пакете и выберите Follow → TCP Stream. Wireshark откроет окно, в котором покажет весь обмен данными между клиентом и сервером в удобочитаемом виде. Это особенно полезно при анализе веб-сессий или при отладке сетевых приложений.
Практический пример: поиск учётных данных в открытом виде
Одна из классических задач Wireshark - обнаружить передачу паролей без шифрования. Допустим, вы тестируете внутреннее веб-приложение, которое использует HTTP вместо HTTPS. Чтобы найти учётные данные, запустите захват на интерфейсе, выполните вход в приложение, а затем остановите захват. В фильтре отображения введите:
| 1 | http.request.method == "POST" |
Это покажет все POST-запросы, которые обычно используются для отправки форм. Выберите один из них и разверните раздел HTML Form URL Encoded в средней панели. Если приложение передаёт логин и пароль в открытом виде, вы увидите их значения. Например, в строке может быть указано username=admin&password=secret123.
Этот пример наглядно демонстрирует, почему так важно использовать HTTPS. Даже если злоумышленник находится в той же сети, он может перехватить трафик и получить доступ к учётным данным. В ходе пентеста такая находка становится серьёзным аргументом в отчёте: она показывает реальный риск для бизнеса.
Расшифровка TLS-трафика
Современные приложения всё чаще используют HTTPS, и трафик становится зашифрованным. Однако Wireshark может расшифровать его, если у вас есть ключи шифрования. Существует несколько способов получить эти ключи. Если вы контролируете сервер, можете экспортировать закрытый ключ и указать его в настройках Wireshark. В меню Edit → Preferences → Protocols → TLS добавьте путь к файлу ключа в раздел RSA keys list.
Другой способ - использовать переменную окружения SSLKEYLOGFILE. Многие браузеры, включая Firefox и Chrome, поддерживают эту функцию: если задать переменную, браузер будет записывать сессионные ключи в указанный файл. Затем этот файл можно указать в настройках Wireshark, и он расшифрует трафик. Правда, этот метод работает только для трафика, сгенерированного самим браузером, и требует, чтобы вы запускали браузер с этой переменной.
Командная строка: tcpdump
Wireshark - это графический инструмент, но иногда у вас нет доступа к графическому интерфейсу. Например, вы подключились к удалённому серверу через SSH. В таких случаях на помощь приходит tcpdump - консольный анализатор трафика, который часто идёт в комплекте с Wireshark. Синтаксис tcpdump проще, но он требует знания фильтров BPF. Например, чтобы захватить трафик на порту 80 и сохранить его в файл, выполните:
| 1 | sudo tcpdump -i eth0 port 80 -w capture.pcap |
Затем этот файл можно перенести на локальную машину и открыть в Wireshark для детального анализа. Такой подход удобен, когда вы работаете на сервере без графического интерфейса.
Безопасность и этика
Перехват сетевого трафика - это мощная возможность, которая легко может быть использована во вред. Во многих странах несанкционированный перехват трафика является уголовным преступлением, даже если вы не изменяете данные и не получаете к ним доступ. Прежде чем запускать Wireshark в чужой сети, убедитесь, что у вас есть письменное разрешение от владельца инфраструктуры. Если вы тестируете собственную домашнюю сеть, помните, что ARP-спуфинг, который часто используется для перенаправления трафика, может нарушить работу других устройств. Всегда согласовывайте свои действия с заказчиком и работайте только в рамках согласованного объёма. И никогда не сохраняйте конфиденциальные данные, полученные в ходе анализа, дольше, чем это необходимо для выполнения задачи.
FAQ (Часто задаваемые вопросы)
Нужно ли запускать Wireshark от имени root?
Для захвата трафика нужны права администратора, но запускать графический интерфейс от root не рекомендуется. Лучше добавить пользователя в группу wireshark и работать от своего имени.
Почему Wireshark не видит трафик других устройств в сети?
В коммутируемых сетях коммутатор отправляет пакеты только тому устройству, которому они адресованы. Чтобы видеть весь трафик, нужно либо настроить зеркалирование портов на коммутаторе, либо использовать ARP-спуфинг для перенаправления трафика через вашу систему.
Чем отличаются фильтры захвата от фильтров отображения?
Фильтры захвата определяют, какие пакеты записывать, и задаются до начала сессии. Фильтры отображения применяются к уже захваченным данным и позволяют гибко управлять тем, что показывать на экране.
Можно ли расшифровать HTTPS-трафик в Wireshark?
Да, если у вас есть закрытый ключ сервера или файл с сессионными ключами, созданный браузером. Без ключей расшифровка невозможна, поскольку TLS использует стойкую криптографию.
Заключение
Wireshark - это инструмент, который превращает невидимые сетевые коммуникации в понятную и структурированную картину. Он позволяет увидеть то, что обычно скрыто от глаз, и понять, как на самом деле работают приложения и службы. Для тестировщика безопасности это бесценная возможность: вы можете обнаружить слабые места, которые не видны при сканировании портов, и подтвердить уязвимости реальными доказательствами. Начните с простых захватов в собственной лаборатории, постепенно осваивая фильтры и анализ протоколов. Со временем вы научитесь читать трафик так же легко, как читаете логи. Для дальнейшего изучения обратитесь к нашим статьям «Nmap для начинающих: сканирование портов и сетей на практике» и «OpenVAS: сканирование уязвимостей с открытым исходным кодом» — они помогут дополнить картину и перейти к активному тестированию.




