SCA可达性分析基础知识普及
最近开发安全/软件供应链安全是海内外最火爆的细分领域之一,SCA的可达性分析更是多次被提及。借着这个机会,做一个基础知识的普及。一是鸿渐作为深耕代码安全领域的小公司,靠的是专业硬实力,秀一下。二是很多职能人员缺乏专业性、没有鉴别能力,什么是好的,什么是差的,完全辨别不了,盲从心理特别厉害;我们一直怀着感恩的心服务客户,相互尊重,相互成就,有责任和义务做个普及。三是号召更多的有为青年加入我们,踏踏实实做一款好用易用的代码安全产品。
01 分析目的
SCA工具基于代码(源代码、二进制代码)和构建文件(c语言的makefile文件、maven项目的pom.xml文件等)分析得到被测项目使用了哪些第三方组件,并关联得到这些组件包含的漏洞。问题在于,传统SCA工具仅分析组件和漏洞的存在性,并未分析组件是否被自研代码调用(组件可达性),漏洞是否会被自研代码触发(漏洞可达性),这造成了大量的误报。
2022年华中科技大学开展了一个大规模的实证研究,首次以漏洞代码的可达性的视角,分析了生态系统中漏洞对下游软件所造成的安全威胁,结果显示已有SCA工具的误报率高达86%.[1]也就是说,SCA工具报出的潜在漏洞,其中86%的漏洞对应代码没有被实际使用,漏洞无法触发。
由于SCA工具报出组件和漏洞数量太多,如果出现漏洞都去改,工作量太大(升级意味着换调用第三方组件的接口,换接口意味测试量加大)。ShiftLeft的报告显示,客户希望在不影响软件交付时间的情况下交付安全软件,而传统的SCA工具会报出大量(数千个)开源漏洞,大多数最终被发现没有影响(误报)。这些解决方案非但没有帮助开发人员,反而拖慢了他们的速度。[2]
SCA可达性分析的意义在于,去掉引入但未使用的组件,同时降低无法触发漏洞的优先级,将注意力集中在实际影响代码的安全漏洞上,从而大幅提高SCA工具的可用性。
02 实现方式和技术难点
SCA工具中的可达性分析,按层次可分为构建可达性、组件可达性和漏洞可达性。
2.1 构建可达性分析
构建可达性分析是SCA工具的基础功能,分析构建文件中引入的第三方组件,如分析maven项目的pom.xml文件得到引用的第三方jar包。
2.2 组件可达性分析
组件可达性分析,即分析开源组件(包括拷贝引入的开源代码和构建引入的开源组件)是否被自研代码引入(include/import)并调用。即SCA工具需要列出可达组件的所有调用点,以证明该组件在实际运行中是可以被执行的。
组件可达性分析采用基于抽象语法树及调用分析方法实现,主要技术难点是大规模不完整代码的解析技术,即在无需编译通过的前提下(要求被测代码都能编译是不现实的),快速准确解析不完整源代码,这也是大多数SCA厂商无法完成该功能的主要原因,因为编译不通过检测技术一直以来是代码分析的核心技术之一。2018年北京大学团队在软件工程顶级会议ICPC上发表的论文[6]给出了这一问题的初步解决方案。
2.3 漏洞可达性分析
漏洞可达性分析,即分析漏洞是否会被自研代码触发。有两个技术难点:
一是漏洞细粒度对齐技术,由于CVE漏洞仅给出漏洞对应的组件或版本,需要进一步将漏洞对应到函数或行,才能用于漏洞可达性分析。鸿渐SCA通过漏洞对齐技术,将数万个漏洞及缺陷对应到代码片段(函数或者行),以支持细粒度漏洞可达性分析。
二是源代码静态分析技术(即SAST技术),即通过函数调用分析、控制流分析、值依赖分析和约束求解等技术,判断自研代码到漏洞是否存在可达路径,从而判断漏洞是否会被自研代码触发。鸿渐科技在代码静态分析技术领域有着深厚的积累,发表了多篇论文、并授权多篇相关的专利。
03 相关工具
由于可达性分析需要强大的静态代码分析技术支持,据我们调研,除鸿渐科技的SCA工具外,国内几乎没有支持可达性分析的SCA工具,国际上仅有美国ShiftLeft公司[4]、美国MEND公司[5]的SCA工具包含部分可达性分析功能,这三家公司的共同点是都有强大的SAST工具作为技术支持。
ShiftLeft SCA在报告中声称,通过引入“攻击者可达性”(即漏洞可达性分析),可以将开源漏洞报出数量减少93%.[2]
MEND SCA仅在报告中提到其正在申请的专利可以确定哪些漏洞直接影响代码,以最大程度地减少误报。[3]
参考文献
[1]https://mp.weixin.qq.com/s/RqVIHxYKGNErkOvDFGokWA
[2]https://www.shiftleft.io/blog/introducing-attacker-reachability-reducing-open-source-vulnerability-tickets-by-90-or-more/
[3]https://www.mend.io/wp-content/media/2021/11/MEND-How-to-Reduce-Your-Alert-Count-Early-in-Development.pdf
[4] https://www.shiftleft.io/
[5] https://www.mend.io/
[6] Sen Ma, Sihao Shao, Yulei Sui et al. "static C/C++ bug detection in the presence of incomplete code." In 2018 IEEE/ACM 26th International Conference on Program Comprehension (ICPC), pp. 385-3853. IEEE, 2018.
END
➦扫码关注我们
SCA可达性分析基础知识普及相关推荐
- 第二十六期:100 个网络基础知识普及,看完成半个网络高手
本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看. 作者:佚名来源 本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看. 1)什么是链接? 链 ...
- 40、100 个网络基础知识普及
100 个网络基础知识普及,看完成半个网络高手! 1)什么是链接? 链接是指两个设备之间的连接.它包括用于一个设备能够与另一个设备通信的电缆类型和协议. 2)OSI 参考模型的层次是什么? 有 7 个 ...
- 第一章 算法设计与分析基础知识
系列文章目录 第一章 算法设计与分析基础知识 第二章 算法的分治策略 第三章 算法的动态规划 第四章 算法的贪心法 -- @[TOC](这里写目录标题) # 一级目录 ## 二级目录 ### 三级目录 ...
- 计算机基础知识教程excel求平均分,员工计算机基础知识普及教程-4Excel2000.ppt
员工计算机基础知识普及教程-4Excel2000 1.1. 启动Excel 2000 1.2.Excel 2000的工作界面 (2)改变图表类型 可以根据需要选择图表类型,并可通过改变图表类型选择符合 ...
- 干货满满!100个网络基础知识普及(附带答案解析)
本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看. 1)什么是链接? 链接是指两个设备之间的连接.它包括用于一个设备能够与另一个设备通信的电缆类型和协议. 2)OSI 参 ...
- 100 个网络基础知识普及,看完成半个网络高手!(文末附PDF版本)
点击上方"涛哥聊Python",选择"星标"公众号 重磅干货,第一时间送达 来源:CU技术社区 阅读文本大概需要 5 分钟 为了方便大家更好着按需查找对应知识点 ...
- 第一课 逆向分析基础知识
看雪软件安全论坛 > 初学者园地 > 『伴你成长』 > 『资料导航』 加密与解密 解密分析入门基础知识 欢迎您,youcou 您上次访问的时间是: 2009-09-23,23:53 ...
- Redis学习之基础知识普及
Redis学习之基础知识普及 1. Redis安装(单机) 2.Redis基本数据结构 3.Redis常用命令 3.1.Redis 键(key) 3.2.Redis 字符串(String) 3.3.R ...
- 网络基础知识_你家的网络是这么布线的吗?家庭网络布线基础知识普及!
这篇文章很早很早之前想写的,结果给忘记了,今天给补起来! 除了那种大型别墅外,绝大部分家庭网络并不会多复杂,在智能硬件越来越多的今天,在保证所有使用位置信号全覆盖的同时,最好心里对家里的网络布局有个很 ...
最新文章
- 二叉搜索树的第k个节点java_剑指Offer62:二叉搜索树的第k个结点(Java)
- python【力扣LeetCode算法题库】543-二叉树的直径
- 创建Vue实例传入的options||Vue的生命周期
- 种群计数 (pop_count)
- LAMP(linux下apache+mysql+php)平台编译安装的实现
- docker 多阶段构建
- c++ 工厂模式_大连中山融雪剂工厂自营工厂批发
- text html mime img,使用Python的email.mime.multipart发送HTML邮件时命...
- javascript基础知识系列:DOM学习
- Qt4_实现自定义模型
- 2014年前端开发者如何提升自己
- oracle 14097,ORA-14097: ALTER TABLE EXCHANGE PARTITION 中的列类型或大小不匹配
- 玩转诺基亚5800XM,新手上路指南
- C:\Windows\System32\drivers\etc\hosts文件的作用说明
- java农夫过河_农夫过河问题(java版)
- [EULAR文摘] 超声滑膜炎和腱鞘炎对已获临床缓解患者病情复发的预测
- 数据结构复习题(二)
- Android中使用sqlite数据库实现对象的存储
- PyQT5 (四十六) 在 QTableWidget 表格中设置合并单元格 的案例
- 存储ic载板_IC载板工艺