2021.12.14 (Tue) Ubie Tech Talk で発表した資料です
Trivy + Regoを用いたパッケージ脆弱性管理Ubie株式会社 水谷 正慶Ubie Tech Talk 2021.12.14 (Tue)
View Slide
Confidential2会社概要自己紹介水谷 正慶(@m_mizutani)Ubie Discovery セキュリティエンジニア略歴:2011/4~ 日本IBM(東京基礎研究所、SOC)2017/10~ Cookpad株式会社2021/09~ Ubie株式会社
医師を目指し、起業するまで外部パッケージの脆弱性管理
Confidential4会社概要現代のWebサービス開発● 3rd party(主にOSS)パッケージの多大な恩恵○ サービスの機能やフレームワークとして利用○ 開発用ツールとしての利用● エコシステムの発展により依存関係が膨張○ 1プロダクトあたり多いと数百〜数千パッケージへの依存○ 利用パッケージがさらに別のパッケージに依存する
Confidential5会社概要脆弱性の発見と対応● パッケージ脆弱性の情報は取得しやすくなっている○ メディアの発展による脆弱性情報の流通○ 脆弱性を検査するためのツールが充実○ Continuous Integratoin (CI) などの文化が広がりサービスも増えてきた● それによって既知の脆弱性は駆逐されたか?○ → 残念ながらそうでもない
医師を目指し、起業するまでなぜ既知の脆弱性を駆逐できないのか?
Confidential7会社概要課題1) 修正版がリリースされない● 外部パッケージなのでリリースタイミングをコントロールできない○ 特にOSSの場合はコントリビュータの都合に依存する○ PR含む要望をだすことはできるが、取り入れられるかは状況次第● 依存関係の先のパッケージが脆弱な場合、依存元と依存先のすべてのパッケージが要対応
Confidential8会社概要課題2) 更新によってプロダクトに破壊的変更が起きる(かも)● 必ずしも起きるとは限らないが検証は必要● 破壊的変更が発生する場合は修正も必要● 直ちに影響がないと見られる脆弱性についてはどうしても優先順位が下がってしまう
Confidential9会社概要課題3) パッケージ更新以外の方法で緩和されている● 脆弱性によっては外的要因によってリスクを低減できる○ 例) サーバ設定の変更○ 例) WAFなどのフィルタリング● 緩和した後、一定期間後に修正すべきなのか・長期的にそのまま運用するのかという判断が必要○ 判断の結果とツールの検査結果が紐付いて欲しい
医師を目指し、起業するまでということで脆弱性の「管理」が必要
Confidential11会社概要要件1) プロダクト・脆弱性ごとに状態を管理したい● すぐに修正できない脆弱性の状態を管理○ なぜ修正しない・できないか?○ いつまで様子見するか?● アップデートできないパッケージについて警告などをだしたくない○ 無用な警告はノイズとなり、本来見るべき警告を見落としてしまう
Confidential12会社概要要件2) 組織全体で脆弱性の管理を統制したい● 全体の状況を把握したい○ どのような脆弱性があるか○ 新しく検出された脆弱性があるか● 独自の脆弱性の評価が必要○ 外部で評価された深刻度(CVSSなど)はブレがある○ 内部的にも脆弱性の特性を確認していく必要がある
Confidential13会社概要要件3) 判定やCIの結果をカスタマイズしたい● 脆弱性の扱いを単純なルールで表現するのは困難○ 複数の条件の組み合わせや例外の設定○ Pass/Failだけでなく緊急度の判定などもやりたい● 脆弱性だけでなくプロダクト側の文脈も必要○ 外部に公開しているプロダクトか?○ インターネットから直接アクセスできるか?
医師を目指し、起業するまでということで
Confidential15会社概要Octovyhttps://github.com/m-mizutani/octovy
Confidential16会社概要Octovy● GitHub AppでソースコードをTrivyでスキャン● 脆弱性を検出したパッケージごとに対応状況を管理● リポジトリ・脆弱性に任意のラベルを付与可能○ 例: m-mizutani/some-product → “外部公開”○ 例: CVE-2021-0000 → “Critical”● OPA/Regoを使うことで自由にCIの結果を制御https://github.com/m-mizutani/octovy
Confidential17会社概要OPA/Regoについて● OPA: ポリシーエンジン(サーバ or Go言語組み込み)● Rego: ポリシー記述言語● 「入力したJSONをポリシーに従って自由に判定・変換する」● テスト可能かつ汎用的な判定エンジンとして利用可能
Confidential18会社概要リポジトリごとの設定https://github.com/m-mizutani/octovy脆弱性の状態を個別に管理可能リポジトリの性質を管理可能
Confidential19会社概要アーキテクチャ・検出した脆弱性情報・リポジトリ情報・パッケージ一覧情報・commitに関する情報
Confidential20会社概要ポリシー管理 on GitHub
Confidential21会社概要ポリシーの例CriticalならFailHighかつ外部公開ならFailmsgを集計してconclusionを返す
Confidential22会社概要Regoのテスト特に問題ないテストデータCriticalを含むテストデータHigh & publicを含むテストデータHigh だけを含むテストデータ
Confidential23会社概要Future Work社内の様々なポリシーを集約しコードベースかつテスト可能な管理にしていく
Confidential24会社概要宣伝:OPA/Rego Advent Calender 2021https://adventar.org/calendars/6601● OPA概論● Policy as Codeとは● Regoの基礎(概要編)● Regoの基礎(PolicyとData)● Regoの基礎(結果の出力編)● Regoの基礎(イテレーション編)● Regoの基礎(パッケージ編)● Regoの基礎(Safety)︙以下、順次公開予定
Confidential25会社概要まとめ● 社内プロダクトで利用しているパッケージ情報を俯瞰することでリスクの把握・コントロールを用意にする● OPA/RegoによるPolicy as Codeによる恩恵○ 柔軟で自由なルールを記述できる○ テスト可能なので管理がしやすい○ コード管理により複数人で知見の共有ができる
Confidential26会社概要セキュリティエンジニア募集https://recruit.ubie.life/jd_dev/eng_productsec https://recruit.ubie.life/jd_dev/corp_secコーポレートエンジニア(Security Administrator)ソフトウェアエンジニア(Product Security)Ubieで一緒にセキュリティをエンジニアリングしていく仲間を募集しています