天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます(たまに関係ない雑記も)

基礎から学ぶコンテナセキュリティに参加してきた

forkwell.connpass.com

こちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。

会の概要

以下、イベントページから引用です。

2023年7月27日に発売された『基礎から学ぶコンテナセキュリティ―Dockerを通して理解するコンテナの攻撃例と対策』著者の森田浩平氏をお招きし、お話を伺います。 Dockerの普及に伴い,コンテナ技術はすっかり一般化しました。Dockerおよびコンテナ技術は今や開発者にとって必須の技術・ソフトウェアと言えるその一方で、忘れてはならないのがセキュリティです。 Linux コンテナ利用時のセキュリティ上のトラブルを防ぎ、コンテナを安全に活用することを目的として、コンテナの仕組みや攻撃手法、その対策を解説している本書について、森田氏に書籍のポイントとコンテナセキュリティの学び方についてご紹介いただきます。

会の様子

30分で知るコンテナセキュリティの勘所と学び方

書籍の特徴(他の本と異なるところ)

他の書籍と比べた基礎から学ぶコンテナセキュリティ(以降本書と表記)の違いの説明として、

  • 攻撃手法の紹介が具体的
  • コンテナ環境のセキュリティモニタリング手法&バイパス方法が記載
  • 脅威を俯瞰した上で具体的な攻撃方法が書いてあるので、インフラエンジニアのみならずセキュリティエンジニアにも役立つ

の3点が挙げられていました。

書籍で紹介している攻撃例

本書で紹介がされている攻撃例として、uevent_helperを使用してコンテナからホストへエスケープする事例の紹介がデモでありました。
脅威モデルによってレイヤごとに攻撃を考え、中でもコンテナエスケープを中心的に取り挙げるようにしているということです。

書籍で紹介している攻撃対策例

攻撃の対策として、falcoを使ったコンテナモニタリングと、ファイル名変更によるfalcoリールのバイパスに関して説明がこちらもデモでありました。

コンテナセキュリティの学び方と実践

コンテナセキュリティを具体的にどのように学び、どのように実践するかに関して説明がありました。以下の3点がプレゼンテーションの中では挙げられていました。

  • 要素技術やアーキテクチャを知る。Linuxカーネルの仕組みでできていることや、それぞれどういう成り立ちなのかを理解しておく
  • 脅威とリスクを把握する。攻撃者は特定の場所を攻めるのではないので、全体を俯瞰した上でどう攻撃されるのか?リスクがどう波及するのか?を考える(ただし大規模アーキテクチャの場合は「ここまでは信頼する」と決めておくのが現実的)
  • 対策と検知方法を知る。想定される攻撃と、緩和策や検知の仕組みなどを考える。対策をすべて挙げるととんでもない量になるので、リスクアセスメントに関するポイントをつけておくのがおすすめ

コンテナセキュリティに関するプレイドの事例

続いて、コンテナセキュリティに関する事例発表がありました。

イメージのセキュリティチェック

脆弱性の検出&管理と依存関係の管理をより低いコストで達成するために、オールインワンのOSSツールであるKubeClarityを活用し、CI/CD Pipelineではなくk8sに組み込む形で運用することにしたということでした。(元々はセキュリティリスクを許容する形で運用していた)

活用事例〜libcurl/curl周りの脆弱性対応〜

上記で述べたような継続的なSBOM管理が活きた事例として、libcurl/curl周りの脆弱性対応に関して、対応した事例の話がありました。

libcurl/curl周りの脆弱性は事前告知されていたこともあって、影響範囲の事前調査やアップデート準備がプロアクティブにできたということです。

セキュアなコンテナイメージ

脆弱性対応を減らすために、セキュアなコンテナイメージを構築した事例に関する話がありました。

Node.jsを使用しているそうですが、そこではネイティブのライブラリとリンクするのが大変であったり、導入モチベーションの維持に苦労したという課題を抱えていたそうで、セキュアなコンテナイメージを構築したそうです。

今後の展望

今後の展望として、開発者フレンドリーなトリアージのしくみを作っていきたいという話がありました。

GitHubをはじめとした外部ツールに脆弱性診断の結果をエクスポートすることで、プロダクトチームがスムーズに調整できるようにしていくことが理想的だということです。

パネルディスカッション(Q&A)

講演の後はQ&Aがありました。以下、質問と回答を常体で記載していきます。

プロダクトにAPIを提供するコンテナを複数運用しているが、数が多くメンテナンスに手が回っていない。最低限のセキュリティを担保するためにどのようなアプローチをすべきか?

環境によるとは思うが、まずはリスク分析や脅威モデリングから始めるのがおすすめ。その後に、モニタリングの仕組みを入れたりしていくのがよい。

コンテナを利用するかサーバレスサービスを利用するかを考える際の損益分岐点は?

基盤部分を運用することができる人がいるか?や会社のフェーズをもとに考えると思う。
また、作る瞬間の費用よりも運用費の観点もセットで考える。

なお、もしメンバーがコンテナ運用に関する高いモチベーションがあるならば、チームに対して与える正の影響や個人のキャリアに対する影響が大きいので、よほどのことがない限り、損益分岐点を考えず推奨すると思う。

コンテナセキュリティにウイルス対策ソフトは必要なのか?

コンテナ環境は頻繁に書き換わるため、従来のウイルス対策ソフトはコストが高くミスマッチだと思う。

そのため、Falcoのような振る舞い検知の仕組みを採用するほうがbetterな選択だと考えている。

Linuxディストリビューションなどの更新を行いたい場合はコンテナをつくりなすべきか?コンテナ内でコマンドを使って更新したほうがよいか?

イメージ更新をする必要があるため、つくりなおすべき。

libcurl/curl脆弱性対応は、どのような使い方をしているかまで検討しないとトリアージできないような気がするのだが、どのように対応したのか?

事例講演に関する質問なので、自分(森田さん)ならどのように対応するのか?という話になる。

今回の脆弱性は、SOCKS5プロキシを使わないと攻撃が成立しないといった条件があったはずなので、該当する使い方をしている部分がないか?をまずヒアリングすると思う。
その上で、バージョンを上げるために必要なコストを考える。このとき、ロールバックが簡単にできるはずなので、何かしら検討するというよりはとりあえずバージョン上げをしてみると思う。

会全体を通した感想

デモを通した具体的な発表だった上に、声が非常に聞き取りやすかったので、ストレスなく聞ける満足感が高い発表でした。

話題になっていたlibcurl/curl周りの脆弱性対応に関する話も聞けた点も非常によかったです。