Linux用ファイル共有サービス「Samba」に存在する脆弱性「CVE-2015-0240」

2015年2月23日、Linux および Unix 用の標準的な Windows 相互運用性プログラムスイート「Samba」に存在する脆弱性「CVE-2015-0240」が報告されました。この脆弱性を利用した攻撃は困難であり、トレンドマイクロでは成功した攻撃事例を確認していません。しかし、検出という観点から見ると、この脆弱性は非常に興味深い点があります。以下は 重要な 2点です。

  1. 脆弱性は、Samba の「Netlogonリモートプロトコル」の実装に存在します。このプロトコルは、異なるトランスポート設定間に使用可能な非常に高度なアプリケーションプロトコルです。
  2. 攻撃者は、認証を必要とせずに脆弱性を抱えるコードを実行することが可能です。また、1 の理由から、さまざまな方法で攻撃を開始することができます。「侵入防止システム(Intrusion Prevention System、IPS)」を回避する方法を見つけられるため、攻撃者の動機付けとなります。

この脆弱性の詳細な解析については、こちらのリンク(英語情報のみ)をご参照下さい。本稿では、関連するプロトコルや実行可能な攻撃経路の観点からこの脆弱性について説明していきます。

■脆弱性の詳細
この脆弱性は、Samba の Netlogonリモートプロトコルの実装に存在します。具体的にはメソッド「NetrServerPasswordSet」です。Netlogonリモートプロトコルは、Microsoft Windows環境との相互運用、およびプライマリ・ドメイン・コントローラ(PDC)として実装されました。Netlogonリモートプロトコルを用いることにより、Windows環境と Linux環境の PC は Active Directory を使用しなくても Samba の PDCドメインの一部になることができます。メソッド「NetrServerPasswordSet」は、Sambaドメイン内の PC のアカウントパスワードを変更するために使用されます。

メソッド「NetrServerPasswordSet」は、ソースファイル「samba\source3\rpc_server\netlogon\srv_netlog_nt.c」内の「_netr_ServerPasswordSet()」に実装されます。ポインタ「creds」は初期化されずに「netr_creds_server_step_check()」に渡されます。図1 は、脆弱性を抱えたコードです。

図1:脆弱性を抱えたコードの例
図1:脆弱性を抱えたコードの例

解析によると、攻撃を開始する条件は、Samba v3 および Samba v4 で異なる可能性があります。攻撃者は「computer_name」および「credentials」を制御下において脆弱性を抱えるコードに到達し、この脆弱性を攻撃に利用します。

この脆弱性を抱えるコードを攻撃する「Proof-of-concept(PoC、概念実証型エクスプロイト。実際に有効な攻撃ができることを実証している攻撃コード)」が公開されています。この POC を実行して、動的な解析を行うと、メソッド「_netr_ServerPasswordSet」を効果的に呼び出せることが示されました。図2 は Samba の再開されたコールグラフです。

図2:Samba のコールグラフ
図2:Samba のコールグラフ

高度なデバッグを使用して Samba を実行すると、実行時間のより詳細な情報を入手できます。以下は、コマンドの例です。

smbd -D -S /etc/samba/smb.conf -d 10

図3 は、POC 実行後の結果ログです。

図3:POC 実行後の結果ログの例
図3:POC 実行後の結果ログの例

以下のメッセージが数ライン後に表示されました。

このエラーメッセージは、関数「schannel_fetch_session_key_tdb」によって記録され、「NT_STATUS_OBJECT_NAME_NOT_FOUND」のエラーを返します。この関数は「shannel_check_creds_state」によって呼び出されます。

図4:エラー「NT_STATUS_OBJECT_NAME_NOT_FOUND」
図4:エラー「NT_STATUS_OBJECT_NAME_NOT_FOUND」

エラー「NT_STATUS_OBJECT_NAME_NOT_FOUND」により、「_netr_ServerPasswordSet」はポインタ「creds」を解放します。ネットワークパケットから確認できるように、Netlogonプロトコルはトランスポート「RPC over SMB」を使用しています(図5)。

図5:トランスポート「RPC over SMB」を利用する Netlogonプロトコル
図5:トランスポート「RPC over SMB」を利用する Netlogonプロトコル

これは、攻撃を検出する上で重要な点です。Netlogonプロトコルは高度なアプリケーションプロトコルで、「RPC over SMB」および「RPC over TCP/IP」の 2種類のトランスポートタイプを利用することができます。この件について、さらに詳しく見ていきます。

■攻撃の侵入の仕組み
図6 で示されるように、Netlogonリモートプロトコルは、異なるプロトコルスタックの設定上で実行可能な非常に高度なアプリケーションプロトコルです。

図6:Netlogonプロトコルは異なるプロトコルスタックの設定上で実行可能
図6:Netlogonプロトコルは異なるプロトコルスタックの設定上で実行可能

図6 のように、攻撃者は、理論上では 2つのプロトコルスタック(「RPC over TCP/IP」および「RPC over SMB」)の設定を利用して、脆弱性を抱えるコードに到達することが可能です。これらの 2つのプロトコルスタックは、異なるネットワークポートおよび通信機構を使用します。これは IPS を回避する攻撃に対する特効薬です。しかし、もっと興味深いのは SMB上の事例です。いくつかの SMBコマンドを利用することにより「NetrServerPasswordSet」の呼び出しが可能となり、また同時に、このメソッドへのパラメータを暗号化したり、復号化したりすることができます。図7 は、「NetrServerPasswordSet」を呼び出すもう 1つの方法です。

図7:「NetrServerPasswordSet」を呼び出すもう 1つの方法
図7:「NetrServerPasswordSet」を呼び出すもう 1つの方法

■トレンドマイクロの対策
冒頭で述べたように、この脆弱性を利用した攻撃は難しく、また現在のところ、弊社ではこの脆弱性を利用した攻撃を確認していません。しかし、さまざまな方法で攻撃が可能であり、また認証を必要としないことが攻撃を容易にさせています。

この脆弱性を利用した攻撃を防ぐためには、複数のプロトコルスタックの設定や SMB上の複数のコマンドを保護する必要があります。

弊社のサーバ向け総合セキュリティ製品「Trend Micro Deep Security(トレンドマイクロ ディープセキュリティ)」ご利用のお客様は、以下のフィルタを適用することにより、問題の脆弱性を利用した攻撃から保護されます。

  • 1006555

参考記事:

 翻訳:品川 暁子(Core Technology Marketing, TrendLabs)