最近开发安全/软件供应链安全是海内外最火爆的细分领域之一,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可达性分析基础知识普及相关推荐

  1. 第二十六期:100 个网络基础知识普及,看完成半个网络高手

    本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看. 作者:佚名来源 本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看. 1)什么是链接? 链 ...

  2. 40、100 个网络基础知识普及

    100 个网络基础知识普及,看完成半个网络高手! 1)什么是链接? 链接是指两个设备之间的连接.它包括用于一个设备能够与另一个设备通信的电缆类型和协议. 2)OSI 参考模型的层次是什么? 有 7 个 ...

  3. 第一章 算法设计与分析基础知识

    系列文章目录 第一章 算法设计与分析基础知识 第二章 算法的分治策略 第三章 算法的动态规划 第四章 算法的贪心法 -- @[TOC](这里写目录标题) # 一级目录 ## 二级目录 ### 三级目录 ...

  4. 计算机基础知识教程excel求平均分,员工计算机基础知识普及教程-4Excel2000.ppt

    员工计算机基础知识普及教程-4Excel2000 1.1. 启动Excel 2000 1.2.Excel 2000的工作界面 (2)改变图表类型 可以根据需要选择图表类型,并可通过改变图表类型选择符合 ...

  5. 干货满满!100个网络基础知识普及(附带答案解析)

    本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看. 1)什么是链接? 链接是指两个设备之间的连接.它包括用于一个设备能够与另一个设备通信的电缆类型和协议. 2)OSI 参 ...

  6. 100 个网络基础知识普及,看完成半个网络高手!(文末附PDF版本)

    点击上方"涛哥聊Python",选择"星标"公众号 重磅干货,第一时间送达 来源:CU技术社区 阅读文本大概需要 5 分钟 为了方便大家更好着按需查找对应知识点 ...

  7. 第一课 逆向分析基础知识

    看雪软件安全论坛 > 初学者园地 > 『伴你成长』 > 『资料导航』 加密与解密 解密分析入门基础知识 欢迎您,youcou 您上次访问的时间是: 2009-09-23,23:53 ...

  8. Redis学习之基础知识普及

    Redis学习之基础知识普及 1. Redis安装(单机) 2.Redis基本数据结构 3.Redis常用命令 3.1.Redis 键(key) 3.2.Redis 字符串(String) 3.3.R ...

  9. 网络基础知识_你家的网络是这么布线的吗?家庭网络布线基础知识普及!

    这篇文章很早很早之前想写的,结果给忘记了,今天给补起来! 除了那种大型别墅外,绝大部分家庭网络并不会多复杂,在智能硬件越来越多的今天,在保证所有使用位置信号全覆盖的同时,最好心里对家里的网络布局有个很 ...

最新文章

  1. 二叉搜索树的第k个节点java_剑指Offer62:二叉搜索树的第k个结点(Java)
  2. python【力扣LeetCode算法题库】543-二叉树的直径
  3. 创建Vue实例传入的options||Vue的生命周期
  4. 种群计数 (pop_count)
  5. LAMP(linux下apache+mysql+php)平台编译安装的实现
  6. docker 多阶段构建
  7. c++ 工厂模式_大连中山融雪剂工厂自营工厂批发
  8. text html mime img,使用Python的email.mime.multipart发送HTML邮件时命...
  9. javascript基础知识系列:DOM学习
  10. Qt4_实现自定义模型
  11. 2014年前端开发者如何提升自己
  12. oracle 14097,ORA-14097: ALTER TABLE EXCHANGE PARTITION 中的列类型或大小不匹配
  13. 玩转诺基亚5800XM,新手上路指南
  14. C:\Windows\System32\drivers\etc\hosts文件的作用说明
  15. java农夫过河_农夫过河问题(java版)
  16. [EULAR文摘] 超声滑膜炎和腱鞘炎对已获临床缓解患者病情复发的预测
  17. 数据结构复习题(二)
  18. Android中使用sqlite数据库实现对象的存储
  19. PyQT5 (四十六) 在 QTableWidget 表格中设置合并单元格 的案例
  20. 存储ic载板_IC载板工艺

热门文章

  1. O2O优惠券数据分析(一)
  2. Java选择题(七)
  3. 蓝桥杯2017年第八届真题-对局匹配
  4. android 阻止自动唤醒,IT之家学院:如何免ROOT阻止Android应用唤醒
  5. 如何利用实验室信息管理系统LIMS轻松通过CNAS评审?
  6. 我的2018 年终小结
  7. 常用IP相关命令查询
  8. 技术分享|数据分析与可视化
  9. 全球133种语言自动翻译mishop大米外贸商城系统
  10. iOS微信聊天记录迁移时报错:当前网络状况复杂