第243篇:企业内网威胁狩猎基础

关键词:威胁狩猎、Threat Hunting、ATT&CK 框架、内网安全、IOC、IOA、安全运营

一、引言

在传统安全运营中,安全团队主要依赖 SIEM 告警和终端安全产品的事件通知来响应安全事件。然而,这种方式存在两个致命缺陷:

  1. 告警疲劳:每天数千条告警中混杂大量误报,安全人员难以聚焦真正威胁
  2. 未知威胁:基于签名和规则的检测手段无法发现新型攻击、APT 攻击或内部威胁

威胁狩猎(Threat Hunting)是一种主动的安全分析方法。安全分析师不等待告警触发,而是基于假设和情报,主动在内网中搜索隐藏的攻击痕迹。从"被动响应"到"主动出击",是安全运营能力的质变。

二、威胁狩猎核心概念

2.1 威胁狩猎与事件响应的差异

维度 事件响应(IR) 威胁狩猎(Hunting)
触发方式 告警驱动 假设驱动 / 情报驱动
执行时机 事件发生后 日常持续进行
分析范围 单一事件相关日志 全网数据深度关联
目标对象 已知威胁 已知 + 未知威胁
输出结果 事件处置报告 检测规则改进 + 攻击面收敛
周期 按需触发 常态化运营(每周/每月)

2.2 MITRE ATT&CK 框架简介

MITRE ATT&CK(Adversarial Tactics, Techniques and Common Knowledge)是威胁狩猎的核心参考框架,描述了攻击者在网络中的行为模式。

MITRE ATT&CK 框架简介 - 图示

2.3 狩猎假设驱动模型

狩猎假设驱动模型 - 图示

三、常见内网威胁狩猎场景

3.1 场景一:异常登录行为狩猎

狩猎假设:攻击者已获取内网某台服务器的凭据,正在尝试登录更多系统。

-- 基于 Syslog / 安全审计日志的分析查询

-- 1. 统计同一源 IP 在不同目标主机上的 SSH 登录尝试
SELECT
    source_ip,
    COUNT(DISTINCT destination_host) AS unique_targets,
    COUNT(*) AS total_attempts,
    SUM(CASE WHEN result = 'failure' THEN 1 ELSE 0 END) AS failed_attempts,
    MAX(timestamp) AS last_attempt
FROM ssh_auth_logs
WHERE timestamp >= NOW() - INTERVAL 24 HOUR
GROUP BY source_ip
HAVING unique_targets > 3
   OR failed_attempts > 10
ORDER BY unique_targets DESC;

-- 2. 检测非工作时间的管理员登录
SELECT
    username,
    login_time,
    source_ip,
    destination_host,
    authentication_method
FROM admin_login_logs
WHERE EXTRACT(HOUR FROM login_time) BETWEEN 0 AND 6
   AND username IN ('root', 'administrator', 'admin')
ORDER BY login_time DESC;

-- 3. 检测来自非常规位置的登录
SELECT
    username,
    login_time,
    source_ip,
    vlan_id,
    CASE
        WHEN vlan_id NOT IN (user_usual_vlans) THEN '异常VLAN'
        ELSE '正常'
    END AS anomaly_flag
FROM login_logs
WHERE timestamp >= NOW() - INTERVAL 7 DAY
   AND vlan_id NOT IN (
       SELECT vlan_id
       FROM user_baseline
       WHERE username = login_logs.username
   );

3.2 场景二:横向移动狩猎

狩猎假设:攻击者已突破边界,正在利用已获取的凭据在内网横向移动。

-- 1. RDP 横向移动检测
SELECT
    source_ip,
    destination_ip,
    COUNT(*) AS rdp_connections,
    COUNT(DISTINCT destination_ip) AS unique_destinations,
    MIN(first_seen) AS first_seen,
    MAX(last_seen) AS last_seen
FROM rdp_connections
WHERE timestamp >= NOW() - INTERVAL 12 HOUR
GROUP BY source_ip, destination_ip
HAVING rdp_connections > 3;

-- 2. SMB 横向移动检测(PsExec、WMI 等)
SELECT
    source_ip,
    destination_ip,
    protocol,
    port,
    payload_size,
    timestamp
