今回はActive Directoryの設定面における脆弱性「ForceChangePassword」について検証を行います。
ForceChangePasswordの概要
ForceChangePasswordとは、ドメインユーザのパスワードを知る必要無く、パスワードの変更を行うことができる攻撃です。
これは、Active Directoryにおける下記の「パスワードのリセット」を悪用した攻撃となります。
本画像では、client01u1というユーザに対するclient01u10のアクセス権を表示したものであり、その中の1つとして「パスワードのリセット」という項目が許可されています。これによって、client01u10はclient01u1のパスワードを強制的に再設定することができます。
以下では実際にActive Directoryで脆弱な設定を行い、攻撃を行ってみます。
脆弱性の検証
システム環境と前提条件
- [OS] Windows Server 2016
- [攻撃側ユーザ] client01u10
- [攻撃対象ユーザ]client01u1
検証の流れ~BlueTeam側~
まず、Active Directory側でclient01u1の設定を行います。
ダッシュボードからツール>Active Directory ユーザのコンピュータを開きます。
表示>拡張機能にチェックを押します。
ドメイン名>Users>client01u1を右クリックし、プロパティを開きます。
セキュリティタブを開き、client01u10のアクセス許可を開き、「パスワードのリセット」を許可します。
検証の流れ~RedTeam側~
攻撃者は何らかの方法により、client01u10というユーザに対するアクセス権を得たとします。
BloodHoundで見てみると、client01u1というユーザへ「ForceChangePassword」という属性を所持していることが分かり、パスワードの強制変更が可能であることを発見します。(※また、client01u1からsvrad(ドメイン管理者)に対してもForceChangePasswordがあり、clinet01u1の取得によって、svradを取得し、ドメイン管理者へ権限昇格することが可能です。)
ここで、「Set-ADAccountPassword」というADモジュールを使用して、client01u1のパスワードを変更できるか確認してみます。
エラー等返ってこなければ、パスワードを正常に変更することができています。仮に、ForceChangePasswordがない場合、下記のように、現在のパスワードが要求されます。
これで、client01u1への横移動、及び本ユーザを悪用したさらなる侵入が可能となりました。
個人的な見解、リスク低減策
個人的にはこのような設定不備はリスクが高く、運用上注意すべきことだと考えています。
仮に上記のclient01u1を取得された場合に、client01u1がログオンしている端末への横移動、client01u1がForceChangePassword可能な高権限アカウントの取得等、侵入拡大の足掛かりにされる恐れがります。これは攻撃者にとっては非常に良い材料となります。
ただし、運用上どうしても「パスワードリセット」を他ユーザに付与せざるをなく、やむをえず脆弱性が残存していることがあります。
その場合においても、パスワードをリセットできるユーザはドメイン管理者など必要最小限にすべきで、一般ユーザなど同権限ユーザ間での「パスワードリセット」の権限付与は控えるべきです。
コメント