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
CVE alive
ennael
PRO
0
360
Oracle Cloud Infrastructure:2024年9月度サービス・アップデート
oracle4engineer
PRO
0
350
RAGの性能を評価しよう
kurahara
1
280
【shownet.conf_】多様化するネットワーク環境を柔軟に統合するルーティングテクノロジー
shownet
PRO
0
280
【shownet.conf_】持続可能な次世代Wi-Fi運用に向けて
shownet
PRO
0
260
ORM と向き合う
hoto17296
7
5.9k
エムスリー全チーム紹介資料 / Introduction of M3 All Teams
m3_engineering
1
210
Oracle Database 23ai 新機能#4 Real Application Clusters
oracle4engineer
PRO
0
110
Sansanにおける全社横断データ分析基盤の挑戦と未来 / Challenges and Future of Cross-Organizational Data Analytics Platform at Sansan
sansan_randd
2
310
Perlで始めるeBPF: 自作Loaderの作り方 / Getting started with eBPF in Perl_How to create your own Loader
takehaya
1
180
LINEヤフー新卒採用 コーディングテスト解説 実装問題編
lycorp_recruit_jp
1
12k
AWSへのNIST SP800-171管理策 導入に向けての整備/20240930 Mitsutoshi Matsuo
shift_evolve
0
150
Featured
See All Featured
Optimizing for Happiness
mojombo
375
69k
For a Future-Friendly Web
brad_frost
174
9.3k
KATA
mclloyd
27
13k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Rails Girls Zürich Keynote
gr2m
93
13k
Facilitating Awesome Meetings
lara
49
6k
Six Lessons from altMBA
skipperchong
26
3.4k
It's Worth the Effort
3n
183
27k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
327
21k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
225
22k
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!