论文学习_B2SFinder: Detecting Open-Source Software Reuse in COTS Software

1. 引言

研究背景:随着结构设计模式的广泛采用以及缩短上市时间的迫切需要,越来越多的商业现成(COTS)软件产品正在开源软件(OSS)项目之上开发。如此快速的应用程序开发会导致一些不良问题,包括许可证违规和安全问题。在这些问题中,OSS 重用漏洞是最严重的问题之一。

现存问题:当一些易受攻击的 OSS 代码集成到软件中并在该软件中重用时,OSS 漏洞可能会被引入到 COTS 软件中。此类 OSS 漏洞(称为OSS重用漏洞)普遍存在,会对 COTS 软件的安全产生严重影响。例如,Adobe Reader 和 Windows Defender 都被发现存在漏洞,因为它们都使用了开源项目 Libxslt 和 UnRAR 的一些易受攻击的版本。事实上,大多数 OSS 重用漏洞仍然存在于COTS 软件中,即使其易受攻击的 OSS 版本已经被修补。根据 Synopsis 报告,被审计的 COTS产品中有 96% 重复使用了 OSS 项目作为其组件,平均包含六年前发布的 OSS 项目中未修补的OSS 漏洞。

为了检测 OSS 重用漏洞,必须尽可能准确地识别 COTS 软件中包含的 OSS 项目。因此,论文希望解决 COTS 软件的底层 OSS 重用检测问题。尽管移动应用程序的数量不断增加,但运行在桌面计算机和服务器上的传统 COTS 产品仍然被广泛使用。因此,本文重点关注 COTS 软件。COTS产品通常由数十个剥离的二进制文件组成,其中大多数是可移植可执行(PE)格式(适用于Windows)或可执行和可链接格式(ELF)(适用于Linux)。

现有工作:给定目标 COTS 软件产品的二进制文件和一组候选 OSS 项目,存在两种代表性的 OSS 重用检测方法。 其中一种方法为计算目标 COTS 产品的二进制文件与候选 OSS 项目的已编译二进制文件之间的相似性。 虽然之前在二进制相似性检测方面已做了许多工作,但仍然面临两个挑战。 首先,所有候选 OSS 项目的全自动编译并非易事,通常需要手动寻找适当的编译器标志才能成功编译。 在论文对从 Ubuntu Packages 爬取的共计 2189 个 OSS 项目进行的实验中,发现仅约四分之一可以自动编译。 其次,任何二进制相似性分析的成本都可能很高。 对于一个中等的 COTS 软件产品,需要大约数十亿次比较才能从众多候选 OSS 项目中寻找代码重用,这使得分析无法扩展。Function Similarity Based 检测方法实现成本高,可扩展性差

另一种方法是直接比较 COTS 软件产品的目标二进制文件与候选 OSS 项目的源代码。 在缺乏用于生成 COTS 软件二进制文件的编译器标志的情况下,以前关于二进制到源码匹配的工作严重依赖于代码函数,包括函数名称和字符串文字等信息,这些信息通常与使用的编译器标志无关。 因此,代码重用的可能性是通过目标二进制文件和候选 OSS 项目中存在的共同特征实例的数量来衡量的,这些特征实例代表具体的特征对象,如函数名称 jpeg_start_decompress。 虽然该方法可以扩展到数以万计的 OSS 项目,但由于未考虑代码函数,直接将其应用于 OSS 重用检测并不能提供所需的准确性。Constant Features Based 检测方法依赖函数名称和字符串文字,检测精度低

研究挑战如何选择尽可能多的代码特征,同时确保所有选定的特征在编译的二进制文件中都是可追踪的? 二进制到源码匹配的关键在于所考虑的代码特征。 例如,BAT 仅考虑字符串文字,因此错过了 39.7% 与字符串文字无关的代码重用。 OSSPolice 不仅考虑字符串文字,还考虑导出的函数名称,在 ELF 格式的库中表现良好。 然而,COTS 软件的 PE 文件通常会剥离这些线索,使得 OSSPolice 无法执行剥离二进制文件中所需的代码匹配。

