Python 和 SLSA 💃

由于近些年针对软件的供应链的攻击越来越频繁,据 SonaType 的统计从 2019 年到 2022 年针对开源软件的攻击增长了 742%,因此 2021 年 Google 提出的解决方案是软件工件供应链级别(Supply chain Levels for Software Artifacts,”SLSA”)

Software supply chain attacks

本篇将介绍在 Python 生态系统中,我们如何使用 SLSA 框架来生成和验证 Python 工件的来源,从而让你的 SLSA Level 从 L0/L1 到 L3。

注意:本文介绍的是针对托管在 GitHub 上的 Python 项目。SLSA 框架可通过 GitHub Actions 来实现开箱即用,只需较少的配置即可完成。

对于托管在非 GitHub 上的项目(例如 Bitbucket)可以尝试 Witness,下一篇我将更新关于如何使用 Witness。

内容

  1. 构建纯净的Python包
  2. 生成出处证明
  3. 上传到PyPI
  4. 验证Python包的来源
  5. 文中用到的项目

下面是从维护人员到用户的端到端工作流程:从构建 Wheel package -> 生成出处 -> 验证出处 -> 发布到 PyPI -> 以及用户验证出处 -> 安装 wheel。接下来让我们一起来完成这其中的每一步。

如果你想了解 Python 打包的流程或是术语可以参见Python 打包用户指南

端到端流程

Read More

Problems and solutions when upgrading XLC from 10.1 to IBM Open XL C/C++ for AIX 17.1.0

In this article, I would like to document the problems encountered when upgrading from IBM XLC 10.1 to XLC 17.1 (IBM Open XL C/C++ for AIX 17.1.0) and how to fix the following 12 errors.

If you’ve encountered any other errors, feel free to share your comments with or without a solution.

Read More

2022-23 世界质量报告(World Quality Report)

2202-23 世界质量报告(World Quality Report 简称 WQR)是一项全球研究,不论是作为软件测试、开发工程师,关注这类软件质量报告可以帮助我们快速了解软件行业的现状和趋势。

七个主题

今年的 WQR 的关键趋势和推荐包括包括以下七个关键建议:

  • 敏捷质量调配 (DONE)
  • 质量自动化 (DONE)
  • 测试基础设施测试和配置 (DONE)
  • 测试数据提供和数据验证 (WIP)
  • 质量和可持续的 IT (NOT START)
  • 新兴技术趋势的质量工程 (NOT START)
  • 价值流管理 (NOT START)

Read More

解决通过 Jenkins Artifactory plugin 上传 artifacts 失败的问题 “unable to find valid certification path to requested target”

最近遇到了通过 Jenkins agent 无法上传 artifacts 到 Artifactory 的情况,具体错误如下:

Read More

解决在 AIX 通过 Jenkins agent git clone 失败的问题

最近又遇到了在 AIX 上通过 Jenkins agent 无法下载代码的情况,报了如下错误:

Read More

2023 年最值得关注的 DevOps 趋势

DevOps 运动仍然是一个不断发展的领域,受到技术进步、行业趋势和组织需求等多种因素的影响。这使得很难对 DevOps 工程的未来做出具体预测。然而我认为有一些趋势可能会在来年继续影响 DevOps 领域的发展。

Read More

Upload artifacts failed to Artifactory from AIX

Recently my CI pipeline suddenly does not work on AIX 7.1 with error Caused by: javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.h: PKIX path building failed: java.security.cert.CertPathBuilderException: PKIXCertPathBuilderImpl could not build a valid CertPath..

Read More

创建 NuGet Organization 的遇到的坑

其实创建包管理平台账户没什么可说的,但最近准备在 https://www.nuget.org 上面发布产品前创建 Organization 的时候确遇到了问题。

事情是这样的

作为一名公司员工在首次打开 NuGet 网站 (www.nuget.org) 的时候,点击【Sign in】,映入眼帘的就是【Sign in with Microsoft】,点击,下一步、下一步,我就顺利的就用公司邮箱注册了我的第一个 NuGet 的账户。

此时我准备创建一个 Organization 的时候,输入自己的公司邮箱提示这个邮箱地址已经被使用了,What ???

OK。那我就填写同事的公司邮箱地址吧。

同事在收到邮件通知后也是一步步操作,先是打开 NuGet.org,点击【Sign in with Microsoft】,然后也是需要填写自己的账户名,结果完成这一系列的操作之后,再输入他的邮件地址去注册 Organization 的时候也同样提示这个邮箱已经被使用了???什么操作!!!醉了…

Read More

Docker Buildx Bake:加速构建和管理多平台镜像的利器

