利用SBOM基础设施构建隐蔽通信系统

admin 2026-03-03 09:49:22 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文提出利用Sigstore的Rekor透明度日志构建隐蔽通信系统。通过操纵RSA公钥模数隐藏加密数据分块,利用共享口令派生哈希作为检索索引,发送方将数据上传至公开日志,接收方无需直连即可提取解密。该方案验证了滥用供应链基础设施进行隐蔽传输的可行性,为红队提供了新的通信思路,同时也揭示了相关设施的潜在风险。 综合评分: 92 文章分类: 红队,供应链安全,实战经验,数据安全


cover_image

利用 SBOM 基础设施构建隐蔽通信系统

latedeployment latedeployment

securitainment

2026年2月14日 15:50 中国香港

| 原文链接 | 作者 | | — | — | | https://latedeployment.github.io/posts/sbom-as-messaging-system/ | latedeployment |

本文是 Certificate Transparency 系列的第四部分。

另请参阅前几部分:

  • Part 1: Certificate Transparency 101
  • Part 2: Certificate Transparency Info Leaks
  • Part 3: Certificate Transparency as Communication Channel

引言

本文描述了一种利用存储 SBOM (Software Bill of Materials,软件物料清单) 证书的基础设施,通过 sigstore 数据库分发消息的方法。

简要流程

  • 发送方生成一个口令短语:4-karma-eagle-kettle-horizon
  • 使用由口令短语派生的密钥加密数据
  • 加密数据被分块并隐藏在 RSA 公钥的模数中
  • 每个分块作为签名条目上传到 rekor
  • 接收方输入相同的口令短语,搜索 rekor,提取并解密数据
  • 发送方与接收方之间从未建立任何直接连接

背景

正如 Part 3: Certificate Transparency as Communication Channel 中所描述的,可以在证书的公钥中”隐藏”小块数据。

我们使用 rekor配合数据分块作为数据库来分发消息,接收方通过 sigstoreAPI 读取数据,因此双方之间不存在任何直接通信。

Sigstore 与 Rekor

Sigstore 是一个开源项目,旨在提升供应链安全性,使软件制品的签名、验证和身份认证变得简单。它允许任何人对构建制品或容器镜像进行签名,并让其他人验证该签名。

Sigstore 使用 Rekor 作为其透明度日志实现。Rekor 的运作方式与常规的 Certificate Transparency 日志类似,不同之处在于它用于软件供应链元数据 (签名、SBOM、证明等)。每当使用 Cosign 生成签名或元数据时,就会产生一个条目。这类似于 Let’s Encrypt签发证书的过程,只不过在这里是调用者自己提供数据。

Magic-Wormhole 模式

magic-wormhole 是一个用于在两台计算机之间安全传输文件的工具。发送方和接收方使用一次性口令 (如 7-horse-battery) 进行连接。双方输入口令后,wormhole 通过直连或中继将两台计算机链接起来,文件以端到端加密方式传输。

我们在这里所做的是将公钥操纵技术与 magic-wormhole 的一次性口令理念相结合,在 rekor透明度日志之上构建一个消息传递系统。

Rekor 条目结构

Rekor 条目称为 hashedrekord,其 schema 定义在这里。

条目包含:

  • 一个制品哈希(被签名的内容)
  • 对该哈希的签名
  • 用于签名的公钥

注意,公钥就在条目中,而我们从 Part 3 已经知道可以在 RSA 公钥模数中隐藏数据……

在公钥中隐藏数据

我们使用的公钥操纵技术与 Part 3 中描述的完全相同。核心思路很简单:RSA 公钥包含一个模数 n = p * q,其中 p和 q是大素数。我们可以构造一个密钥,让其中一个素数编码我们的隐藏数据:

  1. 将数据嵌入素数

    :生成一个素数 p,使其低位包含我们的分块数据

  2. 生成配对素数

    :找到另一个素数 q,使得 n = p * q构成有效的 RSA 模数

  3. 接收时提取

    :解析公钥,获取模数 n,直接读取隐藏的比特位

由于 rekor在每个条目中存储完整的公钥,接收方可以提取模数并获取隐藏的分块数据,无需私钥。

深入解析:关于该技术的详细说明,包括数学原理、代码和逐步操作指南,请参见 How to Hide Encrypted Data Inside RSA Public Keys。

