A auditoria do Linux pode ajudar. Pelo menos, localizará usuários e processos que fazem conexões de rede de datagrama. Pacotes UDP são datagramas.
Primeiro, instale a auditd
estrutura em sua plataforma e garanta que auditctl -l
retorne algo, mesmo que diga que nenhuma regra foi definida.
Em seguida, adicione uma regra para assistir à chamada do sistema socket()
e marque-a para facilitar a localização mais tarde ( -k
). Eu preciso assumir que você está em uma arquitetura de 64 bits, mas você pode substituir b32
no lugar do b64
se você não é.
auditctl -a exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET
Você precisa escolher entre as páginas de manual e os arquivos de cabeçalho para criar isso, mas o que ele captura é essencialmente essa chamada de sistema:, socket(PF_INET, SOCK_DGRAM|X, Y)
onde o terceiro parâmetro não é especificado, mas frequentemente zero. PF_INET
é 2 e SOCK_DGRAM
é 2. As conexões TCP usariam o SOCK_STREAM
que definiria a1=1
. ( SOCK_DGRAM
no segundo parâmetro pode ser ORed com SOCK_NONBLOCK
ou SOCK_CLOEXEC
, portanto, a &=
comparação.) Essa -k SOCKET
é a nossa palavra-chave que queremos usar ao pesquisar trilhas de auditoria posteriormente. Pode ser qualquer coisa, mas eu gosto de simplificar.
Deixe alguns momentos para revisar as trilhas de auditoria. Opcionalmente, você pode forçar alguns pacotes executando o ping de um host na rede, o que causará uma pesquisa de DNS, que usa o UDP, que deve disparar nosso alerta de auditoria.
ausearch -i -ts today -k SOCKET
E uma saída semelhante à seção abaixo será exibida. Estou abreviando para destacar as partes importantes
type=SYSCALL ... arch=x86_64 syscall=socket success=yes exit=1 a0=2 a1=2 ... pid=14510 ... auid=zlagtime uid=zlagtime ... euid=zlagtime ... comm=ping exe=/usr/bin/ping key=SOCKET
Na saída acima, podemos ver que o ping
comando fez com que o soquete fosse aberto. Eu poderia então executar strace -p 14510
o processo, se ainda estivesse em execução. O ppid
(ID do processo pai) também é listado, caso seja um script que gera muito o filho problemático.
Agora, se você tiver muito tráfego UDP, isso não será bom o suficiente e você precisará recorrer ao OProfile ou SystemTap , ambos atualmente além dos meus conhecimentos.
Isso deve ajudar a restringir as coisas no caso geral.
Quando terminar, remova a regra de auditoria usando a mesma linha usada para criá-la, substitua apenas -a
por -d
.
auditctl -d exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET