Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
サーバーのセキュリティ対策とコンテナのセキュリティ対策の違い/hibiyatech_diffe...
Search
emi
February 17, 2024
Technology
0
2k
サーバーのセキュリティ対策とコンテナのセキュリティ対策の違い/hibiyatech_differences-between-server-security-and-container-security
2024/02/16 Hibiya.Tech #3「どうする?コンテナセキュリティ」で発表した資料です。
https://classmethod.connpass.com/event/307459/
emi
February 17, 2024
Tweet
Share
More Decks by emi
See All by emi
実体験:エンジニアの妊娠・出産と仕事/real-life-experience-pregnancy-childbirth-and-work-for-engineers
emiki
9
1.8k
AWS 環境で GitLab Self-managed を試してみた/aws-gitlab-self-managed
emiki
0
460
今から間に合う re:Invent 準備グッズと現地の地図、その他ラスベガスを周る際の Tips/reinvent-preparation-guide
emiki
2
1.1k
AWS DMS で SQL Server を移行してみた/aws-dms-sql-server-migration
emiki
0
360
RDS の負荷が高い場合に AWS で取りうる具体策 N 連発/a-series-of-specific-countermeasures-available-on-aws-when-rds-is-under-high-load
emiki
7
5k
Performance Insights 廃止から Database Insights 利用へ/transition-from-performance-insights-to-database-insights
emiki
0
980
S3 Glacier のデータを Athena からクエリしようとしたらどうなるのか/try-to-query-s3-glacier-from-athena
emiki
0
400
robocopy の怖い話/scary-story-about-robocopy
emiki
0
570
QuickSight SPICE の効果的な運用戦略~S3 + Athena 構成での実践ノウハウ~/quicksight-spice-s3-athena-best-practices
emiki
1
760
Other Decks in Technology
See All in Technology
Karate+Database RiderによるAPI自動テスト導入工数をCline+GitLab MCPを使って2割削減を目指す! / 20251206 Kazuki Takahashi
shift_evolve
PRO
1
460
意外とあった SQL Server 関連アップデート + Database Savings Plans
stknohg
PRO
0
290
今からでも間に合う!速習Devin入門とその活用方法
ismk
1
420
因果AIへの招待
sshimizu2006
0
910
大企業でもできる!ボトムアップで拡大させるプラットフォームの作り方
findy_eventslides
0
460
Uncertainty in the LLM era - Science, more than scale
gaelvaroquaux
0
780
GitHub Copilotを使いこなす 実例に学ぶAIコーディング活用術
74th
3
1.1k
法人支出管理領域におけるソフトウェアアーキテクチャに基づいたテスト戦略の実践
ogugu9
1
210
Reinforcement Fine-tuning 基礎〜実践まで
ch6noota
0
140
AI 駆動開発勉強会 フロントエンド支部 #1 w/あずもば
1ftseabass
PRO
0
110
日本Rubyの会の構造と実行とあと何か / hokurikurk01
takahashim
4
900
【AWS re:Invent 2025速報】AIビルダー向けアップデートをまとめて解説!
minorun365
4
460
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Speed Design
sergeychernyshev
33
1.4k
Code Reviewing Like a Champion
maltzj
527
40k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Docker and Python
trallard
47
3.7k
Typedesign – Prime Four
hannesfritz
42
2.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
What's in a price? How to price your products and services
michaelherold
246
12k
Building Applications with DynamoDB
mza
96
6.8k
For a Future-Friendly Web
brad_frost
180
10k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
Transcript
サーバーのセキュリティ対策と コンテナのセキュリティ対策の違い 2/16(金) Hibiya.Tech #3 「どうする?コンテナセキュリティ」
2 目次 • はじめに • 仮想サーバーとコンテナの違い • 仮想サーバーの分離とコンテナの分離 • コンテナの分離の強化
• 「イメージスキャンが大事」とは • 振り返り
3 目次 • はじめに • 仮想サーバーとコンテナの違い • 仮想サーバーの分離とコンテナの分離 • コンテナの分離の強化
• 「イメージスキャンが大事」とは • 振り返り
はじめに
5 はじめに • 私はコンテナ初心者です。経験値が低いです。 • 間違っている箇所や「それはどうかな」と思うところがあれば、 マサカリ 具体的に優しく教えてください。 強 い
人 わ た し どうやってコンテナ 作るの? docker run コンテナ名!
6 目次 • はじめに • 仮想サーバーとコンテナの違い • 仮想サーバーの分離とコンテナの分離 • コンテナの分離の強化
• 「イメージスキャンが大事」とは • 振り返り
仮想サーバーとコンテナの違い
8 仮想サーバーとコンテナの違い ハードウェア ホスト OS コンテナ管理ソフトウェア(Docker など) ミドルウェア/ライブラリ アプリケーション ミドルウェア/ライブラリ
アプリケーション コンテナ ハードウェア ホスト OS ハイパーバイザー ゲスト OS ミドルウェア/ライブラリ アプリケーション ゲスト OS ミドルウェア/ライブラリ アプリケーション 仮想サーバー 仮想サーバー 仮想サーバー コンテナ コンテナ
9 仮想サーバーとコンテナの違い namespace 特定のプロセスを分離 cgroup CPU、メモリなど 物理的リソースの 制限・割り当て Linux コンテナは、Linux
カーネルの機能を利用して プロセスの実行空間を分離したもの ハードウェア ホスト OS コンテナ管理ソフトウェア(Docker など) ミドルウェア/ライブラリ アプリケーション ミドルウェア/ライブラリ アプリケーション コンテナ コンテナ
10 仮想サーバーとコンテナの違い Linux OS namespace 特定のプロセスを分離 cgroup CPU、メモリなど 物理的リソースの 制限・割り当て
Linux コンテナは、Linux カーネルの機能を利用して プロセスの実行空間を分離したもの CPU メモリ ディスクI/O プロセス1 プロセス2 : プロセス1 プロセス2 : cgroup リソースを分離 namespace プロセスを分離 コンテナ (実態はプロセス)
11 仮想サーバーとコンテナの違い コンテナの一番の特徴 ↓ カーネルを共有している
12 仮想サーバーとコンテナの違い • Ubuntu ベースのコンテナでシェルを起動 • 1000 秒 sleep •
Ctr + Z でプロセスを一時停止 • bg %1 でバックグラウンド処理にする • プロセスの表示 ※この sleep プロセスはコンテナ内のプロセス
13 仮想サーバーとコンテナの違い コンテナ内のプロセス 別のセッションで ホスト OS のプロセスを表示 • プロセス ID
はコンテナ内とホスト OS で異なっているが、 どちらも同じプロセスを表す • コンテナ内のプロセスがホスト OS から見える
14 仮想サーバーとコンテナの違い ホスト OS にアクセスした攻撃者は そのホスト OS で実行されている すべてのコンテナを参照できる
15 目次 • はじめに • 仮想サーバーとコンテナの違い • 仮想サーバーの分離とコンテナの分離 • コンテナの分離の強化
• 「イメージスキャンが大事」とは • 振り返り
仮想サーバーの分離とコンテナの分離
17 仮想サーバーの分離とコンテナの分離 • セキュリティ境界≒分離 • セキュリティ境界 • システム間、リソース間を移動するのに 異なるパーミッションが必要になる •
攻撃者とターゲットの間にセキュリティ境界があればあるほど 侵入が難しくなる
18 仮想サーバーの分離とコンテナの分離 ハードウェア ホスト OS コンテナ管理ソフトウェア(Docker など) ミドルウェア/ライブラリ アプリケーション ミドルウェア/ライブラリ
アプリケーション ハードウェア ホスト OS ハイパーバイザー ゲスト OS ミドルウェア/ライブラリ アプリケーション ゲスト OS ミドルウェア/ライブラリ アプリケーション 仮想サーバー 仮想サーバー コンテナ コンテナ Docker は内部的にカーネルの機能である namespace や cgroup を活用して コンテナ化されたアプリケーションの プロセスの実行空間を隔離している コンテナ 仮想サーバー
19 仮想サーバーの分離とコンテナの分離 仮想サーバー 仮想サーバー コンテナ コンテナ コンテナ 仮想サーバー カーネル ハイパーバイザー
ミドルウェア/ライブラリ アプリケーション ミドルウェア/ライブラリ アプリケーション ゲスト OS ミドルウェア/ライブラリ アプリケーション ゲスト OS ミドルウェア/ライブラリ アプリケーション が環境を分離 が環境を分離
20 仮想サーバーの分離とコンテナの分離 ハイパーバイザーはカーネルより 大きな分離性?
21 仮想サーバーの分離とコンテナの分離 カーネルについて • プロセスを分離するのはカーネルの役割 • カーネルにバグがあるとそこから攻撃される恐れ • カーネルは長い期間修正され続け、極めて大規模かつ複雑 •
Linux カーネルのコード数は 2,000万行以上 • カーネルではユーザー空間のプロセスはある程度お互いに見える • IPC(Inter Process Communication、プロセス間通信)などで異なるプロセ ス間でメモリ共有もできる • 予期しない・意図しない状況でアクセスを許す欠陥の可能性があるため、分離 が弱い
22 仮想サーバーの分離とコンテナの分離 Linux カーネルのコード数 https://www.reddit.com/r/linux/comments/9uxwli/lines_of_code_in_the_linux_kernel/
23 仮想サーバーの分離とコンテナの分離 ハイパーバイザーについて • ある仮想サーバーのプロセスは他の仮想サーバーから見ることはできない • 仮想サーバー同士でメモリを共有するような仕組みはない • ハイパーバイザーの仕事はカーネルと比較し単純 •
Xen ハイパーバイザーのコードは 5万行程度
24 仮想サーバーの分離とコンテナの分離 Xen 4.12 shrinks code, beefs up security, rethinks
x86 support https://www.theregister.com/2019/04/04/xen_412_release/ : : : :
25 仮想サーバーの分離とコンテナの分離 • コードが複雑 • バグの検出が難しい • 理解の難易度が高い • 保守の困難さ
• 隠れた依存関係が悪用される • etc… • コードが単純 • バグの特定が容易 • 理解しやすい • 保守が簡単 • 攻撃対象が小さくなる • etc…
26 仮想サーバーの分離とコンテナの分離 • コードが複雑 • バグの検出が難しい • 理解の難易度が高い • 保守の困難さ
• 隠れた依存関係が悪用される • etc… • コードが単純 • バグの特定が容易 • 理解しやすい • 保守が簡単 • 攻撃対象が小さくなる • etc… カーネル ハイパーバイザー
27 目次 • はじめに • 仮想サーバーとコンテナの違い • 仮想サーバーの分離とコンテナの分離 • コンテナの分離の強化
• 「イメージスキャンが大事」とは • 振り返り
コンテナの分離の強化
29 コンテナの分離の強化 コンテナ ワークロード 1 コンテナ ワークロード 2 互いに干渉しあわないようにするには?
30 仮想サーバーの分離とコンテナの分離 コンテナのパーミッションを制限する機能 • seccomp(Secure Computing Mode) • システムコールを制限することでセキュリテイ強化 •
AppArmor(Application Armor) • ファイルへのアクセス許可を制限することでセキュリティ強化 • プログラムごとにセキュリティプロファイルを作成する
31 仮想サーバーの分離とコンテナの分離 コンテナの Sandbox 化機能 • gVisor • Googleが開発 •
独自の「ゲストカーネル」を使用して コンテナをサンドボックス化する • Sentry という独自コンポーネントで システムコールを受け取る • ファイルアクセスに関する システムコールをおこなう場合は Goferというコンポーネントが仲介する Linux OS ホストカーネル アプリケーション Sentry Gofer システムコール あたかもカーネルのよう コンテナ
32 仮想サーバーの分離とコンテナの分離 コンテナの Sandbox 化機能 • Kata container • コンテナを別の仮想サーバーで
起動する • アプリケーションコードが実行される 別のターゲットホストとの間に プロキシを作成 • 仮想サーバーが起動するまで 時間がかかる ハイパーバイザー 仮想サーバー カーネル エージェント コンテナ Proxy
33 目次 • はじめに • 仮想サーバーとコンテナの違い • 仮想サーバーの分離とコンテナの分離 • コンテナの分離の強化
• 「イメージスキャンが大事」とは • 振り返り
「イメージスキャンが大事」とは
35 「イメージスキャンが大事」とは コンテナのセキュリティと言えば イメージスキャン!
36 「イメージスキャンが大事」とは Dockerfile Docker Image アプリの 設定とか書く build このイメージをもとに コンテナができる
37 「イメージスキャンが大事」とは Docker Image アプリケーションを動かすために 複数のパッケージを梱包している ベースイメージ ランタイム環境 依存ライブラリ 設定ファイル
38 「イメージスキャンが大事」とは • コンテナは • 軽量で • いつでも • どこでも
• 素早く • 同じものが作れる Docker Image コンテナ コンテナ コンテナ コンテナ コンテナ
39 「イメージスキャンが大事」とは • コンテナを起動してから追加でパッケージをインストールしたり コンテナごとにアップデートすると… コンテナ コンテナ コンテナ コンテナ コンテナ
パッケージ 追加しよう これ何で 入ってるんだっけ 削除しちゃえ 設定ファイル 変えちゃおう ずっとアップデート しないで 使い続ける 設定ファイル 変えちゃおう
40 「イメージスキャンが大事」とは • コンテナを起動してから追加でパッケージをインストールしたり コンテナごとにアップデートすると… コンテナ コンテナ コンテナ コンテナ コンテナ
パッケージ 追加しよう これ何で 入ってるんだっけ 削除しちゃえ 設定ファイル 変えちゃおう ずっとアップデート しないで 使い続ける 設定ファイル 変えちゃおう 全部のコンテナがちゃんとアップデートされているか ウイルスなどに感染していないか 脆弱性が放置されていないか調べるのが大変!!
41 「イメージスキャンが大事」とは • コンテナはイミュータブル(不変)である状態が推奨 • 追加やアップデートが必要な場合はビルドし直す コンテナ コンテナ コンテナ コンテナ
コンテナ パッケージ 追加しよう これ何で 入ってるんだっけ 削除しちゃえ 設定ファイル 変えちゃおう ずっとアップデート しないで 使い続ける 設定ファイル 変えちゃおう
42 「イメージスキャンが大事」とは Docker Image コンテナ コンテナ コンテナ コンテナ コンテナ もとになるイメージを
スキャンして 安全な状態に保っておけば 全部調査しなくても セキュアな状態を担保できる! (バージョンも統一できる)
43 「イメージスキャンが大事」とは • コンテナイメージのスキャンツールは OSS から商用製品まで様々 • Trivy • Clair
• Anchore • JFrog • Palo Alto • etc… Docker Image
44 「イメージスキャンが大事」とは 仮想サーバーの場合も?
45 「イメージスキャンが大事」とは • 例えば EC2 だと、EC2 Image Builder で ゴールデンイメージを管理することがある
• 同じ考え方でイメージスキャン可能 • スキャンのためのツールもいくつか存在 • [アップデート] EC2 Image builderにてイメージパイプライン実行時に脆弱性スキャンが可能にな りました。 | DevelopersIO • https://dev.classmethod.jp/articles/update-ec2-image-builder-inspector/ • TrivyでAMIやEBSスナップショットをセキュリティスキャンできるようになりました #reinvent | DevelopersIO • https://dev.classmethod.jp/articles/trivy-now-scans-amazon-machine-images-amis/ AMI
46 目次 • はじめに • 仮想サーバーとコンテナの違い • 仮想サーバーの分離とコンテナの分離 • コンテナの分離の強化
• 「イメージスキャンが大事」とは • 振り返り
振り返り
48 振り返り • 仮想サーバーと比較したコンテナの一番の特徴は「カーネルを共有 している」ということ • ホスト OS からすべてのコンテナのプロセスを参照できる •
カーネルにバグがあるとそこから攻撃される恐れ • 予期しない・意図しない状況でアクセスを許す欠陥の可能性がある • コンテナの分離を強化するための機能や技術がある • コンテナはイミュータブル、かつイメージスキャンを定期的に行う ことで効率的にセキュリティを担保できる • 仮想サーバーもイメージスキャンできる
49 参考 • ランタイムセキュリティ - Amazon Elastic Container Service •
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/bestpracticesguide/security-runtime.html • AWS Black Belt Online Seminar • コンテナセキュリティ入⾨ Part 1 • https://pages.awscloud.com/rs/112-TZM-766/images/202110_AWS_Black_Belt_AWS_CON231_intro_container_security_part1.pdf • コンテナセキュリティ入⾨ Part 2 • https://pages.awscloud.com/rs/112-TZM-766/images/202110_AWS_Black_Belt_AWS_CON232_intro_container_security_part2.pdf • コンテナセキュリティ入⾨ Part 3 • https://pages.awscloud.com/rs/112-TZM-766/images/202110_AWS_Black_Belt_AWS_CON233_intro_container_security_part3.pdf • Docker一強の終焉にあたり、押さえるべきContainer事情 • https://zenn.dev/ttnt_1013/articles/f36e251a0cd24e • What is gVisor? - gVisor • https://gvisor.dev/docs/ • Kata Containers - Open Source Container Runtime Software | Kata Containers • https://katacontainers.io/ • コンテナセキュリティ コンテナ化されたアプリケーションを保護する要素技術 • https://amzn.asia/d/aL0lGIN
50 ありがとうございました! ありがとうございました!
51