随着容器化技术的普及和应用场景的增多,构建和管理多平台镜像变得越来越重要。Docker Buildx 是 Docker 官方对于 Docker CLI 的一个扩展,为 Docker 用户提供了更强大和灵活的构建功能。包括:

  1. 多平台构建:Docker Buildx 允许用户在一个构建命令中为多个不同的平台构建容器镜像。这样,你可以一次性构建适用于多种 CPU 架构的镜像,比如 x86、ARM 等,从而在不同的硬件设备上运行相同的镜像。
  2. 构建缓存优化:Docker Buildx 改进了构建过程中的缓存机制,通过自动识别 Dockerfile 中哪些部分是可缓存的,从而减少重复构建和加快构建速度。
  3. 并行构建:Buildx 允许并行构建多个镜像,提高了构建的效率。
  4. 多种输出格式:Buildx 支持不同的输出格式,包括 Docker 镜像、OCI 镜像、以及 rootfs 等。
  5. 构建策略:通过支持多种构建策略,用户可以更好地控制构建过程,例如,可以在多个节点上构建、使用远程构建等。

使用 docker buildx 需要 Docker Engine 版本不低于 19.03。

其中,Docker Buildx Bake 是 Buildx 的一个子命令,也是本篇文章要重点介绍包括概念、优势、使用场景以及如何使用该功能来加速构建和管理多平台镜像。

Read More

详解SBOM:定义、关系、区别、最佳实践和生成工具

什么是 SBOM

SBOM 是软件材料清单(Software Bill of Materials)的缩写。它是一份详细记录软件构建过程中使用的所有组件、库和依赖项的清单。

SBOM 类似于产品的配方清单,它列出了构成软件应用程序的各种元素,包括开源软件组件、第三方库、框架、工具等。每个元素在 SBOM 中都会有详细的信息,如名称、版本号、许可证信息、依赖关系等。

SBOM 的目的是增加软件供应链的可见性和透明度,并提供更好的风险管理和安全性。它可以帮助软件开发者、供应商和用户了解其软件中使用的组件和依赖项,以便更好地管理潜在的漏洞、安全风险和合规性问题。通过 SBOM 用户可以识别和跟踪软件中存在的任何潜在漏洞或已知的安全问题,并及时采取相应的补救措施。

SBOM 还可以用于软件审计、合规性要求和法规遵从性等方面。一些行业标准和法规(如软件供应链安全框架(SSCF)和欧盟网络和信息安全指令(NIS指令))已经要求软件供应商提供 SBOM,以提高软件供应链的安全性和可信度。

总之,SBOM 是一份记录软件构建过程中使用的所有组件和依赖项的清单,它提供了对软件供应链的可见性,有助于管理风险、提高安全性,并满足合规性要求。

Read More

如果你是项目成员,是 Fork 原始仓库还是直接原始仓库中修改代码?

想必你也见到过很多开源项目中的 CONTRIBUTION.md 文档中通常都会让贡献者 Fork 仓库,然后做修改。

那么如果你是该开源项目中的成员是否需要 Fork 仓库进行修改呢?

以前我没有认真去想过这个问题,对于项目成员感觉 Fork 或不 Fork 好像差不多,但仔细想想 Fork 仓库与不 Fork 仓库其实是有以下几个主要的差别的:

Read More

程序员自我修养之Git提交信息和分支创建规范(工具篇)

Git 提交信息和 Git 分支命名规范是团队协作中非常重要的一部分,它们能够使代码库更加规范、易于维护和理解。

我们需要通过工具来帮助实现Git提交信息和分支创建规范,本篇将介绍如何使用 Commit Check 这个工具来验证提交信息、分支命名、提交用户名字、提交用户邮箱等是否符合规范。

更多关于Git提交信息和分支创建规范可以参看我之前发布的文章《程序员自我修养之Git提交信息和分支创建规范》,这里不再赘述。

Read More

Jenkins agent service can not start automatically on Windows

What’s the issue

My Windows build machine is regular reboot after Windows updates, but my Jenkins agent service on this Windows can not
start automatically even I have set the startup type to Automatic.

Windows Service Config 2

Solution 1

After some research, select “Allow service to interact with desktop” with service properties on Log On tab can fix this problem.

In service properties -> Log On -> Select “Local System account” and select the checkbox for “Allow service to interact with desktop”.

Windows Service Config 2

Solution 2

Read More

SLSA 框架与软件供应链安全防护

随着近些年针对软件供应链发起的攻击次数越来越多,Google 发布了一系列指南来确保软件包的完整性,目的是为了防止未经授权的代码修改影响软件供应链。

Google 的 SLSA 框架(Supply-chain Levels for Software Artifacts 软件制品的供应链级别)是通过识别 CI/CD 流水线中的问题并减小影响,为实现更安全的软件开发和部署流程提供建议。

目录

  1. 什么是SLSA
  2. 软件供应链中的问题
    2.1 供应链攻击包括哪些
    2.2 真实世界的例子
  3. SLSA等级
    3.1 详细解释
    3.2 限制
  4. SLSA落地
  5. 其他工具

什么是SLSA

SLSA 全名是 Supply chain Levels for Software Artifacts, or SLSA (发音“salsa”).

SLSA 是一个端到端框架,一个标准和控制的清单确保软件构建和部署过程的安全性,防止篡改源代码、构建平台以及构件仓库而产生的威胁。

