Slide 1

Slide 1 text

Seccomp Notify 〠〽぀҆શ〟ぢアふべ࣮ߦ؀ڥ ୈ 14 ճぢアふべٕज़〣৘ใަ׵ձ Ճ౻ହจ 2021-04-17 1/25

Slide 2

Slide 2 text

ࣗݾ঺հ

Slide 3

Slide 3 text

ࣗݾ঺հ ɹ Ճ౻ହจʢ͔ͱ͏΍͢;Έʣ • @ten_forward • https://github.com/tenforward/ • גࣜձࣾ IDC や゜アふくぎ • LXC 〜ֶ〫ぢアふべೖ໳ ʵܰྔԾ૝Խ؀ڥぇ ࣮ݱ『぀ٕज़ (gihyo.jp, 2014 ೥ʙ) • Plamo Linux ゐアふべそ゚がゆ • lxc-jp ゆ゜でこぜぷ • ॳ〶〛৮ぁ〔ぢアふべ〤 Virtuozzo • ޷ 〟てとふわぢが゚〤 setns() 2/25

Slide 4

Slide 4 text

ぢ゜べՒ〣ࢲʢ1ʣʙ ࢓ࣄ ろぼがでへ kubernetes つがもと〣։ൃʢばがわ〣ย۱〠ʣ ɻ〽⿸〹。 k8s 〠ೖ໳〜 〳「〔 https://special.nikkeibp.co.jp/atclh/NXT/21/idcf0330/ https://www.itmedia.co.jp/news/articles/2103/25/news001.html 3/25

Slide 5

Slide 5 text

ぢ゜べՒ〣ࢲʢ2ʣʙ ษڧձ • ࡢ೥ 3 ೥〫〿〠〈〣ษڧձぇ࠶։ʂ • ୈ 12 ճɺ13 ճ〜 cgroup ಛू • 〒〣ྲྀぁ〜ຊ೔〣ษڧձ։࠵ 4/25

Slide 6

Slide 6 text

ぢ゜べՒ〣ࢲʢ3ʣʙ ݈߁ ࡏ୐ۈ຿〜Ұ೔〣า਺⿿ 200 า〝⿾ʜ (>_<)ʢˡ⿴぀⿴぀〜『〟ʣ • ˠɹۙॴぇげさがずアそʢࠓ〤ຖ೔でわ or ゘アぺアそʣ • ˠɹۙॴ⿿ݹ෿〕〾々〟〈〝〠ؾ〚。 • ˠɹݹ෿〠まろ぀ ਪ「ݹ෿ʢݹ෿࣌୅ޙظʣ 5/25

Slide 7

Slide 7 text

ぢ゜べՒ〣ࢲʢ4ʣʙ ざア゘ぐアゎがふくアそ 〴〟《えざア゘ぐアゎがふくアそ⿿೔ৗ〜『〽〢ʁ ࢲ〷〜『ɻ • ౰વ〟⿿〾゙ぎ゚ぐよアぷ〤〟「 • K-POP ぐよアぷ〤ざア゘ぐア〠Ҡߦ • ఆظత〠ूۚ〠དྷ぀ぎぐぺ〝ざア゘ぐアゎがふくアそʢZoomɺLineɺʜʣ ゎがふくアそࢿྉ〚。〿⿿େม 6/25

Slide 8

Slide 8 text

ຊ೔〣಺༰

Slide 9

Slide 9 text

ຊ೔〣಺༰ Linux 5.0 〜࣮૷《ぁ〔 Seccomp Notify ػೳ〣֓ཁ〠〙⿶〛આ໌「〳『ɻ ࿈ࡌ ୈ 47 ճɹඇಛݖぢアふべ〣Մೳੑぇ޿〆぀ seccomp notify ػೳ〣಺༰〣෮श 〜『ɻ • ඇಛݖぢアふべʢUser Namespaceʣ • てとふわぢが゚ • Seccomp • Seccomp Notify 7/25

