メインコンテンツまでスキップ

8. Security Considerations (セキュリティに関する考慮事項)

8. Security Considerations (セキュリティに関する考慮事項)

技術的にはこの仕様の範囲外ですが, RFC 3629 [STD63] の第 10 節 ("セキュリティに関する考慮事項" (Security Considerations)) が実装に適用されます。RFC 3629 [STD63] の第 3 節 ("UTF-8 定義" (UTF-8 definition)) の最後の段落に特に注意する必要があります。I-Regexp 実装は, この点でプラットフォーム実装の制限を緩和する必要がある場合があります。

セクション 6 で説明したように, より複雑な正規表現ライブラリには, クラッシュやリモートコード実行 (Remote Code Execution) につながる可能性のある悪用可能なバグ (Exploitable Bugs) が含まれている可能性があります。また, このようなライブラリはしばしば予測が困難なパフォーマンス特性 (Performance Characteristics) を持ち, 攻撃者が制御する高価な正規表現と照合することによって実装を過負荷にする攻撃につながるという問題もあります。

I-Regexp は, 両方の脅威に対して耐性のある方法で実装できるように設計されています。この目標は, 実装作業全体を通じて対処する必要があります。非チェック実装 (セクション 3.1 を参照) は, 使用する正規表現エンジンのセキュリティ制限を露出する可能性がありますが, そのエンジンがセキュリティを考慮して構築されている場合 (例えば [RE2]), これはそれほど問題にならない可能性があります。いずれの場合でも, チェック実装 (Checking Implementation) は依然として推奨されます。

I-Regexp サブセットを特に実装する実装は, 注意深く行えば, 通常は入力に対して線形時間および空間 (Linear Time and Space) で実行され, そうでない場合を検出するように設計できます (以下を参照)。

既存の正規表現エンジンは, ほとんどの I-Regexp (セクション 5 で説明した調整後) を簡単に処理できるはずですが, 一部のタイプの I-Regexp では過剰なリソースを消費したり, 効率的な実行を保証できないために完全に拒否したりする可能性があります。(同じ正規表現ライブラリの異なるバージョンは, これらのケースで過剰なリソース消費に対してより脆弱またはより脆弱でない可能性があることに注意してください。)

具体的には, 範囲量指定子 (Range Quantifiers) (a{2,4} など) は, 既存の実装と I-Regexp に焦点を当てた実装の両方に特別な課題を提供します。したがって, 実装は範囲量指定子の構成可能性 (Composability) ((a{2,4}){2,4} などのネストされた範囲量指定子を許可しない) または範囲 (a{20,200000} などの非常に大きな範囲を許可しない) を制限したり, 範囲量指定子によって引き起こされる過剰なリソース消費を検出して拒否したりする可能性があります。

信頼できないソースからの正規表現を評価するために使用される I-Regexp 実装は, これらのケースで堅牢 (Robust) である必要があります。既存の正規表現ライブラリを使用する実装者は, 次のことが推奨されます:

  • リソース消費の制限などの緩和策 (Mitigations) が構成可能かどうかを確認するためにドキュメントを確認し,
  • そのような緩和策を採用することによって得られる自身の堅牢性の程度を文書化すること。