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
Goで実践するSeccompを使ったファイルアクセス制御の話
Search
sh47
May 28, 2025
Technology
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goで実践するSeccompを使ったファイルアクセス制御の話
Asakusa.go 2025年5月21日(水)
sh47
May 28, 2025
Other Decks in Technology
See All in Technology
今さら理解するウェブフォントver.2026
takanorip
3
910
Getting Started with Google Antigravity
glaforge
0
320
NDIでApple Vision Proにリアルタイム映像送信
jyouryuusui
0
130
夫婦で子育てするための育児標準化
codmoninc
PRO
0
460
Conditional PED-ANOVA: Hyperparameter Importance in Hierarchical & Dynamic Search Spaces
pfn
PRO
0
140
Local CI × GitHub Actions
gogutan
3
230
Classmethod Company Deck
satoshi7
1
730
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
470
Code for Security プロジェクト紹介 2026年10月
yu23ki14
0
110
WasmをRustにする
sansantech
PRO
0
280
Gemini Intelligence 入門 ― AppFunctions と Gemini Nano
takuroabe
0
300
DBについての基礎説明(MySQL編) - コロプラ 2026年度 新卒研修
colopl
0
130
Featured
See All Featured
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
450
Speed Design
sergeychernyshev
33
2.2k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
370
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
220
Game over? The fight for quality and originality in the time of robots
wayneb77
1
310
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
How to train your dragon (web standard)
notwaldorf
96
6.9k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
600
Transcript
Goで実践するSeccompを使った ファイルアクセス制御 話 yona (@sh_yn47) Asakusa.go #5 2025/05/21(水)
自己紹介 • Webアプリケーションエンジニア • 趣味 OSとか低レイヤーな勉強をしています
話すこと • 今回使う技術について ◦ seccomp ◦ ptrace ◦ unixドメインソケット •
Seccompを使ったファイルアクセス制御について実験してみた ◦ 1) Seccomp+ptraceを使った特定 ファイルへ アクセスを制限する ◦ 2) SeccompとUNIXドメインソケットでファイルアクセス 安全性を高めるに
動機: Goでシステムプログラミングに挑戦 • Go システムプログラミング向き ◦ システムコールへ アクセス ◦ UNIXドメインソケットや名前空間
操作といった OS 機能と直接やり取りができる ◦ 並行処理が書きやすい ◦ etc. • C言語と比べても短くシンプルに書ける でSeccompやPtrace 学習をGoでチャ レンジ
Seccomp(secure computing mode) • Linux 機能であり、プロセスが実行できるシステムコールを制御できる ◦ 実行して良いシステムコール リストを与えると、それ以外 システムコールが実行されたときブ
ロックできる • Go言語だったらlibseccomp-golangを使え 簡単にSeccompを活用できる ◦ https://github.com/seccomp/libseccomp-golang • ptraceと組み合わせると、システムコールとそ 引数 組み合わせでブロックする ことが可能 ◦ e.g.) “test.txt”をopenしたときにブロックする
Seccomp 使い方を簡単に説 明
Seccomp無しで 通常 ファイルを開くだけ 処理 (当然成功します)
Seccompに「これら システムコール 実行してOK」というルールを適用する関数 (1) フィルタ作 成 (2) システムコー ルを実行許可 (3)
seccompを適 用
openat 実行禁止にする
全システムコールを意義
ファイルを開けるケース ファイルを開けないケース 許可されたシステム コールからopenatだ け除外
Seccompで システムコール実行を許可/禁止ができる • 先 例 Openで ファイル読み込みを禁止にする • でもファイルが読めない 不便
◦ たとえ 特定 ファイルへ アクセスだけブロックしたい • そこで細かい制御で組み合わせる がptraceというLinuxシステムコール
ptrace • デバッガ等がプロセス 実行を制御するため Linux システムコール ◦ gdbやstraceコマンドも内部で使ってる ◦ Goで
syscallパッケージ経由で使える • ターゲット プロセスにアタッチしてメモリやレジスタ 中身を見れる ◦ 今発表で 監視対象プロセスが開こうとしてるファイルを特定する に使う • システムコール 呼び出し/終了をフックできる ◦ デバッグだったりセキュリティにおける監視に活用できる https://man7.org/linux/man-pages/man2/ptrace.2.html straceでもptraceが使われている 対象プロセス メモリ空間から データ読み出しも Goで シンプル に書ける
応用例 Seccomp+ptraceを使った特定 ファイルへ アク セスを制限する
seccomp+ptraceで特定ファイルへ アクセスをブロック • 親プロセスが子プロセスが特定 ファイルへ アクセスする をブロック ◦ seccompにより子プロセス でファイルへ
アクセス (openat)が発生したときにトラップを発生させて 親プロセス が補足 • seccompでopenatが叩かれた時、親プロセスに通知 • 親プロセスで 子プロセスにptraceでアタッチしてファイル名を調べる 親プロセス 子プ1ロセス (1) exec.Commandで起動 (2) ファイルを開いた を通知 (4) ptraceでファイル名を調べる ファイル (3) 子プロセスが ファイルを開く
親プロセス 子プロセスを起動する Seccompルールに引っかかったときに、子プロセスから通知される ptrace 設定で seccompに検知され たら子プロセス 停止 する
seccomp+ptraceで特定ファイルへ アクセスを検知 親プロセス側 設定 • 子プロセスがSeccompルールに引っかかったらトラップし親プロセスが補足 • ファイル名 取得 親プロセスがptraceで行う
◦ seccomp 何 システムコールが呼 れたか 分かってもファイル名等 詳細な引数 分からな い。 ◦ そ ためptraceで子プロセスにアタッチしてメモリからファイル名を読み出す https://man7.org/linux/man-pages/man2/seccomp.2.html
• 親プロセスがptraceでシステムコール引数からファイル名を読み取る
子プロセスで 以下 ようにSeccompルールが適用される openatが叩かれた 時、子プロセス 停止 して親プロセスが補足 する
seccomp+ptraceで特定ファイルへ アクセスを検知 子プロセス側 設定 • 特定 システムコールが呼 れたとき子プロセスから親プロセスに制御を戻す ◦ 親プロセスに制御が戻った後、
ptraceで子プロセス メモリ空間からファイル名を読み出す https://man7.org/linux/man-pages/man3/seccomp_init.3.html
seccomp無効時 (ファイルを開ける) seccomp有効時 ファイルを開けない Seccompをオン/オフ とで比較する
応用例 SeccompとUNIXドメインソケットでプロセス間でファ イルアクセス 安全性を高めるに
複数 プロセス間で ファイルアクセス制御 • 例) 以下 2つ プロセスを想定 ◦ プロセスAで
ファイルを開く ◦ プロセスBで seccompでopenatを禁止する ◦ プロセスB ファイルを読み出すに プロセス Aからディスクリプタを受け取る ▪ Unixドメインソケットを通してディスクリプタを受け取る • Seccomp+UNIXドメインソケット 応用 ◦ プロセスを分離し安全性について細かい制御ができる で ▪ 不審なファイルアクセスがないか知るに プロセス Aだけ見れ ok ▪ 万が一プロセスAが乗っ取られてもプロセス A システムコールが制限されてる プロセスA プロセスB (1) ファイル名を渡す (3) ディスクリプタを返す ファイル (2) openでディスクリプタを取得
UNIXドメインソケットによるディスクリプタパッシング • ディスクリプタパッシング ◦ ファイルをopenしたときに得られるファイルディスクリプタ (FD)を、プロセスから別プロセスに転送で きる ◦ FDといった制御情報 UNIXドメインソケットを通して転送できる
▪ 送受信で sendmsg/recvmsgを使う • これにより、プロセスBでファイルをopenしてプロセスAが受け取るといったことが可 能に
ユースケース: Seccomp+UNIXドメインソケットでプロセス間で ファイル アクセス処理を分離 2つ プロセス(プロセスA, プロセスB) • Seccompで以下 ようにシステムコールを制御する
◦ プロセスA openを実行できない ◦ プロセスB openを実行できる • プロセスAがファイルをアクセスしたい場合 ◦ プロセスBにファイルを開いて貰ってディスクリプタを受け取る ◦ UNIXドメインソケットによるディスクリプタパッシングを用いる • ファイルを開く プロセスBにしか許可されていない ◦ Seccompで責務を分離する プロセスB ファイルを読みたかったらプロセスAにリクエストすれ 良い
• 実験 ◦ プロセスA openat 実行をseccompで禁止されている ◦ プロセスA ディスクリプタを転送する ◦
プロセスB 受け取ったディスクリプタでファイルを読む
プロセス間で ファイルアクセス制御 利点を考えてみる • プロセスを分離してアタックサーフェスを局所化できないか ◦ 例え プロセスAが乗っ取られたとしても使えるシステムコール Seccompで制限されている •
プロセス 責務を分離することで細かいセキュリティ制御が可能になる で ◦ e.g.) 不審なファイルアクセスがないか知るに プロセス Aだけ見れ okになる プロセスA プロセスB (1) ファイル名を渡す (3) ディスクリプタを返す ファイル (2) openでディスクリプタを取得
まとめ • GoでSeccomp/ptrace/UNIXドメインソケットを使った処理を実践 ◦ 主に使ったpackage libseccomp-golang, syscall • 以下 ように応用できる
◦ 特定 ファイルにアクセスした を seccomp+ptraceで検知してブロック ▪ 侵入検知に応用できそう ◦ プロセス間でUnixドメインソケットを介したやり取りによるファイルアクセス制御 ▪ 細かいアクセス制御してシステム 安全性を高めるため 使い方ができないか • Seccomp+Ptrace+Unixドメインソケット 組み合わせ ◦ 他にも面白い使い方ができないか模索していきたい
参考資料 • Applying Seccomp Filters at Runtime for Go Binaries
◦ https://www.heroku.com/blog/applying-seccomp-filters-on-go-binaries/ • Tracing Processes in Go with Ptrace and Seccomp ◦ https://medium.com/@mindo.robert1/tracing-processes-in-go-with-ptrace-and-seccomp-9904cf a7121e • Goメモ-565 (ファイルディスクリプタパッシング)(File Descriptor Passing, sys/unix, SCM_RIGHTS) ◦ https://devlights.hatenablog.com/entry/2025/04/21/073000