Slide 10

Slide 10 text

⿼《〾⿶

Slide 11

Slide 11 text

User Namespace • Namespaceʢぢアふべʣ಺֎〜 UID/GID ぇろひゃアそ『぀ػೳ • ぢアふべ಺〜〤 rootɺぢアふべ֎〜〤 Ұൠゕがづが〝⿶⿸〽⿸〟ろひゃアそ ⿿〜 ぀ • ぢアふべ಺〜〤 root 〝「〛〪぀〳⿺ ぀⿿ɺぢアふべ֎〣てとふわ〠Өڹぇ ٴ〱『〽⿸〟ૢ࡞〤〜 〟⿶〈〝⿿ ⿴぀ 8/25

Slide 12

Slide 12 text

てとふわぢが゚ ぎゆ゙たがてゖア⿾〾 OSʢLinux じがぼ゚ʣ〣ػೳぇݺ〨ग़『〔〶〣࢓૊〴 • ゕがづۭؒ〜࣮ߦ《ぁ぀ぎゆ゙たがてゖア〤௚ ઀じがぼ゚〣ػೳぇૢ࡞〜 〟⿶ • 〒〣〔〶〣ぐアのがやこがと〝「〛γεςϜ ίʔϧ⿿४උ《ぁ〛⿶぀ • ౰વݺ〨ग़『ࡍ〠〤ݖݶばこひぜ⿿ߦいぁ぀ • ぎゆ゙たがてゖア〤てとふわぢが゚ぇݺ〨ग़ 「ɺ݁Ռぇड々औ぀ 9/25

Slide 13

Slide 13 text

User Namespace 〝てとふわ ぢが゚

Slide 14

Slide 14 text

User Namespace 〝てとふわぢが゚ • User Namespace ಺〣 root 〤 root 〟〣〜ඞཁ〟ݖݶぇ࣋〘〛⿶぀〤』 • 〝〈あ⿿ಛݖ⿿ඞཁ〝《ぁ぀ૢ࡞ぇߦ⿸〝ɺಛݖぇ࣋〘〛⿶぀ root 〣〤』〟〣〠 ࣦഊ『぀〈〝⿿⿴぀ • User Namespace 〤 Namespace ֎〜〤Ұൠゕがづが ˠりとぷ〹ଞ〣 Namespace ぇةݥ〠《〾『Մೳੑ⿿⿴぀ૢ࡞〤ېࢭ《ぁ〛⿶぀ 10/25

Slide 15

Slide 15 text

User Namespace ಺〜࣮ߦ〜 〟⿾〘〔てとふわぢが゚ ぢアふべք〣ʢ?ʣ௕೥〣ݒҊ • やきぐ゚てとふわ〣ろげアぷʢmount てとふわぢが゚ʣ • ぶみぐとやきぐ゚〣࡞੒ʢmknod, mknodat てとふわぢが゚ʣ 〟〞ʜ 11/25

Slide 16

Slide 16 text

〈ぁ〳〜〤ʜ ࠔ〘〛〟⿾〘〔〝ݴ⿺〥ࠔ〘〛〟⿾〘〔 • ぢアふべ಺〜ଘࡏ「〛〷҆શ〟ぶみぐとやきぐ゚〤ɺࣄલ〠りとぷ্〣ಛݖぇ࢖〘 〛ඞཁ〟ॲཧぇߦ⿶ɺbind ろげアぷ〜ぢアふべ಺〠ग़ݱ《【぀〟〞 • ぢアふべ಺〜ろげアぷ「〛〷҆શ〟やきぐ゚てとふわʢproc, tmpfs, cgroup 〟 〞ʣ〤ろげアぷ⿿ڐՄ《ぁ〛⿶〔 • ةݥ〟Մೳੑ⿿⿴぀ॲཧ〤ॳظ〣 User Namespace 〜ݖݶぇ࣋〘〛⿶぀⿾⿿֬ ೝ《ぁ぀ 12/25