“架构”

系统的工作方式如下:

  1. 发送方

    生成一个口令短语

  2. 从口令短语同时派生出加密密钥和制品哈希

  3. 数据经过加密、分块后,作为多个 rekor条目上传

  4. 接收方

    输入口令短语,通过派生的哈希进行搜索,然后解密

注意,制品哈希充当会合点。发送方和接收方从口令短语独立计算出相同的哈希,这使得接收方只需知道口令短语就能在 rekor中找到对应的条目。

工作原理

口令短语

口令短语可以是任意内容。我选用了 magic-wormhole的词表生成方式,格式为 X-wordA-wordB-wordC-wordD,但也可以使用任何其他方式。

密钥与哈希的派生

从口令短语派生出两个关键要素:加密密钥 (假设使用 PBKDF2) 和制品哈希。

发送数据

我们基本上是加密数据,按大小分块,然后上传到 rekor并附带哈希值。哈希方式类似于对 passphrase:chunk:N进行哈希,但实际上可以使用任何你能想到的方法。

流程大致如下:

Sender Flow

接收数据

接收方同样使用口令短语计算哈希,然后:

  1. 搜索

    :对序号 0、1、2……逐一计算制品哈希并搜索 rekor

  2. 提取

    :从每个条目中获取 RSA 公钥,从模数中提取隐藏数据

  3. 拼接

    :按序号排序并拼接所有分块

  4. 解密

    :使用派生的密钥进行解密

Receiver Flow

分块格式

每个分块存储 15 字节,但 RSA 要求模数为奇数 (最低位必须为 1)。为避免数据损坏,我们将数据左移 8 位:

Chunk Format

Rekor API

实现只需要三个 rekorAPI 调用:

上传条目

上传一个包含我们构造的公钥的 hashedrekord条目:

curl -X POST "https://rekor.sigstore.dev/api/v1/log/entries"\
  -H "Content-Type: application/json"\
  -d '{
    "apiVersion": "0.0.1",
    "kind": "hashedrekord",
    "spec": {
      "data": {
        "hash": {
          "algorithm": "sha256",
          "value": "abc123...derived-from-passphrase..."
        }
      },
      "signature": {
        "content": "BASE64_SIGNATURE",
        "publicKey": {
          "content": "BASE64_PUBLIC_KEY_WITH_HIDDEN_DATA"
        }
      }
    }
  }'

响应包含条目 UUID:

{
"24296fb24b8ad77a...": {
"logIndex": 123456789,
"body": "..."
  }
}

按哈希搜索

通过制品哈希 (即会合点) 查找条目:

curl -X POST "https://rekor.sigstore.dev/api/v1/index/retrieve"\
  -H "Content-Type: application/json"\
  -d '{"hash": "sha256:abc123...derived-from-passphrase..."}'

返回匹配的 UUID 列表:

["24296fb24b8ad77a..."]

获取条目

获取完整条目以提取公钥:

curl "https://rekor.sigstore.dev/api/v1/log/entries/24296fb24b8ad77a..."

响应体 (base64 解码后) 包含带有隐藏数据的公钥:

{
"apiVersion": "0.0.1",
"kind": "hashedrekord",
"spec": {
"signature": {
"publicKey": {
"content": "BASE64_PUBLIC_KEY"
      }
    }
  }
}

接收方解码公钥,提取 RSA 模数,获取隐藏的分块数据。

总结

我们有能力”搭便车”利用 rekor数据库,通过公钥操纵在双方之间传递消息。由于 API 是公开的,发送方和接收方都只通过 sigstore域名进行通信。计算并上传一条小消息 (如 “the dog barks too loud, can it be silenced?”) 大约需要一分钟,而读取消息则相当快。


免责声明:本博客文章仅用于教育和研究目的。提供的所有技术和代码示例旨在帮助防御者理解攻击手法并提高安全态势。请勿使用此信息访问或干扰您不拥有或没有明确测试权限的系统。未经授权的使用可能违反法律和道德准则。作者对因应用所讨论概念而导致的任何误用或损害不承担任何责任。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:securitainment latedeployment latedeployment《利用 SBOM 基础设施构建隐蔽通信系统》

评论:0   参与:  0