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

リモートワーク時代の守護神 PHP開発者のためのセキュリティ強化術

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

リモートワーク時代の守護神 PHP開発者のためのセキュリティ強化術

PHPカンファレンス福岡2024でお話しました。

Avatar for Kazuhiko Yamashita

Kazuhiko Yamashita

June 22, 2024
Tweet

More Decks by Kazuhiko Yamashita

Other Decks in Technology

Transcript

  1. ৘ใηΩϡϦςΟͷ3ཁૉ ػີੑ ׬શੑ Մ༻ੑ ػີੑʢ$PO fi EFOUJBMJUZʣͱ͸ɺڐՄ͞Εͨऀ͚͕ͩ৘ใʹΞΫηεͰ͖ΔΑ͏ʹ͢Δ͜ͱͰ͢ɻڐՄ͞Ε͍ͯͳ͍ར༻ऀ͸ɺ ίϯϐϡʔλ΍σʔλϕʔεʹΞΫηε͢Δ͜ͱ͕Ͱ͖ͳ͍Α͏ʹͨ͠ΓɺσʔλΛӾཡ͢Δ͜ͱ͸Ͱ͖Δ͕ॻ͖׵͑Δ͜ͱ͸ Ͱ͖ͳ͍Α͏ʹͨ͠Γ͠·͢ɻ ׬શੑʢ*OUFHSJUZʣͱ͸ɺอ༗͢Δ৘ใ͕ਖ਼֬Ͱ͋Γɺ׬શͰ͋Δঢ়ଶΛอ࣋͢Δ͜ͱͰ͢ɻ৘ใ͕ෆਖ਼ʹվ͟Μ͞ΕͨΓɺ

    ഁյ͞ΕͨΓ͠ͳ͍͜ͱΛࢦ͠·͢ɻ Մ༻ੑʢ"WBJMBCJMJUZʣͱ͸ɺڐՄ͞Εͨऀ͕ඞཁͳͱ͖ʹ͍ͭͰ΋৘ใʹΞΫηεͰ͖ΔΑ͏ʹ͢Δ͜ͱͰ͢ɻ ͭ·ΓɺՄ༻ੑΛҡ࣋͢Δͱ͍͏͜ͱ͸ɺ৘ใΛఏڙ͢ΔαʔϏε͕ৗʹಈ࡞͢Δͱ͍͏͜ͱΛද͠·͢ɻ Ҿ༻ݩIUUQTXXXTPVNVHPKQNBJO@TPTJLJKPIP@UTVTJOTFDVSJUZCVTJOFTTFYFDVUJWFIUNM
  2. ϦϞʔτϫʔΫʹ͓͚ΔωοτϫʔΫ Employee DMZ FW VPN Server Intranet App Servers The

    Internet VPNΛར༻ͯ͠ɺωοτϫʔΫͷڥքͰΞΫηεΛ੍ޚ͢Δ ͍ΘΏΔʮڥքϞσϧʯ͕ओྲྀ
  3. ڥքϞσϧͷσϝϦοτ DMZ FW VPN Server Intranet App Servers The Internet

    ࣗ༝౓͕ߴ͍͕Ώ͑ʹɺഁΒΕͨޙͷ੍ޚͷ೉͠͞ ಺෦ωοτϫʔΫʹ ͞΋͍Δ͔ͷΑ͏ʹ ৼΔ෣͑Δ ੌ࿹ϋοΧʔ
  4. θϩτϥετωοτϫʔΫͱ͸Կ͔ • ωοτϫʔΫ͸ৗʹ҆શͰ͸ͳ͍ͱݟͳ͞ΕΔ • ωοτϫʔΫ্ʹ͸֎෦ٴͼ಺෦ͷڴҖ͕ৗʹଘࡏ͢Δ • ωοτϫʔΫΛ৴༻Ͱ͖Δͱ൑அʹ͢Δʹ͸ɺϩʔΧϧωοτϫʔΫͰ͸
 ෆे෼Ͱ͋Δ • σόΠεɺϢʔβʔɺωοτϫʔΫϑϩʔ͸1ͭ࢒Βͣೝূ͓ΑͼೝՄ͞ΕΔ

    • ϙϦγʔ͸ಈతͰ͋ΓɺͰ͖Δ͚ͩଟ͘ͷ৘ใݯʹج͍ͮͯ࡞੒͞Εͳ͚Ε ͹ͳΒͳ͍ Evan GilmanɺDoug Barthɹஶɺླ໦ ݚޗɹ؂༁ θϩτϥετωοτϫʔΫ ʮ1.1 θϩτϥετωοτϫʔΫͱ͸Կ͔ʯΑΓҾ༻
  5. PKI͸CAͷҧ͍Ͱେ͖͘2ͭ͋Δ θϩτϥετϞσϧͰ͸Private PKI͕ओʹར༻͞ΕΔ Public Private GMO άϩʔόϧαΠϯ Let’s Encrypt ୅දྫ

    ༻్ WEBαʔϏεͷSSLূ໌ॻͳͲɻ ίετ؍఺͔ΒϝλσʔλͳͲΛ
 ࡉ͔͘සൟʹॻ͖׵͑ͨΓ͸͠ਏ͍ HashiCorp Vault OpenSSL ΦϨΦϨೝূہ ୅දྫ ༻్ γεςϜͷmTLS௨৴΍ɺ ݕূʹ͓͚Δ࢑ఆతͳূ໌ॻɻ
  6. consul-templateόϦศར vault { address = "https://vault.exapmle.com" token = "init token"

    renew_token = true } template { contents = "{{ with secret \"example/issue/api\" \"common_name=api.example.com\" }}{{ .Data.issuing_ca }}{{ end }}" destination = "/foo/bar/api.example.com.raw" command = "sudo /usr/local/sbin/update_ca_certs api.example.com" } Go Templateه๏Ͱূ໌ॻͷग़ྗ΍ɺ ֤छϛυϧ΢ΣΞͷઃఆϑΝΠϧͳͲΛग़ྗͰ͖Δ
  7. ύ ε ϫ υ ͷ ఆ ظ త ͳ ม

    ߋ ͯ Ϣ β ͷ ҆ ௚ ͳ ύ ε ϫ υ ઃ ఆ Λ ༠ ൃ ͢ Δ ͔ Β · Δ Ͱ ҙ ຯ ͳ ͍ ແ ҙ ຯ ͷ ۃ Έ ʂ ʂ ʂ
  8. ߈ܸऀͷ෼ྨ 1. εΫϦϓτΩσΟ: πʔϧͰ߈ܸͯ͘͠Δೳྗͷ௿͍߈ܸऀ 2. ඪ४ܕ߈ܸऀ : ಛఆͷඪతΛૂͬͨ߈ܸऀ 3. ΠϯαΠμʔڴҖ:

    ಛݖΛ࣋ͨͳ͍಺෦Ϣʔβʔ 4. ৴པ͞ΕͨΠϯαΠμʔ: ಛݖΛ࣋ͭ಺෦Ϣʔβʔ 5. ࠃՈϨϕϧͷΞΫλʔ: ࠃՈͷࢧԉΛड͚ɺ५୔ͳϦιʔεΛ࣋ͭ߈ܸऀ Evan GilmanɺDoug Barthɹஶɺླ໦ ݚޗɹ؂༁ θϩτϥετωοτϫʔΫ ʮ2.1.1 ҰൠతͳڴҖϞσϧʯΑΓҾ༻
  9. int call_php_handler(pam_handle_t *pamh, const char * fi lename, const char

    *cfunction_name) { PHP_EMBED_START_BLOCK(0, NULL) … ͜ͷதʹCͷίϯςΩετͰPHPͷίʔυΛॻ͘ PHP_EMBED_END_BLOCK(); } PHPΛऴྃ͢Δͱ͖ʹϝϞϦ͕ഁ໓ʂʂʂ 1. PAM͔Βݺͼग़͞Εpam_handle_t
 ɹͳͲͷϦιʔεΛ֬อ 2. PHPΛىಈ͢Δ 3. PHPͷॲཧ͕CͷίϯςΩετͰ
 ɹ࣮ߦ͞ΕΔ 4. PHP͕ऴྃ ͜͜ͰmallocͷΤϥʔ