Slide 17

Slide 17 text

໰୊఺ ैདྷ⿴〘〔ぢアふべろぼがでをがࢹ఺〣໰୊఺ɿ • ぢアふべ಺〣ゆ゜そ゘わ⿿Կぇ『぀⿾ʢ=〞〣〽⿸〟てとふわぢが゚ぇൃߦ『぀ ⿾ʣい⿾〾〟⿶ • ぢアふべろぼがでをが〹ぢアふべりとぷ〣؅ཧਓ〤ʢҰൠత〠ةݥ〝《ぁ぀ॲཧ〜 ⿴〘〛〷ʣ҆શੑ⿿い⿾〘〛⿶぀৔߹⿿⿴぀ • じがぼ゚〜ॲཧぇ੍ݶ『぀৔߹ɺةݥ〟Մೳੑ⿿⿴ぁ〥ېࢭ『぀「⿾〟⿶ • ぢアふべろぼがでをが〝「〛ڐՄ〜 ぀ॲཧ⿿⿴぀Մೳੑ • Ұൠత〠〤ةݥ〟ॲཧ〜⿴〘〛〷ಛఆ〣ぢアふべ〠〤ڐՄ〜 ぀ॲཧ〜⿴぀Մೳੑ • ぢアふべろぼがでをが〤ぢアふべ಺〜೚ҙ〣ॲཧʢてとふわぢが゚〣ൃߦʣ⿿ߦい ぁ〔〈〝ぇ஌぀〈〝⿿〜 〟⿶ • Ծ〠஌぀〈〝⿿〜 〛〷ݕࠪぇߦ⿸ํ๏⿿〟⿶ 13/25

Slide 18

Slide 18 text

seccomp લ〣と゘ぐへ〜 • ʮॲཧ⿿࣮ߦ《ぁ〔⿾〞⿸⿾ぇ஌぀〈〝〤〜 〟⿶ʯ • ʮ࣮ߦ《ぁ〔〈〝⿿い⿾〘〛〷ݕࠪ〜 〟⿶ʯ 〝ॻ⿶〔⿿ɺ〈ぁ⿿࣮ݱ〜 ぀ʢՄೳੑ⿿⿴぀ʣػೳ⿿࣮〤 Linux じがぼ゚〠〤ଘࡏ 『぀ ˣ seccomp 14/25

Slide 19

Slide 19 text

seccomp

Slide 20

Slide 20 text

seccomp 〣ྺ࢙ 2005 ೥ 2.6.12 〜 seccomp ಋೖ Ұ෦〣てとふわぢが゚〣࣮ߦぇڐՄ『぀〕々〣てアゆ゚〟ػೳ read,write,exit,sigreturn Ҏ֎࣮ߦ〜 〟⿶ 2012 ೥ 3.5 〜 seccomp mode 2 ಋೖ てとふわぢが゚〉〝〠੍ݶ てとふわぢが゚Ҿ਺〣ばこひぜ 2019 ೥ 5.0 〜 seccomp notify ಋೖ ଞ〠"Seccomp trap to userspace"ɼ"seccomp user notifications"〝ݺ〥ぁ〛⿶〔〿 15/25

Slide 21

Slide 21 text

seccomp 〠〽぀てとふわぢが゚〣やく゚の゙アそ • ⿴〾⿾」〶てとふわぢが゚〠ؔ『぀ڐ Մɾېࢭ〣れ゙てがぇఆٛ「〛⿼。 • てとふわぢが゚⿿࣮ߦ《ぁ぀〝れ゙ てが〠ै〘〛࣮ߦ『぀⿾〞⿸⿾ぇ൑அ • ېࢭ〣৔߹ɺ〞〣〽⿸〠ಈ࡞『぀⿾ぇ ఆٛ「〛⿼。ɻゆ゜そ゘わऴྃɺࢦఆ 「〔ご゘がぇฦ『 seccomp mode2 〜ॊೈ〠てとふわぢが゚〣࣮ߦՄ൱ぇઃఆ〜 ぀ ˠなずゔ゙ふく֬อ〣〔〶〠ぢアふべろぼがでをが〠〤ී௨〠࣮૷《ぁ〛⿶぀ػೳ 16/25

