Как определить программы, установленные в моей системе, которые могут быть уязвимы для ghost ghost bug? (Предполагается, что в системе установлена уязвимая версия библиотеки libc6).

Сообщения, такие как « Как исправить и защитить сервер Linux от уязвимости Glibc GHOST» # CVE-2015-0235 , полезны, но lsof возможно, не лучший способ проверить это.

1 ответ1

1

Ну, есть еще один способ снять шкуру с кошки. Ниже я описал это.

#! /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

В типичной системе разработки Ubuntu 14 вот что я получаю:

$ ./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

Но это только подмножество 19000+ пакетов, которые зависят от libc6 (это только установленные пакеты и его единственные компоненты в хорошо известных местах):

$ apt-cache rdepends libc6 | wc -l
19125

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .