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
脆弱星に導かれて
Search
MUNEAKI NISHIMURA
August 31, 2024
Technology
2
1.8k
脆弱星に導かれて
P3NFEST 2024 Summerの講演資料です。
MUNEAKI NISHIMURA
August 31, 2024
Tweet
Share
More Decks by MUNEAKI NISHIMURA
See All by MUNEAKI NISHIMURA
Brave Browserの脆弱性を見つけた話(iOS編)
nishimunea
3
2.3k
ブラウザの脆弱性とそのインパクト
nishimunea
26
9.6k
脆弱性発見者が注目する近年のWeb技術
nishimunea
29
13k
脆弱性発見者の目から見た、脆弱性対応の最前線
nishimunea
15
2.7k
Slack Team for Security Testers and Bug Hunters
nishimunea
1
740
Finding Vulnerabilities in Firefox for iOS
nishimunea
3
8.3k
SWIFT Code for Mozilla Bank
nishimunea
1
870
次世代プラットフォームのセキュリティモデル考察
nishimunea
6
5.1k
Other Decks in Technology
See All in Technology
成果のためのコミュニケーション - 語彙を育てよう -/communication-for-good-outcome-developing-vocabulary
hassaku63
4
140
エムスリーマネジメントチーム紹介資料 / Introduction of M3 Management Team
m3_engineering
0
250
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
2
200
How CERN serves 1EB of data via FUSE
ennael
PRO
0
15k
Strict Concurrencyにしたらdeinitでクラッシュする話
0si43
0
120
Efficient zero-copy networking using io_uring
ennael
PRO
0
270
k6を活用した再現性・拡張性の高い負荷試験基盤の構築
biwashi
11
2.9k
Valuable Software Engineering
avandeursen
0
250
Causal Impactを用いたLINE Pay UIの効果検証とABテスト実施への貢献
lycorptech_jp
PRO
3
490
Consoles, printk, Nested-NMIs_ Oh my!
ennael
PRO
0
160
Amazon BedrockとPR-Agentでコードレビュー自動化に挑戦・実際に運用してみた
diggymo
0
550
Understanding and Optimising INP
akshayysharma
0
150
Featured
See All Featured
Docker and Python
trallard
40
3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
167
48k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
5
220
Imperfection Machines: The Place of Print at Facebook
scottboms
263
13k
Making the Leap to Tech Lead
cromwellryan
130
8.8k
Designing for humans not robots
tammielis
249
25k
Art, The Web, and Tiny UX
lynnandtonic
295
20k
Producing Creativity
orderedlist
PRO
341
39k
Raft: Consensus for Rubyists
vanstee
136
6.6k
BBQ
matthewcrist
84
9.2k
Fontdeck: Realign not Redesign
paulrobertlloyd
81
5.2k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
230
17k
Transcript
脆弱星に導かれて P3NFEST 2024 Summer Muneaki Nishimura (nishimunea)
⾃⼰紹介 ⻄村 宗晃(にしむねあ) ブラウザの脆弱性を探すのが⼤好き 好きなブラウザはFirefox https://www.slideshare.net/codeblue_jp/firefox-by https://files.speakerdeck.com/presentations/3cf321f5ee4d4aaba9f18305ee2a461c/SWIFT_Code_for_Mozilla_Bank__nishimunea_.pdf 1
これまでに⾒つけた脆弱性 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件
Braveブラウザの脆弱性発⾒数 “元” 世界1位 HackerOneにおけるBraveブラウザの脆弱性発⾒者ランキングにて 昨年の夏頃まで世界1位 3 https://hackerone.com/brave/thanks
しかしその後、ポケモンカードにのめり込んでしまい 毎週末、ポケモンカードの⼤会に参加し、脆弱性探しを疎かにしたところ… 4 https://pokekameshi.com/gurenarma-bullet/ https://www.youtube.com/watch?v=HGNzstB8xkE シティリーグ2024シーズン4 ポケモンカード公式チャンネル
Braveブラウザの脆弱性発⾒数 世界2位(現在) ⾸位に圧倒的な差を付けられて2位に転落… 5 https://hackerone.com/brave/thanks
6 今⽇は継続することの⼤切さを お伝えしたいと思います サボって2位に 転落した私から
本⽇お話すること 1. 脆弱性を探しはじめたきっかけとそれから 2. 脆弱性の⾒つけ⽅ 3. まとめ 7
1. 脆弱性を探しはじめたきっかけとそれから
きっかけはセキュリティ・キャンプ 技術系コミュニティでWebセキュリティの情報発信をしていたところ、 キャンプ講師の推薦を頂いた(2014年) 9 突然なんですけど セキュリティキャンプとか 興味あったりしませんか︖ え︕ありますあります︕ でも私で勤まるのでしょうか…
安易に引き受けてみたものの募る葛藤 著名な講師陣と全国から選び抜かれたチューター達 ⾃分だけ⽰せる実績が何も無い… 10 https://warp.ndl.go.jp/info:ndljp/pid/8701679/www.ipa.go.jp/jinzai/camp/2014/zenkoku2014_te.html
そんなある⽇ 講義内容を相談する中、Mozillaの中の⼈(当時)から、 Firefoxブラウザの脆弱性報奨⾦制度の存在を教わる 11 脆弱性報奨⾦制度で貰った ⼩切⼿の話でもすれば︖ そんなものがあるんですか…
そして報奨⾦制度へ挑戦することに 脆弱性を⾒つければ発⾒者として名前が載る(Proven Track Record) 逆に脆弱性が⾒つからなければ⾃分の実⼒はその程度 ⾒つからなければ講師を辞退しようと考えていた 12 https://web.archive.org/web/20081002084317/https://www.mozilla.org/ja/security/bug-bounty.html
しかし脆弱性が⾒つからないまま半年が過ぎる 脆弱性を探すのは砂漠から⼀粒のダイアモンドを⾒つけるようなもの 世界中のプレーヤーも同じように脆弱性を探している → 発⾒者⼀覧(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件
だけど脆弱性を探す半年間は楽しかった 脆弱性は⾒つからなくても、毎⽇、新しい発⾒や感動があった 特に先⼈たちの攻撃コードを解析するときのワクワクがたまらなかった 14 https://bugzilla.mozilla.org/show_bug.cgi?id=947592
そんなある⽇(再び) 過去に発⾒された脆弱性の攻撃コードを試したら、同じ脆弱性が再現した ⾼速化のため、コードを書き直した際に再発したらしい 15 2012年にBhargavan⽒が報告した脆弱性 2014年に私が報告した脆弱性(CVE-2014-1591) 同じ脆弱性が再発
偶然⾒つけた脆弱性だけど 初めて⾒つけた1件の脆弱性が、⼤きな⾃信につながった 同じ⼿法を応⽤することで、多くの脆弱性を⾒つけられるようにもなった 16 2015年2⽉ 2015年3⽉ 2015年10⽉ → →
1件の脆弱性が⼈⽣を⼤きく変える転機となった 1/3 2015年、CODE BLUEでの登壇 発表を機に、多くのセキュリティ関係者との交流の機会を頂いた 17 https://www.youtube.com/watch?v=8yClLHKOzIU
1件の脆弱性が⼈⽣を⼤きく変える転機となった 2/3 2016年、WooYunの主催するカンファレンス(中国北京)での講演 2千⼈を超える聴講者の前での発表は⼤きな⾃信につながった 18 https://www.instagram.com/p/BHodJxgjniL/
1件の脆弱性が⼈⽣を⼤きく変える転機となった 3/3 様々な⽂章を書く機会にも恵まれた 繰り返すうち、⻑⽂の執筆も苦にならないようになった 19 ブラウザハック 監訳 WEB+DB PRESS No.103
寄稿 Mozilla Attack & Defense Blog 寄稿
何より⼤切だったのは 6ヶ⽉間、くじけずに脆弱性を探し続けた⽇々だった ⾒つからなくても「どうせ6ヶ⽉くらい⾒つからなくて当たり前」と考え 前に進んだことが、⼤きな転機につながった 20 5⽉ 6⽉ 7⽉ 8⽉ 9⽉
10⽉ 件数 0件 0件 0件 0件 0件 0件 何より⼤切だった⽇々
2. 脆弱性の⾒つけ⽅ 参考にならない かもですが…
⼿法① ソースコードを⼀通り全部読む 1/2 初⾒の場合は、GitHub上でソースコードを全部タブで開き、上から読んでいく 22 タブで全部開いて上から順に読む
⼿法① ソースコードを⼀通り全部読む 2/2 既に読んだことのある製品の場合は、git diffコマンドで差分を読んでいく 次第に「枝刈り」の能⼒が⾝に付いて、速く読めるようになっていく 23 ーで始まる⾏を削除すると 読みやすくなる
⼿法①で⾒つけた脆弱性の例(Bug 1767205) iOS版Firefoxのヒストリー管理画⾯にSQLインジェクションの脆弱性があった 悪⽤することで、ユーザの履歴を外部へ盗み出すことができた($2,000) 24 https://bugzilla.mozilla.org/show_bug.cgi?id=1767205 ※⾃動翻訳
⼿法② ビルドして⼿元で動かす 気になる箇所を⾒つけたら、⼿元で動かして挙動を確認していく ソースコードにログを埋め込むと解析がスムーズになる 25
⼿法②で⾒つけた脆弱性の例(Bug 1840958) 開発途中のクレジットカード⾃動⼊⼒機能にUXSSの脆弱性があった カード情報の更新機能を⽤いて悪意のあるスクリプトを登録させ、 他サイトにカード情報を⾃動⼊⼒した際に発⽕させることができた($9,000) 26 https://bugzilla.mozilla.org/show_bug.cgi?id=1840958 ※⾃動翻訳
⼿法③ 仕様を確かめる 気になる機能を⾒つけたら、まずは仕様書を確認する 仕様を読むことで、新たな攻撃⼿法の着想を得ることができる 27 https://www.w3.org/TR/referrer-policy/ Referrer-Policyヘッダは <a referrerpolicy>属性で ダウングレードできるのか
⼿法③で⾒つけた脆弱性の例(Bug 1861405) 先述の仕様を悪⽤することで、HTMLインジェクションを⽤いて、 Firefox内部ページのURLに含まれる機密情報を盗み出すことができた($3,000) 28 https://bugzilla.mozilla.org/show_bug.cgi?id=1861405 ※⾃動翻訳 Firefoxの内部ページ Content-Security-Policy: default-src
'none' <meta name="referrer" content="never"> <a referrerpolicy="unsafe-url" href="***"> Click Me HTML インジェクション Referer: 機密情報を含むURL 攻撃者のサーバ
⼿法④ 過去の脆弱性を調べる その製品で過去にどのような脆弱性が指摘されたかを調査する 類似の脆弱性が繰り返し再発することがある(先述) 29 2012年にBhargavan⽒が報告した脆弱性 2014年に私が報告した脆弱性(CVE-2014-1591) 同じ脆弱性が再発
⼿法④で⾒つけた脆弱性の例(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)
⼿法⑤ 全ての⼿法を組み合わせる これまでの⼿法を組み合わせることで、数多くの着想を得ることができる 31 ⼿法① ソースコード ⼿法② 実際の動作 ⼿法③ 仕様
⼿法④ 過去の脆弱性 ✕ ✕ ✕ 本来どうあるべきか どこに何があるか それはどう動くか 何が起きたらダメか
⼿法⑤で⾒つけた脆弱性の例(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版 <a download> iOS版 PDF表⽰ iOS版 ダウンローダ Bug 1657251 ($1,000) Bug 1658231 ($250) Bug 1663261 ($500) Bug 1684624 ($500) Bug 1670127 ($500)
3. まとめ
はせがわさんのコメントに⾔いたいことが全部書いてあった… 34 https://issuehunt.jp/events/2024/summer/p3nfest
35 最初の⼀歩を是⾮踏み出してみましょう︕
Happy Hacking!