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

20260516_SecJAWS_Days

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 20260516_SecJAWS_Days

Avatar for Takuya Yonezawa

Takuya Yonezawa

May 16, 2026

More Decks by Takuya Yonezawa

Other Decks in Technology

Transcript

  1. 1 © 2026 Japan Digital Design, Inc. Takuya Yonezawa 2026.05.16

    Bottlerocket on ECS Dive Deep Security JAWS Days ~ Day 1 ~
  2. 3 © 2026 Japan Digital Design, Inc. 米澤 拓也 Software

    Engineer Technology & Development Div. and Corporate Culture室 プロフィール アプリケーションを気持ちよく作るためには インフラやセキュリティも幅広くできなければならぬ! と意気込んだSWEの成れの果て。 採用活動もやってますので是非お声掛けください 証券系→銀行系 と 金融×IT なキャリアを歩んでいます (証券外務員一種) Community Builder (Serverless) 2023~ takuya_y0ne
  3. 12 © 2026 Japan Digital Design, Inc. 不要なパッケージを徹底削減 不要なパッケージを排除することで、 脆弱性の混入リスクやパッケージの更新/

    管理の手間を大幅に削減する シェルすら捨てるという男前仕様 もし任意のプログラムや設定スクリプト を持ち込む場合は起動時に実行される bootstrapコンテナ経由で行う 上記はコンテナイメージ作成における プラクティスにも通じる内容である Bottlerocketが捨て去ったもの シェルとインタプリタ 攻撃者が脆弱性を突いてOS内で 任意のコードを実行できないようにする シェル:bashとか インタプリタ:Pythonとか パッケージマネージャー システムの整合性を損なう変更や悪意のある パッケージのインストールをブロックする yumやaptなど
  4. 15 © 2026 Japan Digital Design, Inc. Bottlerocketでは 2つのボリュームを利用する それぞれのボリュームに格納される

    主要なデータ群は下記の2系統 ▪ Root Device(immutable:不変) - Active/Passive パーティションセット - ブートローダー - dm-verityハッシュツリー - Bottlerocket APIデータストア ▪ Data Device(mutable:可変) - Pullしたコンテナイメージ - アプリケーション用ストレージ - コンテナオーケストレーションに 関連するデータ Root Device (immutable) Data Device (mutable) Bottlerocket on EC2 Active/Passive パーティションセット ブートローダー dm-verityハッシュツリー API データストア コンテナイメージ Application/Admin/Control /Bootstrapコンテナ オーケストレーション 関連データ (containerd/kubelet/ECS agent) … … アプリケーション用ストレージ
  5. 16 © 2026 Japan Digital Design, Inc. Bottlerocketでは 2つのボリュームを利用する それぞれのボリュームに格納される

    主要なデータ群は下記の2系統 ▪ Root Device(immutable:不変) - Active/Passive パーティションセット - ブートローダー - dm-verityハッシュツリー - Bottlerocket APIデータストア ▪ Data Device(mutable:可変) - Pullしたコンテナイメージ - アプリケーション用ストレージ - コンテナオーケストレーションに 関連するデータ Data Device (mutable) Bottlerocket on EC2 Active/Passive パーティションセット ブートローダー API データストア コンテナイメージ Application/Admin/Control /Bootstrapコンテナ オーケストレーション 関連データ (containerd/kubelet/ECS agent) … … アプリケーション用ストレージ Root Device (immutable) dm-verityハッシュツリー 事前に計算/保存された ハッシュツリーと比較することで Root Deviceのimmutable性を 担保している
  6. 17 © 2026 Japan Digital Design, Inc. dm-verity (device-mapper verity)

    Root Hash Block 1 (4KB) Block 2 (4KB) Block 3 (4KB) Block 4 (4KB) … Hash 1 Hash 2 Hash 3 Hash 4 Hash (3|4) L0 データブロック(実データ) SHA256 SHA256 SHA256 SHA256 … Hash (1|2) SHA256 SHA256 SHA256 … ブロックデバイスの改竄検知/防止の仕組み Linuxカーネル上に実装されており、 Androidや組み込み系OSでも利用される 全データをツリー構造のSHA256ハッシュ (Hash Tree/Markle Tree)で管理し、 ルート(最上位)のハッシュが正しいこと を以て改竄判定を行う → ルートを見れば済むので計算量が減る ブロックが改竄された場合、 Root Hashの値が不一致になる
  7. 18 © 2026 Japan Digital Design, Inc. dm-verity (device-mapper verity)

    ブロックデバイスの改竄検知/防止の仕組み Linuxカーネル上に実装されており、 Androidや組み込み系OSでも利用される 全データをツリー構造のSHA256ハッシュ (Hash Tree/Markle Tree)で管理し、 ルート(最上位)のハッシュが正しいこと を以て改竄判定を行う → ルートを見れば済むので計算量が減る ブロックが改竄された場合、 Root Hashの値が不一致になる Root Hash Block 1 (4KB) Block 2 (4KB) Block 3 (4KB) Block 4 (4KB) … Hash 1 Hash 2 Hash 3 Hash 4 Hash (3|4) L0 データブロック(実データ) SHA256 SHA256 SHA256 SHA256 … Hash (1|2) SHA256 SHA256 SHA256 … ハッシュが違う! → 改竄された
  8. 19 © 2026 Japan Digital Design, Inc. もしRoot Deviceで改竄が検知されたら… Bottlerocketは即座にRebootする

    ・Fail Closed:異常を検知したら止める ・脅威(不正なコードや攻撃者)の排除 CVE-2019-5736 のようなコンテナ エスケープ脆弱性への打ち手に
  9. 21 © 2026 Japan Digital Design, Inc. Bottlerocketの運用で利用する 特殊コンテナ 下記の2種類のコンテナが用意されている

    ▪ Control Container(コントロール) APIソケットと通信を行うことでOSの設定 を変更することが可能 → Bottlerocketでは、設定変更は原則的 にAPIを通じてしか行えない ※1 SSMエージェントも包含されている ▪ Admin Container(管理) 最強の権限を持ち、シェルやパッケージ マネージャーも使える(AL2イメージ) 高度な調査やトラブルシューティング用 デフォルトではオフ ※1 APIという唯一かつ厳格なインタフェースを強制させることで、 アタックサーフェスの削減やバリデーションによる不確実性の排除を実現する Admin Container (デフォルトではオフ) Control Container SSM Agent SSHサーバー パッケージマネージャー apiclient apiclient Session Manager Application Container (ユーザーが作成したアプリケーション)
  10. 22 © 2026 Japan Digital Design, Inc. Bottlerocketの運用で利用する 特殊コンテナ 下記の2種類のコンテナが用意されている

    ▪ Control Container(コントロール) APIソケットと通信を行うことでOSの設定 を変更することが可能 → Bottlerocketでは、設定変更は原則的 にAPIを通じてしか行えない ※1 SSMエージェントも包含されている ▪ Admin Container(管理) 最強の権限を持ち、シェルやパッケージ マネージャーも使える(AL2イメージ) 高度な調査やトラブルシューティング用 デフォルトではオフ Control ContainerにSSM接続した際のコンソール (日々の運用ではこちらを使う)
  11. 24 © 2026 Japan Digital Design, Inc. Bottlerocketでは 2つのボリュームを利用する それぞれのボリュームに格納される

    主要なデータ群は下記の2系統 ▪ Root Device(immutable:不変) - Active/Passive パーティションセット - ブートローダー - dm-verityハッシュツリー - Bottlerocket APIデータストア ▪ Data Device(mutable:可変) - Pullしたコンテナイメージ - アプリケーション用ストレージ - コンテナオーケストレーションに 関連するデータ Root Device (immutable) Bottlerocket on EC2 Active/Passive パーティションセット ブートローダー dm-verityハッシュツリー API データストア … Data Device (mutable) コンテナイメージ Application/Admin/Control /Bootstrapコンテナ オーケストレーション 関連データ (containerd/kubelet/ECS agent) … アプリケーション用ストレージ こちらの話
  12. 25 © 2026 Japan Digital Design, Inc. SELinux (Security Enhanced

    Linux) アメリカ国家安全保障局 (NSA)が開発 したLinuxカーネルのセキュリティ機能 プロセスやファイルにラベル(コンテキ スト)を付与することでアクセス可否を 判断する 3つの実行モードがあり、Bottlerocket ではenforcingで動く - enfocing: アクセス制限適応 - permissive: アクセス制限未適応 - disabled: SELinuxを無効化 Bottlerocketで利用されるSELinuxラベル container_t 通常ワークロード用コンテナ、制限が最も強い control_t 特権コンテナ 管理用APIソケットへの書き込みが可能 super_t ホストの全ファイル操作とAPI操作が可能な最強 権限(利用にはオプトインが必要)
  13. 26 © 2026 Japan Digital Design, Inc. ここまでのまとめ (※) root権限を保有していたとしても、

    カーネルの整合性を損なうような操作はできない 他にも カーネルロックダウン※ なども 取り入れられており、 多層でOSを守っている
  14. 29 © 2026 Japan Digital Design, Inc. Bottlerocket OSのアップデート Bottlerocket

    on EC2 ブートローダー dm-verityハッシュツリー API データストア … Root Device (immutable) Active/Passive パーティションセット Data Device (mutable) Control Container SSM Agent apiclient カリカリにチューニングされた Bottlerocketとはいえ、OS自体のアップ デートは必要 OSアップデートの際にはControl Contaner内のapiclientを利用して、 Passiveパーティションセットに書き込む その後はインスタンスをrebootして、 Active/Passiveをスワップする TUF:The Update Framework → CNCFのプロジェクト
  15. 30 © 2026 Japan Digital Design, Inc. Bottlerocket OSのアップデート カリカリにチューニングされた

    Bottlerocketとはいえ、OS自体のアップ デートは必要 OSアップデートの際にはControl Contaner内のapiclientを利用して、 Passiveパーティションセットに書き込む その後はインスタンスをrebootして、 Active/Passiveをスワップする TUF:The Update Framework → CNCFのプロジェクト Active/Passive パーティションセット Active Version (v1.58.0) Passive Version (v1.59.0) ダウンロード 利用中 未利用 Active/Passive パーティションセット Passive Version (v1.58.0) Active Version (v1.59.0) reboot Active/Passiveパーティション構成 × API更新により、 - OS起動失敗時の自動ロールバック(手動もOK) - OSバージョンをまたいだ設定情報の移行 が実現可能に
  16. 31 © 2026 Japan Digital Design, Inc. Bottlerocket OSのアップデート Bottlerocektの

    バージョン一覧 現在のOSバージョン アップデート予定の OSバージョン $ apiclient update check カリカリにチューニングされた Bottlerocketとはいえ、OS自体のアップ デートは必要 OSアップデートの際にはControl Contaner内のapiclientを利用して、 Passiveパーティションセットに書き込む その後はインスタンスをrebootして、 Active/Passiveをスワップする TUF:The Update Framework → CNCFのプロジェクト
  17. 32 © 2026 Japan Digital Design, Inc. Bottlerocket OSのアップデート $

    apiclient update apply $ apiclient reboot 新バージョン反映 カリカリにチューニングされた Bottlerocketとはいえ、OS自体のアップ デートは必要 OSアップデートの際にはControl Contaner内のapiclientを利用して、 Passiveパーティションセットに書き込む その後はインスタンスをrebootして、 Active/Passiveをスワップする TUF:The Update Framework → CNCFのプロジェクト
  18. 33 © 2026 Japan Digital Design, Inc. インスタンス毎にアップデート回すのが面倒? Bottlerocket ECS

    Updaterを利用して自動化 https://aws.amazon.com/jp/blogs/news/a-deep-dive-into-bottlerocket-ecs-updater/
  19. 36 © 2026 Japan Digital Design, Inc. 仰るとおりです Fargate良いですよね EC2

    (GPU) ECS Task × 1 ECS Service Bottlerocket ALB 弊社では 下記のような一部のワークロードで ECS on EC2を利用中 ① GPUを利用するECSサービス ② パフォーマンスが求められるECSサービス (= 最新のCPUを使いたい) もともとはECS標準AMIを利用していたが、 脆弱性ケアの負荷を下げるためにBottlerocketに乗り換えた 資料の要約結果 ベクトル化結果 [0.1, 0.4, 0.8, 0.7, 0.2, … , 1.0] "このページはxxxについて説明 しています。hogehoge..." ただし、 下記のようなケースではECS on EC2の 利用検討が必要 ▪ GPUの利用 → この要件が出るとEC2しかない ▪ 常に新しいCPUを利用したい → EC2はCPUガチャがない ▪ Reserved Instanceなどの割引 → EC2利用だと選択肢が多い ▪ ややこしいコンテナを動かす場合 → 詳しくは述べません()
  20. 37 © 2026 Japan Digital Design, Inc. 仰るとおりです Fargate良いですよね ただし、

    下記のようなケースではECS on EC2の 利用検討が必要 ▪ GPUの利用 → この要件が出るとEC2しかない ▪ 常に新しいCPUを利用したい → EC2はCPUガチャがない ▪ Reserved Instanceなどの割引 → EC2利用だと選択肢が多い ▪ ややこしいコンテナを動かす場合 → 詳しくは述べません() apne-1a/1c, X86_64, 1vCPU/2Mem で Fargateタスクを100発起動してlscpuした結果 リリース年は下記サイトを参照 https://www.cpubenchmark.net/ 2020 Q1 2019 Q3 2018 Q3 2018 Q4
  21. 38 © 2026 Japan Digital Design, Inc. ECS Managed Instanceが絶妙

    FargateとEC2のいいとこ取りを できるようなアップデート。 AWSブログによると、 裏側でBottlerocketが動いている※1。 ただし、 14日ごとにパッチ適応が発動する。 (インスタンスドレイン) これは裏で動いているBottlerocketを 最新化することによるものと思われる ※1 https://aws.amazon.com/jp/blogs/aws/announcing-amazon- ecs-managed-instances-for-containerized-applications/
  22. 40 © 2026 Japan Digital Design, Inc. Inspectorでの検出 全てのEC2インスタンスを同じタイミング で起動し、1か月ほど放置してみた。

    脆弱性の検出はInspectorベース AMIは下記の3パターン - AL2023(kernel 6.1) - ECS最適化 AL2023(kernel 6.1) - Bottlerocket v1.59.0 (kernel 6.1) お分かりいただけるでしょうか? 脆弱性の数が全然違いますよね
  23. 41 © 2026 Japan Digital Design, Inc. Inspectorでの検出 とはいえカーネルレベルの脆弱性は どうしても避けられない

    (検知数は少ないけど) https://aws.amazon.com/jp/security/security-bulletins/rss/2026-026-aws/ 全てのEC2インスタンスを同じタイミング で起動し、1か月ほど放置してみた。 脆弱性の検出はInspectorベース AMIは下記の3パターン - AL2023(kernel 6.1) - ECS最適化 AL2023(kernel 6.1) - Bottlerocket v1.59.0 (kernel 6.1)
  24. 43 © 2026 Japan Digital Design, Inc. Bottlerocket導入で脆弱性はめちゃくちゃ削減できる。 ( !=

    脆弱性管理から解放される) Fargateも良いけど、ECS on EC2も良いぞ。