开卷有益 · 不求甚解
Witness 可防止篡改构建材料并验证构建过程从源到目标的完整性。它通过包装在持续集成过程中执行的命令来工作。它的证明系统是可插拔的,并为大多数主要 CI 和基础设施提供商提供开箱即用的支持。对见证元数据的验证和安全的 PKI 分发系统将减轻许多软件供应链攻击向量,并可用作自动化治理的框架。
Witness 是整体规范的实现,包括ITE-5、ITE-6、ITE-7和嵌入式 rego 策略引擎。
发布
curl -LO https://github.com/testifysec/witness/releases/download/${VERSION}/witness_${VERSION}_${ARCH}.tar.gz
tar -xzf witness_${VERSION}_${ARCH}.tar.gz
Witness 支持使用SPIRE进行无密钥签名!
openssl genpkey -algorithm ed25519 -outform PEM -out testkey.pem
openssl pkey -in testkey.pem -pubout > testpub.pem
该文件通常与上面生成的公钥一起位于您的源代码存储库中。 .witness yaml
是配置文件的默认位置witness help
将显示所有配置选项命令行参数覆盖配置文件值。
## .witness.yamlrun:
key: testkey.pem
trace: false
verify:
attestations:
- "test-att.json"
policy: policy-signed.json
publickey: testpub.pem
该 -a {attestor}
标志允许您定义哪些证明者运行前任。 -a maven -a was -a gitlab
将用于在 GCP 上的 GitLab 运行器上运行的 maven 构建。定义步骤名称很重要,这些将在策略中使用。 这应该作为 CI 步骤的一部分发生
witness run --step build -o test-att.json -- go build -o=testapp .
可以从 rekor 存储和检索这些数据! 这是根据 Rego 政策评估的数据
cat test-att.json | jq -r .payload | base64 -d | jq
在此处查看有关见证政策的完整文档。
确保将此文件中的密钥替换为上述步骤中的密钥(下面的 sed 命令)。 Rego 策略应该是 base64 编码的 步骤绑定到键。可以编写策略来检查证书数据。例如,我们可以要求一个步骤由具有特定 CN
属性的密钥签名。证人将需要所有证明才能成功 Witness 将针对相应证明者中的 JSON 对象评估 rego 策略
## policy.json{
"expires": "2023-12-17T23:57:40-05:00",
"steps": {
"build": {
"name": "build",
"attestations": [
{
"type": "https://witness.testifysec.com/attestations/material/v0.1",
"regopolicies": []
},
{
"type": "https://witness.testifysec.com/attestations/command-run/v0.1",
"regopolicies": []
},
{
"type": "https://witness.testifysec.com/attestations/product/v0.1",
"regopolicies": []
}
],
"functionaries": [
{
"publickeyid": "{{PUBLIC_KEY_ID}}"
}
]
}
},
"publickeys": {
"{{PUBLIC_KEY_ID}}": {
"keyid": "{{PUBLIC_KEY_ID}}",
"key": "{{B64_PUBLIC_KEY}}"
}
}
}
id=`sha256sum testpub.pem | awk '{print $1}'` && sed -i "s/{{PUBLIC_KEY_ID}}/$id/g" policy.json
pubb64=`cat testpub.pem | base64 -w 0` && sed -i "s/{{B64_PUBLIC_KEY}}/$pubb64/g" policy.json
妥善保管此密钥,其所有者将控制政策门。
witness sign -f policy.json --key testkey.pem --outfile policy-signed.json
只要您拥有签名的策略文件、正确的二进制文件以及与签署该策略的私钥相对应的公钥或证书颁发机构,此过程就可以跨气隙工作。
witness verify
在失败的情况下将返回non-zero
退出和原因。0
对于需要多个步骤、需要多个证明的策略,成功将保持退出状态。
witness verify -f testapp -a test-att.json -p policy-signed.json -k testpub.pem
见证证明者是断言有关系统的事实并将这些事实存储在版本化模式中的代码片段。每个证明者都有一个Name
、Type
和RunType
。这Type
是与证明的 JSON 模式相对应的版本化字符串。例如,AWS 证明者定义如下:
Name = "aws"
Type = "https://witness.testifysec.com/attestation/aws/v0.1"
RunType = attestation.PreRunType
当我们针对这些证明评估策略时,会使用证明类型。
证明仅与提供它们的数据一样安全。在可能的情况下,应验证加密材料,验证证据应包含在带外验证的证明中。
在GCP、AWS和GitLab证明者中可以找到加密验证的示例。
PreRun
者之前运行。这些证明者通常会收集有关环境的信息。material``commandRun
material
者是内部证明者,并在之后立即运行--trace
标志启用commandRun
并计算安全哈希,并将文件描述符提供给postRun
证明者。PostRun 证明者收集可以访问产品证明者发现的文件。PostRun 证明者的目的是从产品中选择元数据。例如,在 OCI 证明者中,证明者检查 tar 文件并提取 OCI 容器元数据。
AnattestationCollection
是一组以密码方式绑定在一起的证明。因为证明是绑定在一起的,所以我们可以相信它们都是作为同一个证明生命周期的一部分发生的。见证政策定义了需要哪些证明。
证明者定义充当查找索引的主题。attestationCollection 可以由证明者定义的任何主题查找。
见证策略是一个签名文档,它对要验证的工件的要求进行编码。见证策略包括受信任的工作人员的公钥,必须找到哪些证明,以及根据证明元数据评估的 rego 策略。
我见证了策略允许管理员在工件生命周期的任何时候跟踪工件的合规性状态。
Witness 可以使用来自SPIRE节点代理的临时密钥。使用标志配置见证--spiffe-socket
以启用无密钥签名。
在验证过程中,见证人将使用Rekor集成时间来确定证书的有效性。SPIRE 证书只需保持足够长的有效时间,即可将证明集成到 Rekor 日志中。
近期阅读文章
,质量尚可的,大部分较新,但也可能有老文章。开卷有益,不求甚解
,不需面面俱到,能学到一个小技巧就赚了。译文仅供参考
,具体内容表达以及含义, 以原文为准
(译文来自自动翻译)尽量阅读原文
。(点击原文跳转)每日早读
基本自动化发布(不定期删除),这是一项测试
最新动态: Follow Me
微信/微博:
red4blue
公众号/知乎:
blueteams