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

社内用GitHub Actionsのセキュリティガイドラインを作成した話 / Creating Security Guidelines for the Internal Use of GitHub Actions

mercari
October 14, 2023

社内用GitHub Actionsのセキュリティガイドラインを作成した話 / Creating Security Guidelines for the Internal Use of GitHub Actions

社内でのGitHub Actions利用の広がりにあわせて、安全安心に使うためのガイドラインがあるべきだと私たちは考えました。
そこで、社内有志メンバーによるGitHub Actionsセキュリティガイドラインを執筆し、社のセキュリティチームやさまざまな人のレビューを経てガイドラインが策定されました。
本ガイドラインは社内用ではあるものの、社外の方々にも有益であると考えエンジニアリングブログにて公開したところ、多くの反響をいただきました。
今回の発表ではこのガイドラインの内容を一部紹介し、社内での活用事例やガイドライン作成のプロセスなどもご紹介します。

In tandem with the expanding use of GitHub Actions at the company, we believed we should have guidelines for using this form of automation safely and securely.
This prompted us to have volunteers within the company write our GitHub Action Security Guidelines, and we managed to formulate these guidelines by following a peer review process that involved our internal Security Team and an assortment of other members.
While the guidelines were intended for internal use, we saw that they could also be beneficial to people outside of the company as well and decided to publish them on our engineering blog, which received a mountain of responses.
In this presentation, we would like to share a portion of the guidelines with you, showcase how we use them internally, and also present to you the process we used to create the guidelines.

------
Merpay & Mercoin Tech Fest 2023は3日間のオンライン技術カンファレンスです。
IT企業で働くソフトウェアエンジニアおよびメルペイ・メルコインの技術スタックに興味がある方々を対象に2023年8月22日(火)、23日(水)、24日(木)の3日間、開催します。 Merpay & Mercoin Tech Fest は事業との関わりから技術への興味を深め、プロダクトやサービスを支えるエンジニアリングを知ることができるお祭りです。

今年のテーマは「Unleash Fintech」。 メルペイ・メルコインのこれまでの技術的な取り組みはもちろん、メルカリグループのFintech事業における新たな挑戦をお伝えします。 セッションでは事業を支える組織・技術・課題などへの試行錯誤やアプローチなど多面的にご紹介予定です。

メルペイ・メルコインが今後どのようにUnleash(解放)していくのか、ぜひ見に来てください。

■イベント関連情報
- 公式ウェブサイト:https://events.merpay.com/techfest-2023/
- 申し込みページ:https://mercari.connpass.com/event/286670/
- Twitterハッシュタグ: #MerpayMercoinTechFest
■リンク集
- メルカリ・メルペイイベント一覧:https://mercari.connpass.com/
- メルカリキャリアサイト:https://careers.mercari.com/
- メルカリエンジニアリングブログ:https://engineering.mercari.com/blog/
- メルカリエンジニア向けTwitterアカウント:https://twitter.com/mercaridevjp
- 株式会社メルペイ:https://jp.merpay.com/

mercari

October 14, 2023
Tweet

More Decks by mercari

Other Decks in Technology

