ログ設計 戯言

ログ設計。極論を言えば、黙ってても完璧に動き続けるシステムを設計すればログはいらない。

  1. 動いている証拠が欲しい (運用ログ、実行ログ)
  2. 故障する予兆が知りたい(性能ログ、ワーニング)
  3. 故障した原因が知りたい(エラー、バックトレース)
  4. 運用に役立つ情報を集めたい

owasp

  • セキュリティインシデントの特定
  • ポリシー違反の特定
  • ベースラインの構築
  • 否認防止(non-repudiation)
  • 問題や異常の記録
  • ビジネスプロセスの監視・記録
  • 監査証跡 (データの作成・追加・変更・削除・持ち出し)
  • 性能チェック
  • データ
  • その他、外部要求によるもの全て

アプリケーションログ、セキュリティログ、監査・証跡・トランザクションログは通常分ける。

データの収集元

基本的にアプリケーションが全て。ユーザ情報(ID, role, permission)と文脈(内容、アクション、出力)を管理している。

サブシステムがある場合、そちらもログのデータ元になる。クライアントツール、モバイルアプリ、OS、データベース、ファイアウォール、 IDSなど。

ログの保存先

ファイルシステムかデータベース

何を記録するか

  • 入力異常
    • protocol violation
    • unacceptable encoding
    • invalid parameter name, value
  • 出力異常
    • database record
    • invalid data encoding
  • 認証
    • authentication success, failure
    • authorization (access control) failure
  • セッション
    • cookie session value modification
  • システムイベント
    • runtime error
    • connection error
    • performance issue
    • third party service error
    • file system error
    • configuration change
  • システム開始・終了
    • start
    • stop
    • pause
  • リスクの大きい機能
    • network connection
    • create/delete user
    • change permission
    • use of admin previlege
    • issue a token
    • access to payment cardholder
    • use/change of data encryption key
    • create/delete system-level object
    • import/export data
  • 法的
    • permission for mobile app
    • permission for legal notice
    • agree to terms & conditions
  • Optional
    • sequence failure
    • excessive use
    • data change
    • fraud/criminal activity
    • modification to configuration

どのように記録するか

  • When

    • timestamp
    • event timestamp
    • interaction id
    2023-04-16 14:23:34+09:00  INFO { 
        "id": "sampleEvent",
        "time": "2023-04-16T14:23:30+09:00",
    }
    
  • Where

    • application id (name, version)
    • application address
      • hostname
      • ipv4,v6, port
    • service
    • location
      • window
      • form
      • dialog
      • page
      • url
    • source_code
      • script
      • module
    2023-04-16 14:23:34+09:00  INFO app::myapp { 
        "appId": "app",
        "appVer": "1.0.0",
        "serverId": "srv01",
    }
    
  • Who

    • origin
      • user (name, ip)
      • machine id
      • host
    • user identity
      • user name
      • database primary_key
    2023-04-16 14:23:34+09:00  INFO { 
        "reqHost": "150.12.14.14",
        "reqUser": "testuser",
    }
    
  • What

    • serverity (fatal, error, warning, info, debug, trace...)
    • flag
    • description
    2023-04-16 14:23:34+09:00  WARN "login failed" data={ 
        "escalation": false,
        "description": "login failed"
    }
    
  • Items to consider

    • action (purpose of the request)
      • login
      • refresh
      • logout
    • object
      • id
      • name
      • size
    • result
      • success
      • fail
    • reason
      • why it happened?
    • user-type
      • anonymous
      • authenticated
      • test
      • machine
    • priority, detection-confidence
      • low
      • medium
      • high
    • http
      • request headers
    • details
      • stack trace
      • system error message
      • debug info
      • request headers
      • response headers
  • https://cheatsheetseries.owasp.org/cheatsheets/Logging_Cheat_Sheet.html

  • https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Logging_Cheat_Sheet.md