Determina os programas vulneráveis afetados pelo bug fantasma da glibc?

0

Como faço para determinar os programas que estão instalados no meu sistema, que podem ser vulneráveis ao bug fantasma da glibc? (Presumindo que o sistema tem uma versão vulnerável da biblioteca libc6).

Postagens como Como Corrigir e Proteger o Servidor Linux Contra a Vulnerabilidade Glibc GHOST # CVE-2015-0235 é útil, mas lsof pode não ser a melhor maneira de testá-lo.

    
por jww 28.01.2015 / 22:39

1 resposta

1

Bem, há mais uma maneira de esfolar um gato. Abaixo está como eu esfolado isto.

#! /bin/sh

EXE_DIRECTORIES="/bin /sbin /usr/bin /usr/local/bin"
SO_DIRECTORIES="/lib /lib64 /usr/local/lib"
FILES=
VULNERABLE=

echo "Generating file list..."
for d in $EXE_DIRECTORIES ; do

    TEMP='find "$d" -type f -executable -exec file -i '{}' \; | grep 'x-executable; charset=binary' | cut -f 1 -d:'

    for t in "$TEMP" ; do   
        FILES="$FILES $t"
    done
done

for d in $SO_DIRECTORIES ; do

    TEMP='find "$d" -type f -executable -exec file -i '{}' \; | grep 'x-executable; charset=binary' | cut -f 1 -d:'

    for t in "$TEMP" ; do   
        FILES="$FILES $t"
    done
done

echo "Testing executables..."
for f in $FILES ; do
    COUNT='nm -D "$f" 2>/dev/null | grep gethostbyname | grep -c -w U'
    if [ "$COUNT" -ne 0 ]; then
      VULNERABLE="$VULNERABLE $f"
    fi
done

COUNT1='echo "$FILES" | wc -l'
COUNT2='echo "$VULNERABLE" | grep -o " " | wc -l'
if [ "$COUNT2" -ne 0 ]; then
  COUNT2=$(( $COUNT2 + 1 ))
fi

echo "Examined components: $COUNT1"
echo "Vulnerable components: $COUNT2"
echo "*****************************"
for v in $VULNERABLE ; do
    echo "$v"
done

Em um sistema de desenvolvimento típico do Ubuntu 14, aqui está o que eu estou recebendo:

$ ./glibc-check.sh
Generating file list...
Testing executables...
Examined components: 961
Vulnerable components: 32
*****************************
/bin/ss
/bin/hostname
/bin/tar
/bin/cpio
/bin/netstat
/bin/ping
/bin/mt-gnu
/sbin/agetty
/sbin/route
/sbin/rarp
/sbin/ifconfig
/sbin/getty
/usr/bin/logger
/usr/bin/git-upload-pack
/usr/bin/aseqnet
/usr/bin/git
/usr/bin/telnet.netkit
/usr/bin/getent
/usr/bin/mtr
/usr/bin/mtools
/usr/bin/gethostip
/usr/bin/gdb
/usr/bin/tracepath
/usr/bin/python3.4m
/usr/bin/python2.7
/usr/bin/arping
/usr/bin/python3.4
/usr/bin/traceroute6.iputils
/usr/bin/openssl
/usr/bin/git-shell
/usr/bin/rsync

Mas é apenas um subconjunto dos 19.000+ pacotes que dependem da libc6 (são apenas os pacotes instalados; e seus únicos componentes em locais bem conhecidos):

$ apt-cache rdepends libc6 | wc -l
19125
    
por 28.01.2015 / 23:01