0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

要提高开源代码安全性?不如看看这些优秀实践

如意 来源:企业网D1Net 作者:h1654155287.6125 2020-09-10 15:02 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

今年对确保开源生态系统的完整性和安全性提出了更大的挑战。开源对开发者来说有非常大的好处,因为几乎任何人都可以免费地使用和定制它,并为社区做出贡献。这种能够确保更大透明度、安全性和促进开发人员跨项目协作的方式,也为对手从中获利铺平了道路。

作为一名安全研究人员,我在今年遇到并分析了700多个被植入了的RubyGems软件包,除了挖掘比特币之外没有任何其他用途。还有一个很受欢迎的例子是章鱼扫描仪,这是一种恶意软件,它已经悄悄地把它的触角注入到了至少26个GitHub项目当中。这些事件强调了这样一个事实,即任何对公众开放的系统也会对对手开放,并且容易被滥用。

上面的例子集中在恶意组件上面。那些没有被注意到的拥有安全漏洞的合法开源包呢?

一个易受攻击或恶意的软件包进入流行的存储库,并最终进入你的软件供应链,可能会对你的客户造成严重破坏。在npm、PyPI、NuGet和Fedora等流行的开源存储库中,已经检测到了脆弱的和恶意的组件。

“在过去的几年里,我们已经看到了在整个生态系统的开源包中所发现的所有漏洞,传统上,Node.jsJava每年都显示出了最大数量的新漏洞,”Snyk开源安全报告2020的作者说。

该报告还表明,在软件开发过程早期实施的安全措施是2019年报告的新漏洞比2018年少的原因。“如果这一趋势持续下去,这可能是一个积极迹象,表明提高开源软件安全性的努力正在开始取得成效,”报告继续说道。

下面是一些提高开源代码安全性的最佳实践。

1. 了解你的软件

Sonatype进行的2020年DevSecOps社区调查显示,大多数公司--即使是那些在其工作流程中内置了某种程度的DevSps实践的公司,也缺乏对其软件应用程序所使用的所有开源组件以及应用于它们的漏洞的全面了解。

“当一个开放源代码的项目中发现一个漏洞时,你应该立即问两个问题:我们是否曾经使用过该开源组件,以及(如果是的话)它在哪里?”报告作者说。

Sonatype对5000多名开发人员的调查显示,只有45%拥有成熟DevOps实践的组织为其应用程序保留了完整的软件物料清单(SBOM)。“调查结果显示,在有‘不成熟实践’的组织中,多达74%的组织无法知道一个新披露的开源组件中的漏洞是否适用于他们的软件,”该报告说。这意味着那些拥有完整SBOM的不成熟实践的组织将无法知道他们是否使用了易受攻击的开源代码,也不知道在他们的环境中哪里可以找到新发布的漏洞。

考虑到每天在NVD、GitHub和其他托管网站上发布的大量漏洞,如果没有一些自动化的解决方案,开发者和安全专家将很难跟上这些数据。历史表明,大多数组织都是等到安全事件发生后才会加强他们的安全措施。然而,俗话说,一分预防胜于一分治疗。

通过在软件开发生命周期中采用“左移”的方法,在早期实现的安全性可以获得十倍的回报,并提高开发人员的整体意识。

2. 解决依赖性问题

Veracode的2020年软件安全状态报告强调了一个常见的软件安全问题。与开发人员本身不同,“相互关联的依赖关系”会间接地在应用程序中引入潜在的风险,这些风险可能会被大多数开发人员所忽略。“我们的数据显示,大多数有缺陷的库都间接地变成了代码。应用程序中有47%的缺陷库是可传递的--换句话说,它们不是由开发人员直接引入的,而是由某个库所引入的(42%是直接引入的,12%是两者兼而有之)。这意味着开发人员引入的代码会比他们预期的要多,而且往往是有缺陷的代码。”

然而,根据Veracode的说法,纠正这个问题似乎并不是一项重大的任务:“解决这些库中的安全缺陷通常不是一项重要的工作。应用程序中大多数库所引入的缺陷(将近75%)都可以通过较小的版本更新来解决。通常不需要主要库的升级!这一数据表明,问题的关键在于发现和跟踪,而不是大规模的代码重构。”

3. 自动进行代码扫描以查找未知项

章鱼扫描事件和其他形式的开源生态系统的滥用,如typosquatting,已经促使像GitHub这样的库维护者必须强制对他们所托管的开源项目进行自动扫描。正如今年所报道的那样,GitHub现在已经集成了基于CodeQL的开源存储库的自动扫描。

