Feststellen von anfälligen Programmen, die vom Geisterbug von glibc betroffen sind?

479
jww

Wie bestimme ich die auf meinem System installierten Programme, die anfällig für den Ghost-Fehler von glibc sind? (Vorausgesetzt das System verfügt über eine verwundbare Version der libc6-Bibliothek).

Beiträge wie zum Beispiel zum Patchen und zum Schutz von Linux Server vor der Glibc GHOST-Sicherheitsanfälligkeit # CVE-2015-0235 sind hilfreich, sind aber lsofmöglicherweise nicht die beste Methode, um dies zu testen.

0
Fast alle Programme verwenden "libc", obwohl sie nicht unbedingt die verwundbare Funktion "gethostbyname ()" verwenden. Barmar vor 9 Jahren 1
@Barmar - ja, stimmte zu. Mich interessiert nur, was installiert und anfällig ist. jww vor 9 Jahren 0
Sie möchten also alle Programme, die die verwundbare libc verwenden, oder die die defekte Funktion verwenden? Barmar vor 9 Jahren 0
Ein Programm kann indirekt anfällig sein. Möglicherweise wird eine andere Bibliothek verwendet, die wiederum 'gethostbyname' verwendet. Was ist der Sinn dieser Übung? Barmar vor 9 Jahren 1
@Barmar - Zweck der Übung ist die Bewertung des Risikos für ein System. Wenn keine Programme die anfälligen Funktionen verwenden, besteht kein Risiko für die etablierten Betreiber. Wenn einige Programme die anfälligen Funktionen verwenden, muss ich wissen, welche davon zur Beurteilung des Risikos herangezogen werden. Wenn das Risiko zu groß ist, muss ich möglicherweise nach vorne gerichtete Dienste schließen. Wenn keine vorwärtsgerichteten Dienste die Funktion verwenden, kann ich OK sein. jww vor 9 Jahren 0
Die anfällige Funktion übersetzt Hostnamen in IP-Adressen. Daher verwenden die meisten Programme, die sich mit dem Netzwerk befassen, diese Funktion. Sie sind jedoch nur dann wirklich anfällig, wenn sie die Hostnamen aus nicht vertrauenswürdigen Quellen beziehen. Dies kann nicht durch Scannen des Systems festgestellt werden. Sie müssen die Art der einzelnen Anwendungen verstehen. Barmar vor 9 Jahren 1
@ Barmar - danke. * "... Sie müssen die Natur jeder Anwendung verstehen" * - Und wie erhalte ich die Liste der Anwendungen, um sie bewerten zu können? jww vor 9 Jahren 0
Vielleicht können Sie "nm" für jedes Programm verwenden, das "libc" verwendet, und sehen, ob es auf "gethostbyname" verweist. Aber wie gesagt, das findet keine Programme, die eine andere Bibliothek verwenden, die diese Funktion verwendet. Barmar vor 9 Jahren 0

1 Antwort auf die Frage

1
jww

Nun, es gibt mehr als eine Möglichkeit, eine Katze zu enthäuten. Nachfolgend wird beschrieben, wie ich es gehäutet habe.

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

Auf einem typischen Ubuntu 14-Entwicklungssystem bekomme ich Folgendes:

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

Aber es ist nur ein Teil der 19000+ Pakete, die von libc6 abhängen (es sind nur die installierten Pakete; und ihre einzigen Komponenten befinden sich an bekannten Speicherorten):

$ apt-cache rdepends libc6 | wc -l 19125