Como verificar se um binário potencialmente acessa a internet sem executá-lo?

1

Existe uma maneira confiável de verificar se um executável binário potencialmente tenta acessar a Internet (por exemplo, para telefonar para casa) antes de executá-lo?

Eu acho que muitos binários usam ioctl / socket / connect da glibc para acessar a internet. Ou seja, fazer um objdump e verificar essas funções pode revelar algumas informações a esse respeito. Mas isso é suficiente? Existem maneiras de acessar a internet por não usar essas funções glibc? Como posso detectar isso?

    
por bonanza 22.03.2017 / 09:09

1 resposta

3

Os programas podem acessar a Internet de várias formas, por exemplo usando bibliotecas como libcurl . Você pode detectar aqueles usando ldd e verificar quais símbolos estão sendo usados no binário usando objdump novamente e ler a documentação para descobrir o que as várias funções fazem.

Mas se você está tentando checar um binário hostil, isso não será suficiente: o binário pode chamar o kernel usando chamadas do sistema diretamente para abrir sockets etc., ou pode carregar bibliotecas usando dlopen(3) para fazer é mais difícil detectar seu uso.

Se você deseja executar o binário sem acesso à rede, pode unshare it do namespace da rede:

unshare -n binary

Você precisa fazer isso como root, portanto, convém su voltar para outro usuário (talvez não seja seu, se for um binário hostil):

unshare -n su sacrificialuser -c binary

Como apontado por Gilles , isso não protege você de outros efeitos colaterais da execução do binário pode ter, incluindo a configuração de um cronjob que acessa a rede em nome do executável para qualquer finalidade.

Como alternativa, você pode configurar as regras iptables ou nftables para eliminar (e registrar) todo o tráfego de rede do binário; ou melhor ainda, configure uma VM e execute o binário dentro dela (e depois pare a VM).

    
por 22.03.2017 / 09:35