I. 説明
CA-2001-31
が、昨年11月に発行されて以来、CERT/CCは
dtspcd (6112/tcp)を探すスキャニングが
行なわれているとの報告を受け取ってきた。しかし、つい最近になって
Solarisシステムで実際に付け込まれたとの間違いない報告を受け取った。
The Honeynet Project
が提供してくれたネットワーク記録から、我々はCA-2001-31
( その和訳 )で示され、VU#172583で議論されている
dtspcdに存在する脆弱性に活発に付け込む
行為がなされていると確信することとなった。
共通デスクトップ環境 (CDE)はUNIX OSやLinux OS上で動作する統合GUIである。
CDEサブプロセスコントロールサービス (dtspcd)
はネットワークデーモンで、クライアントからのリクエストを受け付け、
コマンドを実行し、リモートでアプリケーションを起動する。CDEを動作させて
いるシステム上では、dtspcdはCDEクライアントの
リクエストに応答する形でインターネットサービスデーモン(典型的には、
inetd や xinetd)
によって複数起動される。
dtspcdは典型的にはポート番号6112/tcpを
使いroot権限で動作するよう設定されている。
このdtspcdが利用する共有ライブラリの一つにリモート
から付け入ることのできるバッファオーバフローの脆弱性が存在する。クライアント
とのネゴシエーションを行なっている際、dtspcdは
適切な入力チェックを行なわないまま、クライアントからのデータ長の値と後続するデータ
を受け付けてしまう。この結果、悪意あるクライアントは
dtspcdに人為的に加工したデータを送ることで、
バッファオーバフローを
引き起こし、可能性としてはroot権限でコードを実行できることになる。
このオーバフローは、攻撃パケットの一つの内容によって付け込まれた
固定長4KBのバッファ中で起きる。tcpdumpのログファイルで次のような
攻撃パケットがあれば、0x3e-0x41の箇所にシグニチャがあるのが分かる
(1行が見た目上折り返されているかもしれない)。
09:46:04.378306 10.10.10.1.3592 > 10.10.10.2.6112: P 1:1449(1448) ack 1 win 16060 <nop,nop,timestamp 463986683 4158792> (DF)
0x0000 4500 05dc a1ac 4000 3006 241c 0a0a 0a01 E.....@.0.$.....
0x0010 0a0a 0a02 0e08 17e0 fee2 c115 5f66 192f ...f........_f./
0x0020 8018 3ebc e1e9 0000 0101 080a 1ba7 dffb ..>.............
0x0030 003f 7548 3030 3030 3030 3032 3034 3130 .?uH000000020410
0x0040 3365 3030 3031 2020 3420 0000 0031 3000 3e0001..4....10.
0x0050 801c 4011 801c 4011 1080 0101 801c 4011 ..@...@.......@.
0x0060 801c 4011 801c 4011 801c 4011 801c 4011 ..@...@...@...@.
...
上記のASCII表示段(右列)中の0x103eという値は、内部の4K (0x1000)バッファ
にコピーすべきパケットのバイト数であるとサーバが解釈する。
0x103eは0x1000よりも大きいため、このパケットの最後の0x3eバイト分が
4Kバッファの後ろのメモリを上書きすることになる。これはVU#172583で
指摘されたのと同じ攻略媒体(compromise vector)である。
ただし、インターネット上のゲームで、同じポート番号6112/tcpを
その通常動作の合法的な一部として利用するものがいくつもあること
を注記しておく必要がある。つまり、このサービスに関わるすべての
ネットワーク活動が悪意あるものとは限らないのである。
この種の活動を監視しているネットワーク管理者は、この種の探索が
本当にVU#172583
で示される脆弱性に付け入ろうとする試みなのかどうかを検証したい
と考えるかもしれない。
多くの一般的なUNIXシステムはデフォルトではCDEがインストールされ有効に
なるようになっている。自システムがdtspcd
を使うよう設定されているかどうかを判断するには、次の各ファイルにdtspc
の記載があるかどうかを確認せよ。(1行が
見た目上複数行に見えるかもしれない)。
-
/etc/servicesにおいては
-
dtspc 6112/tcp
/etc/inetd.confにおいては
-
dtspc stream tcp nowait root /usr/dt/bin/dtspcd /usr/dt/bin/dtspcd
CDEのサブプロセスコントロールサービスを動作させていないシステム
はこの問題に対して脆弱ではない。