漏洞检测方法如何选?详解源代码与二进制SCA检测原理
摘要:本文探讨的是SCA具体的检测原理,源代码SCA检测和二进制SCA检测有哪些相同点和不同点,在进行安全审计、漏洞检测上各自又有什么样的优势和适用场景。
本文分享自华为云社区《源代码与二进制文件SCA检测原理》,作者:安全技术猿。
1、源代码与二进制的关系和特点
SCA(Software Composition Analysis)软件成分分析,通俗的理解就是通过分析软件包含的一些信息和特征来实现对该软件的识别、管理、追踪的技术。SCA具体的检测原理又是如何实现的,源代码和二进制文件的SCA检测又有哪些相同点和不同点,下面内容就来回答一下上述疑问。
对应编译类型的语言(C/C++/Go/Rust),都是遵循:源代码—>编译—>链接—>二进制文件的过程。影响二进制文件的因素包括不同的CPU架构(ARM、X86、PPC、MIPS…),不同的操作系统(Wndows、Linux、iOS、Android…),不同的编译优化选项(O0~O3),即使是同一套源代码,最终编译生成的二进制文件之间也是差别非常大的。注:上述影响因素不涉及java语言
从上面可知源代码和二进制文件之间存在巨大的差别,源代码是基于高阶语言来编写,是给人看的,人看了很方便理解其中语句的语义;而二进制是由流(指令流或字节流)来构成的,是给计算机“看”的,对人来说是非常不友好,不好理解。
源代码包含了变量符号类型、函数名称、类名称、代码逻辑结构等大量丰富的代码信息,相反为保留二进制文件的紧凑性,编译生成的二进制文件中会丢弃掉很多运行时用不到的信息,只保留程序正确运行必要的信息,比如被丢弃的信息有变量类型、变量名称等符号信息,可能被保留的有类名称、函数名称等信息,一定会保留的有常量字符串数据。另外为了保证程序的正确运行,还会有保留一个相应的配置信息,比如jar包中的manifest信息、POM信息、maven信息、资源文件等。基于这些特点源代码SCA和二进制SCA的检测原理也存在很大的不同。
2、源代码SCA检测原理
由于源代码中包含有丰富的程序信息,因此源代码的SCA检测既有大颗粒度的检测方法,也有细颗粒度的检测方法。
2.1 大颗粒度检测方法:
根据源代码文件的相似度来判断属于什么组件和版本;文件相似度可以基于hash的严格匹配方法,也可以根据文本相似度匹配方法;这种匹配方法的优点是效率高,匹配速度极快,确定是也很明显,基于hash的容易漏报,基于文本相似度的准确率低;
2.2 细颗粒度检测方法:
经过源代码—>词法分析—>Token提取—>语法分析—>AST抽象语法树—>语义分析过程来提取相应的数据,再通过机器学习、NLP、CFG调用图、DFG数据流图等等匹配算法进行代码相似度的检测,这种基于语义的代码相似度检测与基于文本相似度检测相比准确率高;
2.3 具备包管理机制的语言:
比如Java、Go,可以通过引用的开源软件包信息来实现开源软件的关联分析,这种方法可以几乎可以100%准确的分析出引用的开源软件名称。
3、二进制SCA检测原理
虽然好多源代码中具有的信息在二进制文件中不存在,但是对于常量字符串、部分类名称、函数名称、以及一些配置信息还是存在的,并且这些信息具备一定的不变性,即受cpu架构、不同编译优化选项的影响很小,因此二进制SCA主要从二进制文件中提取这些方面的不同特征,再运用匹配算法进行相似度计算,并根据相似度门限来检测出引用的开源软件名称和版本号。
结合分析二进制代码中的CFG调用图、DFG数据流图等信息进行更加精准的检测,但由于这些分析需要对二进制文件进行指令反汇编,导致分析时间非常的长,分析效率低下,因此这种SCA检测方法不适合对大规模二进制文件进行扫描。
4、源代码SCA和二进制SCA功能对比

