基礎から学ぶ コンテナセキュリティ を読んだ

基礎から学ぶコンテナセキュリティ ――Dockerを通して理解するコンテナの攻撃例と対策 を読みました。
セキュリティミニキャンプで素朴なコンテナの基礎(unshareやnamespaceやchrootを触るくらい)は学んでいたので、仕組み部分はサラサラと読めました。後半にかけて運用の話とかは知らないことも多く勉強になりました。
210ページくらいを2週間くらいにわたって6時間ほどで読み切りました。(手を動かすのはこれからやります)

概要

以下のような流れでコンテナセキュリティの幅広い話題に触れました。基礎から運用に向けて〜という感じですね。

  • コンテナの基礎、仕組みを学ぶ
  • コンテナへの攻撃手法について学ぶ
  • コンテナイメージをセキュアに作るためにやるべきことを学ぶ
  • コンテナランタイムをセキュアに運用する方法
  • コンテナ環境のセキュアな運用方法

ある特定のコンテナランタイム、とかk8s特有の話、とかはあまりなくて、幅広くコンテナに共通する話題を取り扱っている感じがしました。基礎から学ぶ、というタイトル通りで僕のようなエントリー層にはちょうどよかったです。

できるようになったこと/わかるようになったこと

そもそもDockerで知らないことがたくさんありました。以下は初めて理解した事柄です。

  • Dockerデーモンはどんなコンポーネントから構成されているのか、を理解した
  • コンテナランタイムの高レイヤ、低レイヤの感覚的な違いをつかんだ
  • ケイパビリティ周りの話
  • コンテナのロギングドライバを使えばAWS Cloudwatch Logsにログを流せる
  • Kata Container, gVisorの分離レベル
  • AppArmorが何者か分かった
  • どういう時にコンテナが攻撃可能であるか、いくつかパターンを理解した

セキュリティ的な話題も知らないことがいくつかありました

  • Trivy + OPA
  • docker historyは悪意ある変更を検知できない話
  • SOARの概念、合理的な感じがするので調べたい

今後やりたいこと

  • chrootがダメでpivot_rootだとOKな理由がまだいまいち正確に答えられないので復習したい
  • 手を動かすパート
    • ARPスプーフィングをやられコンテナでやってみる
    • stressコマンドとcgroups
    • Trivyによるterraformの設定ミスチェック
    • seccomp
    • AppArmor
  • TUFが何者か知らないので調べる
  • sysdigってパッと見eBPFで似たようなことができそうなので、違いを調べたい

やってみたいアイデア

  • Stream Processorを使ってみたい。イメージレイヤをいじる処理を書いてみたい。
  • GitHub Actions セルフホストランナーのうち、コンテナを利用するものではdindを利用することがある。(参考: Amazon ECS と AWS Lambda で汎用 self-hosted runner を提供する基盤 - クックパッド開発者ブログ) 今回本を読むとこういうのって結構運用が大変なんじゃないかと思ってきたので、自分でも環境を作ってみて攻撃可能な範囲の洗い出し等をして、対策を検討してみたい。

その他

最近技術書モチベが高いです。25分で30ページくらい読むペースでゴリゴリと一巡してコンテキストを一気に頭に詰め込むと、本の中での知識のつながりが見えてゆっくり読むより却って吸収しやすいです。一巡目でページ数とメモを残して、二巡目でそのメモ部分だけ詳しく読んで、まとまってきたらブログや手元のメモに書き起こす、という流れが良さそう。

手を動かすパートもやっていきたいですね、やるぞやるぞ。