Submit Search
Upload
ReDos検出プログラムの作成とOSSへの適用 #seccamp
•
1 like
•
1,986 views
Y
Yujiro Yahata
Follow
SecurityCamp2020 Z-Ⅲゼミ全体発表資料
Read less
Read more
Software
Report
Share
Report
Share
1 of 16
Download now
Download to read offline
Recommended
ReDosトラック内発表資料
ReDosトラック内発表資料
Yujiro Yahata
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
Recruit Technologies
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
なぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのか
Yusuke Suzuki
Cassandraとh baseの比較して入門するno sql
Cassandraとh baseの比較して入門するno sql
Yutuki r
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
Etsuji Nakai
トランザクションの設計と進化
トランザクションの設計と進化
Kumazaki Hiroki
Recommended
ReDosトラック内発表資料
ReDosトラック内発表資料
Yujiro Yahata
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
Recruit Technologies
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
なぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのか
Yusuke Suzuki
Cassandraとh baseの比較して入門するno sql
Cassandraとh baseの比較して入門するno sql
Yutuki r
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
Etsuji Nakai
トランザクションの設計と進化
トランザクションの設計と進化
Kumazaki Hiroki
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
haketa
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編
Yuki Morishita
WiredTigerを詳しく説明
WiredTigerを詳しく説明
Tetsutaro Watanabe
AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較
beyond Co., Ltd.
MongoDBの監視
MongoDBの監視
Tetsutaro Watanabe
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
分割と整合性と戦う
分割と整合性と戦う
Yugo Shimizu
Mongo dbを知ろう
Mongo dbを知ろう
CROOZ, inc.
私にとってのテスト
私にとってのテスト
Takuto Wada
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
NTT DATA Technology & Innovation
Spring 5に備えるリアクティブプログラミング入門
Spring 5に備えるリアクティブプログラミング入門
Takuya Iwatsuka
webエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのredis
nasa9084
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
NTT DATA Technology & Innovation
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Hiroshi Ito
WayOfNoTrouble.pptx
WayOfNoTrouble.pptx
Daisuke Yamazaki
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
Google Cloud Platform - Japan
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
Kumazaki Hiroki
【JEUG】 オープンSIEMの世界へ
【JEUG】 オープンSIEMの世界へ
Hibino Hisashi
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見
zaru sakuraba
More Related Content
What's hot
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
haketa
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編
Yuki Morishita
WiredTigerを詳しく説明
WiredTigerを詳しく説明
Tetsutaro Watanabe
AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較
beyond Co., Ltd.
MongoDBの監視
MongoDBの監視
Tetsutaro Watanabe
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
分割と整合性と戦う
分割と整合性と戦う
Yugo Shimizu
Mongo dbを知ろう
Mongo dbを知ろう
CROOZ, inc.
私にとってのテスト
私にとってのテスト
Takuto Wada
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
NTT DATA Technology & Innovation
Spring 5に備えるリアクティブプログラミング入門
Spring 5に備えるリアクティブプログラミング入門
Takuya Iwatsuka
webエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのredis
nasa9084
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
NTT DATA Technology & Innovation
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Hiroshi Ito
WayOfNoTrouble.pptx
WayOfNoTrouble.pptx
Daisuke Yamazaki
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
Google Cloud Platform - Japan
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
Kumazaki Hiroki
【JEUG】 オープンSIEMの世界へ
【JEUG】 オープンSIEMの世界へ
Hibino Hisashi
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見
zaru sakuraba
What's hot
(20)
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編
WiredTigerを詳しく説明
WiredTigerを詳しく説明
AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較
MongoDBの監視
MongoDBの監視
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
分割と整合性と戦う
分割と整合性と戦う
Mongo dbを知ろう
Mongo dbを知ろう
私にとってのテスト
私にとってのテスト
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
Spring 5に備えるリアクティブプログラミング入門
Spring 5に備えるリアクティブプログラミング入門
webエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのredis
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
WayOfNoTrouble.pptx
WayOfNoTrouble.pptx
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
【JEUG】 オープンSIEMの世界へ
【JEUG】 オープンSIEMの世界へ
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見
ReDos検出プログラムの作成とOSSへの適用 #seccamp
1.
[Z-Ⅲ] ReDoSの検出プログラムの 作成とOSSへの適用 受講生:長﨑 舜, 三浦
優也, 根本 昌也, 片岡 歩夢, 八幡 悠二郎 講師: 新屋 良磨, 藤浪 大弥 チューター:芦田 裕飛 1
2.
ReDoSとは? ReDoS (Regular expression
Denial of Service) 脆弱な正規表現が原因で起こるDoS攻撃。 脆弱な正規表現に特定の文字列が渡されることで 実行に大きな負荷がかかることがある。 2
3.
Z3チームの概要 ESLint DLした OSSプロジェクト 脆弱性検出 ダウンロード GitHub 脆弱性報告 オートマトン理論で ReDoSを検出 3
4.
Z3チームの概要 - ReDoS攻撃が起こる仕組みと、 オートマトン理論を用いた検出方法を学ぶ - ReDoS脆弱性検出プログラムを実装し、 JavaScriptの静的解析ツール(ESLint)に組み込む -
実際のOSSから脆弱性のある正規表現を探し出す - 見つけた脆弱性の報告・修正案を出してOSSに貢献する 4
5.
ReDoSの原因となる正規表現の例 脆弱な正規表現 攻撃文字列の例 1. /^(a|a)*$/
aaaaaaa……aab 2. /^a*a*$/ aaaaaaa……aab 文字列の長さに対してバックトラックに 1は指数時間 2は二乗時間かかる! 5文字列の長さ 処 理 時 間
6.
ReDoSの対象となる正規表現の検出 - オートマトンと呼ばれる、正規表現に対応するグラフ的構造を 解析することで、ReDoSの検出を厳密に行うアルゴリズムが 実装できる。 - アルゴリズムは理論的に複雑。 全体を実装するために書くべきコードの分量も多い。 6
7.
検出アルゴリズムはけっこう複雑 正規表現 構文木 ε-NFA NFA リバース DFA 枝刈り
SCC 直積 直積 SCC SCC EDA IDA 攻撃文字列 生成 7
8.
オートマトン ● 正規表現から構成できるグラフ構造のようなもの。 Google RE2
や GNU grep などの正規表現エンジンにも 採用されている。 ○ 右図は(a|a)*をオートマトン化したグラフの例 ○ q0が初期状態、二重丸が受理状態を表す ○ 初期状態から開始してすべての文字を読み込んだ後に受理 状態に遷移していれば良い ○ ‘aa’の場合q0→q3→q3と移動して受理状態に遷移する 8
9.
バックトラックとは バックトラック 前から順に文字列を見ていき後続のパターンがマッチしない場合、 一つ前のパターンに戻り別のマッチを試す方法 例 正規表現: (a|a)*
文字列: ’aaab’ (a|a)はaもしくはaを意味し、*は0個以上を意味する貪欲な量指定子である (a|a)の左のaにマッチしなくなるまで’aaab’を見ていき、bがマッチしないので一つ 戻って(a|a)の右のaでマッチを試す。最終的にbはマッチしないため左のaと右のa の両方の場合を試し2^4回試行してしまう 9
10.
1 … → 失敗 2
… → 失敗 3 … → 失敗 : 2^n … → 失敗、終了 正規表現の例:/^(a|a)*$/ 入力例: aa...aab 正規表現のオートマトンから、 図のような構造を発見する。 ReDoS原因の構造1: EDA 10
11.
正規表現の例:/^a*a*$/ 入力例: aa...aab EDA構造と同様に正規表現のオートマトンから、 図のような構造を発見する。 ReDoS原因の構造2:
IDA 11 1 … → 失敗 2 … → 失敗 3 … → 失敗 : n … → 失敗、終了
12.
枝刈り 絶対に遷移しない状態におけるEDA、IDA構造は脆弱性に入らない そのため、そのような遷移を取り除く必要がある 正規表現例: /^(.*|(a|a)*)*$/s 上の正規表現では.*ですべての文字列を受理してしまい、ReDoSの原因 (a|a)*に遷移することがない 不要な遷移を取り除くことでReDoSの誤検知を防ぐことができる 12
13.
ESLintについて JavaScriptのコードを静的解析して, 問題がある箇所を指摘できる. コマンドラインの他, VS
Codeなどエディタ上でも使用できる. ▽ 実際にReDoS検出を組み込んだESLint 13
14.
脆弱性検出対象を探す GitHubAPI + Pythonで, スター数順で上位のリポジトリをGitHubからダウンロード クエリ条件 JavaScriptリポジトリ star数が多い順 GitHubAPI制限回避が必要 →
OAuth認証済クエリ 14 OSSプロジェクト
15.
デモ動画 15
16.
実際のOSSで見つかった脆弱性の例 /<(.|n)*?>/ -> /^.*?<(.|n)*?>.*$/ 赤字の部分がIDA構造となり多項式時間がかかる場合がある (攻撃文字列の例:
<<<<<<...) /([ns]+|%[^n]*n)*(.)/ 繰り返しがネストしてかつ末尾の . がnを含まないためバックトラックが起こり、 指数時間がかかる場合がある (攻撃文字列の例: nnnnnn...) 16
Download now