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

    View Slide

  2. ࣗݾ঺հ

    View Slide

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

    View Slide

  4. ぢ゜べՒ〣ࢲʢ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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. ຊ೔〣಺༰

    View Slide

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

    View Slide

  10. ⿼《〾⿶

    View Slide

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

    View Slide

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

    View Slide

  13. User Namespace 〝てとふわ
    ぢが゚

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. seccomp

    View Slide

  20. 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

    View Slide

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

    View Slide

  22. seccomp notify

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  27. LXC/LXD 〜〣࣮૷

    View Slide

  28. 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

    View Slide

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

    View Slide

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

    View Slide

  31. 〳〝〶

    View Slide

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

    View Slide

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

    View Slide