FROM smb_traffic
WHERE port IN (445, 139)
   AND (protocol = 'PsExec' OR protocol = 'WMI' OR protocol = 'Admin$')
   AND timestamp >= NOW() - INTERVAL 24 HOUR
ORDER BY timestamp DESC;

-- 3. 异常进程创建(检测 PsExec 等工具)
SELECT
    host_name,
    process_name,
    parent_process,
    command_line,
    user_name,
    create_time
FROM process_creation_logs
WHERE process_name IN ('psexec.exe', 'psexesvc.exe', 'wmic.exe', 'winrm.vbs')
   OR command_line LIKE '%admin$%'
   OR command_line LIKE '%\\\\%\\admin$%'
ORDER BY create_time DESC;

3.3 场景三:数据外泄狩猎

狩猎假设:攻击者已获取敏感数据访问权限,正在尝试将数据传送到外部。

-- 1. 异常大流量外传检测
SELECT
    source_ip,
    destination_ip,
    destination_port,
    SUM(bytes_sent) AS total_bytes_sent,
    COUNT(*) AS connection_count,
    MAX(timestamp) AS last_transfer
FROM netflow_logs
WHERE bytes_sent > 1048576  -- 1MB
   AND destination_ip NOT IN (
       SELECT ip FROM internal_networks  -- 排除内网流量
   )
GROUP BY source_ip, destination_ip, destination_port
HAVING total_bytes_sent > 10485760  -- 10MB
ORDER BY total_bytes_sent DESC;

-- 2. DNS 隧道检测
SELECT
    source_ip,
    COUNT(*) AS query_count,
    COUNT(DISTINCT query_name) AS unique_domains,
    AVG(LENGTH(query_name)) AS avg_label_length,
    SUM(CASE WHEN query_type = 'TXT' THEN 1 ELSE 0 END) AS txt_queries
FROM dns_logs
WHERE timestamp >= NOW() - INTERVAL 1 HOUR
GROUP BY source_ip
HAVING unique_domains > 100
   OR avg_label_length > 30;  -- 异常长的 DNS 标签

-- 3. 异常时间段的文件访问
SELECT
    user_name,
    file_path,
    access_time,
    CASE
        WHEN EXTRACT(HOUR FROM access_time) BETWEEN 0 AND 6 THEN '非工作时间'
        WHEN EXTRACT(DAYOFWEEK FROM access_time) IN (1, 7) THEN '周末'
        ELSE '正常时间'
    END AS time_classification
FROM file_access_logs
WHERE file_path LIKE '%confidential%'
   OR file_path LIKE '%sensitive%'
   OR file_path LIKE '%password%'
   AND (EXTRACT(HOUR FROM access_time) BETWEEN 0 AND 6
        OR EXTRACT(DAYOFWEEK FROM access_time) IN (1, 7))
ORDER BY access_time DESC;

3.4 场景四:持久化痕迹狩猎

狩猎假设:攻击者在目标主机上建立了持久化后门,即使清除了初始入侵点仍可重新控制。

# Linux 系统持久化检查
# 1. 异常定时任务
crontab -l
cat /etc/crontab
ls -la /etc/cron.d/

# 2. 系统启动项检查
ls -la /etc/init.d/
systemctl list-unit-files --state=enabled
ls -la ~/.config/autostart/

