例外処理は、さまざまな方法でさまざまなエラー状態(ネットワークダウンやデータベース接続の失敗など)にアプリケーションが応答できるようにするプログラミング概念です。 例外やエラーを正しく処理することは、コードの信頼性と安全性を高める上で非常に重要です。 エラー処理と例外処理は、重要なビジネスロジックやセキュリティ機能、フレームワークコードなど、アプリケーションのすべての領域で発生します。 エラー処理は、侵入検知の観点からも重要です。 アプリケーションに対する特定の攻撃は、進行中の攻撃を検知するのに役立つエラーを引き起こす可能性があります。
トロント大学の研究者は、エラー処理の誤りやエラー処理の忘れが、分散システムの致命的な障害につながる可能性があることを発見しました。 エラー処理の誤りは、さまざまな種類のセキュリティ脆弱性につながる可能性があります。
- 情報漏洩:機微情報をエラーメッセージに出力することは、意図せずに攻撃者を助ける可能性があります。例えば、スタックトレースやその他の内部エラーの詳細を返すエラーによって、攻撃者はシステムの環境に関する情報を得ることができます。さまざまなエラー条件(例えば、認証エラーで「無効なユーザ」または「無効なパスワード」を返すなど)を処理する際のわずかな違いでも、攻撃者に貴重な手がかりを与えます。上記のとおり、フォレンジックやデバッグの目的でエラーの詳細を記録してください。ただし、この情報を特に外部のクライアントには公開しないでください。
- TLSバイパス:アップルの「goto fail bug」は、アップルシステム上のTLS接続の侵害につながるエラー処理コードの制御フローエラーです。
- DOS: 基本的なエラー処理の欠如は、システムのシャットダウンにつながる可能性があります。これは、攻撃者が容易に悪用可能な脆弱性です。他のエラー処理の問題として、システムを劣化させるような方法でCPUまたはディスクの使用量を増加させる可能性があります。
- コード内のtry / catchブロックの重複を避けるため、例外処理を中央集約管理します。すべての予期しない動作がアプリケーション内部で正しく処理されていることを確認してください。
- ユーザに表示されるエラーメッセージが重要なデータを漏らさず、かつユーザの適切な対応を促すには十分であることを確認してください。
- サポート、QA、フォレンジック、またはインシデント対応チームが問題を理解するのに十分な情報を提供できるように、例外が記録されていることを確認してください。
- エラー処理コードを慎重にテストし、検証してください。
- OWASP Code Review Guide: Error Handling
- OWASP Testing Guide: Testing for Error Handling
- OWASP Improper Error Handling
- CWE 209: Information Exposure Through an Error Message
- CWE 391: Unchecked Error Condition
- Error Prone - Googleの静的解析ツールで、Java開発者のエラー処理におけるよくある間違いを捕捉します。
- 実行時にエラーを検出するための最も有名な自動ツールの1つがNetflixのChaos Monkeyです。これは、システムインスタンスを意図的に無効にして、サービス全体が正しく復元することを保証します。