Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
任意Pythonコード実行機能でセキュリティを守るため設計例
Search
skmochi
December 04, 2024
Technology
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
任意Pythonコード実行機能でセキュリティを守るため設計例
skmochi
December 04, 2024
More Decks by skmochi
See All by skmochi
ノーコードAI開発SaaS裏側 〜GCPで完結!KPI分析指向のログ設計から可視化まで〜
skmochi
0
26
Other Decks in Technology
See All in Technology
Persisting Massive Data with Rails ~Designing for 60 billion rows, and fighting the bottlenecks~ Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
0
730
エンタメ企業のM&Aを支えるデータ基盤 ― 統合から店舗のリアルタイム分析まで / Data Engineering Summit 2026
genda
0
190
『SAR衛星データ解析入門』のご紹介とその応用
syuchimu
0
120
NDIでApple Vision Proにリアルタイム映像送信
jyouryuusui
0
130
1つのリクエストを追って理解する - llm-dのP/D分離
akhino
1
160
⾮構造化データを価値に変える AI エージェント基盤とその組織
ivry_presentationmaterials
0
200
Webの常識が通じないHTMLメールのダークモード
teamlab
PRO
0
130
USB PDを使ってスマホを労わりたい
raspython3
0
180
古い指輪から広がった JAVA コミュニティ とのつながり
yamad
0
130
AIにシークレットを見せない、WSL2で安全な開発環境
yazm
0
310
Gemini Intelligence 入門 ― AppFunctions と Gemini Nano
takuroabe
0
290
ウォンテッドリーの最近のプロダクトと技術の紹介
stomk
0
120
Featured
See All Featured
New Earth Scene 8
popppiees
4
2.7k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
330
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Code Reviewing Like a Champion
maltzj
529
40k
How to Talk to Developers About Accessibility
jct
2
580
Git: the NoSQL Database
bkeepers
PRO
433
67k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Believing is Seeing
oripsolob
1
240
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
480
The Curse of the Amulet
leimatthew05
3
16k
We Are The Robots
honzajavorek
0
400
Transcript
© NTT Communications Corporation All Rights Reserved. 任意Pythonコード実行機能での
セキュリティを守るための設計例 2024年12月4日 NTTコミュニケーションズ株式会社 Yuki Sakamoto / Michihiro Naito Cloud Native Security Japan LT祭り
© NTT Communications Corporation All Rights Reserved. 1 自己紹介 -
坂本悠記 / Yuki Sakamoto - NTTコミュニケーションズ株式会社 - イノベーションセンター テクノロジー部門 - Webサービス開発 - 顧客向けデータ分析案件 - 内藤理大 / Michihiro NAITO - NTTコミュニケーションズ株式会社 - イノベーションセンターテクノロジー部門 - プロジェクトリーダー - 開発補佐
© NTT Communications Corporation All Rights Reserved. 2 タイトルの「任意コード実行機能」とは?
Go Playground のようにブラウザから任意コード (untrusted code) を実行できる機能をこう呼ぶことにする 他にも色々なサービスで任意コードが実行できる - Cue Playground - Python Sandbox - TypeScript Playground - Python in Excel - codesandbox - vscode.dev - プログラミング学習系サービス - データ分析系サービス - etc...
© NTT Communications Corporation All Rights Reserved. 3 こういうことを試したくなる
中のプログラムを覗いてみたり... 全消ししてみたり... dos攻撃用の踏み台にしてみたり... 巨大なファイルを作ってみたり...
© NTT Communications Corporation All Rights Reserved. 4 - クラウドプラットフォーム固有の便利サービス/機能
- よさげなOSS - networkpolicy, service meshまわり - セキュリティに関する深い知見 (話せない) このLTで話すこと / 話さないこと - 仮想のWebサービス (後述) を題材に、ユーザに任意のPythonコード実行機能を提供する際に考えられる懸念事 項と主にKubernetesを用いたアーキテクチャ面からの対策例を紹介 - クラウドはGoogle Cloudを想定するが、クラウドプラットフォーム固有の便利サービスなどは使わないで進めます 話すこと 話さないこと
© NTT Communications Corporation All Rights Reserved. 5 お題: データ可視化のWebサービス
1. ブラウザでサービスにアクセス 2. ログイン 3. データをアップロード 4. グラフの種類を選択 5. 描画ボタンを押す 6. グラフが描画される 使い方の流れ
© NTT Communications Corporation All Rights Reserved. 6 お題: データ可視化のWebサービス
© NTT Communications Corporation All Rights Reserved. 7 お題: データ可視化のWebサービス
😎 自分でPythonコードを 書いて実行したい ➡ 難しそう 🤓 デバッグのために 標準出力もみたい 😃 大きなサイズのデータも 扱えるようにしてほしい ➡ ✅ サーバ側で計算処理を実行 🤗 ログイン後に過去の 実行結果もみたい ➡ ✅ DBやObject Storageに保存
© NTT Communications Corporation All Rights Reserved. 8 再掲: こういうことを試したくなる
中のプログラムを覗いてみたり... 全消ししてみたり... dos攻撃用の踏み台にしてみたり... 巨大なファイルを作ってみたり...
© NTT Communications Corporation All Rights Reserved. 9 📌 プログラムを読み取られる
📌 ファイルを書き込まれる 📌 環境変数を読み取られる (Databaseのパスワードなど) 📌 意図しないサービス間通信 (Database, Object Storage, 別microservice) が行われる 📌 踏み台にされインターネットに抜けられる etc… 考えられうるリスク
© NTT Communications Corporation All Rights Reserved. 10 参考: Go
Playgroundはどうしているのか? 出典: https://go.dev/talks/2019/playground-v3/playground-v3.slide gVisorの利用 ネットワーク機能の 無効化 goプログラムの コンパイル実行 バイナリを受け取る BEの詳細図 アーキテクチャ図 各実行単位でコン テナを専有 予めコンテナを 起動 Docker outside of Docker (DooD)
© NTT Communications Corporation All Rights Reserved. 11 ⚠ プログラムを読み取られる
✅ ファイルを書き込まれる ⚠ 環境変数を読み取られる (Databaseのパスワードなど) ⚠ 意図しないサービス間通信 (Database, Object Storage, 別microservice) が行われる ✅ 踏み台にされインターネットに抜けられる etc… Go Playgroundの構成をそのまま採用できない (1/2) ✅ 問題なし ⚠ Go Playgroundでは問題ないがお題のサービスでは問題になり得る Go Playgroundはrepoを 公開しているので問題なし Go Playgroundはおそらくシークレット要 素がないので問題なし Go Playgroundは 永続データがないので問題なし
© NTT Communications Corporation All Rights Reserved. 12 Go Playgroundの構成をそのまま採用できない
(2/2) 出典: https://go.dev/talks/2019/playground-v3/playground-v3.slide ❌ ホストのDockerデーモンを マウントさせたくない BEの詳細図 アーキテクチャ図 ❌ 仮にDinDでも特権が必要 だったりimage cacheが 効かない問題がある 🤔 そもそもGKE+gvisor (GKE Sandbox) では /var/run のマウントができない 🤔 DBやStorageへの データ保存はどうする? ❌ 特権を付与している理由は未確認
© NTT Communications Corporation All Rights Reserved. 13 ベースとするアーキテクチャ案
Private Kubernetes Cluster APIサーバー Pod 計算処理 Job Job管理 Pod Database Object Storage Client LB 計算処理 Job Redis グラフの画像データを保存 csvファイルを取得 ・csvファイルをアップロード ・グラフの画像データを表示 実行結果の保存 計算処理内容のメッセー ジを保存 Cloud Service Network 外部認証認可 サービス User VPC / subnet NAT Jobのなかで任意Pythonコードを実行
© NTT Communications Corporation All Rights Reserved. 14 📌 プログラムを読み取られる
📌 ファイルを書き込まれる 📌 環境変数を読み取られる (Databaseのパスワードなど ) 📌 意図しないサービス間通信 (Database, Object Storage, 別microservice) が行われる 📌 踏み台にされインターネットに抜けられる etc… 考えられうるリスク
© NTT Communications Corporation All Rights Reserved. 15 コードのバリデーションを行う
Pythonではastモジュールを使った抽象構文木解析でコードのバリデーションを行う ✅ 許可したくないライブラリのimport や 組み込み関数の実行をブロック 🤔 あるライブラリのこのメソッドは許可するけどあれは許可しないとかやり出すと大変 - 例: import hoge as fuga を使ったパターンの対応をし出すと実装がカオスに... 🤔 Pythonの解析は一筋縄でいかない (経験則) ので完璧にやり切ることは不可能 だと考えた方がよい - ホスト名やパスワードなどと一致する文字列がコードや標準出力に含まれていた場合は弾くなど割り切った対 策も考えられる Kubernetes Cluster APIサーバー Pod 計算処理 Job Job管理 Pod 計算処理 Job 実行前にPythonコードの バリデーションを行う
© NTT Communications Corporation All Rights Reserved. 16 sidecarでコンテナを分けて必要なデータをPod内のemptyDirで渡すようにする ✅
Jobを利用したリソース専有 & 使い捨て型の実行環境なのでファイル作成/削除されても問題なし ✅ 実行部分のコンテナはシンプルなコードで済むので中身をみられても問題なし ✅ Databaseなどへのアクセスもメインコンテナで行うのでシークレット情報などはもたなくてよい 🤔 クラウドサービスによるファイルサイズ上限あり (ephemeral storageのlimitに依存) コード実行するコンテナをsidecarで分離する 計算処理Job メインコンテナ 計算コンテナ Database Object Storage 実行config グラフ画像 標準出力 基本的にはPythonコードを 実行するだけのシンプルなコンテナ Redis emptyDir secret.json Tips: 認証はPod単位 (KSAとのbindingなど) では なく、メインコンテナへのシークレット 情報ファイルのマウントで行うべき 任意コードではない手法 (棒グラフなど) は コンテナを分離しなくてもよい
© NTT Communications Corporation All Rights Reserved. 17 ✅ プログラムを読み取られる
✅ ファイルを書き込まれる ✅ 環境変数を読み取られる (Databaseのパスワードなど) 📌 意図しないサービス間通信 (Database, Object Storage, 別microservice) が行われる 📌 踏み台にされインターネットに抜けられる etc… 考えられうるリスクに対処していく (2/2)
© NTT Communications Corporation All Rights Reserved. 18 コマンド unshare
--net hoge を用いてネットワークインターフェースのない名前空間で処理を実行させる ✅ 任意コードが実行される名前空間ではネットワーク機能が使えない ✅ 必要なサービスとの通信はメインコンテナが実行する 👍 Dockerfileを書き換えるだけで対応可能 🤔 securityContext.capabilities: NET_ADMIN が必要 (e.g. GKE Autopilotなどでは実行不可) 方法1: 名前空間でネットワーク機能を無効化 計算処理Job メインコンテナ 計算コンテナ emptyDir Database Object Storage 実行config グラフ画像 標準出力 secret.json コマンド例: unshare --net python main.py
© NTT Communications Corporation All Rights Reserved. 19 subnetを分けて計算処理部分ではNATを作らない ✅
任意コードが実行されるsubnet内ではインターネット通信できない ✅ 同じ事業者内のサービスであればアクセスできる機能があるのでDatabaseなどへはアクセスできる 🤔 クラウドサービスの機能に依存 🤔 Dockerfile変更するよりも手間がかかるかも 方法2: NATを作らない APIサーバー Pod Database Object Storage subnet_A NAT 計算処理 Job subnet_B Job管理 Pod 外部認証認可 サービス メイン 計算 インターネットアクセス Private Google Access
© NTT Communications Corporation All Rights Reserved. 20 ✅ プログラムを読み取られる
✅ ファイルを書き込まれる ✅ 環境変数を読み取られる (Databaseのパスワードなど) ✅ 意図しないサービス間通信 (Database, Object Storage, 別microservice) が行われる ✅ 踏み台にされインターネットに抜けられる etc… 考えられうるリスクに対処していく
© NTT Communications Corporation All Rights Reserved. 21 - お題のWebサービスで実行されるuntrustedなPythonコード実行による主なセキュリティリスクをあげた
- それぞれに対してアーキテクチャとしてどう対応していくか、という観点で解決案の一例を紹介した - ここで紹介したものは誰でも採用できるわけではなく、クラウドの場合は各プラットフォームやそのサービスに依存 するので導入前に下調べが必要 まとめ
© NTT Communications Corporation All Rights Reserved. 22 おわり