#
# From pkgsrc-wip, Author: Brian Seklecki
#

[Misc]
RedefUser0=+INO, +SIZ, +RDEV, +CHK, -MOD, -MTM, -ATM, -CTM, -GRP, -USR

# The new Samhain behavior is to check the checksum up the last-known size of
# the file, but *yes*, the inode will change when it becomes rotated and the size
# will get reset to a lesser value (in which case the check should know to passively 
# fail)
RedefGrowingLogFiles=-INO, -SIZ, +CHK, -MTM, -ATM, -CTM

#
# --------- / --------------
#

[ReadOnly]
dir = 99/

# This covers the contents of / including: /boot, /bin, /sbin, /lib, /libexec,
# /rescue, /root, /altroot, /usr, /var, /stand, /mnt, /tmp, /proc, /kern (Even 
# though /usr and /var will recieve overrides)

[Attributes]
file = /proc
file = /kern

[IgnoreAll]
dir=-1/proc
dir=-1/kern

#
# --------- /tmp -----------
#
[Attributes]
file=/tmp
[IgnoreAll]
dir=-1/tmp



#
# --------- /root --------------
#

# Per section 5.4.2.1 of the manual, Rule #5, there are lock file written here
# that changes the mtime/ctime of the dir, so we want to watch perms/ownership,
# ignore ctime/mtime/size, etc., but still watch the critical files inside.
# Note: in theory, /root should never change if you use sudo(8) w/o "-H"
[ReadOnly]
dir=/root/.gnupg
[Attributes]
file=/root/.gnupg
file=/root/.gnupg/random_seed

#
# --------- /dev -----------
#

[Attributes]
dir = 99/dev

# User0 will be for /dev/tty* and other devices where Owner/Group/Mode can 
# change but the Inode/Size/Device/Checksum should not change.

[User0]
file=/dev/tty*
file=/dev/pty*

#
# --------- /etc -----------
#

[ReadOnly]
##
## for these files, only access time is ignored
##
dir = 99/etc


# If you're running dhclient(8), resolv.conf will get re-written at renewal
# time so pray that he dhcpd(8) on your network doesn't get owned.
# Crytpo-signed DHCP traffic would be too much to ask from ISC, but maybe
# not from the OpenBSD hack

[Attributes]
file=/etc/dhclient.conf

# If you run CUPS, /etc/printcap gets re-written if you have
# "Browsing On" and "Printcap /etc/printcap" in cupsd.conf(5) 
[Attributes]
file=/etc/printcap


#
# --------- /usr -----------
#

# note about the following two: this reduced the size
# of the database greatly

#
# --------- /usr/pkgsrc -----------
#

# Leave this uncommented if you CVS update your pkgsrc
# periodically/automatically.  If you do not, comment it
# out and you should be informed about any unauthorized
# modifications to pkgsrc (which is an attack vector)

[IgnoreAll]
dir=-1/usr/pkgsrc

#
# --------- /usr/src -----------
#

# Leave this uncommented if you CVS update your src
# periodically/automatically.  If you do not, comment it
# out and you should be informed about any unauthorized
# modifications to src (which is an attack vector)


[IgnoreAll]
dir=-1/usr/src


#
# --------- /usr/home (/home) -----------
#


# /home may be a symlink to /usr/home on a stock system, but most admins cane
# that shit. [Attributes] could be replaced here by [ReadOnly] if we wanted to
# know about new users being added (on systems where there are no new users)

[Attributes]
file = /home
[IgnoreAll]
dir = -1/home

# 
# --------- /usr/compat/linux/etc -----------
#

# You're basically compromising your system by enabling Linux emulation anyway

[Attributes]
file = /usr/compat/linux/etc
file = /usr/compat/linux/etc/ld.so.cache

# 
# --------- /usr/compat/linux/proc -----------
#

# Uncomment if you have Linux Emulation/Compat Installed/Setup/Mounted
[Attributes]
file=/emul/linux/proc
[IgnoreAll]
dir=-1/emul/linux/proc


#
# --------- /var/run -----------
#

