勉強前イメージ
ReZeroみたいな....
Dos攻撃したら返ってくるってこととか?
調査
ReDoS とは
Regular expression Denial of Service の略で
Regular expression(正規表現) を使った脆弱性を使った攻撃のことを指します。
なぜ正規表現が攻撃になるかというと、正規表現によるパターンのマッチングには膨大な計算が必要になることがあります。
その正規表現を使ってリソースを専有して 可用性を奪う
攻撃になります。
正規表現はあらゆる場所で利用されているので攻撃の範囲はとても広いです。
正規表現についての詳細は こちら に記載しております。
ReDoSの原因
ReDoSが発生してしまう原因として、 バックトラック
が増加しているからです。
バックトラック
とは片方の分岐に進み文字列を処理していった結果、次の文字を処理できなかった場合に一旦状態を分岐の前まで戻してから
別の分岐を試行することで計算量が膨大になります。
あくまでマッチしなかった際に起こりえます。
ReDoSの対策
- 正規表現の書き方の注意
繰り返しの文字や繰り返しのネストを使わないことが重要です。
文字列の長さに対して計算量が増えていきます。
- 文字数の制限
正規表現の入力文字を制限することで軽減することはできます。
ただ、少ない文字数でも影響が出る場合もあるのであくまで軽減になります。
- 可視化ツールやチェッカーを使う
正規表現を可視化するツールなど用いて複雑になっていないかチェックすることが必要です。
- タイムアウトを設定する
正規表現のマッチング処理が終わらずリソースを消費するのが攻撃です。
ですので一定時間処理に時間がかかるようであればタイムアウトを行い正規表現の見直しが必要です。
勉強後イメージ
正規表現すらも攻撃になってしまう・・・!