米国のセキュリティベンダー「Qualys」の研究者らは、Linuxで広く採用されている基本ライブラリGNU C Library (glibc)の__nss_hostname_digits_dots()関数にバッファオーバーフローの脆弱性が存在することを明らかにした。
この脆弱性を悪用されると遠隔から任意のコードを実行される危険性があり、その際に認証情報などを必要しないため危険性が高いと認識されている。
Qualysの研究者らはこの脆弱性の動作を確認するため、32ビットおよび64ビットの双方のマシンにおいてEximメールサーバを立ち上げ、攻撃が可能であるかどうかを実証。どちらのマシンでも攻撃が可能だったと説明されている。
この脆弱性は2000年にリリースされたGNU C Library glibc-2.2より存在しており、10年以上にわたって脆弱性が存在し続けたことになる。
この脆弱性には「GHOST」という名称が付けられている。バッファオーバーフローが発見された関数は__nss_hostname_digits_dots()だが、ユーザランドのソフトウェアからはgethostbyname()などの関数を呼び出すことでこの関数が実行される。
このため、gethostbynameをGetHOSTbynameともじって「GHOST」と命名されている。
Qualysの研究者によると、2013年の時点でこの脆弱性を発見して、glibc-2.17とglibc-2.18の間において修正を行っているが、当時はセキュリティに関わるリスクとしては認識されていなかったため、長期サポートの対象となっているバージョンのLinuxディストリビューションではこの脆弱性が修正されることなく残り続けているという。
セキュリティ・アドバイザリでは、脆弱性を抱えるLinuxディストリビューションとしてDebian 7(wheezy)、Red Hat Enterprise Linux 6および7、CentOS 6および7、Ubuntu 12.04が挙げられている。
今回発表された脆弱性を突くには、メールサーバによる検証用にサーバで運用されているサービスに何らかのデータを送信して最終的に__nss_hostname_digits_dots()関数までたどりつけばよいため、簡単に乗っ取りが行われる可能性が高い。
http://news.mynavi.jp/news/2015/01/28/123/
3: ラ ケブラーダ(西日本)@\(^o^)/ 2015/01/28(水) 23:36:05.61 ID:08yJjTAI0.net
UBUNTUだけど、危ないの?
10: タイガースープレックス(やわらか銀行)@\(^o^)/ 2015/01/29(木) 00:09:50.69 ID:RGrT/SD80.net
>>3
危ないよ
49: エクスプロイダー(京都府)@\(^o^)/ 2015/01/29(木) 05:37:55.05 ID:yjYvUo380.net
>>1
修正後のバージョンUbuntuなら14.04や14.10を使ってれば既に塞がってるという認識でよさそうか。
7: キチンシンク(東京都)@\(^o^)/ 2015/01/28(水) 23:50:50.46 ID:ZunlY9kx0.net
gethostbynameなんてもうほとんど使われてないだろ
大したことねー
8: ラ ケブラーダ(東京都)@\(^o^)/ 2015/01/28(水) 23:55:44.14 ID:4rrLQ8xo0.net
ふつうgetaddrinfo使うだろ(´・ω・`)
4: エルボーバット(SB-iPhone)@\(^o^)/ 2015/01/28(水) 23:36:28.62 ID:L5dsmgRz0.net
あーあれね
確かにそうだね
5: ジャンピングカラテキック(愛知県)@\(^o^)/ 2015/01/28(水) 23:42:29.04 ID:AMHqcjR50.net
脆弱性を突く方法を説明しやがって
17: パロスペシャル(神奈川県)@\(^o^)/ 2015/01/29(木) 00:24:43.63 ID:3mN4TfQu0.net
危険危険って、みんな脆弱すぎだろ
6: アイアンクロー(SB-iPhone)@\(^o^)/ 2015/01/28(水) 23:44:07.61 ID:OAj8oOq60.net
一応確認しておくけど脆弱性言いたいだけじゃないよな?
12: 男色ドライバー(庭)@\(^o^)/ 2015/01/29(木) 00:16:01.43 ID:9dFzV/ux0.net
き…きじゃくせい
9: サソリ固め(WiMAX)@\(^o^)/ 2015/01/29(木) 00:01:09.89 ID:Veb5mSjm0.net
>>1
Windowsを貶し詰ってきたLinux勢だが、実際にはこんな感じで
穴だらけ。他のOSS関係もOpenSSLなどをみてればわかるが、アクティブ
状態のプロジェクトですらこのザマ。
23: ニーリフト(埼玉県)@\(^o^)/ 2015/01/29(木) 00:48:38.34 ID:4x7iwChH0.net
企業がLinuxを採用できない最大の理由がこれ
脆弱性を見つけた奴が即時にドヤ顔でソースのここが駄目と具体的に公表する仕組み
企業としては対策されるまでサービス停止するわけにもいかないし
対策せずにサービスを続けたら損害賠償問題になる
24: ショルダーアームブリーカー(三重県)@\(^o^)/ 2015/01/29(木) 01:00:28.43 ID:sVp98q9+0.net
>>23
今回のケースならアップデートできるじゃん
止めなきゃいけないけど
bashも古いやつじゃなかったっけ?
31: 垂直落下式DDT(家)@\(^o^)/ 2015/01/29(木) 01:13:35.08 ID:sO503gST0.net
>>24
その止めるができないから放置されるのですよ
Webサーバだのアプリサーバだのを複数台で冗長化してても
結局止められないってのザラにある
22: 膝十字固め(家)@\(^o^)/ 2015/01/29(木) 00:37:23.70 ID:VsiF1Q0M0.net
DNS立ち上げてなければ大丈夫なんだよな?、、ガクブル
26: ストレッチプラム(東京都)@\(^o^)/ 2015/01/29(木) 01:01:46.09 ID:73gIV9Ik0.net
アップデートはともかく再起動しなきゃいけないのがな。週末にメンテ時間確保しなきゃいけないし、クッソだるい。
32: キドクラッチ(東京都)@\(^o^)/ 2015/01/29(木) 01:13:49.57 ID:3RCIVS8n0.net
今時、サーバ再起動にサービス停止発生とかどんな糞設計だよ
34: 垂直落下式DDT(家)@\(^o^)/ 2015/01/29(木) 01:17:32.84 ID:sO503gST0.net
>>32
リソースを切り替えるのに数秒かかる
完全にバランシングしてても再起動時のパケットはロストして遅延する
それが許容できない企業がある
39: キドクラッチ(東京都)@\(^o^)/ 2015/01/29(木) 01:32:43.50 ID:3RCIVS8n0.net
>>34
それ全然冗長化できてねーじゃん
機器故障したらどうすんの?停止許容できないシステムなのに
46: ラ ケブラーダ(東京都)@\(^o^)/ 2015/01/29(木) 02:56:15.95 ID:bZXScZ4O0.net
復旧するまで会社を休みにしちゃえばいいだろ
みんな働き過ぎだよ
57: ミッドナイトエクスプレス(東京都)@\(^o^)/ 2015/01/29(木) 06:23:56.45 ID:MwT3o2IU0.net
お、gethostbynameね
奴はいつも怪しいなとは思ってたんだけど、とうとうやりやがったな
38: 男色ドライバー(WiMAX)@\(^o^)/ 2015/01/29(木) 01:32:10.56 ID:GTaMy3pr0.net
まだgethostbyname()なんかでバッファオーバーフロー起きるのかよ
35: 32文ロケット砲(神奈川県)@\(^o^)/ 2015/01/29(木) 01:27:33.12 ID:8Palq9/B0.net
>この脆弱性を悪用されると遠隔から任意のコードを実行される危険性
これってセキュリティ産業がステマで盛ってるだろ?
バッファオーバーフローが起こったからといって直ちに任意のコードを実行にはならん
どこまで都合よく素人だと思って舐めきってんだよ?
52: エクスプロイダー(京都府)@\(^o^)/ 2015/01/29(木) 05:56:48.10 ID:yjYvUo380.net
とりあえず関係者はyumなりapt-getしといたほうがよさげ
脆弱かどうか調べる
以下をコンパイル、実行
#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);
}
元スレ:http://hayabusa3.2ch.sc/test/read.cgi/news/1422455666/