Slide 1

Slide 1 text

脆弱星に導かれて P3NFEST 2024 Summer Muneaki Nishimura (nishimunea)

Slide 2

Slide 2 text

⾃⼰紹介 ⻄村 宗晃(にしむねあ) ブラウザの脆弱性を探すのが⼤好き 好きなブラウザはFirefox https://www.slideshare.net/codeblue_jp/firefox-by https://files.speakerdeck.com/presentations/3cf321f5ee4d4aaba9f18305ee2a461c/SWIFT_Code_for_Mozilla_Bank__nishimunea_.pdf 1

Slide 3

Slide 3 text

これまでに⾒つけた脆弱性 CVE数65件(未採番を含めると100件以上) 脆弱性の報奨⾦で⼟地のローンを完済 2 CVE-2014-1591 CVE-2015-5256 CVE-2017-10816 CVE-2017-7789 CVE-2023-49060 CVE-2014-8638 CVE-2015-6759 CVE-2017-10817 CVE-2018-1257 CVE-2023-49061 CVE-2015-0799 CVE-2015-6762 CVE-2017-10818 CVE-2020-15661 CVE-2023-6211 CVE-2015-0807 CVE-2015-7094 CVE-2017-10819 CVE-2020-15662 CVE-2024-0814 CVE-2015-0832 CVE-2015-7190 CVE-2017-10861 CVE-2020-26954 CVE-2024-26282 CVE-2015-2714 CVE-2015-7191 CVE-2017-10866 CVE-2020-26955 CVE-2024-26283 CVE-2015-2744 CVE-2015-8510 CVE-2017-10867 CVE-2020-26964 CVE-2024-2629 CVE-2015-2745 CVE-2016-1782 CVE-2017-2240 CVE-2021-21164 CVE-2024-31393 CVE-2015-3750 CVE-2016-1940 CVE-2017-2241 CVE-2021-23959 CVE-2024-38313 CVE-2015-3751 CVE-2016-1955 CVE-2017-2376 CVE-2021-23976 CVE-2015-3752 CVE-2016-2816 CVE-2017-5385 CVE-2021-29958 CVE-2015-5204 CVE-2016-2817 CVE-2017-5386 CVE-2021-30583 CVE-2015-5207 CVE-2016-7599 CVE-2017-5463 CVE-2022-1887 CVE-2015-5208 CVE-2017-10815 CVE-2017-7788 CVE-2022-31746 今年は現時点で6件

Slide 4

Slide 4 text

Braveブラウザの脆弱性発⾒数 “元” 世界1位 HackerOneにおけるBraveブラウザの脆弱性発⾒者ランキングにて 昨年の夏頃まで世界1位 3 https://hackerone.com/brave/thanks

Slide 5

Slide 5 text

しかしその後、ポケモンカードにのめり込んでしまい 毎週末、ポケモンカードの⼤会に参加し、脆弱性探しを疎かにしたところ… 4 https://pokekameshi.com/gurenarma-bullet/ https://www.youtube.com/watch?v=HGNzstB8xkE シティリーグ2024シーズン4 ポケモンカード公式チャンネル

Slide 6

Slide 6 text

Braveブラウザの脆弱性発⾒数 世界2位(現在) ⾸位に圧倒的な差を付けられて2位に転落… 5 https://hackerone.com/brave/thanks

Slide 7

Slide 7 text

6 今⽇は継続することの⼤切さを お伝えしたいと思います サボって2位に 転落した私から

Slide 8

Slide 8 text

本⽇お話すること 1. 脆弱性を探しはじめたきっかけとそれから 2. 脆弱性の⾒つけ⽅ 3. まとめ 7

Slide 9

Slide 9 text

1. 脆弱性を探しはじめたきっかけとそれから

Slide 10

Slide 10 text

きっかけはセキュリティ・キャンプ 技術系コミュニティでWebセキュリティの情報発信をしていたところ、 キャンプ講師の推薦を頂いた(2014年) 9 突然なんですけど セキュリティキャンプとか 興味あったりしませんか︖ え︕ありますあります︕ でも私で勤まるのでしょうか…

Slide 11

Slide 11 text

安易に引き受けてみたものの募る葛藤 著名な講師陣と全国から選び抜かれたチューター達 ⾃分だけ⽰せる実績が何も無い… 10 https://warp.ndl.go.jp/info:ndljp/pid/8701679/www.ipa.go.jp/jinzai/camp/2014/zenkoku2014_te.html

Slide 12

Slide 12 text

