PHP Advent Calendar 2023の18日目の記事です。
PHPカンファレンスに登壇した記録を書きたいと思います。数えてみますと、2009年から昨年(2022年)までのPHPカンファレンス14回と、北海道2回、関西1回の合計17回登壇したことになります。
最初の登壇は14年前ですので、私の考えも当時からは変化していますので、そのあたりも触れながら紹介していきたいと思います。
PHP カンファレンス 2009
最初の登壇は2009年のPHPカンファレンスでした。この年はビジネスデイとテックデイに分かれていまして、ビジネスデイで登壇依頼を頂きましたので、当時温めていた「ウェブサイトを発注する際のセキュリティ」についてお話しました。
スライドの中で「脅威分析やってもあまり意味ない」みたいな物騒な意見が書いてあります。当時はそのように考えていたわけですが、これは当時のサイトがECサイトくらいを想定しておけばよく、個別の脅威分析の意味があまりないという感想であったわけですが、ウェブサービスが多様になった結果、(資産ベースではなく)機能や運用に対する脅威分析は必要だよねということで、この話題は2019年の「オニギリペイ」で出てきます。
PHPカンファレンス2010
この年はCFPに応募して採択されたものです。私が当時興味を持っていた文字コードのセキュリティをPHPを題材にしてお話したものです。事前のスピーカー飲み会の席で、「こういう話するんだけど伝わりますかねぇ」と隣りにいた@hnwさんと話したことを覚えていますが、その場では「難しいかもねぇ」という感じだったものの、本番は非常に多くの反響をいただき嬉しかったことを今でも覚えています。
文字コード由来のセキュリティ問題は、その後いくつかの理由により大きな脅威ではなくなりますが、その話題は、2014年2月のOWASPチャプターミーティングにて文字コードの脆弱性はこの3年間でどの程度対策されたか?という題で発表してます。
PHP Conference Japan 2011
2011年からは再び招待をいただきました。2011年は徳丸本初版が出た年ということで、徳丸本から題材を得た基本的なウェブセキュリティのお話をしました。
動画もありますが画質が時代を感じますね…
PHPカンファレンス北海道(2012年)
2012年春、PHPカンファレンス北海道に招待をいただき、前年のPHPカンファレンスと同じネタでは芸がないなと思い、「徳丸本に載っていないWebアプリケーションセキュリティ」というテーマでお話しました。詳しくは目次を見ていただきたいのですが、この当時から私がレースコンディション(排他制御の問題)に関心を持っていたことが分かります。最近でもマイナンバーカードによる証明書誤交付問題(piyokangoさんのまとめ)がレースコンディションによるものとして、古くて新しい話題かと思います。
PHPカンファレンス2012
2012年のPHPカンファレンスは「徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012」というタイトルで、体裁を前年のものを踏襲し、中身は入れ替えたものになりました。直前のPHPカンファレンス北海道から、レースコンディションの問題などは踏襲しています。「鉄則1: PHP自体の脆弱性対処をしよう」などは今見ても面白いなと思いましたが、スライドのみでは分かりにくいかも知れません。
また、この年からAjaxの話題が入り始めていて、PHPカンファレンスと言いつつ、JavaScriptの話題が混じりだします。これはウェブアプリの作り方が変わってきた影響と言えます。
PHPカンファレンス2013
2013年のPHPカンファレンスは、前年までとは少しスタイルを変えて、鉄則を10個ならべるのではなく、もう少しテーマを絞って以下について話しました。前年に引続きJavaScriptの話題もHTML5セキュリティという形で触れています。
- PHPのライフサイクルにどうつきあう?
- セッションフィクセイション結局どうする
- パスワードの守り方
- デモから学ぶHTML5セキュリティ入門
PHPカンファレンス関西2014
2014年6月、PHPカンファレンス関西に招待をいただきまして、「安全なPHPアプリケーションの作り方2014」というタイトルでお話しました。関西では初めてトークするということで、以下のような基本的な内容です。
- アプリケーションの脆弱性を対策しよう
- プラットフォームの脆弱性を対策しよう
- パスワードを保護しよう
PHPカンファレンス2014
PHPカンファレンス2014(東京開催)では、関西のものとタイトルは同じですが、中身は入れ替えています。
- PHPの脆弱性にどうつきあう?
- アプリケーションの脆弱性を対策しよう
動画もあります。冒頭で「今年は基礎的なことにフォーカスして…」と言っていますね。
PHPカンファレンス2015
カンファレンスのプログラムページが閲覧できない状態なので、以下の記事から参照ください。
PHPカンファレンスの2015では、「今どきのSQLインジェクションの話題総まとめ」というタイトルで、以下のテーマを取り上げています。「O/RマッパやSQLジェネレーターのSQLインジェク ションの話題」については、SQLインジェクション脆弱性の責務について、ライブラリ側責務とアプリケーション側責務の両方を取り上げています。
- SQLインジェクション対策もれの責任を開発会社に問う判決
- PHP入門書のSQLインジェクション脆弱性の状況
- O/RマッパやSQLジェネレーターのSQLインジェク ションの話題
動画もあります。動画末尾では質疑の模様も収録されていて、懐かしい感じです。
PHPカンファレンス北海道 2016
カンファレンスの案内サイトが消失していますのでアーカイブを示します。再び北海道のPHPカンファレンスに招待されましたので、2014年のアドベントカレンダーで書いたブログ記事『例えば、PHPを避ける』以降PHPはどれだけ安全になったかを題材としてデモを交えながら講演しました。
その際の動画は残っていませんが、2021年12月に同趣旨のYouTubeライブをしましたので、「こんな感じだった」ということでご視聴ください。
PHPカンファレンス2016
2016年のPHPカンファレンスでは、私の出番の前が@t_wadaさんの「PHP7で堅牢なコードを書く(スライド、動画)」で、私は会場で聴講しましたが本当に素晴らしい講演で非常に感銘を受けました。
この年のPHP関連の脆弱性のネタを紹介しました。以下のテーマです。
- Joomla! の権限昇格脆弱性 CVE-2016-8869、CVE-2016-8870
- Joomla! の安全でないデシリアライゼーション(オブジェクト・インジェクション)脆弱性 CVE-2016-7125
- ケータイキットのOSコマンドインジェクション脆弱性
- phpMyAdminの正規表現インジェクション脆弱性
- ZendFrameworkのSQLインジェクション脆弱性
- XSS(JavaScriptリテラルのエスケープ)
- 安全なウェブアプリケーションのための原則
動画はこちらから。
PHPカンファレンス2017
2017年のPHPカンファレンスは、演題は「著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則」でしたが、前振りとして「脆弱性の分類と"入力値"の関係」というテーマを取り上げています。ウェブアプリケーションにおける信頼境界をどう捉えるかというお話でして、信頼境界はあまり当てにしないで、できるだけ局所的に安全を積み重ねるべきだという結論でした。
PHPアプリの脆弱性例としては以下を取り上げています。振り返ると、この頃まではPHPアプリケーションに派手な脆弱性が多かったのですね。
- Welcart 1.9.3 の安全でないデシリアライゼーション(オブジェクトインジェクション)脆弱性
- Joomla2.5.2の権限昇格脆弱性
- phpMyAdminの正規表現イン ジェクション CVE-2013-3238
- DrupalのSQLインジェクション"Drupageddon"(CVE-2014-3704)
動画はこちら
PHP Conference 2018
2018年のPHPカンファレンスは、再び「安全なWebアプリケーションの作り方2018」という演題に戻して、以下のテーマを取り上げました。ちょうど徳丸本2版が出た年ですのでそちらの紹介もしています。
- 最近のウェブセキュリティを取り巻く話題
- OWASP Top 10 – 2017を巡る話題
- XXEとSSRF
- 安全でないデシリアライゼーション
- 割賦販売法改正・施行
- 安全なWebアプリケーションの作り方 改訂
SSRFはOWASP Top 10 – 2017には独立した項としては載っていませんが、XXEとの関連で紹介しています。ちょうど直前にSSRFのブログ記事を書いていたこともあり、AWS EC2のIMDS経由でS3ストレージのクレデンシャルを盗むというデモまでやっています。
翌年の2019年3月に、有名なSSRF攻撃によるCapitalOne事件があったわけですから、CapitalOneの社員もPHPカンファレンスを聴講していれば、この事件を防げていたかもしれませんね(ムリ)。
動画はこちら。
PHP Conference Japan 2019
2019年のPHPカンファレンスは、この年に起きた某ペイ事件に着想を得て、架空のペイメントサービス「オニギリペイ」で次々にセキュリティ事件が起きる想定で、サービスの企画・開発の上流工程での脅威分析、セキュリティ検討の重要性を説明する内容となりました。下表は各インシデントに対して、どの工程で検討しておくべきだったかを示しています。要はシフトレフトのお話なのですが、世の中のシフトレフトの説明が抽象的すぎて訳分からんという不満をかねがね持っていて、具体例を示したかったというものです。
講演直後は、こんな大ネタは再演の機会はないだろうと思っておりましたが、予想に反して、ネタを追加しつつ何度もやっています。初演(?)の動画はこちら。
動画の最後の方で、脅威分析について以下のように言っていますね。従来脅威分析についてあまり言ってなかったんですが、実は、まあぶっちゃけ(脅威分析なんて一部の専門家以外には)無理だろうという思いは昔ありましてですね、脅威分析しなくても「全部徳丸本に書いてある」という世界を目指していたわけです。
だからあの本は、あんなに分厚いんですね。
ですが、まぁ様々なサービスが広がるにつれて、まあそんなこと(本に全部書くこと)は不可能になってきましたので、じゃあまぁ頑張って(上流工程で)脅威分析をしようという風に考えています。
PHP Conference Japan 2020 Re:born
2020年のPHPカンファレンスは、コロナ禍が始まった年で初めてリモートでの開催になりました。運営側もさぞ苦労が多かっただろうと思います。この年は「ウェブセキュリティのありがちな誤解を解説する」というテーマで以下を取り上げています。今見返しても、さほど古さは感じないですね。
- 誤解1: Cookieは誤解がいっぱい
- 誤解2: 脆弱性があるページにのみ影響がある
- 誤解3: 脆弱なECサイトはセキュリティコードを保存している
- 誤解4: クレジットカードをサイトに保存すると漏洩リスクが高まる
- 誤解5: ハッシュ値で保存されたパスワードは復元されない
- 誤解6: 高価なSSL証明書ほど暗号強度が高い
- 誤解7: TRACEメソッドの有効化は危険な脆弱性である
- 誤解8: 怪しいサイトを閲覧すると情報が盗まれたりウイルスに感染する
- 誤解9: イントラのウェブサイトは外部からは攻撃できない
- 誤解10: セキュリティ情報はウェブで収集する
動画はこちら。
PHP Conference Japan 2021
2021年のPHPカンファレンスは「SPAセキュリティ入門」ということで、PHP成分が薄くなっていますが、SPA(Single Page Application)の特にセッション管理に焦点を当てた内容になっています。
動画はこちら。
PHP Conference Japan 2022
2021年のPHPカンファレンスは「SPAセキュリティ超入門」ということで、前年の内容が「入門」とついている割に難しかったのではないかという反省から、入門的な内容にしました。ドクセルの閲覧数を見ると「594.4K Views」となっていますが、早くから数十万Viewありまして、初めてView数を見た時に、これはドクセルのバグではないかと思ったものですが、そうではなく、この程度の入門的な内容に需要が多いのだろうと思います。
動画はこちら。
まとめ
PHPカンファレンスにおける過去の講演を振り返りました。後半の方の講演では、PHP成分がかなり薄くなってきていますが、やはり「PHPおよびPHPアプリケーションは脆弱性が多い」というのも過去の話になり、PHPのセキュリティを取り立ててお話をする必要性も薄くなってきたのではないかと感じます。
PHPカンファレンスには本当に長い間お世話になり、スタッフの皆様、スポンサー各位、参加いただいた皆様、ありがとうございました。いったんPHPカンファレンスでの登壇は卒業となりましたが、また話したいテーマが出てくればCFPを書いて登壇にチャレンジしてみたいですね。