Transcript

  1. Masahiro Wakame / @vvakame 株式会社メルペイ Solutions team 🐈💖 Motonori Iwata

    株式会社メルコイン Backend Engineer 株式会社メルコイン Engineering Manager Sadaaki Hirai / sadah ガイドライン策定チーム
  2. インジェクションによる攻撃例1 • 以下のようなコードにはインジェクションの脆弱性がある。 • コメントに {{ 1 + 1 }}

    のような二重中括弧が含まれていた場合、 Actionは内部で{{ }}の値を補間するためにlodashを使っているた め、node.jsコードが実行され出力が2になる。 uses: foo/[email protected] with: comment: | Comment created by {{ event.comment.user.login }} {{ event.comment.body }}
  3. インジェクションによる攻撃例2 以下のようなコードは内部の式 ${{ }} が評価され、結果の値に置き換 えられるため、コマンドインジェクションに対して脆弱になる可能性があ る - name: Check

    PR title run: | title="${{ github.event.pull_request.title }}" if [[ $title =~ ^octocat ]]; then echo "PR title starts with 'octocat'" exit 0 else echo "PR title did not start with 'octocat'" exit 1 fi
  4. インジェクションによる攻撃例2 • 攻撃者は「 a"; ls $GITHUB_WORKSPACE"」 といったタイトルの PRを作成する可能性がある • その場合"

    を使用して title="${{github.event.pull_request.title }}" ステートメントを中断し、ランナーでコマンドを実行できるようにす る。そうすると以下のようにlsコマンドの出力を確認できる。 > Run title="a"; ls $GITHUB_WORKSPACE"" README.md code.yml example.js
  5. シークレットの利用について • Long-Lived tokenを利用しない • Workload identity federationを用いたSecret Managerの利用を 検討する

    • 構造化データ(JSON, XML, YAMLなど)をシークレットにしない ◦ GitHub Actionsは全文をマスクデータとして扱ってくれるが部 分文字列はマスクされないため
  6. 利用すべきイベントトリガー • リポジトリへのwriteはできないよう制限されているのでPRの処理 には pull_request イベントを使えるなら使う • 少し制限を緩めたものとして、pull_request_targetがある ◦ GitHub

    Actionsのワークフロー自体は pull_request_target だ と default branch のものが使われる ◦ ワークフローのyamlに直接記載する場合は攻撃者によって上 書きされない ◦ チェックアウトしたコードに含まれるComposite Actionを使う場 合注意が必要となる
  7. 補足:Composite Action • Composite ActionはカスタムActionの一つであり、使用することで ワークフローの複数のステップを組み合わせて 1 つのアクションに することができる。 たとえば、複数の

    run コマンドを 1 つのアクショ ンにまとめて、そのアクションを 1 つのステップとしてワークフロー から呼び出して実行することが可能。
  8. Job / Stepの単位 • シークレットの内容を露出する単位は可能な限り狭くする ◦ Job単位 より Step単位 のほうがよりよい

    • Step間のファイルによるデータやりとりは全ステップから可視であ ると考える • Jobは処理の単位によって分ける ◦ 例えばテスト/ビルド/デプロイ はそれぞれJobを分けたほう がよい ◦ 必要なGitHub Actions上のPermissionやクラウドプロバ イダー の権限を細かく制御できる
  9. サードパーティのActionを利用する際の注意点 方式 書き方 特徴 Full Changeset Hash owner/action-name@26968 a09c0ea4f3e233fdddbafd11 66051a095f6

    衝突の成功例はあるが困難 Short Changeset Hash owner/action-name@26968 a0 衝突に対して脆弱 Tag / Release owner/action-name@v1 タグを後で変更され、意図し ない変更が混入してしまう 可能性がある Branch Name owner/action-name@main 将来壊れる可能性がある 意図しない変更が混入して しまう可能性がある
  10. 作り方 1. GitHub Actionsのセキュリティに関連する文献、記事を読む 2. 記事には複数の記事がリンクされているのでそれらを読む 3. ガイドラインのアウトラインをまとめ a. 脅威を知る

    / 対策する / セルフチェックリスト 4. 参考文献の設定を試したりしながらガイドラインを書く 5. 自分たちでガイドラインをレビューする 6. セキュリティチームにレビューしてもらう 7. 修正する 8. 英訳する
  11. タイムライン 2022 07 - 09 ボランティアメンバーの招集 アウトライン作成、執筆開始 2022 10 -

    12 初回セキュリティレビュー実施 ガイドラインリファクタリング 2023 01 - 03 セキュリティ最終レビュー完了、正式版公開 🎉 セキュリティトレーニングコンテンツへ追加 2023 04 - 06 Developer Documentに反映 Engineering Blog公開