GitHub高级产品经理Justin Hutchings告诉Register网站,“事实证明,这种能力在安全方面是非常有用的。大多数安全问题都只是错误的数据流或错误的数据使用。”

除了识别出隐藏的漏洞和bug之外,还可以定期扫描开放源码的项目,以寻找出数据泄漏的迹象,比如贡献者无意中公开的私钥和凭证。从去年开始,一些供应商就已经在他们的产品中集成了自动扫描功能,以识别发布到合法开源存储库中的恶意软件。这些技术会将行为分析与机器学习相结合,以主动搜寻“假冒部件”。

独立开发人员在较小规模上发布的实验性开源扫描器(npm-scan)也出现了,可以使用启发式方法检测易受攻击的组件。

在组件进入供应链之前,使用自动化工具实现这种广泛的安全审计可以帮助增加开源生态系统中的信任度和完整性问题。

4. 小心许可风险

使用开源软件的关键好处是它的许可证所提供的自由。如果你在开源包中发现了一个尚未修复的bug,你可以选择自己修复它,而不是等待供应商。你可以在你的项目中定制一个你认为合适的开源应用程序,并将定制的版本交付给你的客户。

但是,要了解使用开源组件可能产生的任何潜在的许可冲突,就可能需要更多的技巧了。Synopsys发布的2020年开源安全与风险分析报告指出:

当一个代码库包含开源组件,而其许可证可能与代码库的总体许可证发生冲突时,声明的许可证冲突就会出现。例如,GNU通用公共许可证v2.0(GPLv2)下的代码在编译成一个正常分布的商业软件时通常就会引起冲突问题。但对于被认为是软件即服务(SaaS)的软件来说,相同的代码就不是问题。”

对于在不同上下文中使用相同的开源应用程序的开发人员来说,这些相互冲突的术语可能会造成混淆。除了漏洞和恶意组件之外,一些自动化解决方案还可以识别出大量的许可证和由它们所引起的潜在冲突。