软件供应链中的问题

任何软件供应链都可能引入漏洞,随着系统变得越来越复杂,做好最佳实践从而保证交付工件的完整性变得非常重要。如果没有一定的规范和系统发展计划,就很难应对下一次黑客攻击。

供应链攻击包括哪些

Supply Chain Threats

A 提交未经认证的修改
B 泄露源码仓库
C 从被修改源代码构建
D 泄露构建过程
E 使用已泄露的依赖
F 上传被修改的包
G 泄露了包仓库
H 使用已泄露的包

真实世界的例子

完整性威胁 已知例子 SLSA 如何提供帮助
A 提交未经认证的修改 研究人员试图通过邮件列表上的
补丁程序故意将漏洞引入 Linux 内核。
两人审查发现了大部分(但不是全部)漏洞。
B 泄露源码仓库 PHP:攻击者破坏了 PHP 的自托管
git 服务器并注入了两个恶意提交。
一个受到更好保护的源代码平台
将成为攻击者更难攻击的目标。
C 从被修改源代码构建 Webmin:攻击者修改了构建基础设施
以使用与源代码控制不匹配的源文件。
符合 SLSA 标准的构建服务器会生成出处,
以识别实际使用的来源,从而使消费者能够检测到此类篡改。
D 泄露构建过程 SolarWinds:攻击者破坏了构建平台
并安装了在每次构建期间注入恶意行为的植入程序。
更高的 SLSA 级别需要对构建平台进行更强大的安全控制,
这使得妥协和获得持久性变得更加困难。
E 使用已泄露的依赖 event-stream:攻击者添加了一个无害的依赖项,然后更新了该依赖项
以添加恶意行为。更新与提交到 GitHub 的代码不匹配(即攻击 F)。
递归地将 SLSA 应用于所有依赖项会阻止这个特定的向量,因为
出处会表明它不是由适当的构建器构建的,或者源不是来自 GitHub。
F 上传被修改的包 CodeCov:攻击者使用泄露的凭据将恶意工件上传到
Google Cloud Storage(GCS),用户可以从中直接下载。
GCS 中工件的出处表明工件不是以
预期的方式从预期的源代码库中构建的。
G 泄露了包仓库 对包镜像的攻击:研究人员为几个流行的
包存储库运行镜像,这些镜像可能被用来提供恶意包。
与上面的 (F) 类似,恶意工件的来源表明它们不是
按预期构建的,也不是来自预期的源代码库。
H 使用已泄露的包 Browserify typosquatting:攻击者
上传了一个与原始名称相似的恶意包。
SLSA 不直接解决这种威胁,但将出处链接回源代码控制
可以启用和增强其他解决方案。

SLSA等级

Read More

如何在 DevOps 任务中使用 ChatGPT?

随着 DevOps 的流行,越来越多的开发团队正在寻找一些工具来帮助他们更好地完成任务。ChatGPT 是一款基于人工智能的自然语言处理工具,它可以用来帮助开发团队在 DevOps 任务中更加高效地工作。

本文将探讨如何在 DevOps 任务中使用 ChatGPT。

一、ChatGPT 简介

ChatGPT 是一款由 OpenAI 开发的人工智能自然语言处理工具。它可以用于许多不同的应用程序,例如语音识别、自然语言处理、文本生成等。
ChatGPT 使用深度学习技术,可以生成与输入内容相关的文本。它是一款非常强大的工具,可以帮助开发团队更加高效地工作。

二、ChatGPT 在 DevOps 中的应用

在 DevOps 中,开发团队通常需要快速解决问题,并与团队成员和客户进行有效沟通。ChatGPT 可以用来帮助解决这些问题。

  1. 自动化代码审查
    开发团队通常需要花费大量时间来进行代码审查。ChatGPT 可以用来自动化这个过程。它可以根据代码库中的样本代码,生成与样本代码风格相似的代码,并对新代码进行审查。这可以帮助开发团队更快地进行代码审查,并减少人为错误的可能性。

  2. 自动化测试
    测试是 DevOps 中不可或缺的一部分。ChatGPT 可以用来自动化测试。它可以根据测试用例生成相应的测试代码,并对测试结果进行评估。这可以帮助开发团队更快地进行测试,并减少人为错误的可能性。

  3. 自动化部署
    部署是 DevOps 中不可或缺的一部分。ChatGPT 可以用来自动化部署。它可以根据部署规则生成相应的部署代码,并对部署结果进行评估。这可以帮助开发团队更快地进行部署,并减少人为错误的可能性。

  4. 自动化文档生成
    文档是 DevOps 中不可或缺的一部分。ChatGPT 可以用来自动化文档生成。它可以根据项目的代码库和测试用例生成相应的文档,并对文档的质量进行评估。这可以帮助开发团队更快地生成文档,并减少人为错误的可能性。

三、如何使用 ChatGPT

要使用 ChatGPT,开发团队需要进行以下步骤:

Read More