そんなある⽇ 講義内容を相談する中、Mozillaの中の⼈(当時)から、 Firefoxブラウザの脆弱性報奨⾦制度の存在を教わる 11 脆弱性報奨⾦制度で貰った ⼩切⼿の話でもすれば︖ そんなものがあるんですか…

Slide 13

Slide 13 text

そして報奨⾦制度へ挑戦することに 脆弱性を⾒つければ発⾒者として名前が載る(Proven Track Record) 逆に脆弱性が⾒つからなければ⾃分の実⼒はその程度 ⾒つからなければ講師を辞退しようと考えていた 12 https://web.archive.org/web/20081002084317/https://www.mozilla.org/ja/security/bug-bounty.html

Slide 14

Slide 14 text

しかし脆弱性が⾒つからないまま半年が過ぎる 脆弱性を探すのは砂漠から⼀粒のダイアモンドを⾒つけるようなもの 世界中のプレーヤーも同じように脆弱性を探している → 発⾒者⼀覧(Hall of Fame※)には400名以上の名前が記されている 13 ※ https://www.mozilla.org/en-US/security/bug-bounty/hall-of-fame/ 5⽉ 6⽉ 7⽉ 8⽉ 9⽉ 10⽉ 件数 0件 0件 0件 0件 0件 0件 半年間 0件

Slide 15

Slide 15 text

だけど脆弱性を探す半年間は楽しかった 脆弱性は⾒つからなくても、毎⽇、新しい発⾒や感動があった 特に先⼈たちの攻撃コードを解析するときのワクワクがたまらなかった 14 https://bugzilla.mozilla.org/show_bug.cgi?id=947592

Slide 16

Slide 16 text

そんなある⽇(再び) 過去に発⾒された脆弱性の攻撃コードを試したら、同じ脆弱性が再現した ⾼速化のため、コードを書き直した際に再発したらしい 15 2012年にBhargavan⽒が報告した脆弱性 2014年に私が報告した脆弱性(CVE-2014-1591) 同じ脆弱性が再発

Slide 17

Slide 17 text

偶然⾒つけた脆弱性だけど 初めて⾒つけた1件の脆弱性が、⼤きな⾃信につながった 同じ⼿法を応⽤することで、多くの脆弱性を⾒つけられるようにもなった 16 2015年2⽉ 2015年3⽉ 2015年10⽉ → →

Slide 18

Slide 18 text

1件の脆弱性が⼈⽣を⼤きく変える転機となった 1/3 2015年、CODE BLUEでの登壇 発表を機に、多くのセキュリティ関係者との交流の機会を頂いた 17 https://www.youtube.com/watch?v=8yClLHKOzIU

Slide 19

Slide 19 text

1件の脆弱性が⼈⽣を⼤きく変える転機となった 2/3 2016年、WooYunの主催するカンファレンス(中国北京)での講演 2千⼈を超える聴講者の前での発表は⼤きな⾃信につながった 18 https://www.instagram.com/p/BHodJxgjniL/

Slide 20

Slide 20 text

1件の脆弱性が⼈⽣を⼤きく変える転機となった 3/3 様々な⽂章を書く機会にも恵まれた 繰り返すうち、⻑⽂の執筆も苦にならないようになった 19 ブラウザハック 監訳 WEB+DB PRESS No.103 寄稿 Mozilla Attack & Defense Blog 寄稿

Slide 21

Slide 21 text

何より⼤切だったのは 6ヶ⽉間、くじけずに脆弱性を探し続けた⽇々だった ⾒つからなくても「どうせ6ヶ⽉くらい⾒つからなくて当たり前」と考え 前に進んだことが、⼤きな転機につながった 20 5⽉ 6⽉ 7⽉ 8⽉ 9⽉ 10⽉ 件数 0件 0件 0件 0件 0件 0件 何より⼤切だった⽇々

Slide 22

Slide 22 text

2. 脆弱性の⾒つけ⽅ 参考にならない かもですが…

Slide 23

Slide 23 text

⼿法① ソースコードを⼀通り全部読む 1/2 初⾒の場合は、GitHub上でソースコードを全部タブで開き、上から読んでいく 22 タブで全部開いて上から順に読む

Slide 24

Slide 24 text

⼿法① ソースコードを⼀通り全部読む 2/2 既に読んだことのある製品の場合は、git diffコマンドで差分を読んでいく 次第に「枝刈り」の能⼒が⾝に付いて、速く読めるようになっていく 23 ーで始まる⾏を削除すると 読みやすくなる

Slide 25

Slide 25 text