可以试试下面的漏扫服务,看看系统是否存在安全风险:>>>漏洞扫描服务
漏洞检测方法如何选?详解源代码与二进制SCA检测原理的更多相关文章
- 物体检测方法(1) - YOLO 详解
最近遇到一些卡证识别的检测问题,打算先把理论知识梳理一下,随后还会梳理一版代码注释. 以前的region+proposal来检测的框架,这一系列速度和精度不断提高,但是还是无法达到实时.存在的主要问题 ...
- cloudemanager安装时出现failed to receive heartbeat from agent问题解决方法(图文详解)
不多说,直接上干货! 安装cdh5到最后报如下错误: 安装失败,无法接受agent发出的检测信号. 确保主机名称正确 确保端口7182可在cloudera manager server上访问(检查防火 ...
- Kubernetes服务pod的健康检测liveness和readiness详解
Kubernetes服务pod的健康检测liveness和readiness详解 接下来给大家讲解下在K8S上,我们如果对我们的业务服务进行健康检测. Health Check.restartPoli ...
- .NET Excel导出方法及其常见问题详解
摘要:.NET Excel导出方法及其常见问题详解. 一.Excel导出的实现方法 在.net 程序开发中,对于Excel文件的导出我们一共有三种导出方式: 利用文件输出流进行读写操作 这种方式的导出 ...
- cloudemanager安装时出现8475 MainThread agent ERROR Heartbeating to 192.168.30.1:7182 failed问题解决方法(图文详解)
不多说,直接上干货! 问题详情 解决这个问题简单的,是因为有进程占用了.比如 # ps aux | grep super root ? Ss : : /opt/cm-/lib64/cmf/agen ...
- Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量
Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量 一丶线程的理论知识 什么是线程: 1.线程是一堆指令,是操作系统调度 ...
- C#类、对象、方法和属性详解
C#类.对象.方法和属性详解 一.相关概念: 1.对象:现实世界中的实体(世间万物皆对象) 2.类:具有相似属性和方法的对象的集合 3.面向对象程序设计的特点:封装 继承 多态 4.对象的三要素:属性 ...
- 第三十五节,目标检测之YOLO算法详解
Redmon, J., Divvala, S., Girshick, R., Farhadi, A.: You only look once: Unified, real-time object de ...
- PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载 中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...
随机推荐
- 【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
编写Java Spring Boot应用,通过配置logging.path路径把日志输出在指定的文件夹中. 第一步:通过VS Code创建一个空的Spring Boot项目 第二步:在applicat ...
- tar 解压分割压缩文件
被分割后的压缩文件必须先合并成一个压缩文件才能正常的解压. 第一步.合并压缩文件 第二步.正常解压 $ls TINA-1.3.tar.gzaa TINA-1.3.tar.gzab TINA-1.3.t ...
- linux下创建文件的文件权限问题
今天发现创建文件的权限和自己规定的权限不一致,了解到了权限掩码的问题,这里总结一下. 首先权限掩码umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常我们都 ...
- Linux的inode与block
1,inode包含文件的元信息,具体来说有以下内容: 文件的字节数 文件拥有者的User ID 文件的Group ID 文件的读.写.执行权限 文件的时间戳,共有三个:ctime指inode上次文件属 ...
- 攻防世界 WEB 高手进阶区 csaw-ctf-2016-quals mfw Writeup
攻防世界 WEB 高手进阶区 csaw-ctf-2016-quals mfw Writeup 题目介绍 题目考点 PHP代码审计 git源码泄露 Writeup 进入题目,点击一番,发现可能出现git ...
- SpringCloud 2020.0.4 系列之 Sleuth + Zipkin
1. 概述 老话说的好:安全不能带来财富,但盲目的冒险也是不可取的,大胆筹划,小心实施才是上策. 言归正传,微服务的特点就是服务多,服务间的互相调用也很复杂,就像一张关系网,因此为了更好的定位故障和优 ...
- Java try catch语句块中try()的括号中代码作用
了解过Mybatis,都知道DefacltSqlSession是线程不安全的.每次执行查询都需要新建一个sqlSession.因此官方给的建议写法如下: Mybatis3 从 SqlSessionFa ...
- Springboot 整合RabbitMq ,用心看完这一篇就够了
该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct.Topic.Fanout的使用,消息回调.手动确认等. (但是 ...
- 直播预告 | 猪齿鱼V1.1发布,线上新功能详解邀您参加
2021年11月11日,数智化效能平台猪齿鱼 Choerodon发布 V1.1版本,多项功能新增或优化,多管齐下,全面提升团队工作效能! 通过提供体系化方法论和协作.测试.DevOps及容器工具,猪齿 ...
- PLSQL 删表 恢复
1.查看你删除的是哪张表(SQL 中的时间是删表时的时间 (我删表的时间 大概是:2019-08-16 08:47:00 之后 )): select * from user_recy ...