Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
リモートワーク時代の守護神 PHP開発者のためのセキュリティ強化術
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Kazuhiko Yamashita
June 22, 2024
Technology
1.6k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
リモートワーク時代の守護神 PHP開発者のためのセキュリティ強化術
PHPカンファレンス福岡2024でお話しました。
Kazuhiko Yamashita
June 22, 2024
More Decks by Kazuhiko Yamashita
See All by Kazuhiko Yamashita
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
2.1k
継続的な負荷検証を目指して
pyama86
3
1.7k
成長期における、 ユーザー領域の複雑さと 整備の進め方
pyama86
1
650
Stay Hacker 〜九州で生まれ、Perlに出会い、コミュニティで育つ〜
pyama86
2
6.4k
Managing Database Migrations in Go Backend Systems
pyama86
0
500
新しい職場の CI が 20 分かかっていたらあなたならどうする?
pyama86
2
1.5k
事業を差別化する技術を生み出す技術
pyama86
4
2.2k
Re:Define 可用性を支える モニタリング、パフォーマンス最適化、そしてセキュリティ
pyama86
9
11k
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
2.1k
Other Decks in Technology
See All in Technology
Fabricをフル活用する AI Agent Hub -製造業特化AIエージェントの設計
iotcomjpadmin
0
160
“詰む”前に仕組みを作れ 〜技術の波に溺れないためのキャッチアップ術〜
takasyou
7
4.3k
AI-DLCを “そのまま導入しなかった”話 ~組織に合わせてアジャストした 私たちの実践共有~
hiroramos4
PRO
1
440
組織における AI-DLC 実践
askul
0
160
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
230
データレイクの「見えない問題」を可視化する
sansantech
PRO
1
230
CVE-2026-20833_脆弱性対応とAES 化について
jukishiya
0
140
製造現場での生成AIの活用、およびエージェントAIの実装のあり方、AVEVAの取り組み
iotcomjpadmin
0
180
トークン最適化のためのユーザーストーリー分析 / User Story Analysis for Token Optimization
oomatomo
0
130
iOS アプリの「これって不具合ですか?」を AI に調べてもらう
miichan
0
150
Comment regagner la souveraineté de vos données tout en étant payé grâce à Nostr !
rlifchitz
0
220
Text-to-SQLをAgentCoreで実現し、生成されるSQLの精度を定量的に評価する
yakumo
2
110
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
740
A Tale of Four Properties
chriscoyier
163
24k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
240
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
870
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
790
Automating Front-end Workflow
addyosmani
1370
210k
Transcript
ϦϞʔτϫʔΫ࣌ͷकޢਆ PHP։ൃऀͷͨΊͷηΩϡϦςΟڧԽज़ ʙલࡇͰҿΈ͗͢ͳ͍ٕज़ʙ
ࢁԼ!QZBNB (.0ϖύϘٕज़ج൫νʔϜ γχΞɾϓϦϯγύϧ ɹΩϟϯϓɺཱྀߦɺώϧτϯ८ΓɺιϫχΤ८Γ 1SPYZαʔό։ൃɺ0QFO5FMFNFUSZɺ"84
ϗεςΟϯάࣄۀ &$ࢧԉࣄۀ ϋϯυϝΠυɾͦͷଞࣄۀ
ͬͱ͓͠Ζ͘Ͱ͖Δ
ใηΩϡϦςΟ
FireWall 「飲み会の帰りにパソコン紛失しました」 「XSS?CSRF?新 手 のTRFか?」 CVE-2024-06221430 徳丸本、この世のすべてをそこに置いてきた ハッキング
ใηΩϡϦςΟͷ3ཁૉ ػີੑ શੑ Մ༻ੑ ػີੑʢ$PO fi EFOUJBMJUZʣͱɺڐՄ͞Εͨऀ͚͕ͩใʹΞΫηεͰ͖ΔΑ͏ʹ͢Δ͜ͱͰ͢ɻڐՄ͞Ε͍ͯͳ͍ར༻ऀɺ ίϯϐϡʔλσʔλϕʔεʹΞΫηε͢Δ͜ͱ͕Ͱ͖ͳ͍Α͏ʹͨ͠ΓɺσʔλΛӾཡ͢Δ͜ͱͰ͖Δ͕ॻ͖͑Δ͜ͱ Ͱ͖ͳ͍Α͏ʹͨ͠Γ͠·͢ɻ શੑʢ*OUFHSJUZʣͱɺอ༗͢Δใ͕ਖ਼֬Ͱ͋ΓɺશͰ͋Δঢ়ଶΛอ࣋͢Δ͜ͱͰ͢ɻใ͕ෆਖ਼ʹվ͟Μ͞ΕͨΓɺ
ഁյ͞ΕͨΓ͠ͳ͍͜ͱΛࢦ͠·͢ɻ Մ༻ੑʢ"WBJMBCJMJUZʣͱɺڐՄ͞Εͨऀ͕ඞཁͳͱ͖ʹ͍ͭͰใʹΞΫηεͰ͖ΔΑ͏ʹ͢Δ͜ͱͰ͢ɻ ͭ·ΓɺՄ༻ੑΛҡ࣋͢Δͱ͍͏͜ͱɺใΛఏڙ͢ΔαʔϏε͕ৗʹಈ࡞͢Δͱ͍͏͜ͱΛද͠·͢ɻ Ҿ༻ݩIUUQTXXXTPVNVHPKQNBJO@TPTJLJKPIP@UTVTJOTFDVSJUZCVTJOFTTFYFDVUJWFIUNM
ϦϞʔτϫʔΫ
ϦϞʔτϫʔΫʹ͓͚ΔωοτϫʔΫ Employee DMZ FW VPN Server Intranet App Servers The
Internet VPNΛར༻ͯ͠ɺωοτϫʔΫͷڥքͰΞΫηεΛ੍ޚ͢Δ ͍ΘΏΔʮڥքϞσϧʯ͕ओྲྀ
ڥքϞσϧͷσϝϦοτ DMZ FW VPN Server Intranet App Servers The Internet
ࣗ༝͕ߴ͍͕Ώ͑ʹɺഁΒΕͨޙͷ੍ޚͷ͠͞ ෦ωοτϫʔΫʹ ͍͞Δ͔ͷΑ͏ʹ ৼΔ͑Δ ੌϋοΧʔ
θϩτϥετ ωοτϫʔΫ ͯ͢ͷτϥϑΟοΫΛ ৴༻͠ͳ͍͜ͱΛલఏͱ͢Δ https://www.oreilly.co.jp//books/9784873118888/
θϩτϥετωοτϫʔΫͱԿ͔ • ωοτϫʔΫৗʹ҆શͰͳ͍ͱݟͳ͞ΕΔ • ωοτϫʔΫ্ʹ֎෦ٴͼ෦ͷڴҖ͕ৗʹଘࡏ͢Δ • ωοτϫʔΫΛ৴༻Ͱ͖Δͱஅʹ͢ΔʹɺϩʔΧϧωοτϫʔΫͰ ෆेͰ͋Δ • σόΠεɺϢʔβʔɺωοτϫʔΫϑϩʔ1ͭΒͣೝূ͓ΑͼೝՄ͞ΕΔ
• ϙϦγʔಈతͰ͋ΓɺͰ͖Δ͚ͩଟ͘ͷใݯʹج͍ͮͯ࡞͞Εͳ͚Ε ͳΒͳ͍ Evan GilmanɺDoug Barthɹஶɺླ ݚޗɹ༁ θϩτϥετωοτϫʔΫ ʮ1.1 θϩτϥετωοτϫʔΫͱԿ͔ʯΑΓҾ༻
GoogleͳͲͷαʔϏεΛ ར༻͍ͯ͠Δͱ͖ʹɺ ීஈͱҟͳΔNWͩͱ ϩάΞτ͞Εͨܦݧ ΞϓϦέʔγϣϯʹ͓͚Δθϩτϥετ ීஈͱҟͳΔ;Δ·͍ɺڥΛ৴པ͠ͳ͍
ࠓ͢͜ͱ • θϩτϥετϞσϧΛ༻͍ͯɺշదͳϦϞʔτϫʔΫڥΛ࡞Δ࣮ྫ • ϢʔβʔͷৼΔ͍ૢ࡞ΛͲͷΑ͏ʹࠪ͢Δ͔
௨৴ܦ࿏
௨৴ܦ࿏ PKI(Public Key Infrastructure)Λར༻ͯ͠ ҉߸Խͯ͠௨৴͢Δ Client Server 1.ଓཁٻ 2. αʔόূ໌ॻૹ৴
4.҉߸Խ௨৴ 3.ΓͷϋϯυγΣΠΫ(লུ)
௨৴ܦ࿏ ূ໌ॻΛૹ৴ͨ͠αʔό͕ਖ਼͍͔͠Ͳ͏͔Λ ূ໌͢Δͷ͕ೝূہ Client Server 1.ଓཁٻ 2. αʔόূ໌ॻૹ৴ 4.҉߸Խ௨৴ 3.ΓͷϋϯυγΣΠΫ(লུ)
ྫ͑ɺαʔό͕ exampe.comͷূ໌ॻΛ ฦ٫ͯ͠ɺຊʹexample.comΛ ཧ͍ͯ͠Δαʔό͔Θ͔Βͳ͍
αʔόͷਖ਼͠͞࿈తʹ֬ೝ͞ΕΔ OSϒϥβʹଘࡏ͢Δϧʔτূ໌ॻ ͕CAͷਖ਼͠͞Λূ໌͠ɺCA͕֤αʔό ূ໌ॻͷਖ਼͠͞Λূ໌͢ΔΑ͏ʹ ਖ਼͠͞࿈͓ͯ͠ΓɺTrust Chainͱ ݺΕΔ WebϒϥβͱೝূہɺτϥετΞϯΧʔΛ८Δٕज़ಈ https://www.nic.ad.jp/ja/newsletter/No69/0800.html ΑΓҾ༻
PKICAͷҧ͍Ͱେ͖͘2ͭ͋Δ θϩτϥετϞσϧͰPrivate PKI͕ओʹར༻͞ΕΔ Public Private GMO άϩʔόϧαΠϯ Let’s Encrypt දྫ
༻్ WEBαʔϏεͷSSLূ໌ॻͳͲɻ ίετ؍͔ΒϝλσʔλͳͲΛ ࡉ͔͘සൟʹॻ͖͑ͨΓ͠ਏ͍ HashiCorp Vault OpenSSL ΦϨΦϨೝূہ දྫ ༻్ γεςϜͷmTLS௨৴ɺ ݕূʹ͓͚Δఆతͳূ໌ॻɻ
HashiCorp VaultΛར༻ͨ͠mTLS Mutual Transport Layer Security = mTSL VaultΛར༻͢ΔͱࣗಈԽ͞Εͨূ໌ॻɺ伴ͷཧ͕Մೳ Client
at Home Server TLS Connection ೝূɾೝՄ ূ໌ॻɾ伴 ೝূɾೝՄ ূ໌ॻɾ伴
GitHubͷϢʔβʔʹΑΔೝূೝՄ • GitHubϢʔβʔ͕ॴଐ͢ΔνʔϜͱVault্ͷϩʔϧΛඥ͚ͮ͢Δ͜ͱͰ ݖݶཧΛҰݩԽɻݖݶΛ͍ͬͯΔϢʔβʔɺάϧʔϓ͚͕ͩඞཁ ͳαʔόʹଓ͕Ͱ͖Δ • Vault͕͍ग़͢ূ໌ॻͷTTLΛ໋ʹઃఆ͢Δ͜ͱͰɺྲྀग़࣌ͷӨڹΛখ ͨ͘͞͠Γɺٳ৬ɺୀ৬࣌ͷࣦޮΛࣗಈԽ • ΫϥΠΞϯτɺαʔόʹconsul-templateΛಋೖ͠ɺೝূ݁ՌͷԆ໋ɺ
ূ໌ॻͷߋ৽ΛࣗಈԽ
ٕज़෦ Ϣʔβ ٕज़෦αʔό ਓࣄ෦αʔό 1.ೝূཁٻ 2.ೝূཁٻ 3.ೝՄ 4. 1͚ٕͩज़෦αʔόʹ ଓՄೳͳূ໌ॻͱ伴Λ
͍ग़͠ 5. mTLSଓ GitHubͷϢʔβʔʹΑΔೝূೝՄ
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ه๏Ͱূ໌ॻͷग़ྗɺ ֤छϛυϧΣΞͷઃఆϑΝΠϧͳͲΛग़ྗͰ͖Δ
Ϣʔβʔೝূ
ύεϑϨʔζ҆શ͔ʁ • ैۀһͷར༻͍ͯ͠ΔαʔϏεͷηΩϡϦςΟɾΠϯγσϯτ • ར༻ͷฆࣦιʔγϟϧɾϋοΩϯά ύεϑϨʔζैۀһͷաࣦͷ༗ແʹؔͳ͘ ྲྀग़͢ΔՄೳੑ͕͋Δ
ύ ε ϫ υ ͷ ఆ ظ త ͳ ม
ߋ ͯ Ϣ β ͷ ҆ ͳ ύ ε ϫ υ ઃ ఆ Λ ༠ ൃ ͢ Δ ͔ Β · Δ Ͱ ҙ ຯ ͳ ͍ ແ ҙ ຯ ͷ ۃ Έ ʂ ʂ ʂ
None
https://haveibeenpwned.com/
ଟཁૉೝূඞਢ • ύεϑϨʔζɺൿີ伴͍ͭͩͬͯྲྀग़ͷϦεΫ͕͋Δ • ηΩϡϦςΟτʔΫϯੜମೝূΛར༻ͨ͠ଟཁૉೝূ͕ඞਢ
Կ͔͋ͬͨͱ͖ʹɺ Ͳ͏ؾ͔ͮ͘ʁ
߈ܸऀͷྨ 1. εΫϦϓτΩσΟ: πʔϧͰ߈ܸͯ͘͠Δೳྗͷ͍߈ܸऀ 2. ඪ४ܕ߈ܸऀ : ಛఆͷඪతΛૂͬͨ߈ܸऀ 3. ΠϯαΠμʔڴҖ:
ಛݖΛ࣋ͨͳ͍෦Ϣʔβʔ 4. ৴པ͞ΕͨΠϯαΠμʔ: ಛݖΛ࣋ͭ෦Ϣʔβʔ 5. ࠃՈϨϕϧͷΞΫλʔ: ࠃՈͷࢧԉΛड͚ɺ५ͳϦιʔεΛ࣋ͭ߈ܸऀ Evan GilmanɺDoug Barthɹஶɺླ ݚޗɹ༁ θϩτϥετωοτϫʔΫ ʮ2.1.1 ҰൠతͳڴҖϞσϧʯΑΓҾ༻
େମ ͨ·ͨ·߈ܸ͞Εͯͳ͍͔ ߈ܸ͞Ε͍ͯΔ͜ͱʹ ؾ͍͍ͮͯͳ͍
AuditLog • γεςϜOSʹߦΘΕͨ͋ΒΏΔૢ࡞͕ه͞Ε͍ͯΔ • ୭͕ɺ͍ͭɺͲ͜ͰɺͳʹΛͨ͠ • LinuxͰ͋ΕauditdɺkubernetesͰ͋Εkube-apiserverͷauditlogͳͲ ҰൠతͳOSɺϛυϧΣΞʹଘࡏ͢Δ • ͋ΒΏΔϩά߈ܸऀ͔Βফ͞ΕΔՄೳੑ͕͋ΔͷͰɺ
χΞϦΞϧλΠϜʹόοΫΞοϓ͢Δ͔ɺҟৗݕ͢Δඞཁ͕͋Δ
OSSEC • ࠪϩάΛݩʹͨ͠৵ೖݕ • ϑΝΠϧมߋݕ • ϧʔτΩοτ/ϚϧΣΞݕ • γεςϜΠϯϕϯτϦ https://www.ossec.net/
Wazuh https://documentation.wazuh.com/current/getting-started/architecture.html
Ϣʔβʔ͕Կ͔͕ͨ͠௨͞ΕΔ
ϗετΠϯϕϯτϦཧՄೳ ద߹͍ͯ͠Δ CVE • Πϯετʔϧ͞Ε͍ͯΔύοέʔδ • ىಈ͍ͯ͠Δϓϩηε • Ϧοεϯ͍ͯ͠Δϙʔτ
θϩτϥετωοτϫʔΫͷ ଟཁૉೝূͱ໋ͳূ໌ॻ ࠪج൫
ͳΜ͔Ͱ͖ͨ LinuxͰҙͷPHPεΫϦϓτͰ Ϣʔβʔೝূ͕࣮ߦͰ͖Δ
σϞ ࠑॲ͔ΒઌͲ͏ͳΔ͔ ·ΔͰΘ͔Βͳ͍
PHPͷC֦ுͰ͋Δͷ͕ͩ…
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ͷΤϥʔ
CͱPHPͷΦϒδΣΫτͷड͚͠ pamh CͷίϯςΩετ PHPͷίϯςΩετ pam_authenticate($pamh) get_user($pamh) get_user($pamh) call call call
CͰੜ͞ΕͨϙΠϯλΛ૬ޓʹΓऔΓ͢Δ
zend_register_resource zend_register_resource(pamh, le_pam_handle) CͷϙΠϯλͳͲͷΦϒδΣΫτΛ PHPͷϦιʔεͱͯ͠ొ͢Δ͜ͱͰ PHPͰѻ͍͘͢͢Δ
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &arg) == FAILURE) { RETURN_FALSE; } pamh
= (pam_handle_t *)Z_RES_P(arg); ͍͑ͬʂʂʂʂ
ࠓͨ͜͠ͱ • ڥքϞσϧΫϥυશͷࡢࠓʹ͓͍ͯѻ͍ͮΒ͍͜ͱଟ͘ɺ·ͨ ڥք͕ແඋͳ͜ͱ͕ଟ͍ • mTLSΛ׆༻͢ΔͳͲͯ͠ɺ௨৴ܦ࿏ͷೝূɺ҉߸ԽΛར༻͢Δ • ύεϑϨʔζৗʹྲྀग़ͷϦεΫ͕͋ΔͷͰɺଟཁૉೝূΛඞͣར༻͢Δ • pam-phpΛར༻ͨ͠ɺϓϥΨϒϧͳೝূͰޮੑͱ҆શੑΛ֬อ͢Δ
·ͩࠓͷ࠾༻͋Γ·͢ʂʂ ਓྨͷΞτϓοτΛ૿͠·͠ΐ͏ˠ !QC@SFDSVJU