Slide 22

Slide 22 text

seccomp notify

Slide 23

Slide 23 text

〈ぁ〳〜〣 seccomp 〈ぁ〳〜〤〽〿なずゔぎ〠『぀〔〶〠〜 ぀〈〝ʢてとふわぢが゚ʣぇߜ぀〕々〕〘〔 • ぢアふべ಺〣ゆ゜なと〜てとふわぢが゚⿿ݺ〥ぁ〔〈〝ぇぢアふべろぼがでをが〤 ஌぀〈〝⿿〜 〟⿶ • てとふわぢが゚〣࣮ߦぇڐՄ『぀⿾ɺڋ൱『぀⿾「⿾ઃఆ〜 〟⿶ • ੒ޭ「〔〽⿸〠ݟ【぀〈〝〤〜 ぀⿿ɺ࣮ࡍ〠ڋ൱「〔てとふわぢが゚⿿࣮ߦ《ぁ぀ 〈〝〤〟⿶ ˠ「⿾「ɺてとふわぢが゚〣࣮ߦぇݕ஌「ɺ࣮ߦ〣Մ൱ぇ൑அ『぀〣〜ɺલड़〣໰୊ぇ ղܾ『぀〣〠Ұ൪ۙ⿶ػೳ〜⿴぀〈〝〠〤ҧ⿶⿿〟⿶ 17/25

Slide 24

Slide 24 text

seccomp notify • seccomp 〜ݕ஌《ぁ〔てとふわぢが゚〣࣮ߦぇ • ゕがづがとらがと〣ゆ゜そ゘わʢex. ぢアふべろぼがでをがʣ〠௨஌「ɺ࣮ߦ〣Մ ൱ぇ൑அ「〛〷〾⿸ • ௨஌ぇड々〔ゆ゜そ゘わ〤ɺ࣮ߦ〣Մ൱ぇ൑அ「ɺじがぼ゚〠࣮ߦ〣Մ൱ぇฦ『 • じがぼ゚ʢseccompʣ〤〒〣൑அ〠ै〘〛ॲཧぇߦ⿸ʢてとふわぢが゚ぇ࣮ߦ『 ぀ or ڋ൱『぀ʣ seccomp notify ػೳ〜ɺなずゔ゙ふくぇ֬อ「〙〙ɺぶやさ゚ぷ〜〤࣮ߦ〜 〟⿶て とふわぢが゚ぇ࣮ߦ〜 ぀〽⿸〠〟〘〔 18/25

Slide 25

Slide 25 text

seccomp notify ぇ࢖⿸〠〤 • ぢアふべろぼがでをが⿿ぢアふべ಺〜 ࣮ߦ『぀ゆ゜なと〠れ゙てが〝Ұॹ〠 〈〣ػೳぇ࢖⿸や゘そぇઃఆ『぀ • やく゚のが⿿゜がへ《ぁ぀〝やきぐ゚ ぶくとぜ゙ゆのʢfdʣ⿿ฦ《ぁ぀ • 〈〣 fd ぇぢアふべろぼがでをが〜؂ ࢹ『぀ 19/25

Slide 26

Slide 26 text

seccomp notify ぇ࢖〘〔てとふわぢが゚〣࣮ߦ 1. てとふわぢが゚ݺ〨ग़「 2. ݺ〨ग़「〤ゅ゜ひぜ《ぁɺݺ〨ग़ 《ぁ〔てとふわぢが゚〣৘ใɺゆ ゜なと〣৘ใ〟〞⿿ fd 〠ૹ〾ぁ぀ 3. ぢアふべろぼがでをが〜ඞཁ〟ݕ ࠪぇߦ⿶ɺ࣮ߦڐՄɺڋ൱ぇฦ『 4. ぢアふべろぼがでをが⿾〾ฦ《ぁ 〔݁Ռ〠Ԡ」〛じがぼ゚ ʢseccompʣ⿿࣮ߦぇڐՄɺڋ൱ 『぀ ʢ〈〣〽⿸〟ॲཧ⿿〜 ぀〽⿸〠〟〘〔〣〤 5.5 じがぼ゚⿾〾ʣ 20/25