# New PID files may come, and PID files may go (as services on a system change),
# but then probably a database rebuild will occur.  But at the time of the
# database init, we should consider everything in here subject to change
# (checksum, times, size) during a daemon restart, but everything else stays
# the same.

# If you have periodic scripts that HUP daemons, the PID should be unachanged.
# However, force-restarts will be a new PID, so consider this

[Attributes]
dir=99/var/run

[Misc]
# Ignore sudo(8) TTY/PTY "Tickets" if you use sudo
IgnoreMissing = /var/run/sudo/[[:alnum:]]{1,9}/(p|t)ty.*$
IgnoreAdded = /var/run/sudo/[[:alnum:]]{1,9}/(p|t)ty.*$

#
# --------- /var/(spool|queue|etc.) -----------
#

[Attributes]
file=/var/cron/tabs
file=/var/spool/mqueue
file=/var/spool/clientmqueue
file=/var/mail
file=/var/tmp

#
# --------- /var/at -----------
#

# As deep as /var/at/ will be watched by 99/

[Attributes]
file=/var/at/spool
file=/var/at/jobs

#
# --------- /var/db -----------
#

# Some files are written directly into /var/db
[Attributes]
file=/var/db

[Attributes]
# Updatedb per /etc/periodic.d/weekly/310.locate (FreeBSD) or /etc/weekly (NetBSD)
file=/var/db/locate.database

[Misc]
# this file comes and goes with portaudit(1)/portversion(1)/pkg_version(1)
# Other is ISC DHCLIENT related
IgnoreAdded=/var/db/(pkgdb.fixme|dhclient.leases.*)
IgnoreMissing=/var/db/(pkgdb.fixme|dhclient.leases.*)


#
# --------- /var/db/mysql -----------
#

# The same for MySQL, except it's probably owned by the time you get done
# installing it.

[Attributes]
file=/var/db/mysql
[IgnoreAll]
dir=-1/var/db/mysql

####################################################################
# The next three entries depend on your security paranoia policy about
# SRC and PORTSs trees, etc.  Remember, Ports is the only default attack
# vector against FreeBSD machines.
####################################################################


#
# --------- /var/db/pkg -----------
#

# This database directory gets updated if a cvsup(8)/cvs(8)/sup(8) update 
# occurs to a Pkgsrc source tree and then "pkgdb(8) -fu" is run.  

[Attributes]
file=/var/db/pkg
[IgnoreAll]
dir=-1/var/db/pkg


#
# --------- /var/db/entropy -----------
#
[Attributes]
file=/var/db/entropy
[IgnoreAll]
dir=-1/var/db/entropy

#
# --------- /var/msgs -----------
#

[Attributes]
dir=-1/var/msgs

#
# --------- /var/backups -----------
#

# /etc/daily /etc/security write old revisions of system
# critical files into here daily
[Attributes]
dir=-1/var/backups

#
# --------- /var/log -----------
#

# Keep this section in sync with:
# * /etc/newsyslog.conf
# * /etc/syslogd.conf OR:
# * /usr/pkg/etc/syslog-ng/syslog-ng.conf

# For these files, changes in signature, timestamps, and increase in size
# are ignored, however:
# Per discussion on the forum, this behavior change is needed due to the behavior
# of newsyslog(8) rotation method File sizes will get smaller, inodes will change
# as they rotate.

# NOTES ON LOG ROTATION BEHAVIOR:
# See comments about modifications to [GrowingLogFiles] to ignore INODE changes
# As newsyslog(8)/newsyslog.conf(5) has the default behavior of:
# - First move logfile.log to logfile.log.0
# - then bzip2 -v9 logfile.log.0
# - then touch(1) logfile.log
# - then HUP if applicable & reopen the new file (new inode)
# - Therefore, Ignore Singature, Size (if grow), and Inode changes
# But also, there's [IgnoreMissing] regexp to account for log file pruing from 
# the filesystem, and [IgnoreAdded] for the first Nth rotations of the logfile
# per newsyslog.conf(5)


