— 可視化で気づく “見えないリスク” —
多くの企業で、Active Directory(AD)アカウントのパスワードが長期間更新されず、固定化したまま運用されているケースがあります。
しかし、この固定パスワードは攻撃につながる重大なリスクとなる場合があります。
本記事では以下について記載します。
- 固定パスワードがなぜ危険なのか
- Kerberoastingという攻撃について
- パスワードに関するリスクをどう可視化するのか
- 対策についてどのように行っていくか
固定パスワードが危険な理由
昔設定されてから長期間同じパスワードが使われ続けると、以下のリスクが考えられます。
- 「12345678」「password」など、推測しやすいパスワードがそのまま残り、辞書攻撃に弱い
- SPN を持つアカウントのパスワードが固定されたままだと、Kerberoasting の標的になる
なお、辞書攻撃として利用されるパスワードリストはGithub等に公開されています。
パスワードが容易な場合、RDP等を利用しID/パスワードによるログインが可能となる場合やパスワード自体を解析される場合があります。
Kerberoasting とは?
Kerberoastingとは、SPNを持つアカウントのパスワード、つまり IIS / SQL / バッチ処理などで使われるサービスアカウントに関する攻撃手法になります。
SPNとはサービスを認識するための識別子のようなもので、HTTPサーバやSQLサーバなどを利用する際に作成されるアカウントなります。
攻撃者が一度ドメイン環境下に侵入できてしまうと、次のようなことが可能となります。
- SPN(Service Principal Name)を持つサービスアカウントを列挙
- そのアカウントの サービスチケットを要求
- チケットには ハッシュ化されたパスワードが含まれる
- オフラインでパスワードリストなどを利用した パスワード総当たり攻撃を実施
- 長時間をかけてパスワード解析されることでパスワードを入手
つまり、パスワードが長期間変わっていないほど、弱いパスワードが設定されているケースが多い 攻撃者にとって復号しやすい「的」になる 。
SPNを持つサービスアカウントの固定パスワードは “直接バレていないだけ” で、攻撃者は Kerberos を経由してパスワードを解析することができます。
🔍 リスクを可視化するには?
Active Directory では、アカウントに紐づくさまざまな情報が属性として保存されています。
これらを参照することで 固定パスワードによるリスクを可視化できます。
特に Get-ADUser や LDAP を利用すると、以下のパスワードに関連する情報を収集できます。
- パスワードの最終変更日時(pwdLastSet)
- アカウントが SPN を持っているか(servicePrincipalName)
- アカウントの状態(userAccountControl)
- 説明欄(description)
これらの属性を分析することで、たとえば、
「パスワードが無期限になっているアカウント」
「説明欄にパスワード等の情報が記載されている」
「Kerberoasting の標的となりやすい SPN を持つアカウント」
などを見える化することが可能です。
LDAPツールやPowershell等を利用し上記の取得ができるためリスクを把握することできます
🟦 パスワード無期限
長期間パスワードが更新されていないアカウントを洗い出します。
つまり、パスワードが無期限のアカウントを洗い出します。
不要なアカウントは削除を検討します。
LDAPフィルタ
(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=65536))
Get-ADUser
Get-ADUser -LDAPFilter "(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=65536))" `
-Properties userAccountControl |
Select-Object Name, SamAccountName, userAccountControl
🟦 説明欄に情報があるユーザ
説明欄に情報が入っているユーザを検出します。
ここにパスワードが記載されていることがあります。もし記載があれば事実確認をして必要に応じて即対応します。
LDAPフィルタ
(&(objectCategory=user)(description=*))
Get-ADUser
Get-ADUser -LDAPFilter "(&(objectCategory=user)(description=*))" -Properties Description |
Select-Object Name, SamAccountName, Description
🟦 Kerberoasting 対象アカウント(SPN を持つユーザ)
Kerberoastingは、SPNを持つユーザーアカウントを対象とするため、まずそれらのアカウントを洗い出します。
LDAPフィルタ
(&(objectClass=user)(servicePrincipalName=*)(!(cn=krbtgt))(!(samaccounttype=805306369)))
Get-ADUser
Get-ADUser -LDAPFilter "(&(objectClass=user)(servicePrincipalName=*)(!(cn=krbtgt))(!(sAMAccountType=805306369)))" -Properties servicePrincipalName
Rubeus によるチケット抽出例
Rubeus を利用すると、以下のようにサービスチケットが抽出されます。
出力された Hash をパスワードリストなどを用いてオフラインで解析することで、
sqlserver というユーザーのパスワードが推測される可能性があります。
もしパスワードの解析が成功した場合は、sqlserverの権限を得ることができます。
上記の出力から以下のLDAPクエリが発行されていることがわかります。
Searching path 'LDAP://AD01.company.local/DC=company,DC=local' for
'(&(samAccountType=805306368)(servicePrincipalName=*)(!samAccountName=krbtgt)
(!(UserAccountControl:1.2.840.113556.1.4.803:=2)))'
🔐 Kerberoasting 対策
検出方法や対策に関しては以下のMicrosoftのサイトに記載されています。
✔ 1. Kerberoasting を検知
- Microsoft Defender XDRでの検知
- 重複したサービスチケットリクエストがないか確認
- 短期間にTGS 要求(イベントID 4769)が多数発生していないか など
✔ 2. Kerberoastingの対策
- gMSA(グループマネージドサービスアカウント)への移行
- ランダムに生成された長いパスワードを設定
- この記事では14文字以上のランダムな文字列を設定するよう記載されています
- 不必要な SPN は削除
- 不明な SPN は “誰が使っているか” を明確にして不要であれば削除する
📘 まとめ
固定パスワードは「放置されがちで目立たない」問題ですが、説明欄にパスワードが記載されているケースや、Kerberoasting といった攻撃手法を利用することで、Active Directoryの侵害の重大リスクへとつながります。
- 固定パスワードの棚卸し、説明欄の内容確認を行う
- SPNを持つアカウントは gMSA へ置き換えを検討し可能であれば置き換える
- SPNを持つアカウントのパスワードを複雑にする
- ログ監視でKerberoasitng攻撃の兆候を把握する
パスワードに関する問題を、まず可視化するだけでも、セキュリティ向上に貢献できると思います。
本記事ではユーザーアカウントのパスワードについて取り上げましたが、
最近、コンピュータアカウントのパスワードに関するブログも公開されていました。
参考としてリンクを掲載します。
【免責事項】
本記事で紹介している内容は、Active Directory環境のセキュリティ向上を目的とした技術情報であり攻撃手法の解説は 脅威の理解と防御策の検討を支援するためのものです。
記載されている手法を、許可なく第三者のシステムに対して実行することは法律で禁止され、不正アクセス禁止法をはじめとする関連法規に抵触する可能性があります。
読者が許可を得た環境以外で本記事の内容を使用しないことを強く求めます。
また、本記事を利用することによって生じた損害等について、筆者は一切の責任を負いません。
