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
2.2k
継続的な負荷検証を目指して
pyama86
3
1.7k
成長期における、 ユーザー領域の複雑さと 整備の進め方
pyama86
1
670
Stay Hacker 〜九州で生まれ、Perlに出会い、コミュニティで育つ〜
pyama86
2
6.4k
Managing Database Migrations in Go Backend Systems
pyama86
0
520
新しい職場の 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
ヘルスケア領域における AI 活用と その安全性担保のための取り組み (Leveraging AI in Healthcare and Our Efforts to Ensure Its Safety) - Google I/O Extended Tokyo 2026, July 11, 2026
zettaittenani
0
170
『AIに負けない』より『AIと遊ぶ』」〜ワクワクが最強のテスト・QA学習戦略_公開用
odan611
2
510
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
11k
知見・人・API・DB・予算 ─ ナイナイ尽くしだった人事データ整備 with dbt、5年間の学び
ken6377
1
170
はじめてのWDM
miyukichi_ospf
1
120
プライバシー保護の理論と実践
lycorptech_jp
PRO
1
250
NDIAS CTF 2026 問題解説会資料
bata_24
0
180
アカウントが増えてからでは遅い? ~ マルチアカウント統制の勘所 ~
kenichinakamura
0
190
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
12
4.9k
GuardrailからGovernanceへ~AIエージェント運用の次の課題~
sbspsy
1
220
ループエンジニアリングでE2Eテストを実践
noriyukitakei
0
310
小さいから、全部わかる。— 常駐AI "xangi" のすすめ
sugupoko
0
270
Featured
See All Featured
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
670
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Building an army of robots
kneath
306
46k
Scaling GitHub
holman
464
140k
Ruling the World: When Life Gets Gamed
codingconduct
0
270
Deep Space Network (abreviated)
tonyrice
0
220
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
180
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
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