开源软件安全研究方法
tags: 方法论
开源软件安全研究方法
0. 背景
过去很长一段时间,我的主要精力都花在容器安全上。容器是一个很大的概念,涉及领域众多,如果缺少一套高屋建瓴的、可行的方法论,将会被困在局部的知识点上,而无法系统性得分析出关键的容器安全风险。下面是基于前期容器安全研究总结了一套通用方法论,其中每个叶子节点都可以写成一篇文章,用于承载相关知识点的具体内容,如果一个节点的所有子节点都形成了翔实的文档,则可以认为完成了这个节点的研究工作。
注:本文仅列举了需要做哪些工作,并未指出具体应怎么做
1. 研究方法
1.1 研究目标/范围
2.2 研究方法
2. 目标软件基础信息收集
磨刀不误砍柴工,首先能熟练使用该软件的主要功能,才有可能在其中发现有建设性的安全风险。
2.1 软件简介
2.2 安装
2.3 快速使用
2.4 软件主要功能介绍
2.5 其他关于该软件的重要介绍
3. 开源情况
3.1 开源基本情况
- 开发语言
- LICENSE
- branch, tag
- 项目主要贡献者
- 项目上下游情况
3.2 issue,commit管理概况
issues和commits记录了开发的详细过程,这中间可能包括了一些隐蔽的问题,包括:未显性以漏洞形式发布但由团队自行发现修复、直接以版本特性更新解决了漏洞、甚至开发团队无感知地解决了问题。
对于一些关键文件的commits记录,则需要重点关注。
3.3 roadmap分析
roadmap中包含了项目未来的变化,如果能提前获悉软件未来的发展方向,则能在代码开发之前就布局相关技术的研究。
3.4 已知漏洞数量与分布情况
分析已知漏洞数量与分布情况有助于快速识别,历史上安全研究人员的关注点,进而有助于自己分析未来的研究方向。
3.5 如何报告该项目的漏洞
4. 如何第一时间知悉该软件安全情报
google announce, 例如:
- https://groups.google.com/forum/feed/kubernetes-announce/msgs/rss_v2_0.xml?num=50
- https://groups.google.com/forum/feed/golang-announce/msgs/rss_v2_0.xml?num=50
5. 历史漏洞分析与复现
- 有规范的、成体系的分析、复现并存留实验环境,可以利用vagrant或docker记录、分享漏洞环境。
- 不只是复现漏洞,更重要的是复现漏洞挖掘的方法或过程(能应用于同类漏洞挖掘)
6. 安全关键技术
软件安全性所依赖的关键技术
7. 软件使用(配置)安全
8. 安全风险分析
软件自身安全
9. 设计分析
文档走读、设计模式分析、威胁建模、理想模型与设计模型对比
10. 源码审计
10.1 代码审计范围
10.2 issues与commits分析
10.3 代码结构分析
10.4 安全强相关文件
10.5 详细走读
10.6 如何开发并编译代码
理解该软件如何开发、编译:
- 编译方便调试
- 编译阶段也可能引入问题
10.7 自动化测试
Fuzz, 静态代码扫描, IAST…
11. 生态安全
项目相关工具、周边项目的安全性
12. 漏洞挖掘
12.1 xxx漏洞挖掘/验证
记录下每个漏洞的验证思路,即使是失败的漏洞思路,也可能很有价值
13. xx环境渗透测试
xx软件环境渗透测试,例如容器环境版本特征识别