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
Linux Mode 2 Seccomp Tutorial
Search
bachi/yuzuhara
December 12, 2013
Technology
1
7k
Linux Mode 2 Seccomp Tutorial
The presentation introduces Linux mode 2 secccomp.
bachi/yuzuhara
December 12, 2013
Tweet
Share
More Decks by bachi/yuzuhara
See All by bachi/yuzuhara
セキュリティ・キャンプ2019 Z2. ELFマルウェア検知エンジンの試作 成果報告
yuzuhara
1
870
wrapup_z_2018.pdf
yuzuhara
0
390
セキュリティ・キャンプ2017 集中Zトラック成果報告
yuzuhara
0
1.4k
How to Survey for Research (system/w Security Fields)
yuzuhara
0
370
capsicum(論文輪講)
yuzuhara
0
410
Other Decks in Technology
See All in Technology
CDK Vibe Coding Fes
tomoki10
1
630
「Chatwork」のEKS環境を支えるhelmfileを使用したマニフェスト管理術
hanayo04
1
400
伴走から自律へ: 形式知へと導くSREイネーブリングによる プロダクトチームの信頼性オーナーシップ向上 / SRE NEXT 2025
visional_engineering_and_design
3
460
組織内、組織間の資産保護に必要なアイデンティティ基盤と関連技術の最新動向
fujie
0
270
ClaudeCode_vs_GeminiCLI_Terraformで比較してみた
tkikuchi
1
1k
Delegating the chores of authenticating users to Keycloak
ahus1
0
190
毎晩の 負荷試験自動実行による効果
recruitengineers
PRO
5
180
ゼロから始めるSREの事業貢献 - 生成AI時代のSRE成長戦略と実践 / Starting SRE from Day One
shinyorke
PRO
0
110
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
820
cdk initで生成されるあのファイル達は何なのか/cdk-init-generated-files
tomoki10
1
670
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
18k
IPA&AWSダブル全冠が明かす、人生を変えた勉強法のすべて
iwamot
PRO
2
230
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
How to Think Like a Performance Engineer
csswizardry
25
1.7k
How GitHub (no longer) Works
holman
314
140k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Bash Introduction
62gerente
613
210k
The Cult of Friendly URLs
andyhume
79
6.5k
Building Adaptive Systems
keathley
43
2.7k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
A better future with KSS
kneath
238
17k
Adopting Sorbet at Scale
ufuk
77
9.5k
Transcript
H25.08.11 ു ༸ี Linux Seccomp Tutorial ηΩϡϦςΟΩϟϯϓ2013 γεςϜιϑτΣΞθϛิॿࢿྉ 1 138݄12݄༵
Seccompͱ • ਖ਼ࣜʹSecure computing mode ͱ͍͏ɺϓϩηεͷα ϯυϘοΫεԽΛࢧԉ͢ΔΧʔωϧͷΈ • ϓϩηε͕ࣗൃతʹγεςϜίʔϧͷൃߦݖݶΛ์غ ͢Δ
• Ͳ͏͍͏ͱ͖ʹ͏ͷ͔ʁ • ͜ͷϓϩηε͜Ε͔Βո͍͠σʔλΛѻ͍·͢Αɺͱ͍ ͏ͱ͖ʹઃఆ͢Δ • ͦͷޙɺϓϩηε͕ൃߦͰ͖ΔγεςϜίʔϧ͕ஶ੍͘͠ ݶ͞ΕΔͨΊɺϓϩηε͕ͬऔΒΕͯ΄ͱΜͲԿͰ ͖ͳ͘ͳΔ 2 138݄12݄༵
Mode 1 Seccomp • Linux kernel 2.6.12͔ΒϚʔδ͞ΕͨɺγεςϜίʔϧͷ ϑΟϧλ • ϓϩηε͕prctl_set_seccomp()ΛݺͿͱɺ͔ͦ͜ΒҎԼͷγ
εςϜίʔϧ͔͠ൃߦͰ͖ͳ͘ͳΔ • read,() write(), exit(), sigreturn() • fork()ͱ͔execve()͕͑ͳ͍→߈ܸ͞Εͨͱ͖ɺ΄ͱΜͲԿ ग़དྷͳ͍ʂ process secure computing mode fork() read() 3 138݄12݄༵
Mode 2 Seccomp • Linux Kernel 3.5͔ΒϚʔδ͞ΕͨɺMode 2 seccompΛஔ ͖͑ΔΈ
• Mode 1ͱҧ͍ɺҙͷγεςϜίʔϧΛڐՄ͢Δ͜ͱ ͕Ͱ͖Δ • Berkley Packet FilterΛϕʔεʹɺߴʹγεςϜίʔϧ ΛϑΟϧλϦϯά͢Δ͜ͱ͕ग़དྷΔ • ͜ͷͨΊɺseccomp-bpfͱݺΕΔ͜ͱ͕ଟ͍ • ͪͳΈʹFedoraͰsyscall filterͱݺͿ • seccomp 2ͱ͔seccomp mode 2ͱ͔දه༳Ε͕ଟ͍ ( ꒪⌓꒪) 4 138݄12݄༵
Berkley Packet Filter(bpf)Λϕʔεʹɾɾɾ • bpfͷྺ࢙Έলུ • ಛ • ύέοτΛޮΑ͘ϑΟϧλϦϯά͢ΔͨΊɺϑΟϧλϦ ϯάϧʔϧʹಛԽͨ͠ॲཧܥ͕ಈ͍ͯΔʢVMͱ͍͍͍ͬͯ
Ϩϕϧʣ • ڪΔ͖ɺJITΛαϙʔτ͍ͯ͠ΔʢΧʔωϧͰʂʣ • ͜ͷͨΊɺ͔ͳΓෳࡶ mode 2 seccomp͜ͷbpfΛͬͯγεςϜί ʔϧΛϑΟϧλϦϯά͍ͯ͠ΔͨΊɺbpfͷ ͕ࣝແ͍ͱ͑ͳ͍ 5 138݄12݄༵
Mode 2 seccompͷԠ༻ྫ • Google Chromium • Ubuntu 12.04͔Βར༻ՄೳʢKernel3.2͕ͩɺbackport͞Ε ͍ͯΔʣ
• vsftpd3.0.0͔ΒMode 2 seccompΛ͍ͬͯΔΒ͍͠ ※ͲͪΒϓϩηεΛαϯυϘοΫεԽ͢ΔͨΊɺ ݩʑׂϢʔβʔʹΑͬͯϓϩηεׂ͞Ε͍ͯΔ 6 138݄12݄༵
ϓϩηεׂ ʴ mode 2 seccomp = ࠷ڧʂ 7 138݄12݄༵
Using simple seccomp filters • ͔͠͠ɺݱঢ়͔ͳΓ͍͜ͳ͢ͷ͕͍͠ • bpfΛڧҾʹୟ͍͍ͯΔͨΊ • ґଘ͕ؔෳࡶɺݩʑbpf͜Μͳ༻్ఆͯ͠ͳ͍
• ԼهURLΛࢀরɻʢશવsimple͡Όͳ͍ɾɾʣ http://outflux.net/teach-seccomp/ 8 138݄12݄༵
libseccomp Tutorial 9 138݄12݄༵
αϯυϘοΫεԽͷ४උ • ո͍͠σʔλεΫϦϓτΛ”࣮ߦ”ͨ͠Γ”ղऍ”͢Δ ෦͕Ұ൪੬ऑ • σʔλΛόΠτྻͱͯ͠ಡΈऔΔ͚ͩͳΒͦΜͳʹةݥ͡ Όͳ͍ • ͜ͷ෦Λ্ख͘αϯυϘοΫεԽ͢ΔΑ͏ʹϓϩάϥϜ Λઃܭ
10 138݄12݄༵
Main mission: Securing mruby • mrubyΛηΩϡΞʹ࣮ߦͰ͖ΔϑϨʔϜϫʔΫΛ࡞ͬͯ ΈΑ͏ • ͜ͷϑϨʔϜϫʔΫΛͬͯɺ”۠ըԽ”ͨ͠΄͏͕ྑ͞ ͦ͏ͳΦϦδφϧΞϓϦέʔγϣϯΛઃܭɺ࣮͠Α͏
Master process mruby process IPC Sandboxing by Mode 2 seccomp mruby code(string) result(char[]) 11 138݄12݄༵
ϓϩηεׂ • σʔλͷΓऔΓpipeΛ͏ • mruby࣮ߦ෦Λfork()͢Δ • ͜ΕͰͻͱ·ͣɺmruby͕ͯ͠େৎ✌('ω'✌ )ࡾ ✌('ω')✌ࡾ( ✌'ω')✌
• ࢠϓϩηε͕ͨ͠Γམͪͯɺੜ͖Δ 12 138݄12݄༵
αϯυϘοΫεԽ • fork() ͨ͠ޙʹɺࣗࣗΛαϯυϘοΫεԽ͢Δ • seccomp_init(SCMP_ACT_KILL);ͰॳظԽ • seccomp_rule_add();ͰڐՄ͢ΔγεςϜίʔϧΛࢦఆ͍ͯ͠ ͘ •
seccomp_load();Ͱ४උྃ • seccomp_release();ͰෆཁͳݖݶΛશ෦ख์͢→αϯυϘο ΫεԽʂ 13 138݄12݄༵
sample • seccamp2013_sandbox/samples/libseccomp_base.c • γεςϜίʔϧ͕ݺͳ͘ͳΔྫ • seccamp2013_sandbox/ samples/ libseccomp_sample.c •
͍͔ͭ͘ͷγεςϜίʔϧΛڐՄͨ͠ྫ • read, writefile descriptorΛࢦఆͯ͠ڐՄ͢Δ ͜ͱՄೳ 14 138݄12݄༵
͓ΘΓ • αϯυϘοΫεপʹΑ͏ͦ͜ʂ 15 138݄12݄༵