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

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

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

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

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ͷΤϥʔ