Black Duck的一份报告发现,2019年审计的代码库中有67%包含有许可证冲突的组件。对于某些行业,如互联网和移动应用程序,这一比例还要高得多(93%)。“GPL是比较流行的开源许可之一,它的各种版本也可能会与代码库中的其他代码产生许可冲突。事实上,前10个有冲突的许可证中有5个就是GPL及其变体,”该报告称。
责编AJX

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 网络安全
    +关注

    关注

    11

    文章

    3516

    浏览量

    63572
  • 源代码
    +关注

    关注

    96

    文章

    2953

    浏览量

    70648
  • 生态系统
    +关注

    关注

    0

    文章

    711

    浏览量

    21617
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Perforce 静态分析现已正式支持 Rust语言!

    您是否正计划通过 Rust 编程来提升内存安全性,却又担心它无法覆盖所有的安全漏洞?Perforce QAC 和 Klocwork 现在已支持分析 Rust 代码,填补了开源代码检查工
    的头像 发表于 04-08 15:38 448次阅读
    Perforce 静态分析现已正式支持 Rust语言!

    请问CW32L052C8T6这种安全性低功耗MCU的安全固件部分怎么实现?

    请问,CW32L052C8T6这种安全性低功耗MCU的安全固件部分怎么实现?
    发表于 12-05 07:19

    车规级与消费级芯片的可靠安全性与成本差异

    引言在汽车电子和消费电子领域,"车规级"与"消费级"芯片代表了两种截然不同的设计理念和技术标准。车规级芯片专为汽车应用设计,强调在极端环境下的可靠安全性
    的头像 发表于 11-18 17:27 1571次阅读
    车规级与消费级芯片的可靠<b class='flag-5'>性</b>、<b class='flag-5'>安全性</b>与成本差异

    有哪些技术可以提高边缘计算设备的安全性

    边缘计算设备的安全性面临分布式部署、资源受限(算力 / 存储 / 带宽)、网络环境复杂(多无线连接)、物理接触易被篡改等独特挑战,因此其安全技术需在 “安全性” 与 “轻量化适配” 之间平衡。以下从
    的头像 发表于 09-05 15:44 1793次阅读
    有哪些技术可以<b class='flag-5'>提高</b>边缘计算设备的<b class='flag-5'>安全性</b>?

    如何验证硬件加速是否真正提升了通信协议的安全性

    验证硬件加速是否真正提升通信协议的安全性,需从 安全功能正确、抗攻击能力增强、安全性能适配、合规一致 等核心维度展开,结合实验室测试与真
    的头像 发表于 08-27 10:16 1339次阅读
    如何验证硬件加速是否真正提升了通信协议的<b class='flag-5'>安全性</b>?

    如何利用硬件加速提升通信协议的安全性

    产品实拍图 利用硬件加速提升通信协议安全性,核心是通过 专用硬件模块或可编程硬件 ,承接软件层面难以高效处理的安全关键操作(如加密解密、认证、密钥管理等),在提升性能的同时,通过硬件级隔离、防篡改等
    的头像 发表于 08-27 09:59 1187次阅读
    如何利用硬件加速提升通信协议的<b class='flag-5'>安全性</b>?

    Nuvoton_8051_ISP-ICP_Programmer_v7.15中缺少ISP加载器的源代码怎么解决?

    : isp_code_n76e885_v4.10_comport.bin isp_code_n76e616_v4.10_comport.bin 是否有指向这些引导加载程序的源代码的链接? 以下内容为
    发表于 08-18 06:30

    宏集分享 | 集中告警管理如何提升设施安全性

    提高团队响应速度,优化维护运营在工业或商业建筑中,集中告警管理已成为确保安全性或检测故障的必备工具。通过将所有安全系统集中管理,企业能够将所有告警统一在一个HMI界面中,大幅提升响应速度。关键要点
    的头像 发表于 08-08 18:25 623次阅读
    宏集分享 | 集中告警管理如何提升设施<b class='flag-5'>安全性</b>?

    请问DM平台访问安全性如何控制?

    DM平台访问安全性如何控制?
    发表于 08-06 06:01

    普华基础软件荣膺优秀开源项目奖

    近日,2025上海开源创新菁英奖评选结果正式揭晓。普华基础软件开源安全车控操作系统小满EasyXMen凭借在开源技术创新与产业应用实践方面的
    的头像 发表于 07-28 16:48 1060次阅读

    RT-Thread荣获2025优秀开源项目 | 新闻速递

    贡献,荣获年度“优秀开源项目奖”。RT-Thread睿赛德荣获2025优秀开源项目奖目前,开源已从软件领域延展至硬件、数据、算法、标准、内容
    的头像 发表于 07-04 09:04 2826次阅读
    RT-Thread荣获2025<b class='flag-5'>优秀</b><b class='flag-5'>开源</b>项目 | 新闻速递

    航芯荣获「2025年度芯片安全性优秀提供商」奖项

    ,航芯凭借其车规级安全芯片优异的市场表现,荣获「2025年度芯片安全性优秀提供商」奖项。这不仅是对航芯技术实力、产品可靠和市场影响力的肯定,更是对其为车联网
    的头像 发表于 06-24 18:21 954次阅读
    航芯荣获「2025年度芯片<b class='flag-5'>安全性</b>能<b class='flag-5'>优秀</b>提供商」奖项

    新思科技先进OTP IP赋能高安全性SoC设计:构建抗篡改的可靠芯片架构

    在高性能计算、边缘物联网、人工智能和云计算等应用领域,确保先进SoC设计的安全性与正确配置,一次可编程(OTP)非易失内存(NVM)至关重要。随着
    的头像 发表于 06-03 10:41 2207次阅读
    新思科技先进OTP IP赋能高<b class='flag-5'>安全性</b>SoC设计:构建抗篡改的可靠芯片架构

    开源+安全双引擎!STM32MPU白皮书解锁可信系统构建新范式

    硬件级安全+开源生态 给出破局方案! 这份白皮书深度揭秘: ✅ 从0到1构建信任链 :安全启动(Secure Boot)如何通过公私钥认证、固件签名、OTP存储实现“代码未动,
    的头像 发表于 05-16 15:24 714次阅读
    <b class='flag-5'>开源</b>+<b class='flag-5'>安全</b>双引擎!STM32MPU白皮书解锁可信系统构建新范式

    89元起!开源国产FPGA开发套件,提供原理图及配套参考例程的源代码

    提供开源原理图及配套参考例程的源代码。接口丰富,为用户提供基本的硬件环境*盘古1/2KG板卡上的Jtag原理图*盘古
    的头像 发表于 05-13 08:07 1402次阅读
    89元起!<b class='flag-5'>开源</b>国产FPGA开发套件,提供原理图及配套参考例程的<b class='flag-5'>源代码</b>