このブログではウェブサイトやその上で動作しているウェブアプリケーションの脆弱性について紹介すると共に注意喚起をする目的でまとめられています。
今回は、Linux等で使用されているC言語向けライブラリglibcの脆弱性であるGHOST(CVE-2015-0235)について解説をしています。
※なお、内容に関しましてはHASHコンサルティング株式会社の徳丸 浩様に監修いただいています。
+++++++++++++++++++++++++++++++++++++++++++++++
GHOST脆弱性(CVE-2015-0235)
■概要
Linux OSの内部で使用されているライブラリglibc(GNU C ライブラリ)にgethostbynameという関数があり、ホスト名からIPアドレスを求める目的で利用されています。このgethostbyname関数には、処理に必要なメモリのバイト数計算に誤りがあり、バッファオーバーフロー攻撃が可能となることが2015年1月に発見されました。この脆弱性はGHOSTと呼ばれます。
gethostbyname関数を利用しているソフトウェアのうち、メール配信サーバーEximでは実際に任意コード実行が可能であることが実証され、その他のソフトウェアでも影響があるものが報告されています。
■攻撃のイメージと影響
以下のPHPスクリプトをコンソールにて実行します。
<?php
gethostbyname(str_repeat('0', 1027));
gethostbyname(str_repeat('0', 1028));
str_repeat関数は、文字列を指定の数字だけ繰り返す関数です。このためgethostbyname関数の引数は、それぞれ 0 を1027個並べたものと、0を1028個並べたものになります。このスクリプトの実行結果は以下のとおりです。
$ php gethostbyename-vul.php
*** glibc detected *** php: realloc(): invalid next size: 0x08b0b118 ***
======= Backtrace: =========
/lib/libc.so.6[0x92de31]
/lib/libc.so.6[0x9330d1]
/lib/libc.so.6(realloc+0xdc)[0x93326c]
【後略】
不正なメモリ操作が検知され、PHPが異常終了していることがわかります。
以上はPHPでの脆弱性の例ですが、メール配信サーバーEximを使っている場合、インターネット経由の攻撃により、任意のコードが実行できることが確認されています。
■脆弱性による影響
Eximを使っている場合、外部から任意コードが実行され、結果として以下の影響を受ける可能性があります。
- サーバー内のファイルの閲覧、書き換え、削除
- 不正なシステム操作(ユーザアカウントの追加、変更、その他)
- 不正なプログラムのダウンロード、実行
- 他のサーバーへの攻撃(踏み台)
Exim以外では任意コード実行が検証されてはいませんが、前述のPHPの例のようにソフトウェアがクラッシュ(異常終了)したり、最悪ケースでは任意コードが実行されてしまう可能性があります。
■脆弱性の有無の確認方法
この脆弱性の発見者であるQualys社が脆弱性判定用のプログラム(C言語ソース)を公表しています。
https://www.qualys.com/research/security-advisories/GHOST-CVE-2015-0235.txt
$ gcc GHOST.c コンパイル
$ ./a.out 実行
Vulnerable Vulnerableと表示されたら脆弱
$
■対策
各Linuxディストリビューションから対策パッチが提供されていますので、該当するパッチを適用してください。
■参考文献
Qualys社のアドバイザリ(英文)
https://www.qualys.com/research/security-advisories/GHOST-CVE-2015-0235.txt
独立行政法人情報処理推進機構(IPA)の注意喚起