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