セキュリティのためのEffective Logging

Websec.ioの 「Effective Security Logging with Monolog」 というエントリが参考になったので要点を紹介する。

いつ・なにをロギングするか

  1. ユーザーアクション & 管理(ログイン、ログアウト、プロフィールの更新、権限の変更)
  2. リクエストに関する情報(ホスト名、HTTPメソッド、アクセスされたURI)
  3. (例外が投げられたときのように)発生した可能性のあるエラー
  4. 他のシステム/Webサービスとの相互接続

Effective Loggingのための"The Five Ws"

  • Who was involved?(誰が関係しているか)
  • What happened?(何が起きたか)
  • Where did it happen?(どこで発生したか)
  • When did it happen?(いつ発生したか)
  • Why did it happen?(なぜ発生したか)
  • How did it happen?(どのように発生したか)

なお、最後の項目が"H"で始まっているのはご愛敬。

ログの例(JSON形式)

{
     "datetime": ISODate() in UTC
     "user": {
          "uid": "555-ccornutt",
          "sid": "fsa4324fdsbvcxbvcx7893fds"
     },
     "request": {
          "port": 80,
          "protocol": "HTTP",
          "method": "GET",
          "hostname": "www.myserver.com",
          "servername": "myserver.com"
          "uri": "http://myserver.com/user/test",
          "remote_addr": "192.168.1.1"
     },
     "event": {
          "type": "error"
          "data": {
               "msg": "The user did something stupid",
               "code": 1234,
               "type": "user",
               "severity": "low"
          }
     }
}