如何精确计算不同代码特征及其特征实例的匹配分数? 先前的工作通常通过计算匹配分数来衡量特征匹配程度。 但它们的分数计算不够精确,主要有两个原因:(1)不同类型的特征通常由同一过程匹配,(2)假设同一特征的不同特征实例在特征匹配中贡献相同。

如何利用 OSS 项目的代码结构来增强复用识别度? 一般来说,较高的匹配分数并不总是代表较高的代码重用可能性,反之亦然。 具体来说,LibPNG 中的每个特征都与 libopenjp2-7.dll 中的特征匹配,导致匹配分数很高。 但实际上,libopenjp2-7.dll 只是重用了 OpenJPEG 而非 LibPNG。 这说明论文需要考虑到 OSS 项目的复杂代码结构,以减少误报的重用标识数量,并增加真实重用标识的发现数量。

研究内容:为了解决上述三个问题,论文提出了一种二进制到源匹配方法 B2SFINDER,用于检测 OSS 重用。 如下图所示,B2SFINDER 分为 "匹配分数计算" 和 "重用类型识别" 两个阶段:

  • 匹配分数计算:为了精确计算第一阶段的匹配分数,论文选择了七种稳定的代码特征,其中四种不受编译影响,三种在编译过程中受到轻微影响。通过将七种特征分为字符串型整数型控制流型三种类型,论文设计了三种相应的匹配方法:精确匹配基于搜索的匹配基于语义的匹配。为了描述不同匹配特征实例的相对重要性,论文引入了两个特征实例属性:特异性出现频率。 特异性属性表示特殊匹配的特征实例(例如0x6a09e667)比普通的特征实例(例如0x0001)更有助于区分一个 OSS项目与其他项目。 出现频率属性表示所有候选 OSS 项目中匹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/45002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue打包文件dist放在SpringBoot项目下运行(正确实现全过程)(下)

在上一篇中,实现了Vue打包文件dist放在SpringBoot项目下运行。 Vue打包文件dist放在SpringBoot项目下运行(正确实现全过程)(上) 问题 路由刷新会产生404的问题。 原因 vue开发的应用,采用的是SPA单页…

JAVA 提速方法——类数据共享 CDS

类数据共享 CDS(Class-Data Sharing) 类数据共享 是一项 JVM 功能,减少 Java 应用的启动时间和内存占用。CDS 作用是让** class 被预处理到归档文件**,Java 程序启动直接带上归档文件,这样 JVM 可直接将归档文件映射到…

【Linux网络】网络基础

本篇博客整理了 Linux 网络编程的前置知识,例如网络的发展、协议和协议栈分层、网络通信原理、网络地址等,为后续进入 Linux 网络编程作铺垫。 目录 一、网络发展 二、网络协议 1)协议的作用 2)协议栈 3)协议分层…

大吉大利杯_RE

A-Maze-In 一道比较新颖的 maze 题吧, 地图长度是 256 32 * 8 ? 不知道了 0.0 难崩,看了一下 wp 说map长度什么的都有,应该就是 16 * 16的 看了一圈,感觉还是要把 DFS,BFS 算法学一下,直接跑…

中国内陆水体氮沉降数据集(1990s-2010s)

全球大气氮沉降急剧增加对内陆水生态系统产生不良影响。中国是全球三大氮沉降热点地区之一,为了充分了解氮沉降对中国内陆水体的影响,制定合理的水污染治理方案,我们需要清楚的量化内陆水体的氮沉降通量。为此,我们利用LMDZ-OR-IN…

[AI 大模型] 百度 文心一言

