Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
サーバーのセキュリティ対策とコンテナのセキュリティ対策の違い/hibiyatech_diffe...
Search
emi
February 17, 2024
Technology
0
1.6k
サーバーのセキュリティ対策とコンテナのセキュリティ対策の違い/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
DynamoDB でスロットリングが発生したとき/when_throttling_occurs_in_dynamodb_short
emiki
0
430
DynamoDB でスロットリングが発生したとき_大盛りver/when_throttling_occurs_in_dynamodb_long
emiki
1
670
AWS ログ解析のオデッセイ~システムの息遣いを読み解く冒険~/aws-log-analysis-odyssey-deciphering-the-breathing-of-systems
emiki
2
1.4k
何を使って可視化する?AWSでのログ分析/What-do-you-use-to-visualise-it-log-analysis-in-AWS
emiki
2
1.6k
Terraformあれやこれ/terraform-this-and-that
emiki
9
3.5k
AWS を使う上で知っておきたいオンプレミス知識/aws-on-premise-essentials
emiki
1
5.4k
FSx for NetApp ONTAP のエンドポイントについて語りたい/hibiyatech1-i-want-to-talk-about-fsx-for-netapp-ontap-endpoints
emiki
0
1.1k
トレーナー視点を盗む~AWSトレーニングを通して学ぶ他者への伝え方~/Imitating-the-trainers-perspective-learning-how-to-communicate-to-others-through-AWS-training
emiki
0
67
IAM ロールはエクスカリバー~イメージでつかむ IAM ロールの世界~ #devio2023/IAM-Roles-are-Excalibur-Grasping-the-World-of-IAM-Roles-with-Images-devio2023
emiki
0
1.5k
Other Decks in Technology
See All in Technology
複雑性の高いオブジェクト編集に向き合う: プラガブルなReactフォーム設計
righttouch
PRO
0
120
LINEヤフーのフロントエンド組織・体制の紹介【24年12月】
lycorp_recruit_jp
0
530
NilAway による静的解析で「10 億ドル」を節約する #kyotogo / Kyoto Go 56th
ytaka23
3
380
UI State設計とテスト方針
rmakiyama
2
600
Storage Browser for Amazon S3
miu_crescent
1
180
Opcodeを読んでいたら何故かphp-srcを読んでいた話
murashotaro
0
250
PHP ユーザのための OpenTelemetry 入門 / phpcon2024-opentelemetry
shin1x1
1
230
OpenAIの蒸留機能(Model Distillation)を使用して運用中のLLMのコストを削減する取り組み
pharma_x_tech
4
560
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
36
14k
5分でわかるDuckDB
chanyou0311
10
3.2k
ハイテク休憩
sat
PRO
2
150
社外コミュニティで学び社内に活かす共に学ぶプロジェクトの実践/backlogworld2024
nishiuma
0
260
Featured
See All Featured
Six Lessons from altMBA
skipperchong
27
3.5k
Making the Leap to Tech Lead
cromwellryan
133
9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.5k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
Rails Girls Zürich Keynote
gr2m
94
13k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
247
1.3M
Git: the NoSQL Database
bkeepers
PRO
427
64k
Unsuck your backbone
ammeep
669
57k
Code Review Best Practice
trishagee
65
17k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
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