Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction Supply Chain Security

Introduction Supply Chain Security

Recent trends in supply chain security.

Masahiro331

July 02, 2022
Tweet

More Decks by Masahiro331

Other Decks in Technology

Transcript

  1. はじめに 僕が興味の赴くままに勉強したことを共有します。 今日のお話 Supply Chain Security のお話 なぜ Supply Chain

    Security を考えるのか? 世の中ではどのように議論されているのか? 大きな課題に対する取り組み方も勉強になる 今日のゴール 雰囲気を持ち帰って欲しい(僕も雰囲気しか理解できてないから) 1
  2. これらの脅威に対しての取り組みについて 様々な団体がこれらの問題に対して取り組んでいる. OpenSourceSecurity Foundation(OSSF) が主導して取り組んでいる LinuxFoundation 配下の WG OpenSourceSecurity Foundation

    の GitHub 業界関係者と政府関係者を集めて今後の計画を発表している CNCFでもTAG-SecurityというWGが立ってる https://github.com/cncf/tag-security 7
  3. 現在取り組まれていること 脅威モデル の作成と検討 SLSA の制定 サプライチェーンを保護するためのガイドライン Digital Identity Attestation の検討

    OSS開発者とOSS利用者が、作成、使用するコードの出所を理解し、決定できるように することを目的 SLSA を元に脅威モデルやDigital Identity Attestationについて触れていく 11
  4. SLSA におけるソフトウェアサプライチェーンの定義 Source GitHubにcommitされたソースコード Build Travis CIやJenkinsなどのCI/CD もしくは ローカル環境かもしれない Package

    Buildプロセスの出力 (例: docker image, zip, jar, なんでも) Dependencies Buildプロセスへの入力だが、ソースではないアーティファクト。 17
  5. SLSA Level と Requirements SLSA は Build, Source, Deps の3つの環境へのセキュリティ対策の達成度ごとにレベルを定

    義している。 Levelごとに Requirements を定めている。 https://slsa.dev/spec/v0.1/requirements 19
  6. セキュリティレベルについて (1) SLSA 1. Documentation of the build process ビルドプロセスの

    Provenance(来歴)を作成すること。 ビルドプロセスが自動化され、Provenanceを生成する必要がある。 Provenance は、ビルドプロセス、ソースコード、依存関係など、アーティファクトがどのよ うにビルドされたかに関するメタデータ Provenance を用いることで、ソフトウェアの利用者はリスクに基づいたセキュリティ上の決 定を下すことができる。SLSA 1は Provenance の改ざんには対応できないが、コードソース を識別し、脆弱性管理することが可能。 20
  7. セキュリティレベルについて (2) SLSA 2. Tamper resistance of the build service

    バージョン管理と、署名された Provenance を生成すCI/CDの環境を利用する必要がある。 SLSA 2 では、Provenance により、ビルドサービスが信頼できる範囲での改ざんが防止でき る。 SLSA 3. Extra resistance to specific threats SLSA 2に対してより強固なBuild環境の提供 SLSA 4. Highest levels of confidence and trust SLSA 3に対してより強固なBuild環境の提供とソースコードの管理 https://slsa.dev/spec/v0.1/levels 21
  8. Provenance 目的 アーティファクトまたはアーティファクトのセットがどのように生成されたかを示すための もの Prerequisite Understanding of SLSA Software Attestations

    and the larger in-toto attestation framework. Software Attestation と in-toto attestation を知らないとダメのようなのでその話をします。 実質これが Digital Identity Attestationです。 23
  9. in-toto Attestation Software Attestation の一つの形式として in-toto attestation が推奨されている。 Software attestationを実体化した仕様

    ソフトウェアアーティファクトのメタデータ向けの署名方法とデータ形式を定義 メタデータはデータ型を指定し、Provenance や SBOM などのデータ型があり、ま た独自定義も可能 署名方法は cosign が推奨されている 27
  10. in-toto Attestation (例) シナリオ masahiro331 が自作の Docker Image に masahiro331

    が作ったことを署名したい 方法は以下 Artifact は Docker Image Predicate(メタデータ) の型を http://my.example.com/author とする メタデータ は {"author": "masaihro331"} Subject は Docker Image の sha256 Digest 49193a2310dbad4c02382da87ac624a80a92387a4f7536235f9ba590e5bcd7b5 署名はcosignで生成した鍵を使用 28
  11. Statement の作成 Subject と Predicate を用いて 「Docker Image」を「masahiro331によって作成」を表現し ている {

    "_type": "https://in-toto.io/Statement/v0.1", "predicateType": "http://my.example.com/author", "subject": [ { "name": "masahiro331/maven-test-project", "digest": { "sha256": "49193a2310dbad4c02382da87ac624a80a92387a4f7536235f9ba590e5bcd7b5" } } ], "predicate": { "author": "masahiro331" } } 29
  12. Attestation の作成 Statement を base64 encode し、 payload に詰め込んでから 署名している。

    { "payloadType": "application/vnd.in-toto+json", "payload": "eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZ...", "signatures": [ { "keyid": "", "sig": "MEQCIG+na8kNMK4u9j2jc2Db94aR0rglNqbHZcscHH9QqP..." } ] } 30