Before we even bother looking at existing extended syslog
implementations, I think we need to discuss what exactly we're trying to
accomplish.  I'll throw my hat in the ring with a list of my criteria
for an ideal logging system.  I'll try and stay away from implementation
details - this is what the system must do, not how it must do it.  Feel
free to suggest other features, features listed that aren't totally
necessary, etc.  Once we're done with this phase and actually know what
we need to accomplish, then we can turn our attention toward looking at
existing implementations and seeing which ones we can build from, what
neat tricks we can steal, what existing network protocols we can sit on
(SSL/TLS and the security stuff in IPv6 come to mind), etc.


Log Authenticity, Reliability, Immutability, Privacy, and other meaty
security issues:

    * Subjects must have appropriate privilege to log to non-generic
      facilities.  This could be based on UID, group membership, or,
      ideally, Orange Book type "privileges."
    * Similarly, subjects must have appropriate privilege to read log
      entries.  This can be done with filesystem-level security, by
      locking the CD-ROM's in a cabinet, or by software in the Trusted
      Computing Base that only passes log entries from <facility> to
      processes authorized to read log entries from that facility
      (implies final log entries are tagged by facility or separate log
      files are created for each facility).
    * Only the logging component of the system's Trusted Computing Base
      can receive logs (e.g., only root can open /dev/log for reading,
      only members of group kmem can read /dev/kmem, etc.).
    * In machine-to-machine log transfers, both the source and
      destination logging processes (not just the machines) must be
      authenticated to each other using mechanisms such as digital
      signatures or challenge-response.  Additionally, the recipient will
      only accept logs from authorized systems and will identify the
      source machine in the logs.
    * Logs have reliable timestamps.  This implies either that machines
      must keep their times synchronized (NTP, etc.), or that the logs
      record the time differences between machines in some way
      (explicitly or by having a local timestamp for each machine each
      log entry passes through).
    * Logs are immutable.  This can be done by storing to write-once
      media (worm, tapes that are ejected after being written, etc.), by
      having the logging system as part of the system's Trusted Computing
      Base and controlled through Mandatory Access Controls so that the
      log files are immutable (even by root, etc.), cryptographic
      methods, and/or by having a dedicated trusted logging system on the
      network (which may itself employ one or more of the other methods).
    * The system must be able to guarantee that logs are never "lost in
      the ether" (but it should optionally be able to drop the guarantee
      based on facility/level).

Manageability:

    * Handle logs based on severity/facility much like current syslogd.
    * Must minimally be able to handle logs going to local storage, the
      console, network storage, and piped to a program.  Ability to
      e-mail, to a logged in user, or to SNMP traps an added plus, but
      all could be handled by piping to a simple program.  Obviously,
      logs sent to a logged in user, SNMP, e-mail, or a pipe may have
      relaxed security guarantees.
    * (Re-)Configuration of logging facilities/levels/destinations,
      authentication mechanisms, and authorization mechanisms can be
      done:
        a. On the fly.
        b. From the command line and/or by modifying config files.
        c. From a GUI.

Extensibility:

    * Easy to add new logging facilities and have all machines understand
      them and without recompiling source code.  Easiest if tags for
      facilities are textual names instead of numbers.  Of course,
      programs using existing syslog() interface will be limited to using
      facilities pre-defined at compile time, but that's not necessarily
      a killer since programs using this interface can't change what
      facility they use without recompiling anyway.

Investment protection, interoperability, and other misc. issues:

    * Programs can use existing logging API's (syslog(), logger, NT
      logging APIs?), though new API's could be added to get full
      features.
    * Interoperates (at least in degraded mode) with existing syslog
      network protocol as both source and sink.
    * The process receiving logs for machine-to-machine logging must be
      thoroughly reviewed for security flaws such as buffer overruns to
      ensure that this mechanism can safely be used "inbound" through
      trust boundaries such as firewalls.
    * The protocols must be simple enough to build support into
      firewalls.  For example, simple one-port TCP connections in one
      direction only.

--
Chris Calabrese
Internet Infrastructure and Security
Merck-Medco Managed Care, L.L.C.
[EMAIL PROTECTED]
.


Reply via email to