今回はActive Directoryの脆弱性を用いた攻撃「Keberoast」を検証します。
Keberoatは、SPNというADの機能を悪用し、ユーザの認証情報を取得することが可能です。
SPNの理解は結構難しいかもしれないので、以下の知識を習得して本記事を読むことをオススメします。
* Active DirectoryにおけるSPNの役割
* ケルベロス認証の知識(特にTGT, TGSのやりとり)
本記事では、できるだけ詳細部分は割愛して、エッセンスをお伝えし、RedTeam入門者の学習を進めるサポートになれればと思います!
ぜひ分からない点や感想などをコメントいただけると助かります。
SPNとは?
SPN(Service Principle Name)とは、Kerberosクライアントがサービスのインスタンスを一意に識別するために使用する名前です。
また、SPNはサービス実行者(サービスアカウント、ユーザアカウント等)に関連付けることが可能です。これによって、他のADリソースは、どのサービスがどのアカウントで実行されているかを認識することが可能です。
SPNは下記のような構成をとっています。
ServiceClass/Hostname:Port (例) MSSQLSvc/sqlserver.example.com MSSQLSvc/sqlserver.example.com:1433
- ServiceClass・・・サービスクラスを識別する文字列。例えばWebサービスの場合は「www」、ディレクトリサービスの場合は「ldap」が使われます。下記に一覧がありあます。
SPNs – Active Directory Security - HostName・・・サービスが実行されているコンピュータ名です。
- Port・・・サービスが実行しているTCP/UDPポート番号
以上を踏まえたうえで、SPNは下図の通り、Kerberos認証するときに、アクセスしたいサービスインスタンスについてKDCに伝える際に利用されます。
もっと詳しいことが知りたい方は下記URLが分かりやすかったです。(Keberos認証の知識は前提)
SPNの脆弱性をついたKerberoast
では、SPNにはどのような脆弱性があるのでしょうか。
実はSPNが登録されたユーザがドメイン内にいる場合、他のドメインユーザから、KDCに対してチケットリクエストを行い、サービスチケットを取得することが可能です。
サービスチケットには、SPNに紐づくユーザのパスワードハッシュが含まれているので、これを復号することによって、平文のパスワードを取得することが可能です。
この一連の攻撃のことをKerberoastといいます。
以下では、SPNの設定とKerberoastの検証を行います。
脆弱性の検証
システム環境と前提条件
- [OS] Windows Server 2016
- [攻撃側ユーザ] client01u1
- [攻撃対象ユーザ] client01u10
- [SPN] cifs/dc.cyberlab.local
SPN設定検証の流れ~BlueTeam側~
まず、Active Directory側でclient01u1の設定を行います。
ダッシュボードからツール>Active Directory ユーザのコンピュータを開きます。
表示>拡張機能にチェックを押します。
ドメイン名>Users>client01u10を右クリックし、プロパティを開きます。
属性エディターを開き、servicePrincipalNameをダブルクリックし、SPNの登録を行います。今回は、cifs/dc.cyberlab.localとしています。
これで、client01u10にcifs/dc.cyberlab.localのSPNを登録することができました。
Kerberoast検証の流れ~RedTeam側~
攻撃側では、SPNに紐づいたアカウントがドメイン環境に存在することを悪用し、ユーザのパスワードを取得します。
まずは、PowerViewによって、そのようなアカウントを発見します。
結果、cifs/dc.cyberlab.localというユーザを発見できました。
次に、Invoke-kerberoast.ps1というスクリプトを利用して、SPNに関連付けられたアカウントのパスワードハッシュを取得します。
その結果、client01u10のパスワードハッシュを取得することができました。
ただ、このフォーマットだとHashcatが使えないので、フォーマット変更します。
hash.txtの内容は次の通りです。
ここからHash値のみを取り出し、改行・空白を削除したうえで、新しいファイルhash2.txtに書き込みます。
hash2.txtに対して、Hashcatを用いて辞書攻撃を行い、パスワードをダンプします。
結果、client01u10のパスワード「Passw0rd!」(ファイル末尾)を窃取することができました。
実際の攻撃者はこの情報を用いて、正規ユーザになりすまし、他の端末に横展開を行いながら、侵入拡大を行います。
個人的な見解、リスク低減策
Kerberoastは攻撃が非常に容易であり、また、ユーザの認証情報を取得される恐れがあるため、リスクレベルは高いです。
そのため、下記のような対策を中心に実施されることが望まれます。
- 使用していないSPNの削除
- パスワードポリシーの強化
- SPNは高権限アカウント(Domain Admins等)には紐づけないこと
コメント