# 3. SSH 公钥后门
cat /root/.ssh/authorized_keys
cat /home/*/.ssh/authorized_keys

# 4. 异常 SUID/SGID 文件
find / -perm -4000 -type f 2>/dev/null
find / -perm -2000 -type f 2>/dev/null

# 5. 隐藏用户(UID 为 0)
awk -F: '$3 == 0 {print $1}' /etc/passwd

# 6. 最近修改的系统二进制文件
find /usr/bin /usr/sbin /bin /sbin -mtime -7 -type f 2>/dev/null
# Windows 系统持久化检查
# 1. 注册表启动项
Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
Get-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"

# 2. 计划任务
Get-ScheduledTask | Where-Object {$_.State -eq "Ready"} | Select TaskName, TaskPath, State

# 3. WMI 事件订阅
Get-WmiObject -Namespace "root\subscription" -Class __EventFilter
Get-WmiObject -Namespace "root\subscription" -Class CommandLineEventConsumer

# 4. 隐藏服务
Get-WmiObject Win32_Service | Where-Object {$_.StartMode -eq "Auto" -and $_.State -ne "Running"}

四、威胁狩猎平台建设

4.1 数据源整合

数据源 获取方式 价值
网络设备日志 Syslog / SNMP Trap 流量异常、配置变更、连接异常
防火墙日志 Syslog / API 跨域访问策略、命中策略统计
终端 EDR 日志 Agent 上报 进程创建、文件修改、网络连接
认证日志 RADIUS / AD / LDAP 登录失败、异常登录时间、权限提升
DNS 日志 DNS 服务器导出 DNS 隧道、C2 域名解析
流量元数据(NetFlow) 交换机/路由器导出 流量基线偏离、异常连接
邮件网关日志 邮件安全网关 钓鱼邮件、恶意附件
云平台日志 CloudTrail / API 云资源异常操作

4.2 华为设备日志采集配置

# 华为交换机 Syslog 配置(对接 SIEM)
<HUAWEI> system-view
[HUAWEI] sysname Core-SW-01

# 配置 Syslog 主机
[HUAWEI] info-center loghost 10.10.100.20
[HUAWEI] info-center loghost trap level informational
[HUAWEI] info-center loghost filter level informational

# 配置登录日志
[HUAWEI] aaa
[HUAWEI-aaa] authentication-scheme default
[HUAWEI-aaa-auth-domain-default] authentication-log enable
[HUAWEI-aaa-auth-domain-default] quit

# 配置命令行操作审计日志
[HUAWEI] info-center enable
[HUAWEI] info-center source default channel 1 log level debugging
[HUAWEI] info-center source default channel 2 log level debugging

# 配置配置变更日志
[HUAWEI] log configuration enable

# 配置 NetFlow 导出
[HUAWEI] interface GigabitEthernet 1/0/1
[HUAWEI-GigabitEthernet1/0/1] user-defined flow export enable
[HUAWEI-GigabitEthernet1/0/1] quit

[HUAWEI] flow monitoring ipv4 template 1
[HUAWEI-flow-ipv4-1] source-address
[HUAWEI-flow-ipv4-1] destination-address
[HUAWEI-flow-ipv4-1] source-port
[HUAWEI-flow-ipv4-1] destination-port
[HUAWEI-flow-ipv4-1] protocol
[HUAWEI-flow-ipv4-1] packets
[HUAWEI-flow-ipv4-1] bytes
[HUAWEI-flow-ipv4-1] sampling 100
[HUAWEI-flow-ipv4-1] export host 10.10.100.20 udp-port 9996
[HUAWEI-flow-ipv4-1] quit

4.3 狩猎仪表盘关键指标

狩猎仪表盘关键指标 - 图示

五、总结

维度 要点
威胁狩猎定位 不替代告警系统,而是填补规则检测的盲区
核心方法论 假设驱动 + ATT&CK 框架 + 多源数据关联
关键数据源 终端日志、网络流量、认证日志、DNS 日志、流量元数据
常见场景 异常登录、横向移动、数据外泄、持久化、凭证窃取
工具依赖 SIEM、EDR、NetFlow 分析器、ATT&CK 导航器
组织能力 分析师需具备攻防双方视角、编程能力和业务理解
持续改进 狩猎发现 → 检测规则 → 自动化 → 新的狩猎假设

核心结论:威胁狩猎不是偶尔为之的应急手段,而是常态化安全运营的核心能力。通过持续在内网中主动搜索隐藏威胁,安全团队能够在攻击者完成其目标之前发现并阻断攻击,将平均检测时间(MTTD)从被动告警的数天缩短到数小时甚至数分钟。

思考

  1. 基于 ATT&CK 框架的威胁狩猎与基于告警规则的事件响应,在检测未知威胁方面各有什么优劣?

  2. 如果企业缺乏 EDR 和流量分析平台,仅依靠网络设备日志能否开展有效的威胁狩猎?可以覆盖哪些场景?

  3. 如何衡量威胁狩猎项目的有效性?应该关注哪些指标?

下篇预告:第244篇:无线网络安全:WPA2/WPA3/802.1X——无线网络的全链路防护