Die Informationen beziehen sich auf den Einsatz einer Standalone Samhain Installation für einen einzelnen Rechner ohne Anbindung an den Yule Logserver, Einbindung in das Prelude IDS, Nagios oder Nutzung der Beltane Web-GUI. Samhain läuft als Daemon und nicht per Cron-Job. Der Output der Prüfprozesse wird per signierter Mail versendet und z. T. in die Samhain Logdatei geleitet. Für die Administration von Samhain wird das mitgelieferte samhainadmin-sig.pl Perlskript und ein eigenes Skript verwendet. Vom Samhain Funktionsumfang wird nur eine Teilmenge verwendet.
Eins vorweg: Zum Einsatz von Samhain reicht das Lesen des Beitrags oder irgendwelcher How-Tos im Netz nicht aus, sondern nur das Studium der Samhain Dokumentation.
[x] gibt an, welche Funktionen genutzt und im Beitrag behandelt werden.
Für den Schutz von Samhain bzw. der Erschwerung von Angriffen gegen Samhain, kann Samhain mit verschiedenen Optionen eingesetzt werden:
[x] gibt an, welche Funktionen genutzt und im Beitrag behandelt werden.
sudo aptitude install libpcreN-dev libaclN-dev libattrN-dev zlibNg-dev signify-openbsd
sudo aptitude install libaudit-dev auditd
wget https://la-samhna.de/samhain/samhain-current.tar.gz sha256sum samhain-current.tar.gz
gpg --import s_rkey.html tar -xzf samhain-current.tar.gz gpg --verify samhain-version.tar.gz.asc tar -xzf samhain-version.tar.gz cd samhain-version
sudo -i mkdir /root/.signify cd /root/.signify signify-openbsd -G -n -p name.pub -s name.sec
Falls man die Integrität der Signify Binärdatei sichern bzw. Samhain an eine bestimmte Signify Binärdatei binden will, lässt man sich vor der eigentlichen Konfiguration und Kompilierung die von Samhain berechnete TIGER-192 Prüfsumme von Signify ausgeben:
./configure --with-signify=/usr/bin/signify-openbsd --with-checksum="/usr/bin/signify-openbsd: 0" make ./configure --with-signify=/usr/bin/signify-openbsd --with-checksum="/usr/bin/signify-openbsd: 0"
Die in der Warnmeldung ausgegebene Prüfsumme notieren und in den eigentlichen Konfigurationsaufruf einsetzen.
./configure --option
Konfigurations-Optionen | |
---|---|
--prefix=(none)|USR|OPT|/pfad | je nach Präfix Angabe werden Samhain Dateien in bestimmte Verzeichnisse installiert und gespeichert. Siehe auch Files and directory layout in der Samhain Dokumentation |
--sysconfdir=/etc/samhain | /etc/samhain/ statt /etc/ für das Verzeichnis, das die Samhain Konfigurationsdaten enthält |
--enable-base=n1,n2 | integrierter Schlüssel aus zwei Zahlenreihen, den Samhain erzeugt und der zur Verifizierung der Log und E-Mail Nachrichten dient. Bei einer neuen Kompilierung von Samhain kann ein zuvor erzeugter und gesicherter Schlüssel mit der Optione erneut angegeben werden. Deshalb sollte man sich den ausgegebenen Schlüssel nach Beendigung der Konfiguration sicher „notieren“. Anmerkung: Mit samhain –add-key können auch weitere Schlüssel in die Samhain Binärdatei integriert werden |
--disable-external-scripts | durch Samhain können keine externen Skripte/Programme zur Weiterverarbeitung von Logausgaben aufgerufen werden |
--disable-shellexpand | keine Shell-Expansionen für Optionswerte und bedingte Anweisungen in der Konfigurationsdatei. Siehe auch Shell expansion in der Samhain Dokumentation |
--enable-static | kompiliert statische Samhain Binärdatei |
--enable-login-watch | Überwachung von An- und Abmeldungen per utmp und wtmp |
--enable-micro-stealth=n | n = 128 - 255, Strings in der Datenbank und in der Logdatei werden mit dem angebenem Wert geXORed, während die Konfigurationsdatei weiter im Klartext vorliegt |
--enable-stealth=n | wie --enable-micro-stealth, nur das die Konfigurationsdatei steganografisch in eine Bilddatei eingebettet wird |
--enable-mounts-check | Überprüfung, ob und wenn, mit welchen Optionen Dateisysteme gemountet sind |
--enable-logfile-monitor | Auswertung von Logdateien und Kommando-Ausgaben (kann z. B. auch durch bzw. anstatt logcheck wahrgenommen werden) |
--enable-process-check | Erkennung von Prozessen / Threads, die per ps nicht gelistet sind, weil sie sich verbergen oder aber eigentlich erforderlich sind oder gelistet sind, aber nicht existieren |
--enable-port-check | Überprüfung, welche Ports geöffnet sind bzw. ob Dienste an Ports lauschen mit Abgleich vorher als legitim definierter Ports |
--enable-userfiles | Überprüfung von Dateien und ihrer Attribute in Benutzer Heimatverzeichnissen |
--disable-ipv6 | deaktiviert IPv6 |
--enable-nocl=„Passwort“ | Samhain Kommandos und Kommandozeilen-Argumente/-Optionen werden nur bei Angabe des Passworts interpretiert bzw. ausgeführt |
--enable-suidcheck | Durchsuchung des Dateisystems nach neuen Dateien mit SUID/SGID Bit plus optionaler Isolierung/Entfernung aufgefundener Dateien |
--with-log-file=/var/log/logdateiname | statt /var/log/samhain_log |
--with-config-file=/etc/samhain/samhainrc | Samhain Konfigurationsdatei im sysconfdir statt in /etc/samhainrc |
--with-signify=/usr/bin/signify-openbsd --without-checksum oder --with-checksum=„/usr/bin/signify-openbsd: Prüfsumme“ | Signify wird zum Erstellen und Überprüfen von Signaturen der Samhain Konfigurationsdatei und Datenbank verwendet. Zusätzlich kann man die TIGER-192 Prüfsumme der Signify Binärdatei einkompilieren. |
./configure --enable-micro-stealth=n --prefix=USR --sysconfdir /etc/samhain --disable-external-scripts --disable-shellexpand --enable-static --enable-login-watch --enable-mounts-check --enable-logfile-monitor --enable-process-check --enable-port-check --enable-userfiles --disable-ipv6 --emable-base=n1,n2 --enable-nocl="passwort" --enable-suidcheck --with-log-file=/var/log/samhain_log --with-config-file=/etc/samhain/samhainrc --with-pid-file=/run/samhain.pid --with-signify=/usr/bin/signify-openbsd --without-checksum
make [make samhain.pk] sudo make install
Der make Aufruf mit samhain.pk ist optional und dient der Erstellung und Nutzung der gepackten Version der Samhain Programmdatei (siehe auch Packing the executable in der Samhain Dokumentation).
sudo make install-boot
installiert abschließend das Samhain Init-Skript oder man startet Samhain per systemd:
[Unit] Description=Samhain HIDS After=network.target local-fs.target nss-lookup.target "dnsresolver".service "mta".service Wants=network.target local-fs.target "dnsresolver".service "mta".service [Service] RestrictAddressFamilies=AF_INET AF_UNIX Type=forking GuessMainPID=yes ExecStart=/usr/sbin/samhain start ExecStop=/usr/sbin/samhain stop ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure RestartSec=10s UMask=0027 [Install] WantedBy=multi-user.target
Bis Samhain konfiguriert ist, bleibt das Init-Skript bzw. die systemd Unit deaktiviert:
sudo update-rc.d samhain disable bzw. sudo systemctl disable samhain.service
sudo samhain-install.sh purge && sudo samhain-install.sh --force uninstall-boot
Nach der Installation werden einige Skripte und die Samhain Dokumentation nicht mitinstalliert, die man nun „installieren“ und sichern sollte:
sudo cp scripts/samhain.logrotator /etc/logrotate.d/samhain
sudo mkdir /usr/share/doc/samhain sudo cp docs/* /usr/share/doc/samhain/
Danach können je nach Erfordernis einzelne Bestandteile der Dokumentation entfernt werden, die man nicht benöigt. Zum Beispiel die HTML Dokumentation verwenden und dafür die PDF Dokumentation entfernen:
cd /usr/share/doc/samhain/ && sudo tar -xf MANUAL-N_N.html.tar && rm MANUAL-N_N.html.tar sudo rm /usr/share/doc/samhain/*.pdf
sudo cp samhain-install.sh /usr/local/sbin/ sudo cp scripts/samhainadmin-sig.pl /usr/local/sbin/ chmod 700 /usr/local/sbin/samhain*
Der allgemeine Aufbau der Samhain Konfigurationsdatei:
Samhain Optionen: [Misc] Abschnitt mit Option = yes/no | true/false | 1/0 oder Wert oder $(Shell-Expansion) [Kopfzeile] Abschnitt mit Option = yes/no | true/false | 1/0 oder Wert oder $(Shell-Expansion) Richtlinien zur Überprüfung der Datenintegrität: [Misc] RedefRichtlinie = +/-Liste,der,Attribute # ----- Dateisystemkommentar ----- [Richtlinie] dir = file = [Misc] IgnoreAdded = IgnoreMissing =
Option | Wert | Information |
---|---|---|
Daemon | yes | Samhain wird als Daemon ausgeführt |
SamhainPath | /usr/sbin/samhain | Vergleich der Prüfsumme der Samhain Programmdatei nach Start und Beendigung von Samhain |
ChecksumTest | check | Standardmodus des Samhain Daemon: Abgleich/Überprüfung der Samhain Datenbankinhalte und Prüfvorgaben der Richtlinien |
SetBindAddress | 127.0.0.1 | Interface für ausgehende Verbindungen (auch E-Mails) |
SetNiceLevel | n | nice Level n während der Dateiüberprüfung |
SetLoopTime | n | Samhain sendet alle n Sek. eine Zeitstempel-Nachricht |
SetFilecheckTime | n | Samhain führt alle n Sekunden eine komplette Dateiüberprüfung durch |
ReportOnlyOnce | yes | festgestellte Dateimodifikationen werden nur 1 x gemeldet |
ReportFullDetail | no | keine detailierten Zusatzinformationen zu Dateimodifikationen |
UseLocalTime | yes | Zeitstempel werden in lokaler Zeit abgebildet und nicht in GMT |
Option | Wert | Information |
---|---|---|
SetMailAddress | root@localhost | Empfänger (To:) |
MailSubject | [samhain] Nachricht | Betreff (Subject:) |
SetMailSender | daemon@localhost | Absender (From:) |
SetMailTime | n | max. Zeitspanne in Sek. zwischen zwei Aussendungen von E-Mails durch Samhain |
SetMailNum | n | max. Anzahl von Ereignis-Nachrichten pro E-Mail |
Wie sich die Absender- und Empfängeradresse gestaltet, richtet sich nach der Konfiguration des MTA und der Namensauflösung des Systems. Siehe dazu E-mail, Client cannot self-resolve, but nslookup works fine und From daemon@example.com in der Samhain Dokumentation und FAQ Liste.
Option | Wert | Information |
---|---|---|
MessageHeader | „%S %C %T “ | Jede Ereignis-Nachricht in E-Mails bzw. in der Logdatei wird mit der Nennung der Dringlichkeitsstufe (S) bzw. Nachrichtenklasse (C) und einem Zeitstempel (T) eingeleitet |
HideSetup | yes | Pfad zur Samhain Konfigurationsdatei und Datenbank wird nicht geloggt |
SyslogFacility | LOG_NAME | verwendete Log-Instanz, wenn per syslogd geloggt wird |
Option | Wert | Information |
---|---|---|
UseHardlinkCheck | yes | Samhain vergleicht die Anzahl der Hardlinks eines Verzeichnisses mit der Anzahl der Unterverzeichnisse des Verzeichnisses |
FilenamesAreUTF8 | yes | Samhain prüft Dateinamen auf ungültige UTF-8 Kodierung und Endungen mit nicht darstellbaren Zeichen |
LooseDirCheck | true | Veränderungen in Verzeichnis Indodes werden ignoriert, wenn sich nur die Dateigrößen und Zeitstempel von Dateien geändert haben |
UseACLCheck | yes | Samhain überprüft POSIX ACLs auf Änderungen |
SeverityReadOnly | crit |
SeverityLogFiles | crit |
SeverityGrowingLogs | crit |
SeverityIgnoreNone | crit |
SeverityAttributes | crit |
SeverityUserN | crit |
SeverityIgnoreAll | crit |
SeverityFiles | crit |
SeverityDirs | crit |
SeverityNames | crit |
Im [EventSeverity], [Utmp] und [ProcessCheck] Abschnitt wird den Ereignissen angelehnt an die Konfiguration des syslogd eine Dringlichkeitsstufe zugeordnet, die neben der Wichtigkeit und dem Informationsumfang in Verbindung mit der Konfiguration der Log-Ziele im [Log] Abschnitt auch bestimmt, an welches Log-Ziel welche Ereignis-Benachrichtigungen gesendet werden. Möglich sind none, debug, info, notice, warn, mark, err, crit, alert.
Da bestimmte Ereignisse fest zugewiesene Dringlichkeitsstufen haben und Dringlichkeitsstufen wie debug oder none bestimmte Bedeutungen, sollte man sich auf info, notice, warn und crit beschränken. Wenn man allen Ereignissen die gleiche Dringlichkeitsstufe beimisst bzw. alle Ereignis-Benachrichtigungen eh an an eine Log-Instanz gehen, kann man auch allen Ereignissen die gleiche Dringlichkeitsstufe zuordnen.
MailSeverity | = err |
MailClass | EVENT LOGKEY ERROR |
LogSeverity | = info,!=crit |
LogClass | START ERROR OTHER |
PrintSeverity | = notice |
SyslogSeverity | = none |
Im [Log] Abschnitt wird bestimmt, welche Log-Ziele verwendet werden und welche Ereignis-Benachrichtigungen in welches Log laufen. Mit der Auskommentierung eines Log-Ziels oder der Wertangabe LogZiel = none wird ein Log-Ziel deaktiviert. Hier wird die Angabe der Dringlichkeitsstufe als Schwellenwert verwendet: damit die Ausgabe eines Ereignisses an bestimmte Log-Ziele erfolgt, muss die Dringlichkeitsstufe des Ereignisses im [EventSeverity], [Utmp] und [ProcessCheck] Abschnitt mindestens so hoch sein wie der Schwellenwert der Log-Ziele, also Dringlichkeitsstufe >= Schwellenwert.
Da wie oben angeführt, nur E-Mail Benachrichtigungen, die Samhain Logdatei und die Konsole als Log-Ziele verwendet werden, während das Loggen per syslogd möglich wäre, sind nur die vier Log-Ziele aufgeführt. Mit der MailSeverity Wertangabe wird definiert, dass alle Log-Ausgaben zu allen Ereignissen ab Dringlichkeitsstufe err als Benachrichtigungen per E-Mail erfolgen, die LogSeverity Wertangabe bestimmt, dass alle Ereignisse ab der Dringlichkeitsstufe info mit Ausnahme der Ereignisse mit crit Schwellenwert in die Samhain Logdatei geloggt werden, da Ausgaben zu Ereignissen mit crit Dringlichkeitsstufe nur als E-Mail erfolgen sollen. Mit der PrintSeverity Wertangabe wird der Informationsumfang der Ausgaben in der Konsole festgelegt, wenn dort ein Samhain Kommando abgesetzt wird. Da eine Log-Ausgabe per syslogd nicht erfolgen soll, wird das Logziel mit none deaktiviert.
Mit der Angabe von Ereignis-Klassen, die Ereignistypen zusammenfassen, kann aus der Menge aller erfassten Ereignisse, die durch die Angabe des Schwellenwerts gebildet wird, die Logausgabe auf die Teilmenge der definierten Ereignis-Klassen beschränkt werden.
Im obigen Beispiel würden alle Ereignisse mit Dringlichkeitsstufe err bis alert per E-Mail ausgegeben. Mit der Angabe der EVENT LOGKEY ERROR Klassen werden aber nur die Ausgaben zu Richtlinien und Regel-Ereignissen, der Schlüssel zur Verifizierung der E-Mails und der Logdatei und Fehlermeldungen per E-Mail zugestellt, jedoch keine Samhain Start- und Stop Meldungen. Dagegen würden an die Samhain Logdatei als Log-Ziel alle Ereignisse mit Dringlichkeitsstufe info bis alert ohne crit gesendet werden, aber mit der Angabe der START ERROR OTHER Klassen nur die Samhain Start- und Stop Meldungen, Fehlermeldungen, sonstige Informationen und z. B. keine Zeitstempel-Ausgaben.
Welche Objekte (einzelne Dateien oder (rekursiv) ganze Verzeichnisse) und Attribute der Objekte überwacht werden, richtet sich nach der gewählten Richtlinie, unter der die Objekte aufgeführt werden. Eine Richtlinie fasst mehrere Attribute zusammen. Sechs benannte Richtlinien sind bereits in der Zusammensetzung der Attribute vordefiniert, können aber wie die fünf optionalen UserN Richtlinien umdefiniert werden.
Da eine Richtlinie ein- oder mehrmalig in der Konfigurationsdatei aufgeführt werden kann, bieten sich zwei mögliche Ordnungen an: entweder führt man unter eine einmalig genannte Richtlinie alle Objekte auf oder man setzt die gleiche Richtlinie mehrmals in dateisystemspezifische Abschnitte ein, wie es auch in der mitgelieferten Standard-Konfigurationsdatei der Fall ist.
[RichtLinie1]
dir =
file =
[RichtLinie2]
dir =
file =
oder
— /mountpoint1 —
[RichtLinie1]
dir =
file =
— /mountpoint2 —
[RichtLinie1]
dir =
file =
Eine Datei wird mit file=/path/file referenziert, ein Verzeichnis mit dir=[Rekursionstiefe]/path/dir mit Rekursionstiefe von 0 (Standard) - 99. Innerhalb von Pfadangaben kann man die *, ?, […] Wildcards verwenden.
Mit RedefRichtlinie = +/-ATT1,+/-ATTn kann man Attribute einer Richtlinie hinzufügen bzw. aus ihr entfernen. Alle RedefRichtlinie Optionen stehen gesammelt in einem mit [Misc] eingeleiteten Abschnitt. Mit RedefUser0 bis RedefUser4 kann man bis zu fünf eigene Richtlinien definieren, die später mit [UserN] in der Konfiguration referenziert werden.
[Misc] RedefAttributes = +MTM RedefUser0 = +AUDIT,-ATM [Attributes] ... [User0] ...
Die IgnoreAdded und IgnoreMissing Optionen können, jeweils mit [Misc] eingeleitet, beliebig oft in der Samhain Konfigurationsdatei verwendet werden, um für alle Richtlinien Ausnahmen für die Dateien zu definieren, die häufiger (neu) erstellt und wieder gelöscht werden (z. B. temporärere Dateien, bestimmte Logdateien), um nicht permanent Benachrichtigungen zu ihrer Erstellung und Löschung zu erhalten. Für die Angabe der Dateien können Regular Expressions verwendet werden.
--- /var --- [Richtline] dir = ... file = ... [Misc] IgnoreAdded = /var/lib/dir/name.*\.tmp IgnoreMissing = /var/lib/dir/name.*\.tmp
Weitere Informationen, Beispiele und Sonderfälle sind in Defining file check policies: what, and how, to monitor und Excluding files and/or subdirectories der Samhain Dokumentation aufgeführt.
Richtlinie | Attribute, die überwacht werden: |
---|---|
IgnoreNone | Eigentümer, Gruppe, Zugriffsrechte, Gerätenr., Anzahl Hardlinks, Symlink Namen, Inode, Prüfsummen, Dateigrößen, Zeitstempel außer ctime |
Akürzungen | +USR,+GRP,+MOD,+RDEV,+HLN,+LNK,+INO,+CHK,+SIZ,+MTM,+ATM |
ReadOnly | Eigentümer, Gruppe, Zugriffsrechte, Gerätenr., Anzahl Hardlinks, Symlink Namen, Inode, Prüfsummen, Dateigrößen, Zeitstempel außer atime |
Abkürzungen | +USR,+GRP,+MOD,+RDEV,+HLN,+LNK,+INO,+CHK,+SIZ,+MTM,+CTM |
GrowingLogfiles | Eigentümer, Gruppe, Zugriffsrechte, Gerätenr., Anzahl Hardlinks, Symlink Namen, Inode. Dateigröße und Prüfsumme wird nur bei Zuwachs ignoriert, verkleinert sich die Dateigröße nach der erstmaligen Erfassung, erfolgt eine Benachrichtigung |
Abkürzungen | +USR,+GRP,+MOD,+RDEV,+HLN,+LNK,+INO,+SGROW |
LogFiles | Eigentümer, Gruppe, Zugriffsrechte, Gerätenr., Anzahl Hardlinks, Symlink Namen, Inode |
Abkürzungen | +USR,+GRP,+MOD,+RDEV,+HLN,+LNK,+INO |
Attributes | Eigentümer, Gruppe, Zugriffsrechte, Dateityp, Gerätenr. bei Gerätedateien |
Abkürzungen | +USR,+GRP,+MOD,+RDEV |
IgnoreAll | Existenz von Datei / Verzeichnis |
Abkürzungen | keine |
IgnoreModified | |
Abkürzungen | |
UserN | selbstdefiniert bzw. IgnoreNone als Standardbelegung |
Der Dateityp wird von jeder Richtlinie überwacht.
In Logs und/oder E-Mail Benachrichtigungen werden für jedes Objekt, bei dem Samhain anschlägt, die Attribute mit msg=<POLICY [Richtlinie] CLDIHMUGTS> benannt, wobei nur die Kürzel der Attribute aufgeführt werden, für die eine Abweichung vom in der Datenbankdatei gespeicherten Wert festgestellt wurde.
CRIT : EVENT [2011-08-27T18:57:54+0200] msg=<POLICY [ReadOnly] C-------TS>, path=</etc/cron.d/dcheck> CRIT : EVENT [2011-08-27T08:10:51+0200] msg=<POLICY [Process] Hidden pid: 0 tests: getpriority sched_getparam getsid getpgid kill>
Abk. Richtlinie | Abk. Bericht | Erklärung |
---|---|---|
CHK | C | Prüfsumme |
LNK | L | Symlinkname |
RDEV | D | Gerätenr. |
INO | I | Inode |
HLN | H | Anzahl Hardlinks |
MOD | M | Zugriffsrechte |
USR | U | Eigentümer |
GRP | G | Gruppe |
MTM ATM CTM | T | Zeitstempel (mtime, atime, ctime) |
SIZ | S | Dateigröße |
PRE | prelinked Binärdatei | |
SGROW | Dateigröße darf anwachsen, SIZ+CHK, wenn anfängliche Dateigröße unterschritten wird | |
AUDIT | wird durch auditd überwacht | |
TXT | Speicherung des Dateiinhalts |
Als Ergänzung oder Ersatz zur kompletten, statischen Überprüfung des Dateisystems in vorgegebenen Intervallen per SetFilecheckTime kann die permanente, dynamische Überwachung auf Datei- und Verzeichnisänderungen per inotify Kernel-Funktion genutzt werden. Im Gegensatz zur herkömmlichen Methode verteilt sich aufgrund der permanenten Überprüfung das Lastaufkommen und Änderungen werden unmittelbar erkannt und kontinuierlich berichtet.
Zur inotify Nutzung wird inotify in der Samhain Konfigurationsdatei aktiviert und die maximale Anzahl der Überwachungsobjekte („inotify watches“) festgelegt bzw. erhöht.
InotifyActive | yes | aktiviert |
InotifyWatches | n | n inotify watches |
Siehe auch Inotify support on Linux in der Samhain Dokumentation.
PortCheckActive | 1 | aktiviert |
SeverityPortCheck | crit | Dringlichkeitsstufe |
PortCheckMinPort | 0 | Der Portbereich 0 - 65535 wird überwacht |
PortCheckMaxPort | 65535 | |
PortCheckRequired | aaa.bbb.ccc.ddd:port/udp,port1/tcp,port2/tcp… | Dienste/Ports, die laufen bzw. geöffnet sein müssen |
PortCheckOptional | aaa.bbb.ccc.ddd:port/udp,port1/tcp,port2/tcp… | Dienste/Ports, die laufen bzw. geöffnet sein können |
PortCheckSkip | aaa.bbb.ccc.ddd:port/[udp|tcp] | Dienst/Port, der nicht überprüft und ignoriert wird |
PortCheckIgnore | aaa.bbb.ccc.ddd:port/[udp|tcp] | Dienst/Port, der überprüft, aber ignoriert wird und deshalb u. U. Fehlermeldungen seitens des Daemon produziert |
PortCheckInterval | n | alle n Sek. Prüfung |
PortCheckUDP | yes | TCP und UDP Ports werden überwacht |
Standardmäßig wird die IP-Adresse (aaa.bbb.ccc.ddd) der Netzwerkkarte eingetragen (und überprüft), an das der offizielle Hostname gebunden ist. Sollen weitere IP-Adressen bzw. Netzwerkkarten überprüft werden, können sie mit der PortCheckInterface Option angegeben werden:
PortCheckInterface | eee.fff.ggg.hhh |
PortCheckInterface | iii.jjj.kkk.lll |
Wer RPC (Remote Procedure Call) Dienste (per portmapper) laufen lässt, muss weitere Besonderheiten beachten. Siehe auch Checking for open ports in der Samhain Dokumentation.
Die Überprüfung geladener Kernelmodule wurde ab Samhain Version 4.0 entfernt. Stattdessen kann man Kernelmodule signieren und das nachträgliche Laden und Entladen von Kernelmodulen nach dem Systemstart blockieren.
SuidCheckActive | 1 | aktiviert |
SuidCheckInterval | n | alle n Sek. Prüfung |
SeveritySuidCheck | crit | Dringlichkeitsstufe |
SuidCheckFps | n | überprüfe n Dateien/Sekunde |
LoginCheckActive | 1 | aktiviert |
LoginCheckInterval | n | alle n Sek. Prüfung |
SeverityLogin | crit | Dringlichkeitsstufe für Anmeldungen |
SeverityLogout | crit | Dringlichkeitsstufe für Abmeldungen |
SeverityLoginMulti | crit | Dringlichkeitsstufe für mehrmalige Anmeldungen eines Benutzers |
Im Verzeichnis, in dem Samhain seine Datenbankdatei speichert, werden zusätzlich Dateien mit alphanumerischem Dateinamen angelegt, in denen statistische Daten zu An- und Abmeldungen von Benutzern erfasst werden. Siehe auch Monitoring login/logout events in der Samhain Dokumentation.
MountCheckActive | 1 | aktiviert |
MountCheckInterval | n | alle n Sek. Prüfung |
SeverityMountMissing | crit | Dringlichkeitsstufe bei nicht gemounteten Dateisystemen |
SeverityOptionMissing | crit | Dringlichkeitsstufe bei gemounteten Dateisystemen mit nicht vorhandenen Mount-Optionen laut checkmount |
CheckMount | /mountpoint [liste,der,mount,optionen] | Überprüfung des mountpoints und seiner Optionen. Pro mountpoint eine Zeile |
ProcessCheckActive | 1 | aktiviert |
ProcessCheckInterval | n | alle n Sek. Prüfung |
SeverityProcessCheck | crit | Dringlichkeitsstufe |
ProcessCheckMinPID | 0 | überwachter PID-Bereich von 0 - 32767 |
ProcessCheckMaxPID | 32767 | |
ProcessCheckExists | Prozessname | Überprüfung, ob ein Prozess läuft, der laufen „muss“. Die Angabe des Prozessnamens muss ein POSIX Regulärer Ausdruck sein, der auf einen Teilstring in einer Zeile der Ausgabe von ps zutrifft. Pro Prozess eine Zeile |
Siehe auch Checking for hidden/fake/missing processes in der Samhain Dokumentation.
UserfilesActive | 1 | aktiviert |
UserfilesCheckUids | UID Liste | Liste der Benutzer UIDs, deren Dateien überwacht werden sollen |
UserfilesName | [pfad/]datei Richtlinie | Datei relativ zum Benutzer-Heimatverzeichnis (/home/name), die gemäß Richtlinie überwacht werden soll. |
Für die Liste der UIDs können eine einzelne UID, ein UID-Bereich mit UID1-UIDn und ein offener UID-Bereich ab UIDn mit UIDn- (auch in Kombination) eingesetzt werden. Für Richtlinie können analog zu den Richtlinien für die Dateiintegritätsprüfungen allignore, attributes, logfiles, loggrow, noignore, readonly, user0 - user4 verwendet werden.
sudo sh -c 'echo -t init -p info | samhain "'Passwort'"'
sudo sh -c 'echo -t check | samhain "'Passwort'"'
sudo sh -c 'echo -t update -l none [--interactive] | samhain "'Passwort'"'
Das Skript geht von folgenden Voraussetzungen aus:
#!/bin/sh shetc="/etc/samhain" shconfig="$shetc/samhainrc" shlog="/var/log/samhain.log" shclpw="$shetc/datei" shlibdir="/var/lib/samhain" shdb="$shlibdir/samhain_file" shadmin="/usr/local/bin/samhainadmin-sig.pl" sudo="sudo -H" mbox="/pfad/mbox_datei" umask 077 echo "" echo "=== Samhain Menü ===" echo "[a] Signierung Konfigdatei" echo "[b] Signierung DB" echo "[c] Signaturen Konfigdatei+DB prüfen" echo "[d] DB (neu) initialisieren" echo "[e] Überpüfung starten" echo "[f] DB manuell aktualisieren" echo "[g] DB automatisch aktualisieren" echo "[h] Konfiguration ändern" echo "[i] Konfiguration einsehen" echo "[j] DB Objekt ausgeben" echo "[k] Logdatei-Ausgabe" echo "[l] E-Mails überprüfen" echo "[m] Samhain Informationen" echo "[n] Samhain Status / Start" echo "[o] Hilfe" echo "[x] Exit" echo "=== Samhain Menü ===" echo "" printf "Bitte Auswahl [a - x] treffen: " "$wahl" read wahl if [ $wahl = a ] ; then $sudo $shadmin --remove-signature $shconfig && $sudo $shadmin --sign $shconfig && \ $sudo systemctl reload samhain.service elif [ $wahl = b ] ; then $sudo $shadmin --remove-signature $shdb && $sudo $shadmin --sign $shdb && \ $sudo systemctl reload samhain.service elif [ $wahl = c ] ; then $sudo $shadmin --examine $shconfig ; $sudo $shadmin --examine $shdb elif [ $wahl = d ] ; then $sudo systemctl stop samhain if [ -e $shdb ] ; then $sudo rm $shdb else echo "" fi cd $shlibdir && \ nocl="$($sudo cat $shclpw)" $sudo sh -c 'echo --foreground -l none -t init | samhain "'$nocl'"' && \ $sudo $shadmin --sign $shdb && $sudo chmod 600 $shlibdir/* && \ $sudo systemctl start samhain elif [ $wahl = e ] ; then nocl="$($sudo cat $shclpw)" $sudo sh -c 'echo --foreground -l none -t check | samhain "'$nocl'"' elif [ $wahl = f ] ; then nocl="$($sudo cat $shclpw)" $sudo cp $shdb /pfad/.archiv/ && \ $sudo sh -c 'echo --foreground -l none -t update --interactive | samhain "'$nocl'"' && \ $sudo $shadmin --remove-signature $shdb && $sudo $shadmin --sign $shdb && \ $sudo systemctl reload samhain.service ; rm /pfad/.archiv/samhain_file elif [ $wahl = g ] ; then nocl="$($sudo cat $shclpw)" $sudo sh -c 'echo --foreground -l none -t update | samhain "'$nocl'"' && \ $sudo $shadmin --remove-signature $shdb && $sudo $shadmin --sign $shdb && \ zenity --info --title "Samhain" --text "DB-Update fertig" --ok-label "OK" >/dev/null 2>&1 $sudo systemctl reload samhain.service elif [ $wahl = h ] ; then $sudo vi $shconfig && \ $sudo $shadmin --remove-signature $shconfig && $sudo $shadmin --sign $shconfig && \ $sudo systemctl reload samhain.service elif [ $wahl = i ] ; then $sudo less $shconfig elif [ $wahl = j ] ; then nocl="$($sudo cat $shclpw)" printf "DB-Objekt: " "$dbobj" read dbobj $sudo sh -c 'echo --foreground -l none -a -d "'$shdb'" | samhain "'$nocl'" | egrep "'$dbobj'"' elif [ $wahl = k ] ; then nocl="$($sudo cat $shclpw)" $sudo sh -c 'echo --foreground -l none -jL "'$shlog'" | samhain "'$nocl'"' elif [ $wahl = l ] ; then nocl="$($sudo cat $shclpw)" $sudo sh -c 'echo --foreground -l none -M "'$mbox'" | samhain "'$nocl'"' elif [ $wahl = m ] ; then nocl="$($sudo cat $shclpw)" $sudo sh -c 'echo --foreground -l none --version | samhain "'$nocl'"' elif [ $wahl = n ] ; then printf "Statu(s) oder Star(t)? " "$stw" read stw if [ $stw = s ] ; then $sudo systemctl status samhain else $sudo systemctl start samhain fi elif [ $wahl = o ] ; then nocl="$($sudo cat $shclpw)" $sudo sh -c 'echo --foreground -l none --help | samhain "'$nocl'"' $sudo $shadmin --help elif [ $wahl = x ] ; then exit 0 else exit 0 fi exit 0
fcheck ist ein reiner Dateiintegrität-Prüfer, der Datei- und Verzeichnisattribute auf Veränderungen überwacht und Prüfsummen vergleicht.
sudo aptitude install fcheck
In der fcheck Konfigurationsdatei /ect/fcheck/fcheck.cfg
wird festgelegt, welche Verzeichnisse / Dateien auf Veränderungen überwacht werden sollen (oder nicht), der Speicherort für die Datenbanken, in denen fcheck die Prüfsummen speichert und welcher Hash-Algorithmus zur Erzeugung der Prüfsummen verwendet wird.
Option | Erklärung |
---|---|
Directory = /pfad/verzeichnis/ | für jedes Verzeichnis (rekursiv) |
Exclusion = /pfad/verzeichnis/ | für jedes auszuschließende Verzeichnis (rekursiv) |
ReadDB = /pfad/.fcheck/fcheck.dbf | fcheck Datenbank für den täglichen Abgleich der Prüfsummen Als Pfad bietet sich ein Verzeichnis an, auf das nur root Zugriff hat, z. B ein Unterverzeichnis im /root Verzeichnis selbst |
WriteDB = /var/lib/fcheck/fcheck.dbf | fcheck Datenbank zum Anlegen bzw. Erneuern der Prüfsummen |
$Signature = /usr/bin/sha256sum | SHA-256 zum Erzeugen von Prüfsummen in der fcheck Datenbank Standardmäßig verwendet fcheck nur MD5 |
File = /pfad/verzeichnis/datei | für eine einzelen Datei z. B. für fcheck.dbf, sha256sum, fcheck selbst |
Beispiel für Pfade und Dateien:
Directory = /boot/ Directory = /lib/modules/ Directory = /etc/fcheck/ File = /var/lib/fcheck/fcheck.dbf File = /usr/bin/gpg2 File = /usr/bin/gpgv2 File = /usr/bin/sha256sum File = /usr/sbin/fcheck
Damit kann man z. B. nach Anwendung der Ubuntu Standardmethode zur Systemverschlüsselung mit unverschlüsseltem boot Volume per Alternate CD bei der Ubuntu Installation das boot Volume auf Manipulationen überwachen lassen. Je mehr Verzeichnisse und Dateien mit fcheck überwacht werden, desto öfters wird man aufgrund der Paketaktualisierungen fcheckrenew ausführen müssen. Außerdem setzt die Anwendung eines HIDS wie fcheck voraus, dass man sein System bzw. speziell die Paketaktualisierungen und -installationen im Auge hat und nicht alles automatisiert ohne Nachfragen installieren lässt.
Erzeugen und Aktualisieren der fcheck Datenbank
sudo fcheck -cadisf /etc/fcheck/fcheck.cfg
Nach einer Aktualisierung wird die WriteDB fcheck Datenbank kopiert
sudo cp /var/lib/fcheck/fcheck.dbf /pfad/.fcheck/fcheck.dbf
Zusätzlich kann die ReadDB fcheck Datenbank mit OpenPGP signiert werden, um bei einer Manipulation festzustellen, ob Datenbank selbst manipuliert wurde.
sudo gpg -bas /pfad/.fcheck/fcheck.dbf
Manuelle Überprüfung mit fcheck
sudo fcheck -adisrf /etc/fcheck/fcheck.cfg
Die mitgelieferte /etc/cron.d/fcheck Crontab Datei wird in folgenden Inhalt geändert:
# Regular cron job for the fcheck package MAILTO="" PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 30 */2 * * * root /pfad/bin/fcheckcron # EOF
Damit wird z. B. das fcheckcron Skript alle 2,5 Stunden ausgeführt. Das fcheckcron Skript vergleicht die Daten in der fcheck Datenbank mit den aktuellen Verzeichnisinhalten und sendet bei Abweichungen eine E-Mail. Danach wird die OpenPGP Signatur der Datenbank überprüft und ebenfalls eine E-Mail gesendet, wenn die Datenbank manipuliert wurde.
#!/bin/sh sigfile="/pfad/.fcheck/fcheck.dbf.asc" keyring="/pfad/pubring.gpg" sigstatus="$(gpgv --quiet --keyring "$keyring" --status-fd 1 "$sigfile")" test -x /usr/sbin/fcheck && if ! /usr/sbin/fcheck -adsirf /etc/fcheck/fcheck.cfg >/var/run/fcheck.out 2>&1; then mail -s "ALERT: [fcheck] DB" root </var/run/fcheck.out ; fi ; rm -f /var/run/fcheck.out if [ ! "$(echo "$sigstatus" | grep VALIDSIG | cut -d' ' -f2)" = VALIDSIG ]; then echo "Überprüfung der fcheck-DB ergab:\n$sigstatus\nDie fcheck-DB wurde wahrscheinlich manipuliert" | mail -s "ALERT: [fcheck] DB-Sig" root else exit 0 fi exit 0
Das fcheckrenew Skript dient der Aktualisierung und GnuPG Signierung der fcheck Datenbank, nachdem eine legitime Datei- bzw. Verzeichnisinhaltsänderung stattgefunden hat. Das Skript kann man in den Suchpfad kopieren und dann mit sudo fcheckrenew als Benutzer aufrufen. Signiert wird mit einem privaten Schlüssel des Benutzers aus dessen privater Schlüsselringdatei.
#!/bin/sh fcwritedb="/var/lib/fcheck/fcheck.dbf" fcreaddb="/pfad/.fcheck/fcheck.dbf" fcdbsig="/pfad/.fcheck/fcheck.dbf.asc" fconf="/etc/fcheck/fcheck.cfg" umask 077 fcheck -cadisf $fconf && cp $fcwritedb $fcreaddb if test -f $fcdbsig then rm $fcdbsig && gpg --no-ask-sig-expire -bas $fcreaddb ; clear ; else gpg --no-ask-sig-expire -bas $fcreaddb ; clear ; fi exit 0