Определить уязвимые программы, затронутые ошибкой glibc?

372
jww

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

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

0
Почти все программы используют `libc`, хотя они не обязательно используют уязвимую функцию` gethostbyname () `. Barmar 9 лет назад 1
@ Бармар - да, согласился. Но меня интересует только то, что установлено и уязвимо. jww 9 лет назад 0
Итак, вы хотите, чтобы все программы, которые используют уязвимый libc, или которые используют поврежденную функцию? Barmar 9 лет назад 0
Программа может быть уязвимой косвенно. Он может использовать другую библиотеку, которая в свою очередь использует `gethostbyname`. Какой смысл этого упражнения? Barmar 9 лет назад 1
@ Barmar - цель упражнения - оценить риск для системы. Если никакие программы не используют уязвимые функции, то нет никакого существенного риска. Если некоторые программы используют уязвимые функции, то мне нужно знать, какие из них, чтобы я мог оценить риск. Если риск слишком велик, то мне, возможно, придется закрыть сервисы, обращенные вперед. Если никакие передовые службы не используют эту функцию, тогда я могу быть в порядке. jww 9 лет назад 0
Эта уязвимая функция переводит имена хостов в IP-адреса, поэтому большинство программ, работающих с сетью, используют ее. Но они действительно уязвимы, только если получают имена хостов из ненадежных источников. Это не то, что можно определить при сканировании системы, нужно понимать природу каждого приложения. Barmar 9 лет назад 1
@ Бармар - спасибо. * «... вам нужно понять природу каждого приложения» * - И как мне получить список приложений, чтобы я мог оценить их? jww 9 лет назад 0
Возможно, вы можете использовать `nm` в каждой программе, которая использует` libc`, и посмотреть, ссылается ли она на `gethostbyname`. Но, как я сказал, не найдутся программы, использующие какую-то другую библиотеку, которая использует эту функцию. Barmar 9 лет назад 0

1 ответ на вопрос

1
jww

Well, there's more that one way to skin a cat. Below is how I skinned it.

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

On a typical Ubuntu 14 development system, here's what I am getting:

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

But its only a subset of the 19000+ packages that depend on libc6 (its only the installed packages; and its only components in well known locations):

$ apt-cache rdepends libc6 | wc -l 19125 

Похожие вопросы