Como encontrar qualquer arquivo que é um executável ou biblioteca

1

Digamos que alguém forneça a você um tarball, dizendo que é um código-fonte e nada mais. Você quer ter certeza de que isso é verdade e que nenhum executável ou biblioteca carregada de vírus está escondida em um diretório. Como usar o comando find para fazer isso?

Obrigado.

    
por Asker 19.11.2012 / 15:14

2 respostas

8

Você pode descompactar o arquivo em um local seguro (como um sistema de arquivos montado noexec ) e verifique os diretórios resultantes para binários. O comando file pode dizer se um arquivo é texto, código-fonte, binário, etc.

[root@xt ~]# file ./packages/Digest-MD5-2.33/t/badfile.t 
./packages/Digest-MD5-2.33/t/badfile.t: ASCII text

[root@xt ~]# file ./packages/Digest-MD5-2.33/MD5.pm 
./packages/Digest-MD5-2.33/MD5.pm: Perl5 module source text

[root@xt ~]# file ./packages/rrdtool-1.0.50/src/gdpng.o 
./packages/rrdtool-1.0.50/src/gdpng.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped

Algo como o seguinte, em que você filtra os executáveis ELF funcionaria:

find . -type f -exec file {} + | grep ELF

E a saída seria:

[root@xt ~]# find . -type f -exec file {} + | grep ELF
./packages/rrdtool-1.0.50/gd1.3/gdfontl.o:       ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
./packages/rrdtool-1.0.50/gd1.3/gdfontmb.o:      ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
./packages/rrdtool-1.0.50/gd1.3/gdlucidan10l2.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
./packages/rrdtool-1.0.50/gd1.3/gdlucidab14.o:   ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
./packages/rrdtool-1.0.50/gd1.3/gdlucidan10.o:   ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
    
por 19.11.2012 / 15:35
1

Um arquivo marcado como executável não precisa ser um arquivo ou objeto executável ou carregável.

Aqui está o que eu uso:

find ./ -type f -name "*" -not -name "*.o" -exec sh -c '
    case "$(head -n 1 "$1")" in
      ?ELF*) exit 0;;
      MZ*) exit 0;;
      #!*/ocamlrun*)exit0;;
    esac
exit 1
' sh {} \; -print
    
por 26.03.2014 / 11:22