glibc의 유령 버그의 영향을받는 취약한 프로그램을 결정 하시겠습니까?


0

glibc의 고스트 버그에 취약 할 수있는 시스템에 설치된 프로그램을 어떻게 결정합니까? (시스템에 취약한 버전의 libc6 라이브러리가 있다고 가정).

다음과 같은 소식 Glibc GHOST 취약점에 대한 Linux 서버 패치 및 보호 방법 # CVE-2015-0235 도움이되지만 lsof 그것을 테스트하는 최선의 방법이 아닐 수도 있습니다.


1
거의 모든 프로그램이 사용합니다. libc, 비록 그들이 반드시 취약한 기능을 사용하지는 않지만 gethostbyname().
Barmar

@Barmar - 예, 동의했습니다. 그러나 나는 설치되어 취약한 것에 관심이 있습니다.
jww

따라서 취약한 libc를 사용하는 프로그램이나 깨진 함수를 사용하는 모든 프로그램을 원하십니까?
Barmar

1
프로그램이 간접적으로 취약 할 수 있습니다. 다른 라이브러리를 사용할 수도 있습니다. gethostbyname. 이 운동의 요점은 무엇입니까?
Barmar

1
취약한 기능은 호스트 이름을 IP 주소로 변환하는 기능이므로 네트워크를 다루는 대부분의 프로그램이 호스트 이름을 사용합니다. 하지만 그들은 신뢰할 수없는 출처에서 호스트 이름을 얻는 경우에만 실제로 취약합니다. 이것은 시스템을 검사하여 결정할 수있는 것이 아니며 각 응용 프로그램의 성격을 이해해야합니다.
Barmar

답변:


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

전형적인 우분투 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

그러나 libc6에 의존하는 19000 개 이상의 패키지 중 유일한 패키지 (패키지가 설치된 패키지와 잘 알려진 위치의 유일한 구성 요소)는 다음과 같습니다.

$ apt-cache rdepends libc6 | wc -l
19125
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.