Existe uma maneira de filtrar / seguir um fluxo TCP / SSL com base em um ID de processo específico usando o Wireshark ?
Existe uma maneira de filtrar / seguir um fluxo TCP / SSL com base em um ID de processo específico usando o Wireshark ?
Respostas:
Não vejo como. O PID não chega ao fio (em geral), e o Wireshark permite que você veja o que está no fio - potencialmente todas as máquinas que estão se comunicando através do fio. De qualquer forma, os IDs de processo não são exclusivos em máquinas diferentes.
Caso você esteja procurando uma maneira alternativa e o ambiente que você usa seja o Windows, o Network Monitor 3.3 da Microsoft é uma boa escolha. Possui a coluna de nome do processo. Você pode adicioná-lo facilmente a um filtro usando o menu de contexto e aplicar o filtro. Como de costume, a GUI é muito intuitiva ...
Você pode combinar os números de porta de WireShark com os números de porta de, digamos, netstat , que lhe dirá o PID de um processo escutando nessa porta.
Use o Microsoft Message Analyzer v1.4
Navegue até ProcessId no seletor de campo.
Etw
-> EtwProviderMsg
--> EventRecord
---> Header
----> ProcessId
Clique com o botão direito e adicione como coluna
No Windows, há uma versão experimental que faz isso, conforme descrito na lista de discussão, Filtrar por nome de processo local
Isso é uma coisa importante para monitorar onde certos processos tentam se conectar, e parece que não há uma maneira conveniente de fazer isso no Linux. No entanto, várias soluções alternativas são possíveis e, portanto, acho que vale a pena mencioná-las.
Existe um programa chamado nonet que permite executar um programa sem acesso à Internet (tenho a maioria dos inicializadores de programas em meu sistema configurados com ele). Ele usa setguid para executar um processo no grupo nonet e define uma regra iptables para recusar todas as conexões deste grupo.
Update: agora eu uso um sistema ainda mais simples, você pode facilmente ter uma configuração legível do iptables com ferm, e apenas usar o programa sg
para rodar um programa com um grupo específico. Iptables também permite que você redirecione o tráfego para que você possa até mesmo encaminhá-lo para uma interface separada ou um proxy local em uma porta, o que permite que você filtre no wirehark ou faça LOG nos pacotes diretamente do iptables se você não quiser desabilitar toda a internet enquanto você estão verificando o tráfego.
Não é muito complicado adaptá-lo para executar um programa em um grupo e cortar todo o outro tráfego com iptables durante o tempo de execução e então você poderia capturar o tráfego apenas desse processo.
Se eu conseguir escrevê-lo, postarei um link aqui.
Por outro lado, você sempre pode executar um processo em uma máquina virtual e farejar a interface correta para isolar as conexões que ela faz, mas isso seria uma solução bastante inferior ...
Se você deseja seguir um aplicativo que ainda precisa ser iniciado, é certamente possível:
docker run -t -i ubuntu /bin/bash
(mude "ubuntu" para sua distro favorita, isso não precisa ser o mesmo que em seu sistema real)any
, wlan0
, eth0
, ... escolher o novo interface virtual docker0
em seu lugar.Você pode ter algumas dúvidas sobre como executar seu software em um contêiner, então aqui estão as respostas para as perguntas que você provavelmente deseja fazer:
Em alguns casos, você não pode filtrar por id de processo. Por exemplo, no meu caso, precisei farejar o tráfego de um processo. Mas eu encontrei em sua configuração o endereço IP da máquina alvo, adicionei filtro ip.dst==someip
e voila. Não vai funcionar em nenhum caso, mas para alguns é útil.
Obtenha o número da porta usando netstat
:
netstat -b
E então use o filtro Wireshark:
tcp.port == portnumber
O uso strace
é mais adequado para esta situação.
strace -f -e trace=network -s 10000 -p <PID>;
opções -f
para também rastrear todos os processos bifurcados, -e trace=netwrok
para filtrar apenas a chamada do sistema de rede e -s
para exibir o comprimento da string de até 10.000 caracteres.
Você também pode rastrear apenas certas chamadas, como operações de envio, recebimento e leitura.
strace -f -e trace=send,recv,read -s 10000 -p <PID>;
Você pode verificar os números de porta com estes exemplos de comando no WireShark: -
tcp.port == 80
tcp.port == 14220