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.7k
サーバーのセキュリティ対策とコンテナのセキュリティ対策の違い/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
データベースの負荷を紐解く/untangle-the-database-load
emiki
0
6
2025/1/29 BigData-JAWS 勉強会 #28 (re:Invent 2024 re:Cap)/new-feature-preview-q-in-quicksight-scenarios-tried-and-tested
emiki
0
380
第27回クラウド女子会 ~re:Invent 振り返りLT会~ 私の周辺で反響のあった re:Invent 2024 アップデートつれづれ/reinvent-2024-update-reverberated-around-me
emiki
1
650
DynamoDB でスロットリングが発生したとき/when_throttling_occurs_in_dynamodb_short
emiki
0
720
DynamoDB でスロットリングが発生したとき_大盛りver/when_throttling_occurs_in_dynamodb_long
emiki
1
1k
AWS ログ解析のオデッセイ~システムの息遣いを読み解く冒険~/aws-log-analysis-odyssey-deciphering-the-breathing-of-systems
emiki
2
1.5k
何を使って可視化する?AWSでのログ分析/What-do-you-use-to-visualise-it-log-analysis-in-AWS
emiki
2
1.9k
Terraformあれやこれ/terraform-this-and-that
emiki
10
3.9k
AWS を使う上で知っておきたいオンプレミス知識/aws-on-premise-essentials
emiki
1
5.5k
Other Decks in Technology
See All in Technology
ソフトウェアエンジニアと仕事するときに知っておいたほうが良いこと / Key points for working with software engineers
pinkumohikan
1
140
ウォンテッドリーのデータパイプラインを支える ETL のための analytics, rds-exporter / analytics, rds-exporter for ETL to support Wantedly's data pipeline
unblee
0
110
Oracle Database Technology Night #87-1 : Exadata Database Service on Exascale Infrastructure(ExaDB-XS)サービス詳細
oracle4engineer
PRO
1
100
データエンジニアリング領域におけるDuckDBのユースケース
chanyou0311
6
1.9k
Perlの生きのこり - エンジニアがこの先生きのこるためのカンファレンス2025
kfly8
1
240
Amazon Aurora のバージョンアップ手法について
smt7174
1
110
次世代KYC活動報告 / 20250219-BizDay17-KYC-nextgen
oidfj
0
460
LINE NEWSにおけるバックエンド開発
lycorptech_jp
PRO
0
120
スキルだけでは満たせない、 “組織全体に”なじむオンボーディング/Onboarding that fits “throughout the organization” and cannot be satisfied by skills alone
bitkey
0
130
遷移の高速化 ヤフートップの試行錯誤
narirou
5
850
Helm , Kustomize に代わる !? 次世代 k8s パッケージマネージャー Glasskube 入門 / glasskube-entry
parupappa2929
0
290
内製化を加速させるlaC活用術
nrinetcom
PRO
2
110
Featured
See All Featured
The Invisible Side of Design
smashingmag
299
50k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
The Language of Interfaces
destraynor
156
24k
Become a Pro
speakerdeck
PRO
26
5.2k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
Java REST API Framework Comparison - PWX 2021
mraible
29
8.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
114
50k
4 Signs Your Business is Dying
shpigford
182
22k
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