代码安全审计实践

2020年安全相关的事务变多了,也因此更注重安全合规相关的工作了。其中代码安全审计是安全开发生命周期(SDL)中重要的内容,这一年中也正好负责这块的相关工作,这边做个小结。

代码安全审计的内容

通常关于代码的安全问题有两类:

  • 源码安全分析:通过对源代码进行审查,找出并修复代码中的各种可能影响系统安全的潜在风险,通过提高代码的自身质量,达到降低系统风险的目的。往往由于代码量大,代码安全审计一般会借助静态分析类工具,对代码进行自动检测,产生代码安全审计报告。

  • 第三方依赖包安全:扫描应用程序(及其依赖库),执行检查时会将漏洞数据库下载到本地,再通过核心引擎中的一系列分析器检查项目依赖性,收集有关依赖项的信息,然后根据收集的依赖项信息与本地的CPE&NPM库数据进行对比,如果检查发现扫描的组件存在已知的易受攻击的漏洞则标识,最后生成报告进行展示。

常见漏洞库

  • 美国
    • 赛门铁克的漏洞库 https://www.securityfocus.com/
    • 美国国家信息安全漏洞库 https://nvd.nist.gov/
    • 全球信息安全漏洞指纹库与文件检测服务 http://cvescan.com
    • 美国著名安全公司Offensive Security的漏洞库https://www.exploit-db.com/
    • CVE(美国国土安全资助的MITRE公司负责维护) https://cve.mitre.org/
  • 工控类
    • 美国国家工控系统行业漏洞库 https://ics-cert.us-cert.gov/advisories
    • 中国国家工控系统行业漏洞:http://ics.cnvd.org.cn/
  • 国内:
    • 中国国家信息安全漏洞共享平台(由CNCERT维护): http://www.cnvd.org.cn
    • 国家信息安全漏洞库(由中国信息安全评测中心维护):http://www.cnnvd.org.cn/
    • 绿盟科技-安全漏洞:http://www.nsfocus.net/index.php?act=sec_bug

代码安全审计的工具

源代码安全分析

源代码安全分析的核心在于分析挖掘代码中的内部逻辑关系,从而发现其存在的漏洞;同时进一步尽力发掘设计、运行时逻辑中存在的问题。其主要的思路为:

代码原始信息提取
代码内部逻辑关系分析
漏洞特征分析
漏洞检测判定

源代码安全分析应有两个方向:

  • 针对源代码的审计:
    基于源代码的静态扫描,没有中间文件生成。主要通过收集数据流,生成dom节点,根据上下语义进行分析。
    针对源代码的审计的主要特点为可以不需要编译,直接分析出源代码的漏洞。主要的代表为:Checkmax。
  • 针对二进制代码的审计:
    依赖构建编译的文件,主要的分析技术为:内存建模,符号执行,数据流,路径裁剪等。
    针对二进制代码的审计需要依赖构建环境。主要的代表为:Sonar。

当然也有厂商采用两者结合的方案,比如:Fortify。

第三方依赖包安全分析

第三方依赖包安全检查用于扫描应用程序(及其依赖库),执行检查时会将 Common Platform Enumeration (CPE)美帝国家漏洞数据库及NPM Public Advisories库下载到本地,再通过核心引擎中的一系列分析器检查项目依赖性,收集有关依赖项的信息,然后根据收集的依赖项信息与本地的CPE&NPM库数据进行对比,如果检查发现扫描的组件存在已知的易受攻击的漏洞则标识,最后生成报告进行展示。

对于第三方依赖包的检测,比较常用的是OWASP(Open WebApplication Security Project)的开源项目,主要有两个:

  • DependencyCheck:
    开发团队使用的工具,用于识别项目依赖项并检查是否存在任何已知的,公开披露的漏洞。主要针对单个项目。支持Java、.NET、Ruby、PHP、Node.js、Python等语言编写的程序,并为C/C++构建系统(autoconf和cmake)提供了有限的支持。同时支持和许多主流的软件进行集成,比如:命令行、Ant、Maven、Gradle、Jenkins、Sonar等。
    官网:https://owasp.org/www-project-dependency-check/
  • DependencyTrack:
    安全团队使用的工具,实现第三方组件的安全统一管理。
    官网:https://dependencytrack.org/

代码安全审计的落地

关于代码安全审计,主要的问题在于:误报、漏报。一般情况下,代码审计工具采用清洗、以及自定义规则的方式,应对上述问题。

自定义漏洞规则
自定义清洗规则
代码
初步漏洞报告
漏洞报告

因此,在实际代码安全审计操作过程中,主要在于在实践中不断的:

  1. 调整自定义漏洞规则,以完善漏洞库;
  2. 调整自定义清洗规则,以减少误报率;

通常在初步引入代码安全审计时,通常:

  • 先适当的选择部分的工程,能过这批次的工程,调整漏洞规则、清洗规则,得到可接受的工程落地结果;
  • 而后适当的增加工程,不断重复上述的步骤,直到所有的工程都进行代码审计为止;

按介绍经验,预计上述步骤需要经历半年到一年的时间,才能完成代码审计工具的引入。

参考文档

  • https://github.com/dependency-check-team/dependency-check
  • https://www.microfocus.com/zh-cn/products/static-code-analysis-sast/overview
  • https://docs.sonarqube.org/latest/
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值