超过96%的已知漏洞下载有可用的修复版本,但开发者并未应用修复。
12%的Maven Central下载包含至少一个已知安全漏洞。
37%的漏洞组件下载是严重级别的。
2023年发现245,000个恶意软件包,是之前几年总和的两倍。
恶意软件包成为软件供应链攻击的主要途径之一。
8.6%的Java和JavaScript开源项目在2022年得到维护,但现在不再维护。
85%的Maven Central项目处于不活跃状态。
仅28%的组织能在漏洞披露后一天内意识到新的开源漏洞。
39%的组织需要超过一周时间来修复漏洞。
依赖复杂性:现代软件往往依赖大量开源组件,形成复杂的依赖树。
漏洞传播:一个底层组件的漏洞可能影响整个依赖链。
许可合规:需要确保所有使用的开源组件符合许可要求。
配置错误:不安全的CI/CD配置可能导致未经授权的代码被引入。
凭证泄露:构建过程中的凭证管理不当可能导致敏感信息泄露。
供应链攻击:攻击者可能通过污染构建过程来植入恶意代码。
篡改检测:确保软件制品在分发和部署过程中未被篡改。
签名验证:使用加密签名来验证制品的来源和完整性。
来源追溯:能够追溯每个软件组件的来源和变更历史。
检测及时性:快速识别新发现的漏洞对使用的组件的影响。
修复优先级:在大量漏洞中确定哪些需要优先修复。
影响评估:准确评估漏洞对整个应用程序的实际影响。
SBOM生成:生成和维护准确的软件材料清单(SBOM)。
监管要求适配:满足不断的法规要求(如美国政府的行政命令)。
跨境数据流动:在全球化软件开发中处理不同地区的数据保护要求。
PO.1 定义安全要求
PO.2 实施角色和职责
PO.3 实施支持性工具链
PS.1 保护所有形式的代码
PS.2 提供软件发布完整性验证机制
PS.3 归档和保护每个软件版本
PW.1 设计符合安全要求的软件
PW.2 审查设计以验证符合安全要求
PW.3 验证第三方软件符合安全要求
PW.4 重用经过验证的安全软件
PW.5 创建安全的源代码
PW.6 配置编译、解释器和构建过程
PW.7 审查和/或分析人类可读代码
PW.8 测试可执行代码
PW.9 配置软件以具有安全设置
RV.1 识别和确认漏洞
RV.2 评估、优先处理和修复漏洞
RV.3 分析漏洞以识别根本原因
要求签名提交:所有代码提交都应该经过数字签名,以确保其来源和完整性。
使用分支保护规则:实施严格的分支保护策略,限制直接推送到主分支的权限。
防止将认证信息提交到代码库:使用自动化工具检测和阻止敏感信息(如密钥、密码)被提交到代码库。
定义贡献政策和角色:明确规定谁可以贡献代码,以及贡献的流程和标准。
实施代码审查:要求所有代码更改在合并前经过同行审查。
使用静态代码分析工具:自动检测潜在的安全漏洞和编码问题。
验证第三方工件和开源库:对所有外部依赖项进行安全性和完整性检查。
跟踪开源组件之间的依赖关系:维护一个详细的依赖关系图,以便于识别潜在的风险。
扫描软件漏洞:定期扫描所有依赖项,检查已知的安全漏洞。
许可证合规性检查:确保所有使用的开源组件符合许可证要求。
维护软件物料清单(SBOM):创建并维护一个详细的组件清单,包括所有直接和间接依赖项。
实施漏洞管理流程:制定明确的流程来处理发现的漏洞,包括评估、修复和通知。
自动化构建和CI/CD步骤:尽可能自动化构建过程,减少人为错误。
标准化项目间的管道:在所有项目中使用一致的构建和部署流程。
部署安全的编排平台:使用安全配置的容器编排平台(如Kubernetes)来管理构建环境。
隔离每个构建步骤的职责:确保每个构建步骤只能访问它所需要的资源。
实施最小权限原则:为每个构建步骤和工具分配最小必要的权限。
加密敏感数据:确保在构建过程中使用的所有敏感信息(如凭证)都经过加密。
记录和审计构建过程:保留详细的构建日志,并定期审计以检测异常。
签名构建过程的每个步骤:为构建过程中的每个重要步骤生成数字签名。
验证每个步骤生成的签名:在后续步骤中验证先前步骤的签名,确保完整性。
使用TUF/Notary管理工件签名:采用The Update Framework (TUF) 或 Notary 等工具来管理和验证工件签名。
实施不可变的工件版本控制:一旦工件被创建和签名,就不应该被修改。
安全存储工件:使用安全的存储系统来保存构建工件,限制访问权限。
实施工件扫描:在发布前对工件进行安全扫描,检查潜在的漏洞或恶意代码。
确保客户端可以验证工件和元数据:提供机制让最终用户验证下载的软件的完整性和真实性。
确保客户端可以验证文件的"新鲜度":实施机制确保用户能够检查他们是否拥有最新版本的软件。
使用The Update Framework (TUF):采用TUF来提供安全的软件更新机制。
实施安全的配置管理:确保部署环境的配置是安全的,并且经过版本控制。
自动化部署过程:使用自动化工具进行部署,减少人为错误和安全风险。
实施蓝绿部署或金丝雀发布:使用这些技术来逐步推出更新,便于快速回滚。
监控和日志记录:持续监控部署环境,并保留详细的日志以便于审计和问题排查。
SLSA (Supply chain Levels for Software Artifacts):Google提出的框架,定义了四个递进的安全级别,帮助组织逐步提高其软件供应链安全性。
OpenSSF Scorecard:自动化工具,用于评估开源项目的安全实践,涵盖了代码审查、依赖管理等多个方面。
BSA安全软件框架:侧重于软件开发生命周期的安全实践,包括安全设计、安全编码、测试和验证等方面。
GitHub Advanced Security:
提供代码扫描、秘密扫描和依赖审查等功能。
与GitHub的开发工作流深度集成,提供无缝的安全体验。
GitLab安全功能:
包括SAST、DAST、容器扫描和依赖扫描等多种安全工具。
支持自动化安全测试和漏洞管理。
Arnica:
使用行为分析来识别潜在的安全风险。
提供实时代码扫描,即时发现并通知开发者安全问题。
自动化权限管理,基于历史访问模式动态调整权限。
Jit.io:
开源安全编排平台,支持集成多种安全工具。
提供预定义的安全计划,帮助团队达成特定的安全目标。
支持多种合规框架,如AWS FTR和OWASP Top 10。
Snyk:
拥有自己的漏洞数据库,支持多种编程语言和包管理器。
提供自动修复PR功能,简化漏洞修复过程。
支持许可合规检查和SBOM生成。
Semgrep Supply Chain:
使用可达性分析来减少误报,聚焦于实际可利用的漏洞。
提供依赖搜索功能,方便快速定位特定依赖的使用情况。
支持SBOM导出,便于合规管理。
Endor Labs:
使用程序分析技术进行深度依赖分析。
提供多维度的风险评估,包括漏洞可利用性、修复可用性等。
支持生成带有VEX信息的SBOM,提供更丰富的漏洞上下文。
Socket:
提供实时依赖检测,快速识别潜在的恶意包。
对依赖进行风险评估,包括行为分析和能力评估。
与GitHub深度集成,直接在PR中提供依赖安全反馈。
Phylum:
利用大数据和机器学习技术分析开源包的安全性。
提供开源沙箱(Birdcage),限制包的网络和磁盘访问。
持续监控主要开源生态系统,提供全面的威胁情报。
Datadog GuardDog:
开源解决方案,使用Semgrep进行静态分析。
支持Python和npm包的扫描。
可集成到CI/CD流程中,自动扫描新引入的依赖。
OX Security:
引入PBOM(Pipeline Bill of Materials)概念,提供软件开发全生命周期的可见性。
提供工作流自动化和安全姿态管理,确保CI/CD流程的安全。
基于OSC&R框架构建,提供全面的供应链威胁防护。
Cycode:
使用eBPF技术检测构建过程中的攻击。
提供构建强化功能,防止恶意依赖和篡改。
包括代码泄露检测功能,降低源代码泄露的风险。
Tromzo:
提供产品安全运营平台(PSOP),整合软件资产清单和CI/CD管道可见性。
提供CI/CD姿态管理,确保构建服务器和仓库的安全配置。
使用专有的Intelligence Graph来识别关键软件资产和高风险漏洞。
Chainguard:
提供安全优先的容器基础镜像,减少攻击面。
支持在构建过程中生成SBOM。
提供持续验证功能,确保部署后的容器仍符合安全要求。
Aqua:
提供全面的容器安全解决方案,包括镜像扫描和运行时保护。
支持对各种容器环境的动态分析,包括VM和无服务器容器。
与多种容器注册表和Kubernetes平台集成。
Rapidfort:
引入RBOM(Real Bill of Materials)概念,通过容器优化减少漏洞警报。
自动优化容器,只包含必要的组件。
提供优化后的详细分析,说明移除了哪些文件、包和漏洞。
Chainguard Enforce:
提供基于SLSA和NIST框架的策略管理。
支持合规自动化,自动生成SBOM。
提供生产环境洞察,实时查看部署状态。
Legit Security:
提供ASPM(应用程序安全姿态管理)工具,实现从代码到云的可追溯性。
支持多种SBOM格式,如CycloneDX。
提供SBOM聚合和差异分析功能。
Apiiro:
引入XBOM(Extended Bill of Materials)概念,提供更全面的软件组件视图。
使用风险图谱来检测开源解决方案中的恶意包。
提供开发者行为分析,识别潜在的内部威胁。