第1章 课程概述:SDK日志与异常访问检测入门
你好,我是老张,做安全检测有些年头了。今天咱们聊聊SDK日志和异常访问检测。你可能觉得日志分析没啥技术含量,不就是拿正则搜敏感词嘛?我以前也这么想,直到有一次线上被扫了个底朝天,日志里全是正常请求,查了半天才发现攻击藏在业务参数里。嗯,从那以后我彻底改了思路。
1.1 什么是SDK日志
SDK日志,说白了就是接入方嵌入你的SDK之后,里头的代码自动吐出来的运行记录。它跟服务器访问日志不太一样:SDK日志在客户端生成,带着设备指纹、用户行为、接口调用时序这些第一手数据。
我参与过一个支付SDK项目,刚开始只记录“请求成功/失败”两个字段。结果排查线上问题,根本定位不了是网络超时、签名错误还是服务端限流。后来我们加了三层日志:
- 基础层:接口名、请求时间、用户ID、设备ID、SDK版本
- 行为层:点击序列、页面停留、弹窗交互
- 异常层:NPE、JSON解析失败、网络断连、权限拒绝
SDK日志要区分“埋点日志”和“错误日志”。前者用于业务分析,后者才是安全检测的主战场。
下面这张表把核心字段列出来,你在实战里八成会用到:
| 字段名 | 类型 | 说明 | 示例 |
|---|---|---|---|
| app_id | string | 接入方应用标识 | com.xxx.pay |
| device_udid | string | 设备唯一ID | UDID-B8:3A:0E:... |
| api_name | string | 调用的API名称 | createOrder |
| req_timestamp | int64 | 请求时间戳(毫秒) | 1719504000000 |
| params_hash | string | 请求参数的MD5 | a1b2c3d4... |
| response_code | int | 业务返回码 | 200 / 403 / 500 |
| extras | json | 扩展信息 | {"ip":"192.168.1.1","user_agent":"OKHttp/4.9"} |
注意:设备指纹和用户ID属于敏感数据。你在采集之前一定要做脱敏和最小化处理,否则合规风险很大。我早期一个项目就因为设备ID明文存日志,被安全审计打了红灯。
1.2 异常访问检测的目标
做检测,不是把所有非预期请求都封掉。你要先想清楚目标是什么。我个人习惯把目标拆成三个层次:
- 实时性:从日志落地到发出告警,延迟不能超过5秒。拖久了攻击者早跑光了。
- 准确性:误报率控制在1%以下。我见过一个系统天天告警,运维直接脚本全关——等于没做。
- 可解释性:告警要能告诉工程人员“为什么这条日志有问题”。比如“同一设备5秒内调用checkOrder接口300次,远超正常频率”。
你想想看,如果每次告警都只给一串机器码,查都不好查,那这检测系统就废了。
核心指标速记:
- TPR(真正率) ≥ 99% —— 逃过的攻击越少越好
- FPR(假正率) ≤ 1% —— 别打扰正常用户
- MTTD(平均检测时间) ≤ 5秒
- 告警富化率 ≥ 80% —— 每条告警附上上下文
提到可解释性,我踩过一个坑:当时用孤立森林做离群检测,准确率不错,但每次告警出来,没人能说清到底是哪个纬度不对劲。后来我们加了一层规则引擎,把树模型的结果翻译成自然语言——比如“设备指纹在1小时内出现30个不同账号,触发了账号聚集异常”。这样开发同学一眼就能看懂。
1.3 课程学习路径
这门课一共30章,我按“基础→核心→实战”三个台阶来组织。刚开始不要跳着看,底层概念不明白的话,后面调模型你根本不知道参数该往哪个方向拧。
下面这张SVG图概括了整门课的知识体系,也是你的学习路线图:
你可能会问:那么多章节,从哪开始?我个人建议先啃下前5章,搞懂SDK日志的结构和常见异常模式。这些基础不牢,后面你根本看不懂特征工程为什么这么设计。
推荐学习节奏:每天1-2章,配合git仓库里的notebook动手跑一遍。被动看视频效果很差,一定要自己写filter函数,调一两个参数,才能记住。