ロギングは、ほとんどの開発者がすでにデバッグと診断目的で使用している概念です。 セキュリティロギングは、アプリケーションのランタイムオペレーション中にセキュリティ情報をログに記録することと同等の概念です。 モニタリングは、さまざまな形態の自動化がなされたアプリケーションログとセキュリティログのライブレビューです。 同じツールとパターンをオペレーション、デバッグ、セキュリティ目的で使用できます。
セキュリティロギングは以下のように利用されます。
- IDSへの入力
- フォレンジック分析と調査
- 法的なコンプライアンス要件を満たすこと
セキュリティロギングの実装のベストプラクティスを以下に示します。
- システム内および組織のシステム間で、共通のロギングフォーマットとアプローチに従います。一般的なロギングフレームワークの例として、Java、PHP、.NET、およびC ++アプリケーション間のログの一貫性を提供するApache Logging Servicesがあります。
- ログを取りすぎたり少なすぎたりしないでください。例えば、タイムスタンプを常に記録し、ソースIPとユーザIDを含む情報を識別するようにしてください。ただし、秘密または機密データを記録しないように注意してください。
- タイムスタンプが矛盾しないことを確認するために、ノード間の時間同期に細心の注意を払ってください。
ロギングを使用して、ユーザが悪意のある行為をしていることを示すアクティビティを特定します。 ログに記録される潜在的な悪意のあるアクティビティを以下に示します。
- 想定されている数値範囲外のデータの送信
- 変更可能とすべきではないデータが変更された上でのデータの送信(リスト、チェックボックス、またはその他の限定された入力コンポーネント)
- サーバサイドのアクセス制御ルールに違反する要求
- 検知観点のより包括的なリストはAppSensor DetectionPoints
アプリケーションにおいて上記のアクティビティが生じた際には、アプリケーションは少なくともそのアクティビティをログに記録し、セベリティの高い問題としてマークする必要があります。理想的には、アプリケーションは、ユーザのセッションを無効にし、ユーザのアカウントをロックするなど、攻撃された可能性のある事象にも対応する必要があります。対応メカニズムにより、ソフトウェアは攻撃された可能性のある事象に対してリアルタイムに反応することができます。
ロギングソリューションは、セキュアな方法で構築および管理する必要があります。 セキュアなロギングの設計には、以下を含みます。
- ログインジェクションやログ偽装攻撃を防ぐために、ログに記録する前に危険な文字をエンコードして検証します。
- 例えば、パスワード、セッションID、クレジットカード、社会保障番号等の機微情報を記録しないでください。
- ログの完全性を維持します。 攻撃者はログを改ざんしようとする可能性があります。 したがって、ログファイルとログ変更の監査の権限を考慮する必要があります。
- 分散したシステム郡から中央のセキュアなロギングサービスにログを転送します。これにより、1つのノードが不正アクセスされた場合でもログデータを失うことはありません。また、中央集約したモニタリングも可能になります。
- OWASP AppSensor Detection Points – 検知観点は、アプリケーションの脆弱性または弱点を調査している悪意のあるユーザを識別するために使用されます。
- OWASP Log injection
- OWASP Log forging
- OWASP Cheat Sheet: Loggingアプリケーションで適切にロギングを実装する方法
- OWASP Development Guide: Logging
- OWASP Code Review Guide: Reviewing Code for Logging Issues