■CVE-2015-0235(GHOST)対応について(debian wheezy) glibcのgethostbyname関数のバグ。 The GHOST Vulnerability https://community.qualys.com/blogs/laws-of-vulnerabilities/2015/01/27/the-ghost-vulnerability Qualys Security Advisory CVE-2015-0235 https://www.qualys.com/research/security-advisories/GHOST-CVE-2015-0235.txt ■glibcのバージョン 2.17と2.18の間で修正済みで、現在の本家の最新版は2014/09/07版の2.20 The GNU C Library (glibc) http://www.gnu.org/software/libc/ $ w3m -dump http://www.gnu.org/software/libc/ | grep "2\.[0-9]" The current stable version of glibc is 2.20. See the NEWS file in the glibc 2014-09-07: glibc 2.20 released. 2014-02-08: glibc 2.19 released. 2013-08-12: glibc 2.18 released. 2012-12-25: glibc 2.17 released. 2012-06-30: glibc 2.16 released. 2012-03-21: glibc 2.15 released. 2011-06-07: glibc 2.14 released. 2011-02-04: glibc 2.13 released. ■Wheezyの場合は、2011年にリリースされた2.13の派生なので影響を受ける。 $ cat /etc/*_{release,version} 2>/dev/null 7.8 $ dpkg -l | grep ^ii | grep libc6: ii libc6:amd64 2.13-38+deb7u6 amd64 Embedded GNU C Library: Shared libraries ii libc6:i386 2.13-38+deb7u6 i386 Embedded GNU C Library: Shared libraries ■Wheezy、Squeezeでは既に対応済みなので、 libc6のアップデートで対応出来ます。 DSA-3142-1 https://security-tracker.debian.org/tracker/CVE-2015-0235 ■「gethostbyname_r」関数でアップデートの前後を比較してみる。 $ wget -O ghost.c \ https://gist.githubusercontent.com/koelling/ef9b2b9d0be6d6dbab63/raw/de1730049198c64eaf8f8ab015a3c8b23b63fd34/gistfile1.c $ grep "gethostbyname\|puts" ghost.c retval = gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer), &result, &herrno); puts("vulnerable"); puts("not vulnerable"); puts("should not happen"); $ gcc ghost.c -o ghost && ./ghost vulnerable $ for opt in update upgrade autoremove autoclean;do sudo apt-get $opt -y -f ;done $ ./ghost not vulnerable ■バージョンの確認とgethostbyname系関数の「系」は似た関数があるから。 「gethostbyname_r」もある。 $ dpkg -l | grep ^ii | grep libc6: ii libc6:amd64 2.13-38+deb7u7 amd64 Embedded GNU C Library: Shared libraries ii libc6:i386 2.13-38+deb7u7 i386 Embedded GNU C Library: Shared libraries $ dpkg -L libc6:{amd64,i386} | grep libc.so.6 /lib/x86_64-linux-gnu/libc.so.6 /lib/i386-linux-gnu/libc.so.6 $ strings /lib/{i386,x86_64}-linux-gnu/libc.so.6 | \ grep gethostbyname | sort | uniq -c | sort -k 1 -nr | nl 1 4 gethostbyname_r 2 4 gethostbyname2_r 3 2 gethostbyname4_r 4 2 gethostbyname3_r 5 2 gethostbyname2 6 2 gethostbyname ■共有ライブラリの依存関係を確認。 動的から、すぐにスタティックリンクされていて、ネストは少ない。 $ ldd /lib/{i386,x86_64}-linux-gnu/libc.so.6 /lib/i386-linux-gnu/libc.so.6: /lib/ld-linux.so.2 (0xf7798000) linux-gate.so.1 => (0xf7797000) /lib/x86_64-linux-gnu/libc.so.6: /lib64/ld-linux-x86-64.so.2 (0x00007f549e0c6000) linux-vdso.so.1 => (0x00007fffd41ff000) $ ldd /lib/{i386,x86_64}-linux-gnu/libc.so.6 | awk '/\/lib.*2/ {print "ldd "$1}' | sh statically linked statically linked $ ldd -v /lib/{i386,x86_64}-linux-gnu/libc.so.6 /lib/i386-linux-gnu/libc.so.6: /lib/ld-linux.so.2 (0xf779e000) linux-gate.so.1 => (0xf779d000) Version information: /lib/i386-linux-gnu/libc.so.6: ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2 ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2 ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2 /lib/x86_64-linux-gnu/libc.so.6: /lib64/ld-linux-x86-64.so.2 (0x00007f905487f000) linux-vdso.so.1 => (0x00007fff5adc9000) Version information: /lib/x86_64-linux-gnu/libc.so.6: ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2 ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2 ■共有ライブラリという名前から、様々な箇所から参照される役割のため、 アップデート後はシステムの再起動を行うべき。。。 ■CUIで構成されたシステムの場合はほとんど使われていないので、念のため程度ですが。。。 $ lsof | grep libc bash 3469 labunix DEL REG 8,1 2449619 /lib/x86_64-linux-gnu/libc-2.13.so lsof 6055 labunix mem REG 8,1 1603600 2449590 /lib/x86_64-linux-gnu/libc-2.13.so grep 6056 labunix mem REG 8,1 1603600 2449590 /lib/x86_64-linux-gnu/libc-2.13.so lsof 6057 labunix mem REG 8,1 1603600 2449590 /lib/x86_64-linux-gnu/libc-2.13.so ■GUIで構成されたシステムの場合はほぼ再起動するしかないかと。。。 ※ $ lsof | grep libc | awk '{print $1}' | sort | uniq -c | \ sort -k 1 -nr | awk '{sum+=$1;print}END{print "sum "sum}' 133 gdbus 87 dconf 80 mozStorag 80 Analysis 31 threaded- 31 gmain 30 firefox 30 DOM 20 vlc 16 gnome-set 12 gnome-pan 11 nautilus 11 gnome-sou 10 metacity 10 localStor 10 URL 10 Timer 10 Socket 10 Proxy 10 Net 10 MediaMana 10 JS 10 ImageBrid 10 Image 10 IPDL 10 Hang 10 HTML5 10 Gecko_IOT 10 GMPThread 10 Composito 10 Cert 10 Cache2 10 Cache 9 uim-toolb 9 polkit-gn 9 notificat 9 gnome-ter 9 gnome-ses 9 gnome-scr 9 gnome-fal 9 bluetooth 8 vim 5 gsd-print 4 pulseaudi 4 alsa-sour 4 alsa-sink 3 ssh 3 bash 2 sort 2 lsof 2 gvfsd-tra 2 gvfsd-met 2 gvfsd 2 gvfs-gdu- 2 gvfs-afc- 2 glib-pacr 2 gconfd-2 2 dbus-daem 2 awk 1 xcompmgr 1 uniq 1 uim-xim 1 uim-helpe 1 mission-c 1 gvfsd-bur 1 gvfs-gpho 1 grep 1 dconf-ser 1 dbus-laun 1 at-spi-bu sum 908 ■GUI構成のシステムの場合、「libc-2.13.so」のピンポイントで絞っても、 124件あるので再起動しましょう。 $ lsof | grep libc-2.13.so | awk '{print $1}' | sort | uniq -c | \ sort -k 1 -nr | awk '{sum+=$1;print}END{print "sum "sum}' 17 gdbus 10 dconf 8 mozStorag 8 Analysis 4 gmain 3 threaded- 3 firefox 3 bash 3 DOM 2 vlc 2 sort 2 lsof 2 gvfs-afc- 2 awk 1 xcompmgr 1 uniq 1 uim-xim 1 uim-toolb 1 uim-helpe 1 ssh 1 pulseaudi 1 polkit-gn 1 notificat 1 nautilus 1 mission-c 1 metacity 1 localStor 1 gvfsd-tra 1 gvfsd-met 1 gvfsd-bur 1 gvfsd 1 gvfs-gpho 1 gvfs-gdu- 1 gsd-print 1 grep 1 gnome-ter 1 gnome-sou 1 gnome-set 1 gnome-ses 1 gnome-scr 1 gnome-pan 1 gnome-fal 1 glib-pacr 1 gconfd-2 1 dconf-ser 1 dbus-laun 1 dbus-daem 1 bluetooth 1 at-spi-bu 1 alsa-sour 1 alsa-sink 1 URL 1 Timer 1 Socket 1 Proxy 1 Net 1 MediaMana 1 JS 1 ImageBrid 1 Image 1 IPDL 1 Hang 1 HTML5 1 Gecko_IOT 1 GMPThread 1 Composito 1 Cert 1 Cache2 1 Cache sum 124