Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
リモートワーク時代の守護神 PHP開発者のためのセキュリティ強化術
Search
Kazuhiko Yamashita
June 22, 2024
Technology
1.7k
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.5k
継続的な負荷検証を目指して
pyama86
3
1.8k
成長期における、 ユーザー領域の複雑さと 整備の進め方
pyama86
1
770
Stay Hacker 〜九州で生まれ、Perlに出会い、コミュニティで育つ〜
pyama86
2
6.6k
Managing Database Migrations in Go Backend Systems
pyama86
0
570
新しい職場の CI が 20 分かかっていたらあなたならどうする?
pyama86
2
1.5k
事業を差別化する技術を生み出す技術
pyama86
4
2.3k
Re:Define 可用性を支える モニタリング、パフォーマンス最適化、そしてセキュリティ
pyama86
9
11k
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
2.1k
Other Decks in Technology
See All in Technology
山手線を徒歩で一周してわかった、 位置情報アプリは「足」が最強のデバッガー
hinakko
0
110
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
220
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
4
430
生成AIのテナント制御とシャドーMCP対策 | AIを"止めずに"、情報を守る
yukun
0
150
すぐできる衛星通信対応 あとは山奥に行くだけ
tatetate55
0
100
AI時代だからこそ、スケールしないことをやろう
yutashigemura
1
140
Tab5をRubyで動くパソコンにする
kishima
2
340
GoCon2026 - Open Source, Open World
sanposhiho
4
3.2k
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
2
440
Amazon S3 Tablesに全部任せてみた結果——コンパクション/スナップショット管理は本当に手放せるか
shigeruoda
1
470
AIオーケストレーションを活用した 開発ワークフローの設計と実践
bqnq
0
130
DEFCON_CHV_CTF_Write-up.pdf
bata_24
0
140
Featured
See All Featured
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
520
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
310
Building Adaptive Systems
keathley
44
3.2k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Six Lessons from altMBA
skipperchong
29
4.5k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
240
Technical Leadership for Architectural Decision Making
baasie
3
560
Bash Introduction
62gerente
615
220k
The Invisible Side of Design
smashingmag
301
52k
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