第238篇:日志服务器 Syslog 与安全事件关联
关键词
Syslog服务器、日志关联分析、SIEM、安全事件告警、日志聚合、租户隔离、事件响应
一、集中日志管理
1.1 为什么需要集中日志
分散的设备日志无法有效分析,需要集中管理:
分散日志的困境:
防火墙有自己的日志 → 只能看防火墙 交换机有自己的日志 → 只能看交换机 服务器有自己的日志 → 只能看服务器 IDS/IPS 有自己的日志 → 只能看 IDS
一个问题需要登录 5 台设备查询 无法进行关联分析
集中日志的价值:
日志服务器(SIEM 平台) Syslog ◄── 防火墙 Syslog ◄── 交换机 Syslog ◄── IPS Syslog ◄── 服务器 API ◄── 云服务 全景视图:统一搜索、关联分析
1.2 日志源整合
典型的日志源接入清单:
| 日志源 | 协议 | 端口 | 日志量(日) |
|---|---|---|---|
| 防火墙 交换机 路由器 IPS/IDS 服务器 OS Web 服务器 数据库 云服务 API EDR 平台 | Syslog Syslog Syslog Syslog Syslog Syslog Syslog HTTPS API | UDP 514 UDP 514 UDP 514 UDP 514 UDP 514 TCP 1468 TCP 1468 443 HTTPS | 5-50 GB 1-10 GB 500 MB - 2 GB 2-20 GB 1-5 GB 5-50 GB 1-5 GB 1-10 GB 500 MB - 2 GB |
二、日志归一化与解析
2.1 日志格式差异
不同厂商的日志格式不同,需要归一化处理:
日志格式差异示例:
华为防火墙:
<134>2024-03-15 10:00:01 FW-01 %%01SESSION/6/PERMIT:
session=12345 permit TCP 10.0.1.100:50001 -> 93.184.216.34:80
Cisco ASA:
%ASA-6-302013: Built outbound TCP connection 12345 for outside:93.184.216.34/80
(10.0.1.100/50001) to inside:10.0.1.100/50001 (93.184.216.34/80)
Palo Alto:
1,2024/03/15 10:00:01,TRAFFIC,end,1,2024/03/15 10:00:01,10.0.1.100,
93.184.216.34,10.0.1.100,93.184.216.34,allow,50001,80,tcp
归一化后的通用格式(Common Event Format):
{
"timestamp": "2024-03-15T10:00:01Z",
"vendor": "Huawei",
"device": "USG6600",
"event_type": "session",
"action": "permit",
"protocol": "TCP",
"src_ip": "10.0.1.100",
"src_port": 50001,
"dst_ip": "93.184.216.34",
"dst_port": 80,
"bytes": 1234
}
2.2 Logstash 解析配置示例
# Logstash 解析华为防火墙日志示例
input {
syslog {
port => 514
type => "huawei-firewall"
}
}
filter {
if [type] == "huawei-firewall" {
grok {
match => {
"message" => [
# 会话日志
"%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:device} .*SESSION/%{DATA:severity}/%{GREEDYDATA:action}.*:
session log: %{WORD:action2} %{WORD:protocol} %{IP:src_ip}:%{INT:src_port} -> %{IP:dst_ip}:%{INT:dst_port}",
# 安全日志
"%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:device} .*ATTACK/%{DATA:severity}/%{DATA:attack_type}:
%{GREEDYDATA:message}"
]
}
}
date {
match => ["timestamp", "MMM dd HH:mm:ss"]
timezone => "Asia/Shanghai"
}
mutate {
remove_field => ["message", "timestamp"]
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "firewall-logs-%{+YYYY.MM.dd}"
}
}
三、安全事件关联分析
3.1 关联规则类型
日志关联分析的典型规则:
1. 时间关联
规则:同一源 IP 在 60 秒内产生 10 次以上阻断
来源:防火墙阻断日志
告警:可能的扫描攻击
SQL-like:SELECT src_ip, count(*)
FROM firewall_logs
WHERE action='deny'
GROUP BY src_ip
HAVING count(*) > 10
WITHIN 60 seconds
2. 顺序关联
规则:IDS 告警 → 防火墙阻断 → 源 IP 再次尝试
来源:IDS + 防火墙日志
告警:持续攻击尝试
3. 多源关联
规则:同一源 IP 在防火墙有阻断,同时在 EDR 有告警
来源:防火墙 + EDR 日志
告警:失陷终端嫌疑
4. 偏离基线
规则:某 IP 的 DNS 查询量突然增长 10 倍
来源:DNS 日志
告警:可能是 DGA(域名生成算法)通信
3.2 典型关联场景
场景 1:横向移动检测
日志源:防火墙 + EDR + AD
关联逻辑:
Step 1: EDR 报告终端 A 有可疑进程
Step 2: 防火墙显示终端 A 在 5 分钟内 SSH 到 10 台服务器
Step 3: AD 显示终端 A 的账户在服务器 B 上登录失败 5 次
结论:终端 A 已失陷,正在横向移动
响应:自动隔离终端 A + 阻断 SSH
场景 2:数据外泄检测
日志源:防火墙 + DLP + DNS
关联逻辑:
Step 1: DLP 检测到大量数据通过 HTTPS 上传
Step 2: DNS 日志显示解析了未知域名 data-exfil.example.com
Step 3: 威胁情报显示该域名与 APT 组织关联
结论:可能的数据外泄事件
响应:阻断该域名 + 调查受影响终端
场景 3:暴力破解检测
日志源:防火墙 + 服务器
关联逻辑:
Step 1: 防火墙显示 SSH 端口 22 的连接尝试来自同一 IP
Step 2: 服务器 SSH 日志显示认证失败 50 次
Step 3: 地理 IP 显示来源为境外异常区域
结论:SSH 暴力破解
响应:自动阻断该 IP 24 小时
四、SIEM 平台构建
4.1 开源 SIEM 方案(ELK)
ELK Stack 搭建日志分析平台:
| 防火墙 Syslog | 交换机 Syslog | 服务器 Syslog | ||
|---|---|---|---|---|
| │ │ │ | ||||
| └──────────────────┼──────────────────┘ | ||||
| │ | ||||
| ┌──────┴──────┐ | ||||
| │ Logstash │ | ||||
| │ 解析+归一化 │ | ||||
| └──────┬──────┘ | ||||
| │ | ||||
| ┌──────┴──────┐ | ||||
| │ Elasticsearch│ | ||||
| │ 存储+索引 │ | ||||
| └──────┬──────┘ | ||||
| │ | ||||
| ┌──────┴──────┐ | ||||
| │ Kibana │ | ||||
| │ 可视化+搜索 │ | ||||
| └─────────────┘ |
部署步骤: 1. 安装 Elasticsearch(存储引擎) 2. 安装 Logstash(日志处理管道) 3. 安装 Kibana(Web 可视化平台) 4. 配置防火墙发送 Syslog 5. 创建告警规则
4.2 告警规则配置
# ElastAlert 告警规则示例
# 规则:检测暴力破解
name: SSH_BruteForce_Alert
type: frequency
index: firewall-logs-*
timeframe:
minutes: 5
filter:
- query:
query_string:
query: "dst_port: 22 AND action: deny"
num_events: 50
alert:
- "slack"
- "email"
slack_webhook_url: "https://hooks.slack.com/services/xxx"
email:
- "security@company.com"
alert_text: |
SSH 暴力破解检测
源 IP: {0[src_ip]}
阻断次数: {0[num_events]}
时间窗口: 5 分钟
# 华为 SecoManager 内置规则
# 在 SecoManager 界面直接配置关联规则
# 支持图形化拖拽配置
五、安全事件响应
5.1 事件等级分类
安全事件分级响应:
| 等级 | 事件类型 | 响应时间 | 响应动作 |
|---|---|---|---|
| P0 紧急 | 勒索软件 数据外泄 | 15 分钟 | 立即隔离 启动应急 |
| P1 高危 | APT 通信 批量暴力破解 | 1 小时 | 阻断 + 调查 |
| P2 中危 | 单次攻击 违规访问 | 4 小时 | 日志分析 策略优化 |
| P3 低危 | 策略命中 安全设备告警 | 24 小时 | 审计记录 定期报告 |
5.2 事件响应流程
标准事件响应流程:
检测 → 分析 → 抑制 → 根除 → 恢复 → 复盘
Step 1: 检测
日志关联触发的告警 → SOC 分析员确认
Step 2: 分析
收集相关日志(防火墙 + EDR + DNS)
确认攻击类型和影响范围
Step 3: 抑制
└─ 阻断攻击源 IP(防火墙)
└─ 隔离失陷终端(EDR/交换机)
└─ 停止受影响的服务(如必要)
Step 4: 根除
└─ 清除恶意软件
└─ 修复漏洞
└─ 重置密码
Step 5: 恢复
└─ 恢复服务
└─ 确认无后门残留
└─ 持续监控 48 小时
Step 6: 复盘
└─ 根因分析
└─ 改进检测规则
└─ 完善安全策略
六、日志安全性
6.1 日志保护
日志本身需要安全保护:
1. 防止日志被篡改
使用 Syslog over TCP + TLS(加密传输)
日志服务器只写不删
# 配置加密传输
info-center loghost 10.0.100.50 transport tls
info-center loghost 10.0.100.50 ssl-policy log-policy
2. 防止日志被删除
日志服务器权限分离:
└─ 管理员:只能查询
└─ 审计员:只能查看
└─ 系统账户:只能写入
日志写入 WORM(一次写多次读)存储
3. 日志完整性校验
使用日志签名定期校验
# 生成日志哈希
sha256sum /var/log/firewall/*.log > checksum.txt
6.2 日志访问控制
# 华为日志服务器权限配置
# 创建审计员角色(只读)
aaa
role auditor
rule 1 permit command display logbuffer # 只能查看日志
rule 2 permit command display loghost
rule 100 deny command system-view # 不能进入配置模式
!
# 创建操作员角色(可配置日志相关)
aaa
role operator
rule 1 permit command display log*
rule 2 permit command info-center* # 可配置日志设置
rule 100 deny command system-view
rule 101 deny command firewall*
!
# 日志访问日志(审计管理员的操作)
info-center logbuffer enable
info-center logbuffer log-operators # 记录管理员对日志的操作
七、总结
| 知识点 | 核心要点 |
|---|---|
| 集中日志管理 | 统一收集多源日志,避免登录多台设备 |
| 日志归一化 | 不同厂商日志解析为通用字段格式 |
| 关联分析 | 时间/顺序/多源关联,发现隐藏威胁 |
| SIEM 平台 | ELK(开源)、SecoManager(华为)、Splunk(商业) |
| 事件响应 | 检测→分析→抑制→根除→恢复→复盘 |
| 日志保护 | 防篡改、防删除、完整性校验 |
| 权限分离 | 审计员只读,运维员可配,系统只写 |
八、思考
- 为什么需要集中日志管理?分散日志管理有哪些问题?
- 日志归一化(Normalization)的作用是什么?不同厂商日志格式有何差异?
- 请描述一个多源日志关联分析的场景(如:防火墙 + EDR + DNS 关联)。
- ELK Stack 中 Logstash、Elasticsearch、Kibana 分别负责什么功能?
- 安全事件响应流程是什么?P0(紧急)事件应在多长时间内响应?
下篇预告:第239篇《等保 2.0 三级网络架构要求》——等保 2.0 三级系统中网络安全架构的合规要求、技术措施和审计要求。