Upgrade to Pro — share decks privately, control downloads, hide ads and more …

seccomp notify による安全なコンテナ実行環境 / 14th CTStudy

tenforward
April 17, 2021

seccomp notify による安全なコンテナ実行環境 / 14th CTStudy

「第14回コンテナ技術の情報交換会@オンライン」の発表資料です。
参考となる情報にはPDF中からリンクをしていますが、資料中のリンクは Speaker Deck 上ではクリックできないので PDF をダウンロードしてご覧ください。

tenforward

April 17, 2021
Tweet

More Decks by tenforward

Other Decks in Science

Transcript

  1. ࣗݾ঺հ ɹ Ճ౻ହจʢ͔ͱ͏΍͢;Έʣ • @ten_forward • https://github.com/tenforward/ • גࣜձࣾ IDC

    や゜アふくぎ • LXC 〜ֶ〫ぢアふべೖ໳ ʵܰྔԾ૝Խ؀ڥぇ ࣮ݱ『぀ٕज़ (gihyo.jp, 2014 ೥ʙ) • Plamo Linux ゐアふべそ゚がゆ • lxc-jp ゆ゜でこぜぷ • ॳ〶〛৮ぁ〔ぢアふべ〤 Virtuozzo • ޷ 〟てとふわぢが゚〤 setns() 2/25
  2. ぢ゜べՒ〣ࢲʢ2ʣʙ ษڧձ • ࡢ೥ 3 ೥〫〿〠〈〣ษڧձぇ࠶։ʂ • ୈ 12 ճɺ13

    ճ〜 cgroup ಛू • 〒〣ྲྀぁ〜ຊ೔〣ษڧձ։࠵ 4/25
  3. ຊ೔〣಺༰ Linux 5.0 〜࣮૷《ぁ〔 Seccomp Notify ػೳ〣֓ཁ〠〙⿶〛આ໌「〳『ɻ ࿈ࡌ ୈ 47

    ճɹඇಛݖぢアふべ〣Մೳੑぇ޿〆぀ seccomp notify ػೳ〣಺༰〣෮श 〜『ɻ • ඇಛݖぢアふべʢUser Namespaceʣ • てとふわぢが゚ • Seccomp • Seccomp Notify 7/25
  4. User Namespace • Namespaceʢぢアふべʣ಺֎〜 UID/GID ぇろひゃアそ『぀ػೳ • ぢアふべ಺〜〤 rootɺぢアふべ֎〜〤 Ұൠゕがづが〝⿶⿸〽⿸〟ろひゃアそ

    ⿿〜 ぀ • ぢアふべ಺〜〤 root 〝「〛〪぀〳⿺ ぀⿿ɺぢアふべ֎〣てとふわ〠Өڹぇ ٴ〱『〽⿸〟ૢ࡞〤〜 〟⿶〈〝⿿ ⿴぀ 8/25
  5. User Namespace 〝てとふわぢが゚ • User Namespace ಺〣 root 〤 root

    〟〣〜ඞཁ〟ݖݶぇ࣋〘〛⿶぀〤』 • 〝〈あ⿿ಛݖ⿿ඞཁ〝《ぁ぀ૢ࡞ぇߦ⿸〝ɺಛݖぇ࣋〘〛⿶぀ root 〣〤』〟〣〠 ࣦഊ『぀〈〝⿿⿴぀ • User Namespace 〤 Namespace ֎〜〤Ұൠゕがづが ˠりとぷ〹ଞ〣 Namespace ぇةݥ〠《〾『Մೳੑ⿿⿴぀ૢ࡞〤ېࢭ《ぁ〛⿶぀ 10/25
  6. ໰୊఺ ैདྷ⿴〘〔ぢアふべろぼがでをがࢹ఺〣໰୊఺ɿ • ぢアふべ಺〣ゆ゜そ゘わ⿿Կぇ『぀⿾ʢ=〞〣〽⿸〟てとふわぢが゚ぇൃߦ『぀ ⿾ʣい⿾〾〟⿶ • ぢアふべろぼがでをが〹ぢアふべりとぷ〣؅ཧਓ〤ʢҰൠత〠ةݥ〝《ぁ぀ॲཧ〜 ⿴〘〛〷ʣ҆શੑ⿿い⿾〘〛⿶぀৔߹⿿⿴぀ • じがぼ゚〜ॲཧぇ੍ݶ『぀৔߹ɺةݥ〟Մೳੑ⿿⿴ぁ〥ېࢭ『぀「⿾〟⿶

    • ぢアふべろぼがでをが〝「〛ڐՄ〜 ぀ॲཧ⿿⿴぀Մೳੑ • Ұൠత〠〤ةݥ〟ॲཧ〜⿴〘〛〷ಛఆ〣ぢアふべ〠〤ڐՄ〜 ぀ॲཧ〜⿴぀Մೳੑ • ぢアふべろぼがでをが〤ぢアふべ಺〜೚ҙ〣ॲཧʢてとふわぢが゚〣ൃߦʣ⿿ߦい ぁ〔〈〝ぇ஌぀〈〝⿿〜 〟⿶ • Ծ〠஌぀〈〝⿿〜 〛〷ݕࠪぇߦ⿸ํ๏⿿〟⿶ 13/25
  7. 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
  8. seccomp 〠〽぀てとふわぢが゚〣やく゚の゙アそ • ⿴〾⿾」〶てとふわぢが゚〠ؔ『぀ڐ Մɾېࢭ〣れ゙てがぇఆٛ「〛⿼。 • てとふわぢが゚⿿࣮ߦ《ぁ぀〝れ゙ てが〠ै〘〛࣮ߦ『぀⿾〞⿸⿾ぇ൑அ • ېࢭ〣৔߹ɺ〞〣〽⿸〠ಈ࡞『぀⿾ぇ

    ఆٛ「〛⿼。ɻゆ゜そ゘わऴྃɺࢦఆ 「〔ご゘がぇฦ『 seccomp mode2 〜ॊೈ〠てとふわぢが゚〣࣮ߦՄ൱ぇઃఆ〜 ぀ ˠなずゔ゙ふく֬อ〣〔〶〠ぢアふべろぼがでをが〠〤ී௨〠࣮૷《ぁ〛⿶぀ػೳ 16/25
  9. seccomp notify • seccomp 〜ݕ஌《ぁ〔てとふわぢが゚〣࣮ߦぇ • ゕがづがとらがと〣ゆ゜そ゘わʢex. ぢアふべろぼがでをがʣ〠௨஌「ɺ࣮ߦ〣Մ ൱ぇ൑அ「〛〷〾⿸ •

    ௨஌ぇड々〔ゆ゜そ゘わ〤ɺ࣮ߦ〣Մ൱ぇ൑அ「ɺじがぼ゚〠࣮ߦ〣Մ൱ぇฦ『 • じがぼ゚ʢseccompʣ〤〒〣൑அ〠ै〘〛ॲཧぇߦ⿸ʢてとふわぢが゚ぇ࣮ߦ『 ぀ or ڋ൱『぀ʣ seccomp notify ػೳ〜ɺなずゔ゙ふくぇ֬อ「〙〙ɺぶやさ゚ぷ〜〤࣮ߦ〜 〟⿶て とふわぢが゚ぇ࣮ߦ〜 ぀〽⿸〠〟〘〔 18/25
  10. seccomp notify ぇ࢖〘〔てとふわぢが゚〣࣮ߦ 1. てとふわぢが゚ݺ〨ग़「 2. ݺ〨ग़「〤ゅ゜ひぜ《ぁɺݺ〨ग़ 《ぁ〔てとふわぢが゚〣৘ใɺゆ ゜なと〣৘ใ〟〞⿿ fd

    〠ૹ〾ぁ぀ 3. ぢアふべろぼがでをが〜ඞཁ〟ݕ ࠪぇߦ⿶ɺ࣮ߦڐՄɺڋ൱ぇฦ『 4. ぢアふべろぼがでをが⿾〾ฦ《ぁ 〔݁Ռ〠Ԡ」〛じがぼ゚ ʢseccompʣ⿿࣮ߦぇڐՄɺڋ൱ 『぀ ʢ〈〣〽⿸〟ॲཧ⿿〜 ぀〽⿸〠〟〘〔〣〤 5.5 じがぼ゚⿾〾ʣ 20/25
  11. 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
  12. ʢぶゑʣぶみぐとやきぐ゚〣࡞੒ʢmknodʣ 1. ぢアふべʢUbuntu 20.04ʣ࡞੒ 2. Ұൠゕがづがݖݶ〜ಈ࡞「〛⿶぀〈〝ぇ֬ೝ 3. ぢアふべ಺〜 mknod ぇ࣮ߦʢࣦഊʣ

    4. ぢアふべ〠ର「〛ぶみぐとやきぐ゚〣࡞੒ぇڐՄ『぀ઃఆぇߦ⿸ 5. ぢアふべ࠶ىಈޙ mknod ࣮ߦʢ੒ޭ『぀〤』ʂʣ https://asciinema.org/a/407687 22/25
  13. ʢぶゑʣろげアぷ 1. /dev/sdb1 ぇぢアふべ಺〠 bind mount 2. ぢアふべ಺〣/dev/sdb1 ぇ֬ೝ 3.

    ぢアふべ಺〜 mount ぇ࣮ߦʢࣦഊʣ 4. ぢアふべ಺〜 ext4 ⿿ろげアぷ〜 ぀ઃఆぇ௥Ճʢ/dev/sdb1 〤 ext4 〜やきぐ゚ てとふわ࡞੒ࡁʣ 5. ぢアふべ಺〜 mount ぇ࣮ߦʢ੒ޭ『぀〤』ʂʣ https://asciinema.org/a/407702 23/25
  14. 〳〝〶 • User Namespace ಺〣 root ゕがづが⿿ݺ〨ग़「〛〷ࣦഊ『぀てとふわぢが゚⿿ ⿴〘〔 • ぢアふべろぼがでをが〹؅ཧऀ〤ぢアふべ〣࢖いぁํぇྑ。஌〘〛⿶぀ʢՄೳੑ⿿

    ⿴぀ʣ • 〈ぁ〳〜〤なずゔ゙ふく޲্〣〔〶〠ػೳぇߜΔํ޲〠࢖いぁ〛 〔 seccomp ぇ࢖⿶ɺ࣮ߦՄ൱〣൑அぇゕがづがとらがと〠ҕ〢ɺېࢭ《ぁ〛⿶〔ॲཧぇ User Namespace ಺〜࣮ߦ〜 ぀〽⿸〠「〔〣⿿ Seccomp notify ػೳ ඇಛݖぢアふべ〜࣮ߦ〜 ぀ॲཧ⿿޿⿿〿ɺ҆શ〠ぢアふべぇ࣮ߦ〜 ぀Մೳੑ⿿޿ ⿿〘〔ɻ 24/25