1. 异常访问检测概述
我先说个案例。几年前我帮一家金融公司做安全审计,发现某个运维人员每天凌晨2点准时登录一台数据库服务器。我们一看日志,这人白天从来不上去。后来一查,他利用职务之便悄悄往外导客户数据。嗯,这种就是典型的异常访问——用户平时没这个行为模式,某天突然变了个样。
那什么是异常访问?说白了,就是一切偏离正常预期的访问行为。它不一定是黑客攻击,也可能是内部误操作、被窃取的账号、或者是系统自身的Bug。我刚开始做安全时,总觉得只要拦住了暴力破解就算完事。后来踩过几次坑才明白:真正的威胁往往隐藏在看似正常的流量里。
什么是异常访问
异常访问可以从三个维度拆开看:
- 用户行为异常:登录时间不对、访问频次激增、下载量超标。比如一个HR从来没下载过客户名单,突然一天下载了5000条记录。
- 流量特征异常:来源IP从来没出现过、请求路径诡异、参数格式突变。我记得有一次生产环境突然从海外IP扫了一条不存在的API,当时防火墙没报警,但我们的基线发现了。
- 上下文异常:同一个账号在5分钟内从北京和纽约同时登录,或者一个只读账号尝试执行删除操作。这通常叫“不可能旅行”场景。
我个人的经验是:不要只盯着已知的攻击特征。现在很多攻击者用合法凭证慢慢渗入,靠规则库根本抓不住。必须从行为的角度去判断异常。
核心观点:异常 ≠ 非法,而是“偏离基线”。基线才是判定的尺子。
行为基线概念
行为基线,就是给每个实体(用户、设备、API、进程)画一幅“正常画像”。这幅画像不是静态的,是动态统计出来的。你想想看,一个人每天上班时间固定,操作频率固定,用的终端型号也固定——这些都能用数据建模。
我常用的基线维度有这几类:
| 维度 | 说明 | 典型统计方法 |
|---|---|---|
| 时间窗口 | 登录时间、操作时间段、持续时长 | 均值 ± 3σ,星期几模式 |
| 频次 | 单位时间内的请求数、API调用量、下载文件数 | 滑动窗口、移动平均 |
| 空间特征 | IP归属地、国家、ASN、子网段 | 白名单 + 地理概率模型 |
| 内容特征 | 访问的URL路径、参数类型、文件大小分布 | TF-IDF、熵值计算 |
| 行为序列 | 操作的前后顺序、跳转模式 | 马尔可夫链、LSTM |
建立基线的方式,我习惯分三步走:
- 采集:把原始访问日志汇聚到统一管道,清洗掉脏数据。
- 统计:按用户、按IP、按功能模块分别算均值和方差。这个阶段要至少跑7天数据,不能光取一天。
- 建模:选定特征组合,训练一个轻量的无监督模型。我曾经试过用简单的k-means,效果其实比复杂模型更稳定,因为网络数据噪声太大。
下面这张图能帮你快速理解整个检测的闭环逻辑:
检测的重要性
你可能会问:传统规则引擎加签名库还不够吗?我以前的团队就走过这个弯路。当时上线一个大型规则库,每天告警几万条,安全分析师全被打去排查,结果99%都是无效告警。为什么?因为攻击者早就不straight地撞特征了,用的全是合法凭证和伪装流量。
行为基线检测的价值在于:
- 发现内部威胁:外部的入侵还在其次,内部员工违规操作才是重灾区。我接触过的数据泄露事件,80%都有内部影子。
- 降低误报率:基线是动态的,能自动适应业务变化。比如双十一流量暴增,基线会跟着涨,不会瞎报警。
- 覆盖未知攻击:不用等病毒库更新,只要行为超纲就能触发。零日漏洞利用留下的“侦察”行为,往往最早被基线抓住。
我的建议:不要一上来就搞深度学习。先做简单的统计基线,跑一个月看看效果。很多时候,均值+标准差就能抓到80%的异常。
面临的挑战
这事儿听着美好,落地时坑不少。我挑几个最大的讲讲:
- 基线漂移:用户的行为不是静态的。一个人可能换了职位、换了个办公地点,或者公司业务调整了。基线条需要不停地重新学习。我之前一个项目,每两周就得全量重跑一次,不然准确率掉到50%以下。
- 数据质量问题:日志丢字段、时间戳错乱、IP被NAT混淆……采集侧一旦出问题,基线全是废的。我见过一个案例:因为负载均衡换了一台机器,源IP全变了,基线立马把所有人判成异常。嗯,那次翻了车。
- 计算与存储成本:全量日志一天上亿条是常事。要存历史数据做对比,还得实时算偏离度,对系统压力很大。我记得以前用Elasticsearch做基线,凌晨窗口跑的时候CPU直接拉满。
- 噪音与周期性:很多正常行为其实有天然波动(比如月底做报表下载量大),容易被误判。此时需要加周期性分解,把周、月、季度模式拆开。
避坑指南:我曾经为一家电商公司搭建基线系统,忘了处理“大促”期间的周期性峰值。结果双十一当天触发了大量告警,安全团队忙了一整夜。后来我加上日历事件这一维——把双十一、618等标记出来,提前调整基线阈值。你们从一开始就要考虑这一点。
下面这张表可以帮助你快速理解不同类型异常的对比:
| 异常类型 | 典型例子 | 检测难度 | 常见误报来源 |
|---|---|---|---|
| 主动扫描 | 黑产IP扫端口 | 低 | 爬虫、合法扫描器 |
| 账号异动 | 午夜登录、异地登录 | 中 | 出差、VPN集群出口 |
| 数据窃取 | 大量下载、非工作时间导出 | 高 | 备份任务、自动化脚本 |
| 内鬼操作 | 越权访问、修改系统配置 | 极高 | 运维故障处理流程 |
最后我想说:基线系统不是一次性工程。上线之后要持续看报表,定期回捡历史记录,看看哪些告警打错了,哪些该打没打。这就像养一个孩子——得天天跟它说话,它才能长成你想要的样子。