# NetBSD defaults
[Misc]
IgnoreAdded = /var/log/(cron|xferlog|messages|maillog|secure|pflog|sendmail\.st|kerberos\.log|authlog|aculog|wtmp|wtmpx)\.[0-9](\.bz2|\.gz)?$
IgnoreMissing= /var/log/(cron|xferlog|messages|maillog|secure|pflog|sendmail\.st|kerberos\.log|authlog|aculog|wtmp|wtmpx)\.[0-9](\.bz2|\.gz)?$

# Local services you may need to account for
IgnoreAdded = /var/log/(snmpd\.log|postgresq\.log|samhain\.log|httpd-error\.log|httpd-access\.log|httpd-ssl_request\.log)\.[0-9](\.bz2|\.gz)?$
IgnoreMissing = /var/log/(snmpd\.log|postgresq\.log|samhain\.log|httpd-error\.log|httpd-access\.log|httpd-ssl_request\.log)\.[0-9](\.bz2|\.gz)?$

[Attributes]
dir=99/var/log

# NetBSD Stock Defaults
[GrowingLogFiles]
File = /var/log/aculog
File = /var/log/authlog
File = /var/log/cron
File = /var/log/kerberos.log
File = /var/log/lpd-errs
File = /var/log/maillog
File = /var/log/messages
File = /var/log/secure
File = /var/log/wtmp
File = /var/log/wtmpx
File = /var/log/xferlog
File = /var/log/pflog

[Attributes]
# A binary-type logfile (Screw sendmail!)
File = /var/log/sendmail.st

