hacktricks/windows-hardening/stealing-credentials/credentials-mimikatz.md

30 KiB
Raw Blame History

Mimikatz

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

このページの内容はadsecurity.orgからコピーされました

メモリ内のLMハッシュとクリアテキスト

Windows 8.1およびWindows Server 2012 R2から、LMハッシュと「クリアテキスト」パスワードはもはやメモリにありません。

LSASSに「クリアテキスト」パスワードが配置されるのを防ぐために、次のレジストリキーを「0」ダイジェスト無効に設定する必要があります

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest “UseLogonCredential”(DWORD)

MimikatzLSA保護:

Windows Server 2012 R2およびWindows 8.1には、LSA保護と呼ばれる新機能が含まれており、Windows Server 2012 R2のLSASSを保護プロセスとして有効にするMimikatzはドライバーでバイパスできますが、それによりイベントログにいくつかのイズが発生する可能性があります

LSAには、ローカルおよびリモートのサインインのユーザーを検証し、ローカルのセキュリティポリシーを強制するローカルセキュリティ権限サーバーサービスLSASSプロセスが含まれています。 Windows 8.1オペレーティングシステムは、非保護プロセスによるメモリの読み取りとコードインジェクションを防ぐためにLSAに追加の保護を提供します。これにより、LSAが保存および管理する資格情報に追加のセキュリティが提供されます。

LSA保護を有効にする方法

  1. レジストリエディタRegEdit.exeを開き、次のレジストリキーに移動しますHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa およびレジストリキーの値を次のように設定します「RunAsPPL」=dword:00000001。
  2. 新しいGPOを作成し、コンピューター構成、設定、Windows設定に移動します。 レジストリを右クリックし、新規を指定して、レジストリ項目をクリックします。 新しいレジストリプロパティダイアログボックスが表示されます。 HiveリストでHKEY_LOCAL_MACHINEをクリックします。 キー パスリストで、SYSTEM\CurrentControlSet\Control\Lsa に移動します。 値名ボックスにRunAsPPLと入力します。 値の種類ボックスでREG_DWORDをクリックします。 値データボックスに00000001と入力します。OKをクリックします。

LSA保護により、非保護プロセスがLSASSとやり取りするのを防ぎます。 Mimikatzはまだこのドライバー“!+”)でこれをバイパスできます。

Mimikatz-Driver-Remove-LSASS-Protection

無効化されたSeDebugPrivilegeのバイパス

デフォルトでは、SeDebugPrivilegeは管理者グループにローカルセキュリティポリシーを介して付与されます。 Active Directory環境では、この特権を削除することが可能で、Computer Configuration --> Policies --> Windows Settings --> Security Settings --> Local Policies --> User Rights Assignment --> Debug programsを空のグループとして定義します。 オフラインのAD接続デバイスでも、この設定は上書きできず、ローカル管理者はメモリのダンプやMimikatzの使用を試みるとエラーが発生します。

ただし、TrustedInstallerアカウントは引き続きメモリのダンプにアクセスでき、この防御をバイパスするために使用できます。 TrustedInstallerサービスの構成を変更することで、アカウントを実行してProcDumpを使用し、lsass.exeのメモリをダンプすることができます。

sc config TrustedInstaller binPath= "C:\Users\Public\procdump64.exe -accepteula -ma lsass.exe C:\Users\Public\lsass.dmp"
sc start TrustedInstaller

