“奇安信2020数据分析及应用(二)”这个标题,初看像是某个公司内部的季度汇报,但细品之后你会发现,它其实是安全行业从“堆设备、看告警”走向“用数据做研判、用模型找异常”这段转型期的真实切片。2020年正好是远程办公、业务上云全面加速的一年,安全数据量级和处理复杂度一下子被拉高了好几个台阶,单纯靠安全运营人员在控制台前一条条刷日志,已经完全不现实了。我当时所在的安全数据分析团队,就是在这个背景下,把奇安信的各类安全产品数据——终端告警、流量元数据、漏洞信息、威胁情报——统一收口,再通过清洗、建模、可视化的方式,让数据自己开口说话,辅助一线研判和决策。这篇文章是系列的第二篇,重点聊数据接入之后的分析建模和落地应用,包括指标体系的搭建思路、特征工程的实操细节、可视化大屏的设计逻辑,以及我在排查告警风暴、处理脏数据时踩过的一些坑。如果你正在做安全数据分析,或者准备从传统运维转向安全数据方向,这篇文章里的很多经验可以直接拿去参考。
1. 整体设计思路:先想清楚“安全数据分析到底要回答什么问题”
先说一个我在刚接触安全数据分析时很容易犯的错:把一堆日志灌进平台,做出花花绿绿的仪表盘,领导看完说一句“做得挺好看”,然后就没有然后了。后来我才意识到,安全数据分析的核心不是“把数据画出来”,而是“用数据回答具体的业务问题”。奇安信2020年的数据分析体系,从一开始就在往这个方向收敛。
1.1 从“被动看告警”到“主动找规律”的转变
在2019年甚至更早,多数安全运营中心的工作模式是防守式的:设备产生告警,运营人员去核实,确认后处置,再写报告。这套模式的最大问题是告警太多、有效告警太少,也就是行业里常说的“告警疲劳”。我有次带团队统计过一个星期内的原始告警量,差不多三十万条,但真正经过研判确认的攻击事件不到一百个,占了百分之零点几。这个比例意味着,所有人都在做重复的筛选动作,真正能抽出时间做深度威胁分析的人少之又少。
2020年的数据分析工作,首先解决的就是这个问题。我们的思路是:不再把每条告警都当“待办事项”,而是先把告警背后的实体和关系拆出来,用统计和建模的方法去刻画“正常行为”和“异常行为”的边界。比如,一台服务器每天晚上固定时间连接固定的外网地址,突然凌晨三点开始频繁访问境外IP,这时候数据分析系统应该主动把这个行为模式的变化抓出来,而不是等告警规则命中。这就把安全运营从“被动响应”推向了“主动研判”。
1.2 指标体系搭建:从零散指标到分层落地
好多团队做数据分析,上来就提“我要一个安全态势指数”,然后塞进来十几个指标,但根本说不清指标之间是什么关系。奇安信2020年的做法,是把指标体系拆成三个层次:基础指标、研判指标、决策指标。
基础指标回答“发生了什么”,比如原始告警数、受影响资产数、攻击源IP数;研判指标回答“要不要管”,比如告警误报率、事件严重程度评分、受影响业务系统的等级;决策指标回答“投入值不值”,比如平均检测时间、平均响应时间、安全事件造成的业务影响估算。这三个层次是有逻辑递进的,底层数据越干净,上层的研判和决策指标才越可信。否则就会出现一种很尴尬的情况:决策大屏上的风险分数很高,但运营人员点进去发现,这个分数是从一批重复告警里算出来的,根本没有实际含义。
所以我建议,任何团队做安全数据分析,先别急着写代码、画图表,花两三天时间,把两三个核心业务流程捋一遍,搞清楚业务方和管理层最关心的几个问题,再倒推需要哪些指标、需要哪些数据。这个思路虽然在当时被一些人认为“不够技术”,但后来证明是最省时间的做法。
2. 核心细节解析与实操要点:数据清洗和特征工程才是真正的分水岭
如果让我用一句话概括安全数据分析的真实工作量,那就是“建模花两成时间,清洗和特征工程花八成时间”。很多刚入行的同学觉得Kafka、Spark、Flink这些框架学完就能上手,但真到了处理安全日志的时候才会发现,脏数据才是最大的敌人。
2.1 安全日志接进来之后的“第一道关”
先说数据标准化。不同设备产生的日志格式差异极大,比如防火墙的Syslog和终端侧的EVTX事件,字段命名、时间格式、IP字段的表示方式都完全不同。我见过最典型的一个问题:有的设备把时间记成“2020-06-11 08:23:45”,有的记成“06/11/2020 08:23:45 AM”,甚至还有把时区信息直接丢掉的。如果这一层不做统一处理,到后面做时间窗口统计的时候,结果就是错的。
我们当时的做法是,接入层做一套统一的字段映射表,把日志里的原始字段映射成标准字段,比如src_ip、dst_ip、src_port、dst_port、event_type、severity、raw_log。遇到无法解析的字段,不要直接丢弃,而是放进raw_log字段里留底,方便后面排查。这套映射表的维护很重要,每接入一种新设备,都要走一遍字段梳理流程,确认关键字段是否有值、是否有默认值陷阱。比如某安全设备的severity字段,默认值是0,但0并不代表“低危”,而是“未评级”,如果不看文档直接用,很容易低估风险。
2.2 特征工程:从原始日志到能够“喂”给模型的样本
特征工程是整个分析链路里最见功夫的环节。同样的模型,喂给它的特征不同,效果天差地别。2020年奇安信在威胁检测上投入比较多的一块,就是围绕着“实体行为画像”来构造特征。
拿一个内网失陷主机检测场景举例。我们为每一台主机构建时间片特征,比如过去五分钟目标主机主动外连的目的IP数量、目的端口数量、连接频率、连接时长分布、是否出现常见的隧道协议特征。这些特征单独拿出来看都没有什么异常,但合在一起,就能比较好地刻画“这台主机是不是在用隐蔽隧道外传数据”的行为模式。
这张表是我们在特征工程阶段常用的部分特征样例,方向偏主机侧外联行为:
- 时间窗口内主动外联IP数,单位窗口内出现的新IP占比,外联IP中威胁情报命中数,连接目的端口集中在高危端口的占比,单次连接发送字节数均值,半小时内连接频次方差,外联域名中随机域名字符串占比,是否使用了非标准协议端口,TLS证书信息是否为自签名证书,外联IP的归属地和机房类型
特征不是越多越好,关键看是否有区分度。有一段时间我们往模型里加了大量特征,训练集上的效果很好,但一到线上就失灵,后来排查下来发现是特征里混入了未来数据,比如用整个事件周期统计均值去预测事件前半段的异常,这在特征工程里是绝对不能犯的“泄漏”错误。
2.3 建模选型:为什么2020年主流方案是“规则+无监督”的组合
在2020年这个时间点,很多安全团队在模型选型上会比较纠结:深度学习、图神经网络这些概念已经炒得很热,但真正落地时还是会遇到两个问题——样本标签不足、解释性受限。攻击样本本身是小概率事件,能拿到的稳定标注数据很少,深度学习模型容易过拟合,而且安全运营人员对模型的“黑盒判断”天然不信任。我们当时的策略是“规则兜底、无监督发现、监督模型精排”。
规则负责覆盖已知攻击模式,比如已知恶意IP连接、典型弱口令爆破特征;无监督模型负责发现未知异常,比如基于孤立森林的主机行为离群检测;有监督模型则用在已经有高质量标签的场景,比如钓鱼邮件检测,可以把历史标注样本利用起来做精细排序。这套组合方案在当时算比较稳妥的,既保证了日常运营的准确性,又保留了发现未知威胁的能力。
3. 实操过程与核心环节实现:从告警降噪到自动化报告
分析模型做出来只是第一步,真正让数据分析产生价值的是把它嵌入到运营流程里。这一章我讲两个我们在2020年实际落地的核心环节:告警降噪和自动化分析报告。
3.1 告警降噪:怎么把三十万条告警收敛到一百个待研判事件
告警降噪这件事,说起来简单,做起来全是细节。我们第一版方案是简单的规则汇聚:同一个源IP、目标IP、事件类型,在五分钟内只保留一条,然后按攻击链阶段做个优先级排序。但这个方案很快被业务否了,原因是它会把一些真正的批量扫描行为压缩成一条,导致运营人员低估风险等级。
第二版方案加入了资产重要性权重:同样的告警,发生在核心数据库服务器和发生在测试机上,处置优先级完全不同。具体实现上,我们会给每台资产打一个资产评分,分值是0到100,由业务系统等级、是否对外暴露、是否含有敏感数据、是否做过最近一次漏洞修复这几个子项加权得到。最终的告警评估分,是原始告警严重程度乘以资产评分的归一化值。这个方案上线之后,告警排序的准确率高了不少,一线运营人员处理完“高评估分”告警后,基本可以把大部分真实风险覆盖住。
聚合和排序做完之后,还有一个容易被忽视的步骤——抑制高频误报。有一些告警,比如某个内网主机频繁去访问同一个被标记的恶意IP,但实际上这个IP是CDN的节点,每次请求都是正常的缓存回源。这类告警如果不做抑制处理,每天都会大量出现。我们当时的策略是加一个“周期性基线”的判断:连续七天的同一时刻出现相同告警,则自动进入“待观察”状态,不再全员推送,只保留记录,等基线的置信度下降后重新激活。
3.2 自动化分析报告:从人工截图到一键生成事件研判报告
安全分析师每天最厌烦的工作之一,就是写报告。传统写法是这样的:分析师打开告警详情,截图、复制字段、粘贴到文档、写一句“该IP存在恶意连接行为”,再补充处置建议。这种报告不仅效率低,而且质量不稳定,换一个人写,风格完全不同。
2020年我们尝试做了一个自动化报告模板引擎,把报告拆成四个模块:事件概述、证据链、攻击链还原、处置建议。事件概述部分,直接从告警的字段中抽取关键信息,比如攻击源、受害者、发生时间、检测引擎命中类型;证据链部分,从关联分析的结果中提取时间线,把原始日志索引和关键字段填进去;攻击链还原部分,需要结合情报数据和行为分析结果,把攻击者在内外网的行为推进路径画出来;处置建议部分,则根据事件类型走规则库,比如命中勒索软件特征的告警,自动匹配隔离主机、查杀、恢复备份的步骤。
这个模板引擎上线后,原本半小时写一篇的报告,压缩到了五到十分钟。分析师只需要对自动生成的内容做复核和微调,然后把精力放到真正需要人工判断的部分,比如攻击者的攻击意图、事件的业务影响。我记得有同事开玩笑说:“自动报告出来以后,我终于有完整时间追线索了。”
4. 可视化设计与辅助决策:不是把数据堆上去,而是把“下一步动作”画出来
很多团队在安全可视化上容易走偏,指标越多越好,图表越酷越好,结果大屏变成了装饰品,运营人员每天上班还要花时间找“自己要看的那块在哪”。我们经历过这个阶段,所以后来做可视化时定了几个核心原则,我挑三个重点讲。
4.1 按“角色”而不是按“数据表”设计视图
安全数据的消费者至少有三种角色:一线分析师、安全运营组长、管理层。他们关心的问题完全不同。一线分析师需要的是证据链和关联检索入口,他要能迅速点开某个IP看它的行为时间线;安全运营组长关心的是今天的工作量分布和未闭环的事件数量;管理层则只关心风险趋势和业务影响。
所以我们在2020年做仪表盘时,没有把指标一股脑堆在一块大屏上,而是拆成了三个独立的视图。分析师的视图偏重检索,有搜索框、筛选条件、时间线组件;组长的视图偏重任务队列,有点击派单和状态标记功能;管理层的视图偏重趋势,只有少数几个核心指标,比如本周高风险事件数量、平均响应时间、影响业务系统数。这么做之后,大家反而觉得比之前“酷炫大屏”好用得多。
4.2 图表选择:什么场景该用柱状图,什么场景该用关系图
图表选择的本质是“你想让看图的人得出什么结论”。比如展示攻击源IP的分布,如果你要回答的问题是“哪个地区的攻击最多”,那柱状图比地图更直观,因为地图上的色块深浅在很多人的视觉系统里并不敏感;如果你要回答“攻击链路有没有贯穿多个内网资产”,那就必须用关系图,把源和目标的连接关系画出来。
我踩过的一个典型的坑是:用玫瑰图展示告警类型占比,图上十几种颜色,运营人员根本分不清谁大谁小。后来改成横向条形图,按数量从高到低排列,再标出占比,信息一下子就清楚了。所以我一直跟团队讲,安全可视化的第一原则不是好看,是“看图的人在三秒钟之内能抓住主旨”。
4.3 联动下钻:从大屏到明细的路径要短
大屏上看到异常指标,顺手点一下就能跳到关联事件列表,再点一下能看原始日志,这个联动体验非常重要。2020年我们专门花了一个迭代去优化下钻路径,把原本四到五层的点击缩短到两层。具体做法是在仪表盘组件上预设联动关联字段,比如事件ID、资产IP、告警时间范围,点击一个数据点,自动把这三个字段作为条件传递到下一级页面。别小看这个细节,一线人员每天要处理几十个事件,每少一次点击,都是在节省宝贵的响应时间。
5. 常见问题与排查技巧实录
最后这部分,我整理一下2020年在实际项目中反复遇到的高频问题。这些问题在教科书里很少写,但基本每一个安全数据分析项目都会碰到。
5.1 数据接入后“看不到数据”或“数据对不上”
最常遇到的情况是,数据明明接进来了,但图表上的数字和源系统里的对不上。排查思路一般按这个顺序走:先确认数据接入的时间范围有没有偏差,很多采集器默认只同步最近七天数据,历史数据要单独配置补拉;再确认时间字段的时区转换是否一致,如果前端用东八区展示,但后端索引里存的是UTC,那必然差八小时;最后确认聚合口径是否一致,比如源系统统计的是“设备原始日志条数”,你在数仓里算的是“解析成功的条数”,数值不同是正常的。
建议在接入每一种新数据源时,先写一个“数据核对清单”,至少包含总量核对、时间范围核对、关键字段命中率核对这三项。
5.2 告警降噪模型误杀太多,业务部门投诉怎么办
降噪和漏报天然存在矛盾,降得太狠,真实攻击被抑制了,业务部门或者红队测试一打就发现问题;降得不够,告警还是太多,运营人员依然被淹没。我们的经验是,降噪规则尽量“可解释、可回溯”,不要用一个复杂的模型默默地把告警吞掉。所有被抑制的告警都要进入单独的表,每天汇总一次,有专人抽查,确保被抑制的告警里没有漏网之鱼。如果业务部门投诉,就说“我们有回溯机制”,并且在回溯记录里能查到当时抑制的具体逻辑,这样就容易达成共识。
5.3 模型在测试集上效果很好,上线后效果明显变差
这个问题出现的原因通常是样本分布不一致。安全数据的时间特性很强,上周的攻击模式和这周的可能完全不同,模型一旦固定在历史数据上,遇到新的攻击手法就失灵了。我们的处理办法是给模型加定期重训的机制,同时用滑动窗口的方式,保留最近三个月的数据作为训练集,辅助加入一些长期历史样本作为稳定批次,防止模型过度适应短期波动。
另外,还要监控模型输入特征的分布漂移。如果某个特征的均值和方差在线上出现明显跳变,要先排查是不是数据源的采集逻辑变了,而不是急着调参数。
5.4 大屏“开着很好看”,但运营人员打开率低怎么办
这个问题我们花了很久才想明白——大家不看大屏,不是因为大屏做坏了,而是因为大屏没有嵌入到工作流程里。也就是说,大屏只是辅助展示,它没有“通知”功能,也没有“待办清单”功能,运营人员的工作入口还是工单系统。后来我们把必要的研判指标直接嵌到工单详情页里,分析师在处理工单时顺手就能看到关联的数据分析结果,大屏反而成了辅助。
这个调整给我们的启示是:数据分析的最终产品不应该只是一个“看板”,而应该是能够嵌入到业务动作中的信息流。谁处理问题,谁就看见数据,数据跟着人走,而不是人等数据。
6. 经验沉淀与后续扩展方向
2020年奇安信这套数据分析体系跑了一年,我自己最大的收获是:安全数据分析不是单纯的算法问题,而是一个数据工程、业务理解和组织流程的综合命题。模型再先进,数据没有治理好,结果依然是垃圾进、垃圾出;平台再稳定,运营流程不变,分析结果也只能停在报表层面。
后来我们在这个基础上又往两个方向做了扩展。一个是把数据分析结果输出到自动化响应平台,当模型判定某个主机失陷的可信度超过阈值,自动触发隔离动作,同时保留人工审核按钮,这个“半自动”的设计既保证了效率,也留住了安全团队对处置环节的控制力。另一个方向是把长周期的时间序列预测引入安全资产管理,比如预测未来七天可能被攻击的高危资产清单,让运营团队提前加固。这两个方向现在回头看,基本是行业后来几年都在走的路。
最后再分享一个很实际的小技巧:做安全数据分析,一定要保留原始日志的追溯能力。不管你的模型有多厉害,只要分析结果有争议,最后能一锤定音的,永远是原始日志。所以我们从第一天起就坚持把原始日志全量存储,并按天归档,同时保留快速检索入口。这条经验在无数次的争议排查里帮了大忙。如果你刚开始搭安全数据分析平台,请务必把“原始日志的可回溯性”当成一项硬性指标来规划,别只盯着仪表盘有多炫。