LoginSignup
12
12

More than 5 years have passed since last update.

アプリケーションエンジニアだけどGHOST(CVE-2015-0235)対応してみた

Last updated at Posted at 2015-01-28

GHOST(glibcアップデート)対応

Linuxのglibcに深刻なセキュリティホールがみつかりました。
「GHOST」(CVE-2015-0235)と呼ばれているそうです。

インフラ周りは本職ではないのですが、個人的に利用しているLinux(CentOS)があるので急ぎ対応してみました。
ので、よかったら参考にしてください。

間違っていたら教えてください!(大声)

基本的にはこちらを参照しています。(僕でも理解出来て、とても分かりやすいです。ありがたし。。)
http://www.walbrix.com/jp/blog/2015-01-ghost.html

※限定された用途で利用しているOSなので、いきなりアップデート&OS再起動を実施しましたが、商用利用しているOS等は影響範囲含めもろもろご注意をば。。。

CentOSのバージョン確認

$ cat /etc/redhat-release
CentOS release 6.5 (Final)

ダメっぽい。。(6.5は対象)

glibcのバージョン確認

$ rpm -q glibc
glibc-2.12-1.7.el6_0.5.x86_64

やっぱりダメっぽい。。(2.12は対象)

脆弱性確認

というわけで、脆弱性があるかどうか確認します。

適当な場所に以下のプログラムを作成します。

$ vi GHOST.c

引用元:http://www.openwall.com/lists/oss-security/2015/01/27/9

#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

#define CANARY "in_the_coal_mine"

struct {
  char buffer[1024];
  char canary[sizeof(CANARY)];
} temp = { "buffer", CANARY };

int main(void) {
  struct hostent resbuf;
  struct hostent *result;
  int herrno;
  int retval;

  /*** strlen (name) = size_needed - sizeof (*host_addr) - sizeof (*h_addr_ptrs) - 1; ***/
  size_t len = sizeof(temp.buffer) - 16*sizeof(unsigned char) - 2*sizeof(char *) - 1;
  char name[sizeof(temp.buffer)];
  memset(name, '0', len);
  name[len] = '\0';

  retval = gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer), &result, &herrno);

  if (strcmp(temp.canary, CANARY) != 0) {
    puts("vulnerable");
    exit(EXIT_SUCCESS);
  }
  if (retval == ERANGE) {
    puts("not vulnerable");
    exit(EXIT_SUCCESS);
  }
  puts("should not happen");
  exit(EXIT_FAILURE);
}

コンパイルして実行します。

$ gcc -o GHOST GHOST.c
$ ./GHOST
vulnerable

\(^o^)/オワタ
(vulnerable=脆弱性あり)

glibcのバージョンアップ

というわけで、バージョンアップします。

$ yum clean all
$ yum update glibc

最後にcompleteが表示されればOK。

バージョン再確認

$ rpm -q glibc
glibc-2.12-1.149.el6_6.5.x86_64

基本のバージョン自体は変わらないらしい。(修正版として配布される)

OS再起動

$ reboot

脆弱性再確認

$ ./GHOST
not vulnerable

キタ━━━━(゚∀゚)━━━━!!
(not vulnerable=脆弱性なし)

最後に

ざっとアプリケーション確認したけど、僕の環境では問題なく動いてそうε-(´∀`*)ホッ
これから詳しい原因や影響範囲を調べよう。あと、もっとインフラ周り勉強しなきゃ。

参考サイト

Linuxに深刻なセキュリティホール「GHOST」、今すぐパッチが必要:
http://japan.zdnet.com/article/35059585/
glibcのgethostbyname関数に存在するCVE-2015-0235(GHOST)脆弱性について:
http://www.walbrix.com/jp/blog/2015-01-ghost.html
oss-security - Qualys Security Advisory CVE-2015-0235 - GHOST: glibc gethostbyname buffer overflow:
http://www.openwall.com/lists/oss-security/2015/01/27/9

12
12
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12