ADドメインコントローラーとして動作しているSamba 4.xに関する脆弱性とは:OSS脆弱性ウォッチ(5)(3/3 ページ)
連載「OSS脆弱性ウォッチ」では、さまざまなオープンソースソフトウェアの脆弱性に関する情報を取り上げ、解説していく。今回は2018年3月13日に公開されたSambaの脆弱性情報(CVE-2018-1050、CVE-2018-1057)のうち、特にCVE-2018-1057について解説する。
今回の問題
今回の問題は、パスワードを変更する際の権限確認で、下記2つによる制御の際の権限確認が行われていましたが、
- DSDB_CONTROL_PASSWORD_CHANGE_OID(1.3.6.1.4.1.7165.4.3.10)
- DSDB_CONTROL_PASSWORD_HASH_VALUES_OID(1.3.6.1.4.1.7165.4.3.9)
「DSDB_CONTROL_PASSWORD_CHANGE_OIDによる制御が伴わないDSDB_CONTROL_PASSWORD_HASH_VALUES_OIDによる制御が行われた場合」の権限確認が抜け落ちていたことが原因です(図12)。
今までは図13の「ldb_password_hash_module_op()」で「DSDB_CONTROL_PASSWORD_CHANGE_OID」と「DSDB_CONTROL_PASSWORD_HASH_VALUES_OID」の権限確認を行っていましたが、図14の「ldb_acl_module_ops()」では「DSDB_CONTROL_PASSWORD_CHANGE_OID」の権限確認しか行っていませんでした。
LDBは、こちらにある通り、Sambaで使われているLDAPと非常によく似た埋め込み型のデータベースです。このLDBの情報は「ldbsearch」「ldbmodify」などのコマンドを使って参照や変更が行えます。
例えば、ldbmodifyでパスワードハッシュを修正するなどが可能です。ldbに関する情報はlib/ldb/include/ldb.hファイルが参考になります。
通常、パスワードを変更するには下記などの方法があります。
- Sambaサーバの上でsmbpasswdを使う
- Sambaサーバの上でsamba-toolsを使う
- Windowsサーバの管理ツールからパスワードをリセットする
- Windowsの「Ctrl+Alt+Del」からパスワードを変更する
実際にSambaを動作させて動きを見てみると、図15のように「ldb_password_hash_module_ops()」の方で「DSDB_CONTROL_PASSWORD_CHANGE_OID」の制御の権限確認と「DSDB_CONTROL_PASSWORD_HASH_VALUES_OID」の制御の権限確認が行われます。
そのため、通常のWindowsやコマンドで今回の脆弱性は利用できません(図15の黄色い部分)。しかし、特別に作り込んだプログラムなどでldb_password_hash_module_ops()を経由することなく「ldb_acl_module_ops()」経由で直接パスワードを変更されてしまった場合には、権限を迂回してしまう可能性があります(図15の赤い部分)。
また、今回の脆弱性はSambaのパスワードがLDAP経由で変更されてしまうという脆弱性のため、Samba 4のAD以外(Samba 3や古いタイプのNTドメイン、ファイルサーバ等)には影響しません。
今回の修正とワークアラウンド
今回の問題の修正として、「DSDB_CONTROL_PASSWORD_CHANGE_OIDによる制御が伴わないDSDB_CONTROL_PASSWORD_HASH_VALUES_OIDによる制御が行われた場合」の権限確認(図12の問題点の部分)がldb_acl_module_ops(図14のacl_check_password内)で追加されました。そのため、Sambaを修正版(4.7.6, 4.6.14, 4.5.16以降)にアップグレードするか、アップグレードできない場合にはパッチ(「https://samba.org/samba/patches/」からダウンロードできます)を適用する必要があります。
また、Sambaにパッチを適用できない環境の場合は、ワークアラウンドとして「World(Everyone)によるパスワード変更権限の削除」を行うことで暫定的な対応が行えます。これは「samba_CVE-2018-1057_helper」というPythonスクリプトを用いて実行できます。
ただし、Everyoneからパスワード変更権限を削除すると、ユーザーが有効期限の切れたパスワードを変更できなくなってしまうため、事前にパスワードの有効期限を(最低でもSambaの更新ができるまで)十分に大きくしてあげる必要があります。
まとめ
今回の件は、Samba 4がADのドメインコントローラーとして動作している場合に発生するものです。そのため、Samba 4をファイルサーバなどに使用している場合には(もちろん、別の問題で新しいバージョンに上げる必要があるかもしれませんが)、必要以上にパニックにならないようにしましょう。
また、Samba 4をADドメインコントローラーに使用しているユーザーは、暫定的な回避策も用意されていますが、先に書いたように制限事項もあるため、なるべく早く更新するようにしましょう。
筆者紹介
面和毅
略歴:OSSのセキュリティ専門家として20年近くの経験があり、主にOS系のセキュリティに関しての執筆や講演を行う。大手ベンダーや外資系、ユーザー企業などでさまざまな立場を経験。2015年からサイオステクノロジーのOSS/セキュリティエバンジェリストとして活躍し、同社でSIOSセキュリティブログを連載中。
CISSP:#366942
近著:『Linuxセキュリティ標準教科書』(LPI-Japan)」
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Samba 4.0リリース、LinuxをActive Directoryのドメインコントローラに
Samba Teamは12月11日、オープンソースのファイルサーバソフトウェア「Samba」の新バージョン、「Samba 4.0.0」をリリースした。マイクロソフトのディレクトリサービス「Active Directory」をサポートする。 - Active Directory参加機能とセキュリティ拡張
前編では、Samba 3.0系列の概要からインストール、文字コード関係の改善点について解説した。後編では、Active DirectoryドメインやNTドメインなど、Windowsドメイン関係の機能およびセキュリティ拡張について説明する。(編集局) - WindowsのActive Directoryドメインを構築する(基本編) ― 実験用のADドメイン・ネットワーク環境を手軽に構築する ―
Active Directory(AD)のテストのために、AD環境を試験的に構築したいことがある。通常は事前の入念な導入計画が必要だが、閉じた構成にすれば、ADは簡単に構築できる。ただし既存のネットワーク環境に悪影響を与えないように、同時にDNSサーバもローカルにインストールした方がよい。