⼿法①で⾒つけた脆弱性の例(Bug 1767205) iOS版Firefoxのヒストリー管理画⾯にSQLインジェクションの脆弱性があった 悪⽤することで、ユーザの履歴を外部へ盗み出すことができた($2,000) 24 https://bugzilla.mozilla.org/show_bug.cgi?id=1767205 ※⾃動翻訳

Slide 26

Slide 26 text

⼿法② ビルドして⼿元で動かす 気になる箇所を⾒つけたら、⼿元で動かして挙動を確認していく ソースコードにログを埋め込むと解析がスムーズになる 25

Slide 27

Slide 27 text

⼿法②で⾒つけた脆弱性の例(Bug 1840958) 開発途中のクレジットカード⾃動⼊⼒機能にUXSSの脆弱性があった カード情報の更新機能を⽤いて悪意のあるスクリプトを登録させ、 他サイトにカード情報を⾃動⼊⼒した際に発⽕させることができた($9,000) 26 https://bugzilla.mozilla.org/show_bug.cgi?id=1840958 ※⾃動翻訳

Slide 28

Slide 28 text

⼿法③ 仕様を確かめる 気になる機能を⾒つけたら、まずは仕様書を確認する 仕様を読むことで、新たな攻撃⼿法の着想を得ることができる 27 https://www.w3.org/TR/referrer-policy/ Referrer-Policyヘッダは 属性で ダウングレードできるのか

Slide 29

Slide 29 text

⼿法③で⾒つけた脆弱性の例(Bug 1861405) 先述の仕様を悪⽤することで、HTMLインジェクションを⽤いて、 Firefox内部ページのURLに含まれる機密情報を盗み出すことができた($3,000) 28 https://bugzilla.mozilla.org/show_bug.cgi?id=1861405 ※⾃動翻訳 Firefoxの内部ページ Content-Security-Policy: default-src 'none' Click Me HTML インジェクション Referer: 機密情報を含むURL 攻撃者のサーバ

Slide 30

Slide 30 text

⼿法④ 過去の脆弱性を調べる その製品で過去にどのような脆弱性が指摘されたかを調査する 類似の脆弱性が繰り返し再発することがある(先述) 29 2012年にBhargavan⽒が報告した脆弱性 2014年に私が報告した脆弱性(CVE-2014-1591) 同じ脆弱性が再発

Slide 31

Slide 31 text

⼿法④で⾒つけた脆弱性の例(CVE-2021-21164) Microsoft社のブログに、iOS版Chromiumの脆弱性の探し⽅が掲載されていた 同様の⼿法で、他の箇所のUXSSの脆弱性を発⾒した($10,000) 30 https://microsoftedge.github.io/edgevr/posts/Hacking-Chrome-iOS/ https://issues.chromium.org/issues/40054408 ※⾃動翻訳 Microsoft社のブログ記事 私が発⾒した脆弱性(CVE-2021-21164)

Slide 32

Slide 32 text

⼿法⑤ 全ての⼿法を組み合わせる これまでの⼿法を組み合わせることで、数多くの着想を得ることができる 31 ⼿法① ソースコード ⼿法② 実際の動作 ⼿法③ 仕様 ⼿法④ 過去の脆弱性 ✕ ✕ ✕ 本来どうあるべきか どこに何があるか それはどう動くか 何が起きたらダメか

Slide 33

Slide 33 text

⼿法⑤で⾒つけた脆弱性の例(Bug 1657251 他) Firefoxのプライベートブラウジングモードの保護を迂回し、 継続的にユーザを追跡可能な脆弱性を複数報告した($2,750) 32 https://bugzilla.mozilla.org/show_bug.cgi?id=1657251 https://bugzilla.mozilla.org/show_bug.cgi?id=1658231 https://bugzilla.mozilla.org/show_bug.cgi?id=1663261 https://bugzilla.mozilla.org/show_bug.cgi?id=1684624 https://bugzilla.mozilla.org/show_bug.cgi?id=1670127 Android版 Favicon Android版 Web Notification Android版 iOS版 PDF表⽰ iOS版 ダウンローダ Bug 1657251 ($1,000) Bug 1658231 ($250) Bug 1663261 ($500) Bug 1684624 ($500) Bug 1670127 ($500)

Slide 34

Slide 34 text

3. まとめ

Slide 35

Slide 35 text

はせがわさんのコメントに⾔いたいことが全部書いてあった… 34 https://issuehunt.jp/events/2024/summer/p3nfest

Slide 36

Slide 36 text

35 最初の⼀歩を是⾮踏み出してみましょう︕

Slide 37

Slide 37 text

Happy Hacking!