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, 例如:

5. 历史漏洞分析与复现

  1. 有规范的、成体系的分析、复现并存留实验环境,可以利用vagrant或docker记录、分享漏洞环境。
  2. 不只是复现漏洞,更重要的是复现漏洞挖掘的方法或过程(能应用于同类漏洞挖掘)

6. 安全关键技术

软件安全性所依赖的关键技术

7. 软件使用(配置)安全

8. 安全风险分析

软件自身安全

9. 设计分析

文档走读、设计模式分析、威胁建模、理想模型与设计模型对比

10. 源码审计

10.1 代码审计范围

10.2 issues与commits分析

10.3 代码结构分析

10.4 安全强相关文件

10.5 详细走读

10.6 如何开发并编译代码

理解该软件如何开发、编译:

  1. 编译方便调试
  2. 编译阶段也可能引入问题

10.7 自动化测试

Fuzz, 静态代码扫描, IAST…

11. 生态安全

项目相关工具、周边项目的安全性

12. 漏洞挖掘

12.1 xxx漏洞挖掘/验证

记录下每个漏洞的验证思路,即使是失败的漏洞思路,也可能很有价值

13. xx环境渗透测试

xx软件环境渗透测试,例如容器环境版本特征识别