Upgrade to Pro — share decks privately, control downloads, hide ads and more …

正規表現のReDoS脆弱性を判定するVSCode拡張機能

 正規表現のReDoS脆弱性を判定するVSCode拡張機能

Ran350

May 13, 2024
Tweet

More Decks by Ran350

Other Decks in Technology

Transcript

  1. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは

    ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 自己紹介 @hoshina350 らん Ran350 https://ran350.github.io/ Webフロントエンド勉強中 自己紹介 2
  2. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは

    ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 3 正規表現とは 正規表現ってなんや!! 正規表現とは
  3. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 9 選択 rits

    または univ というパターンを表す 例 (rits)|(univ) どちらか一方にマッチするかをみる
  4. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 10 繰り返し r

    または rr または rrr または rrrr … にマッチする 例 「r+」 直前のパターンが繰り返されていることを表現
  5. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 11 使ってみる JavaScriptでの例

    例題 入力文字が”Rits”かを判定する ただし,”t”は何文字でも良い const regex = /Rit+s/; regex.test( “Ritttts” ); true
  6. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは

    ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 14 ReDoS脆弱性 ReDoS脆弱性 使い方を間違うと危険!
  7. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 15 ReDoS脆弱性とは ReDoS

    (Regular Expressions DoS) 評価に非常に長い時間が必要になる正規表現の脆弱性
  8. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 17 実験してみる すぐに実行完了する

    const regex = /(a|.)+b/; regex.test( “a”.repeat(20) ); 20文字の”a”に対するマッチング
  9. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 18 実験してみる const

    regex = /(a|.)+b/; regex.test( “a”.repeat(30) ); ……15秒で実行完了した 30文字の”a”に対するマッチング
  10. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 19 実験してみる …………………

    実行が終わらん const regex = /(a|.)+b/; regex.test( “a”.repeat(40) ); 40文字の”a”に対するマッチング
  11. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは

    ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 22 事例 事例 サービスへの影響は?
  12. #セキュアシステム開発実験 / @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/ など
  13. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは

    ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 24 原因 原因 なんで起こるん
  14. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは

    ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 31 対策 対策 脆弱な表現を生まないためには?
  15. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 34 対策 世の中の正規表現はしばしば複雑

    (?:(?:¥"|'|¥]|¥}|¥¥|¥d|(?:nan|infinity|true|false|null|undefined|symbol|math)|¥`|¥-|¥+)+[)]*;?((?:¥s|-|~|!|{}|¥|¥||¥+)*.*(?:.*=.*)))
  16. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 目次 … 自己紹介 正規表現とは

    ReDoS脆弱性 事例 原因 対策 VSCode拡張機能 × 39 VSCode拡張機能 VSCode拡張機能 つくった!
  17. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 40 概要 正規表現の脆弱性判定ができる

    VScode 拡張機能 ソースコード: https://github.com/Ran350/redos-checker-for-vscode 内部で脆弱性判定ライブラリ recheck を呼び出している https://github.com/MakeNowJust-Labo/recheck
  18. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 41 使い方 1.

    脆弱性判定したい正規表現をカーソル選択する 2. 右クリックメニュー or コマンドパレットから拡張機能を実行 3. 判定結果が表示される
  19. #セキュアシステム開発実験 / @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"); ステータス出力
  20. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 44 展望 •

    誰でも利用できるようにパッケージ化したい ◦ 現在はデバッグモードでの利用 • 脆弱性判定を自前実装したい
  21. #セキュアシステム開発実験 / @hoshina350 #セキュアシステム開発実験 / @hoshina350 × 45 まとめ •

    正規表現は 文字列処理でめっちゃ便利 • でも,脆弱な表現では 処理が終わらなくなる危険性もある! • 対策方法の1つとして,脆弱性判定ができるエディタ拡張機能をつくった