Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
正規表現のReDoS脆弱性を判定するVSCode拡張機能
Search
Ran350
May 13, 2024
Programming
440
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
正規表現のReDoS脆弱性を判定するVSCode拡張機能
Ran350
May 13, 2024
More Decks by Ran350
See All by Ran350
2038年問題が思ったよりヤバい。検出ツールを作って脅威性評価してみた論文 | Kansai Open Forum 2024
ran350
8
5.9k
UNIXよ2038年を越えてゆけ
ran350
6
130k
2038年問題の原因となりうるソースコードの自動検出手法の提案と実装 | 研究室 全体ゼミ発表
ran350
0
1.3k
Other Decks in Programming
See All in Programming
Press start. Python's next generation.
willingc
PRO
3
330
Hono + Inertia + React で LP を構築した話
oukayuka
2
220
Building an Out-of-Order CPU
latte72
1
750
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
3
150
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
5.7k
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
280
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
120
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
230
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
2
270
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
360
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
110
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
470
Featured
See All Featured
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
570
Git: the NoSQL Database
bkeepers
PRO
432
67k
WCS-LA-2024
lcolladotor
0
820
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
680
Measuring & Analyzing Core Web Vitals
bluesmoon
9
990
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.7k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.3k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
300
Transcript
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 正規表現の
脆弱性を判定する VSCode拡張機能 1
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは
ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 自己紹介 @hoshina350 らん Ran350 https://ran350.github.io/ Webフロントエンド勉強中 自己紹介 2
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは
ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 3 正規表現とは 正規表現ってなんや!! 正規表現とは
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 4 正規表現とは 様々な文字列を一つの文字列で表現する表記法
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 5 ???どゆこと
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 6 使い道 入力文字列が条件を満たすかを判定するときによく使う
^[a-zA-Z0-9]+$ 入力文字列が全角半角英数字かを判定したいとき 例
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 7 基本3演算 連接,選択,繰り返し
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 8 連接 rというパターンの直後にeというパターンが続く
例 「re」
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 9 選択 rits
または univ というパターンを表す 例 (rits)|(univ) どちらか一方にマッチするかをみる
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 10 繰り返し r
または rr または rrr または rrrr … にマッチする 例 「r+」 直前のパターンが繰り返されていることを表現
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 11 使ってみる JavaScriptでの例
例題 入力文字が”Rits”かを判定する ただし,”t”は何文字でも良い const regex = /Rit+s/; regex.test( “Ritttts” ); true
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 12 めっちゃ便利やん!
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 13 でも実は…
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは
ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 14 ReDoS脆弱性 ReDoS脆弱性 使い方を間違うと危険!
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 15 ReDoS脆弱性とは ReDoS
(Regular Expressions DoS) 評価に非常に長い時間が必要になる正規表現の脆弱性
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 16 脆弱な表現例 (a+)+b
(a|.)+ abc.+def.+
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 17 実験してみる すぐに実行完了する
const regex = /(a|.)+b/; regex.test( “a”.repeat(20) ); 20文字の”a”に対するマッチング
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 18 実験してみる const
regex = /(a|.)+b/; regex.test( “a”.repeat(30) ); ……15秒で実行完了した 30文字の”a”に対するマッチング
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 19 実験してみる …………………
実行が終わらん const regex = /(a|.)+b/; regex.test( “a”.repeat(40) ); 40文字の”a”に対するマッチング
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 20 処理時間が指数関数的に増加
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 21 やばいやん
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは
ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 22 事例 事例 サービスへの影響は?
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 23 事例 •
2016年,Stack Overflowのサーバが ReDoS脆弱性が原因でダウン https://stackstatus.net/post/147710624694/outage-postmortem-july-20-2016 • 2019年,Cloudflareが提供する全世界のCDNが, ReDoS脆弱性が原因でダウン https://blog.cloudflare.com/details-of-the-cloudflare-outage-on-july-2-2019/ など
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは
ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 24 原因 原因 なんで起こるん
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 25 原因 バックトラックが指数関数的に増加してしまうこと
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 26 原因 「(a|.)*」の例では,状態遷移の仕方が一通りに定まらない場合がある
→ 分岐が多くなり2^n通りの比較が必要に
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 27 脆弱な正規表現の具体的な特徴は?
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 28 脆弱な表現① 量指定子がネストされている
• (a*)*b • (a+)+b • (a*){9}
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 29 脆弱な表現② 選択の両方にサブマッチし得るパターンが繰り返されている
• (.|¥w)* • (a|aa)*
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 30 脆弱な表現③ 繰り返し表現が連結している
• (a|b)*(a|c)*d • .*.*d • abc.*def.*
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは
ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 31 対策 対策 脆弱な表現を生まないためには?
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 32 対策 脆弱な表現①②③を避ける!
以上!
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 33 せやけど
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 34 対策 世の中の正規表現はしばしば複雑
(?:(?:¥"|'|¥]|¥}|¥¥|¥d|(?:nan|infinity|true|false|null|undefined|symbol|math)|¥`|¥-|¥+)+[)]*;?((?:¥s|-|~|!|{}|¥|¥||¥+)*.*(?:.*=.*)))
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 35 対策 人間の目で脆弱性判定するのは困難
プログラムに判定してもらうほうが適切
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 36 開発環境で脆弱性判定できたらええなぁ もっと言うと…
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 37 探してみたけど...ないなぁ
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 38 つくるか
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは
ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 39 VSCode拡張機能 VSCode拡張機能 つくった!
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 40 概要 正規表現の脆弱性判定ができる
VScode 拡張機能 ソースコード: https://github.com/Ran350/redos-checker-for-vscode 内部で脆弱性判定ライブラリ recheck を呼び出している https://github.com/MakeNowJust-Labo/recheck
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 41 使い方 1.
脆弱性判定したい正規表現をカーソル選択する 2. 右クリックメニュー or コマンドパレットから拡張機能を実行 3. 判定結果が表示される
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 42 デモ 実演
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 43 機能構成 選択範囲を取得
const editor = vscode.window.activeTextEditor; const document = editor.document; const selectedArea = editor.selection; const regex = document.getText(selectedArea); 脆弱性判定 const result = check(regex, ""); vscode.window.showWarningMessage("vulnerable.", "More"); ステータス出力
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 44 展望 •
誰でも利用できるようにパッケージ化したい ◦ 現在はデバッグモードでの利用 • 脆弱性判定を自前実装したい
#セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 45 まとめ •
正規表現は 文字列処理でめっちゃ便利 • でも,脆弱な表現では 処理が終わらなくなる危険性もある! • 対策方法の1つとして,脆弱性判定ができるエディタ拡張機能をつくった