SJ blog
Security-JAWS #41(10周年記念 Day1) #10

Bottlerocket on ECS Dive Deep — コンテナ特化OSの多層防御とゼロシェル設計

シェルなし・パッケージマネージャーなし・Immutableファイルシステム。dm-verity+SELinux+カーネルロックダウンの多層防御と安全なOS更新の実装

🎤 金融グループ傘下テック企業 ソフトウェアエンジニア / AWS Community Builder (Serverless, 2023年〜)

キーテイクアウェイ

Bottlerocketはシェル・インタプリタ・パッケージマネージャーを全排除し、侵入されても攻撃者が何もできない環境を実現。Inspector検査でAmazon Linux比の脆弱性数はHigh1件のみ

登壇者の背景

  • 金融グループ傘下テック企業のソフトウェアエンジニア
  • アプリケーションの快適な動作に関心、インフラ・セキュリティにも従事
  • AWS Community Builder(Serverless)2023年〜

Bottlerocketとは

コンテナをホストするために調整されたLinux ベースのコンテナ特化型OS

時期マイルストーン
2020年8月初回GA(EKS on EC2用)
2021年夏ECS用AMI一般提供
現在5〜6年の実績、最新版1.60

セキュリティの4層防御

層1: アタックサーフェスの徹底削減

排除されたもの効果
シェル(bash等)侵入者がコマンド実行不可
インタプリタ(Python3等)攻撃スクリプトが動作不可
パッケージマネージャー(apt, yum)攻撃ツールのインストール不可

→ EC2に侵入されても攻撃者は追加のコード実行ができない

層2: dm-verity(ファイルシステム整合性)

ディスク構造:

[ルートデバイス] Immutable — OS起動用(書き込み不可)
[データデバイス] Mutable — コンテナイメージ、一時ストレージ

dm-verityの仕組み:

4KBブロック → 個別Hash → 上位Hash → ルートHash

ブロック単位でハッシュ化し、ルートハッシュで効率的に改ざん検知。

改ざん検知時: 即座にリブート(フェイルクローズ)→ 脅威駆逐の高速化

層3: SELinux(Mutable領域の保護)

NSA開発のセキュリティモジュール。**強制適用(Enforcing)**で動作。

ラベル対象権限
container_t通常コンテナ最厳格。カーネルコア不可
control_tコントロールコンテナAPIソケット書込み、OS更新可
super_tアドミンコンテナ全操作可能

通常コンテナが侵害されてもホストOSの核心にはアクセス不可。

層4: カーネルロックダウン

root権限でもカーネル内部への変更を防止。変更検出 → リブート。

2つの管理コンテナ

コントロールコンテナ

  • OS更新の唯一の入口(APIベース管理)
  • SSMエージェント搭載(Session Manager対応)
  • API経由で検証後に適用

アドミンコンテナ

  • Amazon Linux 2イメージ梱包
  • 緊急トラブルシューティング用
  • デフォルトはオフ(明示的起動が必要)

OSバージョンアップ: アクティブ/パッシブパーティション

EBSボリューム:
  [アクティブ] ← 現在のOS
  [パッシブ]   ← 新バージョンをここにDL → 切り替え → 起動

メリット:

  • ロールバック = パーティション切り替えのみ(高速)
  • 破壊的変更でもOS起動失敗なし
  • API経由で全管理 → 予期しない変更なし

大規模自動化: Bottlerocket ECS Updater(公式)でドレイン→更新→再投入を自動実行

ECSでの採用判断基準

Fargateが使えない = Bottlerocket検討対象

ケース理由
GPU利用Fargate非対応
リザーブドインスタンスFargate非対応
特定CPU世代指定Fargate非対応

ECS Managed Instances(約1年半前リリース)

  • Fargate風のAWS管理EC2
  • Bottlerocketで動作
  • 14日ごとに自動パッチ適用
  • インスタンスドレイン → 再起動を自動実行

脆弱性比較(Inspector / 1ヶ月放置後)

OSCriticalHigh
Amazon Linux 20230多数
ECS最適化AMI0多数
Bottlerocket 1.6001件のみ

Bottlerocketの「High」はKernel 6.1の特権昇格脆弱性1件のみ。パッケージ起因の脆弱性はゼロ(パッケージ自体が存在しないため)。

初心者向け補足

コンテナ特化OSとは

通常のLinuxは多用途対応で大量のツールがプリインストールされている。コンテナ特化OSは「コンテナを動かす」ことだけに最適化し、余計なものを全排除してセキュリティを高める。

なぜ「シェルがない」が強力か

攻撃者の侵入後の典型行動:

  1. シェル取得 → ここで詰む
  2. 偵察コマンド実行
  3. 追加ツールDL
  4. 権限昇格

Bottlerocketではステップ1の時点で何もできない。

Immutableインフラとは

サーバーを後から変更するのではなく、新バージョンを用意して丸ごと入替える考え方。アクティブ/パッシブパーティションはこの実装例。