[TrustedInstaller-Dump-Lsass

このダンプファイルは、攻撃者が制御するコンピュータに外部流出させ、そこから資格情報を抽出することができます。

# privilege::debug
# sekurlsa::minidump lsass.dmp
# sekurlsa::logonpasswords

メイン

イベント

EVENT::Clear イベントログをクリアする

Mimikatz-Event-Clear

EVENT:::Drop (実験的) 新しいイベントを避けるためにイベントサービスをパッチする

Mimikatz-Event-Drop

注意:
privilege::debug を実行してから event::drop を実行してイベントログをパッチします。その後、Event::Clear を実行してイベントログをクリアしますが、クリアされたイベント (1102) が記録されません。

KERBEROS

ゴールデンチケット

ゴールデンチケットは、KRBTGT NTLMパスワードハッシュを使用して暗号化および署名されたTGTです。

ゴールデンチケットGTは、ドメイン内の任意のユーザー実在するか想像上のを任意のグループのメンバーとして実質的に無制限の権限を提供するドメイン内の任意のリソースに対して偽装するために作成できます。

Mimikatzゴールデンチケットコマンドリファレンス:

ゴールデンチケットを作成するMimikatzコマンドは「kerberos::golden」です。

  • /domain 完全修飾ドメイン名。この例では「lab.adsecurity.org」です。
  • /sid ドメインのSID。この例では「S-1-5-21-1473643419-774954089-2222329127」です。
  • /sids スプーフしたいADフォレスト内のアカウント/グループに権限がある追加のSID。通常、これはルートドメインのEnterprise Adminsグループである「S-1-5-21-1473643419-774954089-5872329127-519」です。このパラメータは提供されたSIDをSID Historyパラメータに追加します。
  • /user 偽装するユーザー名
  • /groups (オプション) ユーザーがメンバーであるグループRID最初のものがプライマリグループです
    同じアクセスを受け取るためにユーザーまたはコンピューターアカウントRIDを追加します。
    デフォルトグループ: 513,512,520,518,519 は、よく知られた管理者グループのグループです(以下にリストされています)。
  • /krbtgt ドメインKDCサービスアカウントKRBTGTのNTLMパスワードハッシュ。TGTを暗号化および署名するために使用されます。
  • /ticket (オプション) 後で使用するためにゴールデンチケットファイルを保存するパスと名前を指定するか、/ptt を使用して即座にメモリにゴールデンチケットを注入します。
  • /ptt /ticket の代替として これを使用して偽造されたチケットを即座にメモリに注入して使用します。
  • /id (オプション) ユーザーRID。Mimikatzのデフォルトは500ですデフォルトの管理者アカウントRID
  • /startoffset (オプション) チケットが利用可能になる開始オフセット(通常は使用する場合には-10または0に設定。Mimikatzのデフォルト値は0です。
  • /endin (オプション) チケットの有効期間。Mimikatzのデフォルト値は10年約5,262,480分です。Active DirectoryのデフォルトのKerberosポリシー設定は10時間600分です。
  • /renewmax (オプション) 更新とともにチケットの最大有効期間。Mimikatzのデフォルト値は10年約5,262,480分です。Active DirectoryのデフォルトのKerberosポリシー設定は7日間10,080分です。
  • /sids (オプション) ADフォレスト内のEnterprise AdminsグループのSID[ADRootDomainSID]-519を設定して、ADフォレスト全体でEnterprise Admin権限をスプーフィングしますADフォレスト内のすべてのドメインでAD管理者
  • /aes128 AES128キー
  • /aes256 AES256キー

ゴールデンチケットのデフォルトグループ:

  • ドメインユーザーSID: S-1-5-21<DOMAINID>-513
  • ドメイン管理者SID: S-1-5-21<DOMAINID>-512
  • スキーマ管理者SID: S-1-5-21<DOMAINID>-518
  • Enterprise Admins SID: S-1-5-21<DOMAINID>-519これは偽造されたチケットがフォレストルートドメインで作成された場合にのみ有効ですが、ADフォレスト管理者権限を追加するには/sidsパラメータを使用します
  • グループポリシー作成者所有者SID: S-1-5-21<DOMAINID>-520
.\mimikatz "kerberos::golden /User:Administrator /domain:rd.lab.adsecurity.org /id:512 /sid:S-1-5-21-135380161-102191138-581311202 /krbtgt:13026055d01f235d67634e109da03321 /groups:512 /startoffset:0 /endin:600 /renewmax:10080 /ptt" exit

他のドメイン間でのゴールデンチケット

シルバーチケット

シルバーチケットは、ターゲットサービスアカウントのSPNマッピングによって識別されるNTLMパスワードハッシュを使用して暗号化および署名されたTGSTGTと同様の形式です。

シルバーチケットを作成するためのMimikatzコマンドの例:

以下のMimikatzコマンドは、サーバーadsmswin2k8r2.lab.adsecurity.orgのCIFSサービス用のシルバーチケットを作成します。このシルバーチケットを正常に作成するには、adsmswin2k8r2.lab.adsecurity.orgのADコンピューターアカウントのパスワードハッシュを発見する必要があります。これは、ADドメインのダンプから取得するか、上記のようにローカルシステムでMimikatzを実行して取得することができますMimikatz "privilege::debug" "sekurlsa::logonpasswords" exit。NTLMパスワードハッシュは/rc4パラメータと共に使用されます。サービスSPNタイプも/serviceパラメータで特定する必要があります。最後に、ターゲットコンピューターの完全修飾ドメイン名を/targetパラメータで指定する必要があります。/sidパラメータにはドメインSIDを忘れないでください。

mimikatz “kerberos::golden /admin:LukeSkywalker /id:1106 /domain:lab.adsecurity.org /sid:S-1-5-21-1473643419-774954089-2222329127 /target:adsmswin2k8r2.lab.adsecurity.org /rc4:d7e2b80507ea074ad59f152a1ba20458 /service:cifs /ptt” exit

Trust Ticket

Active Directoryの信頼パスワードハッシュが判明すると、信頼チケットを生成できます。信頼チケットは、互いに信頼する2つのドメイン間で共有されるパスワードを使用して作成されます。
信頼チケットの詳細についてはこちら。

信頼パスワード(信頼キー)のダンプ

Mimikatz “privilege::debug” “lsadump::trust /patch” exit

Mimikatzを使用して偽の信頼チケット異なる領域のTGTを作成する

Mimikatzを使用して、信頼チケットを偽造し、チケット保持者がAD Forest内のEnterprise Adminであるとする。これにより、子ドメインから親ドメインへの完全な管理アクセスが可能となるMimikatz内の信頼間でのSIDHistory、"sids"を活用。このアカウントは実際にはどこにも存在する必要はなく、実質的には信頼を超えたGolden Ticketとなる。

Mimikatz “Kerberos::golden /domain:child.lab.adsecurity.org /sid:S-1-5-21-3677078698-724690114-1972670770 /sids:S-1-5-21-1581655573-3923512380-696647894-519 /rc4:49ed1653275f78846ff06de1a02386fd /user:DarthVader /service:krbtgt /target:lab.adsecurity.org /ticket:c:\temp\tickets\EA-ADSECLABCHILD.kirbi” exit

信頼チケットの特定必須パラメータ:

  • **/**target ターゲットドメインのFQDN。
  • **/**service ターゲットドメインで実行されているkerberosサービス (krbtgt)。
  • **/**rc4 サービスkerberosサービスアカウント (krbtgt) のNTLMハッシュ。
  • **/**ticket 作成したチケットファイルを後で使用するために保存するパスと名前を指定するか、/pttを使用してゴールデンチケットを即座にメモリに注入して使用する。

KERBEROSの詳細

KERBEROS::List ユーザーメモリ内のすべてのユーザーチケットTGTおよびTGSをリストします。現在のユーザーのチケットのみ表示されるため、特別な特権は必要ありません。
「klist」と同様の機能。

KERBEROS::PTC キャッシュを渡すNT6
Mac OS、Linux、BSD、Unixなどの*Nixシステムは、Kerberos資格情報をキャッシュします。このキャッシュされたデータはMimikatzを使用してコピーして渡すことができます。ccacheファイルにKerberosチケットを注入するのにも便利です。

Mimikatzのkerberos::ptcの良い例は、PyKEKを使用したMS14-068の攻撃です。PyKEKはccacheファイルを生成し、それをkerberos::ptcを使用してMimikatzに注入できます。

KERBEROS::PTT チケットを渡す
Kerberosチケットが見つかった後、別のシステムにコピーして現在のセッションに渡すことで、ドメインコントローラーとの通信なしにログオンをシミュレートできます。特別な権限は必要ありません。
SEKURLSA::PTHPass-The-Hashに類似。

  • /filename チケットのファイル名(複数可)
  • /diretory ディレクトリパス、内部のすべての.kirbiファイルが注入されます。

KERBEROS::Purge すべてのKerberosチケットを削除します
「klist purge」の機能に類似。チケットPTC、PTTなどを渡す前にこのコマンドを実行して、正しいユーザーコンテキストが使用されることを確認します。

KERBEROS::TGT 現在のユーザーの現在のTGTを取得します。

LSADUMP

LSADUMP::DCShadow 現在のマシンをDCとして設定し、DC内で新しいオブジェクトを作成できるようにします持続的な方法
これには完全なAD管理者権限またはKRBTGTパスワードハッシュが必要です。
DCShadowは一時的にコンピュータをレプリケーションの目的で「DC」に設定します。

  • ADフォレスト構成パーティションに2つのオブジェクトを作成します。
  • 使用されるコンピュータのSPNを更新して、「GC」グローバルカタログと「E3514235-4B06-11D1-AB04-00C04FC2DCD2」ADレプリケーションを含めます。Kerberosサービスプリンシパル名に関する詳細はADSecurity SPNセクションを参照してください。
  • DrsReplicaAddとKCCを介して更新をDCにプッシュします。
  • 構成パーティションから作成されたオブジェクトを削除します。

LSADUMP::DCSync DCにオブジェクトの同期を要求してパスワードデータを取得します
ドメイン管理者、ドメイン管理者、またはカスタムデリゲーションのメンバーシップが必要です。

2015年8月にMimkatzに追加された主要な機能は、「DCSync」であり、効果的にドメインコントローラーを「偽装」し、対象のドメインコントローラーからアカウントのパスワードデータを要求します。

DCSyncオプション:

  • /all ドメイン全体のデータをDCSyncで取得します。
  • /user データを取得したいユーザーのユーザーIDまたはSID。
  • /domainオプション Active DirectoryドメインのFQDN。Mimikatzは接続するためにドメイン内のDCを検出します。このパラメータが提供されていない場合、Mimikatzは現在のドメインをデフォルトにします。
  • /csv csvにエクスポート
  • /dcオプション DCSyncが接続してデータを収集するドメインコントローラーを指定します。

/guidパラメータもあります。

DCSyncコマンドの例:

rd.adsecurity.orgドメインのKRBTGTユーザーアカウントのパスワードデータを取得する:
Mimikatz “lsadump::dcsync /domain:rd.adsecurity.org /user:krbtgt” exit

rd.adsecurity.orgドメインの管理者ユーザーアカウントのパスワードデータを取得する:
Mimikatz “lsadump::dcsync /domain:rd.adsecurity.org /user:Administrator” exit

lab.adsecurity.orgドメインのADSDC03ドメインコントローラーコンピュータアカウントのパスワードデータを取得する:
Mimikatz “lsadump::dcsync /domain:lab.adsecurity.org /user:adsdc03$” exit

LSADUMP::LSA LSAサーバーにSAM/ADエンタープライズを取得するように要求します通常、パッチを即座に適用するか、インジェクトします。データのサブセットには/patchを使用し、すべてを取得するには/injectを使用します。システムまたはデバッグ権限が必要です。

  • /inject 資格情報を抽出するためにLSASSをインジェクトします
  • /name 対象ユーザーアカウントのアカウント名
  • /id 対象ユーザーアカウントのRID
  • /patch LSASSをパッチします。

サービスアカウントはしばしばDomain Adminsまたは同等のメンバーであるか、最近Domain Adminがコンピュータにログオンしている場合、攻撃者はその資格情報をダンプできます。これらの資格情報を使用すると、攻撃者はドメインコントローラーにアクセスし、KRBTGTアカウントのNTLMハッシュを含むすべてのドメイン資格情報を取得できます。

mimikatz lsadump::lsa /inject exit

LSADUMP::NetSync

NetSyncは、DCコンピューターアカウントのパスワードデータを使用して、シルバーチケットを介してドメインコントローラーになりすまし、DCSyncを使用してターゲットアカウントの情報パスワードデータを含むを取得する簡単な方法を提供します。

LSADUMP::SAM SAMエントリを復号化するためのSysKeyを取得しますレジストリまたはハイブから。SAMオプションは、ローカルセキュリティアカウントマネージャーSAMデータベースに接続し、ローカルアカウントの資格情報をダンプします。

LSADUMP::Secrets SECRETSエントリを復号化するためのSysKeyを取得しますレジストリまたはハイブから

LSADUMP::SetNTLM サーバーに対して1つのユーザーの新しいパスワード/NTLMを設定するように要求します。

LSADUMP::Trust LSAサーバーに信頼認証情報通常またはフライ上のパッチを取得するように要求します。

MISC

MISC::Skeleton ドメインコントローラーのLSASSプロセスにスケルトンキーをインジェクトします。

"privilege::debug" "misc::skeleton"

特権

PRIVILEGE::Backup バックアップ特権/権限を取得します。デバッグ権限が必要です。

PRIVILEGE::Debug デバッグ権限を取得しますこれまたはローカルシステム権限は、多くのMimikatzコマンドで必要です

SEKURLSA

SEKURLSA::Credman 資格情報マネージャーをリスト表示

SEKURLSA::Ekeys Kerberos暗号化キーをリスト表示

SEKURLSA::Kerberos 認証されたすべてのユーザーサービスおよびコンピューターアカウントを含むのKerberos資格情報をリスト表示

SEKURLSA::Krbtgt ドメインKerberosサービスアカウントKRBTGTのパスワードデータを取得

SEKURLSA::SSP SSP資格情報をリスト表示

SEKURLSA::Wdigest WDigest資格情報をリスト表示

SEKURLSA::LogonPasswords 利用可能なすべてのプロバイダー資格情報をリスト表示します。通常、最近ログオンしたユーザーおよびコンピューターの資格情報が表示されます。

  • 現在ログオンしている(または最近ログオンした)アカウントおよびユーザー資格情報のコンテキストで実行されているサービスのパスワードデータをダンプします。
  • アカウントのパスワードは逆転可能な方法でメモリに保存されています。メモリに保存されている場合Windows 8.1/Windows Server 2012 R2以前は保存されていました、表示されます。Windows 8.1/Windows Server 2012 R2では、ほとんどの場合、アカウントのパスワードはこの方法で保存されません。KB2871997は、Windows 7、Windows 8、Windows Server 2008R2、およびWindows Server 2012にこのセキュリティ機能を「後方移植」しますが、KB2871997を適用した後、コンピューターに追加の構成が必要です。
  • 管理者アクセスデバッグ権限を持つまたはローカルSYSTEM権限が必要です

SEKURLSA::Minidump LSASSミニダンププロセスコンテキストに切り替えますlsassダンプを読み取り

SEKURLSA::Pth ハッシュ渡しとオーバーパスハッシュ(別名:鍵の渡し)。

Mimikatzは、NTLMハッシュを使用してプロセスを別の資格情報で実行するよく知られた操作「ハッシュ渡し」を実行できます。これにより、偽のアイデンティティでプロセスを開始し、その後、偽の情報偽のパスワードのNTLMハッシュを実際の情報実際のパスワードのNTLMハッシュに置き換えます。

  • /user 擬似化したいユーザー名。管理者がこのよく知られたアカウントの唯一の名前ではないことに注意してください。
  • /domain 完全修飾ドメイン名 ドメインがない場合やローカルユーザー/管理者の場合は、コンピューター名、サーバー名、ワークグループなどを使用します。
  • /rc4または/ntlm オプション ユーザーのパスワードのRC4キー/NTLMハッシュ。
  • /run オプション 実行するコマンドライン デフォルトは: シェルを持つためのcmd。

Mimikatz-Sekurlsa-PTH

SEKURLSA::Tickets 最近認証されたすべてのユーザー、ユーザーアカウントのコンテキストで実行されているサービス、およびローカルコンピューターのADコンピューターアカウントの利用可能なすべてのKerberosチケットをリスト表示します。
kerberos::listとは異なり、sekurlsaはメモリ読み取りを使用し、キーのエクスポート制限の対象外です。sekurlsaは他のセッションユーザーのチケットにアクセスできます。

  • /export オプション チケットは.kirbiファイルにエクスポートされます。ユーザーのLUIDとグループ番号0 = TGS、1 = クライアントチケット(?)、2 = TGTで始まります。

LSASSからの資格情報ダンプと同様に、sekurlsaモジュールを使用すると、システム上のすべてのKerberosチケットデータを取得できます。これには、管理者またはサービスに属するものも含まれます。
これは、ユーザーがバックエンドSQLサーバーにアクセスするために使用するKerberos委任が構成されたWebサーバーを攻撃者が侵害した場合に非常に役立ちます。これにより、攻撃者はそのサーバーのメモリ内のすべてのユーザーチケットをキャプチャして再利用できます。

“kerberos::tickets” mimikatzコマンドは、現在ログオンしているユーザーのKerberosチケットをダンプし、昇格権限は必要ありません。保護されたメモリLSASSから読み取る能力を活用するsekurlsaモジュールを使用すると、システム上のすべてのKerberosチケットをダンプできます。

コマンド: mimikatz sekurlsa::tickets exit

  • システム上のすべての認証されたKerberosチケットをダンプします。
  • 管理者アクセスデバッグ権限を持つまたはローカルSYSTEM権限が必要です

SID

Mimikatz SIDモジュールはMISC::AddSIDを置き換えます。NTDSサービスをパッチするにはSID::Patchを使用します。

SID::add オブジェクトのSIDHistoryにSIDを追加

Mimikatz-SID-add

SID::modify オブジェクトのSIDを変更

Mimikatz-SID-Modify

TOKEN

Mimikatz Tokenモジュールを使用すると、MimikatzはWindows認証トークンとのやり取りを行うことができます。既存のトークンを取得および擬似化することができます。

TOKEN::Elevate トークンを擬似化します。権限をSYSTEMデフォルトに昇格させるか、Windows APIを使用してボックス上でドメイン管理者トークンを見つけます。
管理者権限が必要です。

Mimikatz-Token-Elevate1

ボックス上でドメイン管理者の資格情報を見つけ、そのトークンを使用します: token::elevate /domainadmin

Mimikatz-Token-Elevate-DomainAdmin

TOKEN::List システムのすべてのトークンをリスト表示

TS

TS::MultiRDP (実験的)複数のユーザーを許可するためにターミナルサーバーサービスをパッチします

Mimikatz-TS-MultiRDP

TS::Sessions TS/RDPセッションをリスト表示します。

Vault

mimikatz.exe "privilege::debug" "token::elevate" "vault::cred /patch" "exit" - スケジュールされたタスクのパスワードを取得します