連載
» 2018年04月17日 05時00分 公開

OSS脆弱性ウォッチ(5):ADドメインコントローラーとして動作しているSamba 4.xに関する脆弱性とは (3/3)

[面和毅,OSSセキュリティ技術の会]
前のページへ 1|2|3       

今回の問題

 今回の問題は、パスワードを変更する際の権限確認で、下記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)。

図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」の権限確認しか行っていませんでした。

図13 ldb_password_hash_module_ops(DSDB_CONTROL_PASSWORD_HASH_VALUES_OIDを確認しているもの)
図14 ldb_acl_module_ops(DSDB_CONTROL_PASSWORD_HASH_VALUES_OIDを確認していないもの)

 LDBは、こちらにある通り、Sambaで使われているLDAPと非常によく似た埋め込み型のデータベースです。このLDBの情報は「ldbsearch」「ldbmodify」などのコマンドを使って参照や変更が行えます。

 例えば、ldbmodifyでパスワードハッシュを修正するなどが可能です。ldbに関する情報はlib/ldb/include/ldb.hファイルが参考になります。

 通常、パスワードを変更するには下記などの方法があります。

  1. Sambaサーバの上でsmbpasswdを使う
  2. Sambaサーバの上でsamba-toolsを使う
  3. Windowsサーバの管理ツールからパスワードをリセットする
  4. Windowsの「Ctrl+Alt+Del」からパスワードを変更する

 実際にSambaを動作させて動きを見てみると、図15のように「ldb_password_hash_module_ops()」の方で「DSDB_CONTROL_PASSWORD_CHANGE_OID」の制御の権限確認と「DSDB_CONTROL_PASSWORD_HASH_VALUES_OID」の制御の権限確認が行われます。

図15

 そのため、通常の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)」


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。