Slide 27

Slide 27 text

LXC/LXD 〜〣࣮૷

Slide 28

Slide 28 text

seccomp notify ぇ࢖⿸〠〤 • libseccomp 2.5.0ʙ • LXC 3.2.1ʙ • LXDʢݱࡏ 4.13ʣ: • 3.13: ॳظ࣮૷ʢmknod つれがぷʣˠぶみぐとやきぐ゚࡞੒ • 3.14: mknodat つれがぷˠぶみぐとやきぐ゚࡞੒ • 3.16: setxattr つれがぷ • 3.19: mount つれがぷ • 4.5: bpf つれがぷˠ device cgroupʢcgroup2ʣ 21/25

Slide 29

Slide 29 text

ʢぶゑʣぶみぐとやきぐ゚〣࡞੒ʢmknodʣ 1. ぢアふべʢUbuntu 20.04ʣ࡞੒ 2. Ұൠゕがづがݖݶ〜ಈ࡞「〛⿶぀〈〝ぇ֬ೝ 3. ぢアふべ಺〜 mknod ぇ࣮ߦʢࣦഊʣ 4. ぢアふべ〠ର「〛ぶみぐとやきぐ゚〣࡞੒ぇڐՄ『぀ઃఆぇߦ⿸ 5. ぢアふべ࠶ىಈޙ mknod ࣮ߦʢ੒ޭ『぀〤』ʂʣ https://asciinema.org/a/407687 22/25

Slide 30

Slide 30 text

ʢぶゑʣろげアぷ 1. /dev/sdb1 ぇぢアふべ಺〠 bind mount 2. ぢアふべ಺〣/dev/sdb1 ぇ֬ೝ 3. ぢアふべ಺〜 mount ぇ࣮ߦʢࣦഊʣ 4. ぢアふべ಺〜 ext4 ⿿ろげアぷ〜 ぀ઃఆぇ௥Ճʢ/dev/sdb1 〤 ext4 〜やきぐ゚ てとふわ࡞੒ࡁʣ 5. ぢアふべ಺〜 mount ぇ࣮ߦʢ੒ޭ『぀〤』ʂʣ https://asciinema.org/a/407702 23/25

Slide 31

Slide 31 text

〳〝〶

Slide 32

Slide 32 text

〳〝〶 • User Namespace ಺〣 root ゕがづが⿿ݺ〨ग़「〛〷ࣦഊ『぀てとふわぢが゚⿿ ⿴〘〔 • ぢアふべろぼがでをが〹؅ཧऀ〤ぢアふべ〣࢖いぁํぇྑ。஌〘〛⿶぀ʢՄೳੑ⿿ ⿴぀ʣ • 〈ぁ〳〜〤なずゔ゙ふく޲্〣〔〶〠ػೳぇߜΔํ޲〠࢖いぁ〛 〔 seccomp ぇ࢖⿶ɺ࣮ߦՄ൱〣൑அぇゕがづがとらがと〠ҕ〢ɺېࢭ《ぁ〛⿶〔ॲཧぇ User Namespace ಺〜࣮ߦ〜 ぀〽⿸〠「〔〣⿿ Seccomp notify ػೳ ඇಛݖぢアふべ〜࣮ߦ〜 ぀ॲཧ⿿޿⿿〿ɺ҆શ〠ぢアふべぇ࣮ߦ〜 ぀Մೳੑ⿿޿ ⿿〘〔ɻ 24/25

Slide 33

Slide 33 text

Ҏ্ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 25/25