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
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
1.9k
継続的な負荷検証を目指して
pyama86
3
1.6k
成長期における、 ユーザー領域の複雑さと 整備の進め方
pyama86
1
620
Stay Hacker 〜九州で生まれ、Perlに出会い、コミュニティで育つ〜
pyama86
2
6.3k
Managing Database Migrations in Go Backend Systems
pyama86
0
490
新しい職場の CI が 20 分かかっていたらあなたならどうする?
pyama86
2
1.5k
事業を差別化する技術を生み出す技術
pyama86
4
2.2k
Re:Define 可用性を支える モニタリング、パフォーマンス最適化、そしてセキュリティ
pyama86
9
11k
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
2k
Other Decks in Technology
See All in Technology
RSA暗号を手計算したくなること、ありますよね?? (20260615_orestudy6_rsa)
thousanda
0
160
Agent Skills設計で柔軟性と硬さのバランスが難しい話
nassy20
0
110
Agentic ERPをどう設計するか ー 受発注エージェントを動かす、現場の知見と設計思想ー
recerqainc
1
2.2k
Snowflakeと仲良くなる第一歩
coco_se
4
400
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
1.9k
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
3
2k
ルールやカスタム機能、どう活かす?ハンズオンで体感するIBM Bobの出力コントロール
muehara
1
130
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
670
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
290
新しいVibe Codingと”自走”について
watany
5
280
AWSシリコン最前線 〜AI時代のチップ選択を読み解く〜
htokoyo
2
380
手塩にかけりゃいいってもんじゃない
ming_ayami
0
230
Featured
See All Featured
Optimizing for Happiness
mojombo
378
71k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
The Spectacular Lies of Maps
axbom
PRO
1
800
Believing is Seeing
oripsolob
1
140
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
160
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
200
Between Models and Reality
mayunak
4
330
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
830
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
850
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