スマートフォン解析 top

TOP > タイガーチームセキュリティレポート > Sambaのリモートコード実行脆弱性(CVE-2017-7494)

タイガーチームセキュリティレポート

Sambaのリモートコード実行脆弱性(CVE-2017-7494)

細工したリクエストデータをSambaサービスが受信することにより、サーバストレージ上の指定されたPathに保存された共有オブジェクトをロードしてしまう脆弱性です。

パッチがリリースされているので、バージョンアップによる対策が推奨されます。速やかなバージョンアップを行えない場合は、ベンダから提示されている回避策(The Samba Team)または、緩和策(RedHat)の適用を検討してください。

この記事では、回避策および緩和策の検証結果と、攻撃を受けた際のログについて解説します。

影響範囲

3.5.0以降のSambaで、4.4.13以前、4.5.9以前、4.6.3以前のバージョンが影響します。

攻撃シナリオ

攻撃者が任意のコードを実行するためには、あらかじめ共有オブジェクトを対象ホストにアップロードする必要があり、且つ、攻撃者はアップロードしたファイルのサーバ上のPathを推測する必要があります。

つまり、攻撃は以下の手順で行われます。

1.攻撃者が対象ホストに共有オブジェクト(攻撃コード)をアップロードする
2.アップロードされた攻撃コードのサーバ上のPathを推測する
3.CVE-2017-7494の脆弱性を悪用するペイロードを対象ホストに送信する

Sambaのファイル共有機能により、攻撃者に書き込み権限のある共有フォルダを公開していた場合は、容易に攻撃を受ける可能性があります。また、攻撃者に書き込み権限のある共有フォルダを公開していなかったとしても、同一サーバ上でファイルをアップロードする別のサービスが稼働していたり、または、ファイルをアップロード可能な脆弱性を持つサービスが稼働していた場合は、同様に攻撃を受ける可能性があります。

検証

Samba/4.5.9を対象に、公開されている複数のPoCを用いて回避策の有効性を検証しました。

The Samba Teamのアナウンスによると、[global]セクションに以下の設定を追加して再起動することで、攻撃を無効化することが可能です。

nt pipe support = no

また、RedHat社のアナウンスによると、SELinuxを有効化するか、noexecオプションを用いてマウントしたファイルシステムを書き込み可能な共有ディレクトリとして利用することによっても、攻撃を緩和できるとしています。

ここでは、"nt pipe support = no"と、RedHat社の緩和策のうち他のOSでも利用できるnoexecオプションについて検証します。

検証シナリオ

二つのシナリオについて検証を行います。

1.攻撃者に書き込み権限のある共有ディレクトリ/var/samba/public/が存在し、当該ディレクトリに攻撃コード(ファイル名 : poc)をアップロードする。

2.書き込み可能な共有ディレクトリは存在しないが、攻撃者は別の方法で任意のPath(/tmp)に攻撃コード(ファイル名 : poc)をアップロードできる。例えば、同一サーバ上で稼働するファイルアップロード機能を有するWebアプリケーションを悪用するといったケースを想定します。

検証結果

No.対策状況シナリオ1シナリオ2
1対策なし攻撃可攻撃可
2nt pipe support = no攻撃不可攻撃不可
3noexec攻撃不可攻撃可

No.1および2については想定通りですが、No.3はシナリオ2の場合に攻撃が可能でした。noexecによる対策について、攻撃を行った際のsambaのログを以下に示します。

以下は、シナリオ1のログです。対象ホストでは、noexecオプションをつけたファイルシステムを/var/sambaにマウントしています。下記の通り、攻撃コード(/var/samba/public/poc)の実行を防ぐことができました。

一方、攻撃者によりnoexecオプションがセットされていないファイルシステムへ攻撃コード(/tmp/poc)がアップロードされた場合は、攻撃を防ぐことができませんでした。

The Samba Teamによると、"nt pipe support=no"による対策は、Windowsクライアント向けのいくつかの機能が無効になるとのことですので、このオプションを利用できない場合の次善の策としてnoexecを検討すべきでしょう。

攻撃を受けた際のログ

過去にこの脆弱性を悪用した攻撃を受けていた場合、Sambaのログから攻撃を検出できるか検証を行いました。smb.confに"log level"というオプションを定義することによって、出力するログレベルの調整が可能です。

CVE-2017-7494の攻撃に関するログはデバッグクラス"rpc_srv"にて出力されるため、攻撃を検知するためにはglobalセクションに、以下のように設定する必要があります。

  log level = rpc_srv:10

上記の数値の部分を変えることで出力されるログの量を調整することが可能です。攻撃を受けた時のログが数値の変動によってどのように変わるかを以下に示します。

log level攻撃に関するログ
0, 1(出力されない)
1〜9
'/tmp/poc' is not a registered pipe!
10
is_known_pipename: /tmp/poc loaded dynamically
is_known_pipename: pipe /tmp/poc did not register itself!
'/tmp/poc' is not a registered pipe!

上記のようにlog levelが2以上であれば攻撃が有った事を検知できそうですが、攻撃が成功したかどうかを判別するためにはlevel10まで上げければなりません。

参考情報

[1] CVE-2017-7494.html (The Samba Team)
https://www.samba.org/samba/security/CVE-2017-7494.html
[2] CVE-2017-7494 (redhat)
https://access.redhat.com/security/cve/CVE-2017-7494


R&D本部準備室 柏崎