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.9k
脆弱星に導かれて
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.4k
ブラウザの脆弱性とそのインパクト
nishimunea
26
9.7k
脆弱性発見者が注目する近年のWeb技術
nishimunea
29
13k
脆弱性発見者の目から見た、脆弱性対応の最前線
nishimunea
15
2.7k
Slack Team for Security Testers and Bug Hunters
nishimunea
1
750
Finding Vulnerabilities in Firefox for iOS
nishimunea
3
8.4k
SWIFT Code for Mozilla Bank
nishimunea
1
890
次世代プラットフォームのセキュリティモデル考察
nishimunea
6
5.2k
Other Decks in Technology
See All in Technology
VideoMamba: State Space Model for Efficient Video Understanding
chou500
0
190
AGIについてChatGPTに聞いてみた
blueb
0
130
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.6k
ハイパーパラメータチューニングって何をしているの
toridori_dev
0
140
信頼性に挑む中で拡張できる・得られる1人のスキルセットとは?
ken5scal
2
530
サイバーセキュリティと認知バイアス:対策の隙を埋める心理学的アプローチ
shumei_ito
0
380
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
670
OCI Security サービス 概要
oracle4engineer
PRO
0
6.5k
隣接領域をBeyondするFinatextのエンジニア組織設計 / beyond-engineering-areas
stajima
1
270
Evangelismo técnico: ¿qué, cómo y por qué?
trishagee
0
350
マルチプロダクトな開発組織で 「開発生産性」に向き合うために試みたこと / Improving Multi-Product Dev Productivity
sugamasao
1
300
Platform Engineering for Software Developers and Architects
syntasso
1
510
Featured
See All Featured
A Tale of Four Properties
chriscoyier
156
23k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Gamification - CAS2011
davidbonilla
80
5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Music & Morning Musume
bryan
46
6.2k
Writing Fast Ruby
sferik
627
61k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
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!