Open38

npm provenance

odanodan

sigstore は npmjs.com や GitHub に依存したサービスではなくて、Docker コンテナなどのソフトウェアの成果物に対して電子署名を行えるサービス

https://www.publickey1.jp/blog/22/openssfsigstore.html

https://thinkit.co.jp/article/20360

odanodan

2021年12月にLog4jの深刻な脆弱性が発見され、社会的に大きな影響を及ぼしたことをきっかけにオープンソースのサプライチェーンリスクに対策が注目されるようになり、翌月の2022年1月には米ホワイトハウスがソフトウェアセキュリティに関する会議を開催。

きっかけは Log4j の件らしい

odanodan

Sigstoreはソフトウェアの成果物(Artifact)に署名するためのCosign、 OpenID Connect(OIDC)IDを用いるための認証局Fulcio、署名データを改ざん不可能な台帳に記録するRekorなどから構成されます。

  • Cosign
  • Fulcio
  • Rekor
odanodan

署名は https://github.blog/2023-04-19-introducing-npm-package-provenance/ にある画像のデータに対して行われる

GITHUB_ 系の環境変数がたくさんある

odanodan

predicate のフォーマットは predicateType にある URL で定義する形らしい

odanodan

While this sort of attack is relatively rare in comparison to the occurrence of unintentional vulnerabilities, we are seeing a growing number of these, and the impact is often magnified given that it’s a deliberate and targeted attack. Over the past few years there have been a number of notable attacks against popular npm packages, including UAParser.js, Command-Option-Argument, and rc.
https://github.blog/2023-04-19-introducing-npm-package-provenance/

サプライチェーン攻撃はここ最近よくあるらしい

odanodan

Supply-chain Levels for Software Artifacts という仕様があるらしい
https://slsa.dev/

Supply-chain Levels for Software Artifacts, or SLSA ("salsa").

It’s a security framework, a checklist of standards and controls to prevent tampering, improve integrity, and secure packages and infrastructure. It’s how you get from "safe enough" to being as resilient as possible, at any link in the chain.

odanodan

https://github.blog/2023-04-19-introducing-npm-package-provenance/

パッケージの出どころを証明するには?
→メンテナが管理する鍵で署名
→けど鍵が漏洩すると問題
→メンテナに依存するのではなくて、ソースコードとビルドプロセスを直接信頼したい
→信頼できる CI/CD サービスを使う

CI の OIDC を使うことでパッケージの利用者がいつでも検証可能な状態にする
→ sigstore に OIDC トークンを投げると短命な X.509 署名証明書を発行する

CI 上でキーペアを発行して、それで署名を行うらしい

odanodan

Sigstore の Rekor に来歴証明書がアップロードされる

npmjs.com のレジストリはあるソフトウェアのあるバージョンを公開する前に、Rekor の証明書を確認して改ざんされていないことを確認する

odanodan
odanodan

鍵の管理が自動化され、署名もtransparency logとして公の場所に保存されるため誰でも監査することが出来ます。簡単に無料で署名できるという点で、ソフトウェア署名におけるLet’s EncryptのようなものとGoogleは述べています。

odanodan

Sigstore プロジェクトの各種ツールを利用すると、上述のように自分で鍵管理を行わずにコンテナイメージへの署名を行うこともできます。具体的には 「OpenID Connect を活用して得られる署名者の認証情報に紐づけて短命の署名用鍵を発行し、それで署名する」 というようなことができるのです。これが本稿のテーマである Keyless Signing と呼ばれる手法です。
https://blog.flatt.tech/entry/sigstore_keyless_signing

odanodan

ID Token からキーペアを生成する流れがよくわかっていない
ID Token は誰でも閲覧できるから、他にどういう情報を混ぜているんだろう

いや ID Token は認証情報なので誰にも見せられないものだった

odanodan
odanodan

CI の OIDC を使うことでパッケージの利用者がいつでも検証可能な状態にする
→ sigstore に OIDC トークンを投げると短命な X.509 署名証明書を発行する

これが↑の

短命のキーペアは ID Token の subject と payload に対して署名を行っている

の部分かな

odanodan
  • npm publish 実行
  • sigstore.js で署名を作成
  • 署名を npmjs.com に PUT

という流れは確認できた

odanodan

PUT されたあとは npmjs.com 側で署名などなどを検証して、大丈夫ならパッケージを公開という流れかな

odanodan

SLSAプロベナンス仕様のバージョン1.0を採用
他のクラウドCI/CDプロバイダーと協力して、プロベナンス署名のサポートを追加
想定されるソースリポジトリとコミットが存在することを検証
CI/CD環境とnpmレジストリ間のアクセスを管理する新しいツールを開発

↑が今後の展望なんだけど

想定されるソースリポジトリとコミットが存在することを検証

これやってないのかwってなるな