Soumettre la recherche
Mettre en ligne
ReDos検出プログラムの作成とOSSへの適用 #seccamp
•
1 j'aime
•
1,988 vues
Y
Yujiro Yahata
Suivre
SecurityCamp2020 Z-Ⅲゼミ全体発表資料
Lire moins
Lire la suite
Logiciels
Signaler
Partager
Signaler
Partager
1 sur 16
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
ReDosトラック内発表資料
ReDosトラック内発表資料
Yujiro Yahata
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
Yoshinori Matsunobu
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
Recruit Technologies
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
NTT DATA Technology & Innovation
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版
Masahiro Tomita
Eclipse Iceoryx Overview
Eclipse Iceoryx Overview
Tomoya Fujita
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
Recommandé
ReDosトラック内発表資料
ReDosトラック内発表資料
Yujiro Yahata
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
Yoshinori Matsunobu
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
Recruit Technologies
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
NTT DATA Technology & Innovation
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版
Masahiro Tomita
Eclipse Iceoryx Overview
Eclipse Iceoryx Overview
Tomoya Fujita
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
NTT DATA OSS Professional Services
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
Masahito Zembutsu
MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版
Masahiro Tomita
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
Naruhiko Ogasawara
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
NTT DATA Technology & Innovation
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
Koichiro Matsuoka
開発から見たWindowsの国際化機能
開発から見たWindowsの国際化機能
Tadahiro Ishisaka
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
sairoutine
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
Nobuyuki Sasaki
binary log と 2PC と Group Commit
binary log と 2PC と Group Commit
Takanori Sejima
その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?
Narimichi Takamura
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
PostgreSQL失敗談
PostgreSQL失敗談
Takashi Meguro
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
pospome
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
例外設計における大罪
例外設計における大罪
Takuto Wada
文字コードに起因する脆弱性とその対策
文字コードに起因する脆弱性とその対策
Hiroshi Tokumaru
Contenu connexe
Tendances
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
NTT DATA OSS Professional Services
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
Masahito Zembutsu
MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版
Masahiro Tomita
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
Naruhiko Ogasawara
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
NTT DATA Technology & Innovation
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
Koichiro Matsuoka
開発から見たWindowsの国際化機能
開発から見たWindowsの国際化機能
Tadahiro Ishisaka
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
sairoutine
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
Nobuyuki Sasaki
binary log と 2PC と Group Commit
binary log と 2PC と Group Commit
Takanori Sejima
その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?
Narimichi Takamura
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
PostgreSQL失敗談
PostgreSQL失敗談
Takashi Meguro
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
pospome
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
例外設計における大罪
例外設計における大罪
Takuto Wada
文字コードに起因する脆弱性とその対策
文字コードに起因する脆弱性とその対策
Hiroshi Tokumaru
Tendances
(20)
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
開発から見たWindowsの国際化機能
開発から見たWindowsの国際化機能
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
binary log と 2PC と Group Commit
binary log と 2PC と Group Commit
その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
PostgreSQL失敗談
PostgreSQL失敗談
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
例外設計における大罪
例外設計における大罪
文字コードに起因する脆弱性とその対策
文字コードに起因する脆弱性とその対策
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
Télécharger maintenant