# NetBSD gzip(1)'s by default but newsyslog.conf(5) has bzip2 support
[Attributes]
File = /var/log/*.[0-9].gz
#File = /var/log/*.[0-9].bz2

#
# --------- makewhatis(8) -----------
# 

# Account for updated whatis(8) database given manpath.conf(5)/man.conf(5)
#and manpath(1)

[Attributes]
file=/usr/pkg/man/whatis.db
file=/usr/pkg/man
file=/usr/share/man/whatis.db
file=/usr/share/man

##############################################
######## END FILE SECTION ####################
##############################################

[EventSeverity]

SeverityReadOnly=crit
SeverityLogFiles=crit
SeverityGrowingLogs=crit
SeverityIgnoreNone=crit
SeverityAttributes=crit
SeverityUser0=crit
SeverityUser1=crit

## We have a file in IgnoreAll that might or might not be present.
## Setting the severity to 'info' prevents messages about deleted/new file.
##
# SeverityIgnoreAll=crit
SeverityIgnoreAll=info

## Files : file access problems
SeverityFiles=info

## Dirs  : directory access problems
SeverityDirs=info

## Names : suspect (non-printable) characters in a pathname
SeverityNames=crit

[Log]
## Values: debug, info, notice, warn, mark, err, crit, alert, none.
## 'mark' is used for timestamps.
##
## Use 'none' to SWITCH OFF a log facility
## 
## By default, everything equal to and above the threshold is logged.
## The specifiers '*', '!', and '=' are interpreted as  
## 'all', 'all but', and 'only', respectively (like syslogd(8) does, 
## at least on Linux). Examples:
## MailSeverity=*
## MailSeverity=!warn
## MailSeverity==crit

## E-mail
##
MailSeverity=warn

## Console
##
PrintSeverity=notice

## Logfile
##
LogSeverity=info

## Syslog
##
# Syslog logging is redundant at this time
#
#SyslogSeverity=notice

## Remote server (yule)
##
# ExportSeverity=none

## External script or program
##
# ExternalSeverity = none

## Logging to a database
##
# DatabaseSeverity = none

## Logging to a Prelude-IDS
##
# PreludeSeverity = crit


#####################################################
#
# Optional modules
#
#####################################################

#[SuidCheck]
##
## --- Check the filesystem for SUID/SGID binaries
## 

## Switch on
#
#SuidCheckActive = yes

## Interval for check (seconds)
#
#SuidCheckInterval = 5400

## Alternative: crontab-like schedule
#
#SuidCheckSchedule = NULL
 
## Directory to exclude 
#
# SuidCheckExclude = NULL

## Limit on files per second (0 == no limit)
#
# SuidCheckFps = 0

## Alternative: yield after every file
#
# SuidCheckYield = no

## Severity of a detection
#
# SeveritySuidCheck = crit

## Quarantine SUID/SGID files if found
#
# SuidCheckQuarantineFiles = yes

## Method for Quarantining files:
#  0 - Delete the file.
#  1 - Remove SUID/SGID permissions from file.
#  2 - Move SUID/SGID file to quarantine dir.
#
# SuidCheckQuarantineMethod = 0

## For method 1 and 3, really delete instead of truncating
# 
# SuidCheckQuarantineDelete = yes

#[Mounts]
#MountCheckActive=1
#MountCheckInterval=7200
#SeverityMountMissing=crit
#SeverityOptionMissing=crit
#
#checkmount=/
#checkmount=/dev
#checkmount=/usr
#checkmount=/var
#checkmount=/var/log
#checkmount=/opt
#checkmount=/export
#checkmount=/tmp

#[Kernel]
##
## --- Check for loadable kernel module rootkits (Linux/FreeBSD only) 
##

## Switch on/off
#
#KernelCheckActive = True

## Check interval (seconds); btw., the check is VERY fast
#
#KernelCheckInterval = 300

## Severity
#
#SeverityKernel = crit


 #[Utmp]
##
## --- Logging of login/logout events
##

## Switch on/off
#
#LoginCheckActive = True

## Severity for logins, multiple logins, logouts
# 
#SeverityLogin=info
#SeverityLoginMulti=crit
#SeverityLogout=info

## Interval for login/logout checks
#
#LoginCheckInterval = 300


# [Database]
##
## --- Logging to a relational database
##

## Database name
#
# SetDBName = samhain

## Database table
#
# SetDBTable = log

## Database user
#
# SetDBUser = samhain

## Database password
#
# SetDBPassword = (default: none)

## Database host
#
# SetDBHost = localhost

## Log the server timestamp for received messages
#
# SetDBServerTstamp = True

## Use a persistent connection
#
# UsePersistent = True


# [External]
##
## Interface to call external scripts/programs for logging
##

## The absolute path to the command
## - Each invocation of this directive will end the definition of the
##   preceding command, and start the definition of 
##   an additional, new command
#
# OpenCommand = (no default)

## Type (log or srv)
## - log for log messages, srv for messages received by the server
#
# SetType = log

## The command (full command line) to execute
#
# SetCommandLine = (no default)

## The environment (KEY=value; repeat for more)
#
# SetEnviron = TZ=(your timezone)

## The TIGERpkg checksum (optional)
#
# SetChecksum = (no default)

## User who runs the command
#
# SetCredentials = (default: samhain process uid)

## Words not allowed in message
#
# SetFilterNot = (none)

## Words required (ALL of them)
#
# SetFilterAnd = (none)

## Words required (at least one)
#
# SetFilterOr = (none)

## Deadtime between consecutive calls
#
# SetDeadtime = 0

## Add default environment (HOME, PATH, SHELL)
#
# SetDefault = no



#####################################################
#
# Miscellaneous configuration options
#
#####################################################

[Misc]

## whether to become a daemon process
## (this is not honoured on database initialisation)
#
# Daemon = no
Daemon = yes

# whether to test signature of files (init/check/none)
# - if 'none', then we have to decide this on the command line -
#
# ChecksumTest = none
ChecksumTest=check

# Set nice level (-19 to 19, see 'man nice'),
# and I/O limit (kilobytes per second; 0 == off)
# to reduce load on host.
#
SetNiceLevel = 19
# SetIOLimit = 0

## The version string to embed in file signature databases
#
# VersionString = NULL

## Interval between time stamp messages
#
# SetLoopTime = 60
SetLoopTime = 7200

## Interval between file checks 
#
# SetFileCheckTime = 600
SetFileCheckTime = 43200

## Alternative: crontab-like schedule
#
# FileCheckScheduleOne = NULL

## Alternative: crontab-like schedule(2)
#
# FileCheckScheduleTwo = NULL

## Report only once on modified files 
## Setting this to 'FALSE' will generate a report for any policy 
## violation (old and new ones) each time the daemon checks the file system.
#
ReportOnlyOnce = True

## Report in full detail
#
ReportFullDetail = True

## Report file timestamps in local time rather than GMT
#
UseLocalTime = Yes

## The console device (can also be a file or named pipe)
## - There are two console devices. Accordingly, you can use
##   this directive a second time to set the second console device.
##   If you have not defined the second device at compile time,
##   and you don't want to use it, then:
##   setting it to /dev/null is less effective than just leaving
##   it alone (setting to /dev/null will waste time by opening
##   /dev/null and writing to it)
#
# SetConsole = /dev/console

## Activate the SysV IPC message queue
#
# MessageQueueActive = False


## If false, skip reverse lookup when connecting to a host known 
## by name rather than IP address (i.e. trust the DNS)
#
SetReverseLookup = True


## --- E-Mail ---

# Only highest-level (alert) reports will be mailed immediately,
# others will be queued. Here you can define, when the queue will
# be flushed (Note: the queue is automatically flushed after
# completing a file check).
#
# SetMailTime = 86400

## Maximum number of mails to queue
#
# SetMailNum = 10

## Recipient (max. 8)
#
#SetMailAddress=infosec@noc.myorg.tld

## Mail relay (IP address)
#
SetMailRelay = 127.0.0.1

## Custom subject format
#
MailSubject = Synchrotone Samhain: %S 
SetMailSender = samhain@synchrotone.pgh.pub.collaborativefusion.com

## --- end E-Mail ---


## Path to the executable. If set, will be checksummed after startup
## and before exit.
#
SamhainPath = /usr/pkg/sbin/samhain

## The IP address of the log server
#
# SetLogServer = (default: compiled-in)

## The IP address of the time server
#
# SetTimeServer = (default: compiled-in)

## Trusted Users (comma delimited list of user names) 
#
# TrustedUser = (no default; this adds to the compiled-in list)

## Path to the file signature database
#
SetDatabasePath = /usr/pkg/var/samhain/samhain.db

## Path to the log file
#
# SetLogfilePath = (default: compiled-in)

## Path to the PID file
#
# SetLockPath = (default: compiled-in)


## The digest/checksum/hash algorithm (default: TIGER192; others: MD5, SHA1)
#
# DigestAlgo = TIGER192


## Custom format for message header. 
## CAREFUL if you use XML logfile format.
##
## %S severity
## %T timestamp
## %C class
##
## %F source file
## %L source line
#
# MessageHeader="%S %T "


## Don't log path to config/database file on startup
#
# HideSetup = False

## The syslog facility, if you log to syslog
#
# SyslogFacility = LOG_AUTHPRIV
SyslogFacility=LOG_LOCAL2

## The message authentication method
## - If you change this, you *must* change it
##   on client *and* server
#
# MACType = HMAC-TIGER


## The Prelude-IDS profile to use for reporting
## default value is "samhain"
#
# PreludeProfile = samhain

## Map these samhain severities to impact severity 'info' severity
#
# PreludeMapToInfo =

## Map these samhain severities to impact severity 'low' severity
#
# PreludeMapToLow = debug info

## Map these samhain severities to impact severity 'medium' severity
#
# PreludeMapToMedium = notice warn err

## Map these samhain severities to impact severity 'high' severity
#
# PreludeMapToHigh = crit alert

# everything below is ignored
[EOF]

#####################################################################
# This would be the proper syntax for parts that should only be
#    included for certain hosts.
# You may enclose anything in a @HOSTNAME/@end bracket, as long as the
#    result still has the proper syntax for the config file.
# You may have any number of @HOSTNAME/@end brackets.
# HOSTNAME should be the fully qualified 'official' name 
#    (e.g. 'nixon.watergate.com', not 'nixon'), no aliases. 
#    No IP number - except if samhain cannot determine the 
#    fully qualified hostname.
#
# @HOSTNAME
# file=/foo/bar
# @end
#
# These are two examples for conditional inclusion/exclusion
# of a machine based on the output from 'uname -srm'
# $Linux:2.*.7:i666
# file=/foo/bar3
# $end
#
# !$Linux:2.*.7:i686
# file=/foo/bar2
# $end
#
#####################################################################