文章目录 [AI 大模型] 百度 文心一言简介模型架构发展新技术和优势API 代码示例 [AI 大模型] 百度 文心一言 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0DwAIh0T-1720667576892)(https://i-blog.csdnimg.cn/direct/283919e5d78b4951ba1ade5dcfc…

java-mysql5.7 相关安装和配置

在 Java 中使用 MySQL 5.7 进行开发之前,首先需要安装和配置 MySQL 数据库。以下是详细的步骤,涵盖了 MySQL 5.7 的下载、安装、基本配置以及如何在 Java 中使用 JDBC 连接 MySQL 数据库。 ### 一、安装 MySQL 5.7 #### 1. 下载 MySQL 5.7 前往 MySQL …

Lambda表达式与函数式工具应用详解

在现代编程中,Lambda表达式和函数式工具是处理数据、实现简洁代码的重要工具。尤其是在函数式编程范式中,它们发挥着至关重要的作用。本文将从定义、语法、应用场景到具体案例,详细阐述Lambda表达式和函数式工具在Python和Java等编程语言中的…

Syslog 管理工具

Syslog常被称为系统日志或系统记录,是一种用来在互联网协议(TCP/IP)的网上中传递记录档消息的标准,常用来指涉实际的Syslog 协议,或者那些提交syslog消息的应用程序或数据库。 系统日志协议(Syslog&#x…

VBA即用型代码手册:删除完全空白的行

我给VBA下的定义:VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率,而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想,积木编程最重要的是积木如何搭建…

星辰考古:TiDB v4.0 进化前夜

前情回顾TiDB v4 时间线TiDB v4 新特性 TiDBTiKVPDTiFlashTiCDCTiDB v4 兼容性变化 TiDBTiKVPD其他TiDB 社区互助升级活动TiDB 3.0.20 升级到 4.0.16 注意事项升级速览直观变化总结素材来源🌻 往期精彩 ▼ 前情回顾 在前面的章节中,我们共同梳理了 TiDB …

BUCK电源芯片,电气参数,极限参数,工作特性,引脚功能

概述 在应用DC-DC开关电源芯片时,通常需要关注以下参数,同步与非同步,输入电压,输入电流,输出电压,输出电流,输入输出电容的选择;mosfet选型,电感选型,功耗&a…

基于深度学习的点云降噪

基于深度学习的点云降噪是一种利用深度学习模型处理三维点云数据,以去除噪声并恢复点云的原始形状和细节的方法。点云数据广泛应用于自动驾驶、机器人导航、3D扫描和虚拟现实(VR)等领域,因此高质量的点云数据处理至关重要。以下是…

人工智能算法工程师(中级)课程10-PyTorch神经网络之卷积神经网络与代码详解

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程10-PyTorch神经网络之卷积神经网络实战与代码详解。卷积神经网络(CNN)是一种广泛应用于图像识别、目标检测、视频分析等领域的深度学习模型。本文将详细介绍卷积…

vue-router history 模式下将所有资源文件js/css/img都存放在oss 利用 cdn 访问整体思路汇总

背景 我们有一个域名https://example.com,但是ssl证书很贵,搞子域名来承接新站点有点费钱,所以我们想用一个目录https://example.com/admin/ 来作为管理后台的站点,这个站点是单页面应用,我又想让其用history router的…

Redis基础教程(十六):Redis Stream

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

Qt常用基础控件总结—带边框的部件(QFrame和QLabel)

带边框的部件 框架控件QFrame类 QFrame类介绍 QFrame 类是带有边框的部件的基类,带边框部件的特点是有一个明显的边框,QFrame类就是用来实现边框的不同效果的(把这种效果称为边框样式),所有继承自 QFrame 的子类都可以使用 QFrame 类实现的效果。 部件通常是矩形的(其他…

谷粒商城学习笔记-18-快速开发-配置测试微服务基本CRUD功能

文章目录 一,product模块整合mybatis-plus1,引入依赖2,product启动类指定mapper所在包3,在配置文件配置数据库连接信息4,在配置文件中配置mapper.xml映射文件信息 二,单元测试1,编写测试代码&am…

凯中精密:下一个正丹吗?

业绩预增超十倍! 又一匹A股业绩黑马诞生——凯中精密 近期,凯中精密发布2024年上半年业绩预告,预计净利润增速高达1068%至1402%。 从23年的209.54%到24年Q1惊人的6885.78%,再到24年上半年的十倍增速,这条业绩黑马利润…

【python算法学习2】冒泡排序的写法

目的:学习冒泡排序的写法 1 定义 1.1百度百科 冒泡排序_百度百科在程序设计语言中,排序算法主要有冒泡排序、快速排序、选择排序以及计数排序等。冒泡排序(Bubble Sort)是最简单和最通用的排序方法,其基本思想是&…