Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

nanapi
nanapiは、世の中のあらゆる「やり方」を世界一集めることを目指します。
http://nanapi.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away