Überwachung von Snort mit AppArmor

Das Netzwerk-Intrusion-Detection-System Snort ist ein Programm, welches bei seinem Einsatz auf jeden Fall mit Hilfe von AppArmor überwacht werden sollte. Die Aufgabe von Snort ist es, bösartige oder verdächtige Netzwerkaktivitäten zu erkennen und zu melden. Dabei kann nicht ausgeschlossen werden, dass aktuelle Snort-Versionen selbst Sicherheitslücken enthalten. Dies ist in der Vergangenheit schon mehrfach der Fall gewesen. Durch die Überwachung des Snort-Prozesses mit AppArmor ist sichergestellt, dass Snort nur auf die bei AppArmor definierten Dateien zugreifen darf.

Um ein AppArmor-Profil zu erzeugen, müssen Sie zunächst Snort installieren. Hier können Sie auf die Distributionspakete zurückgreifen. Sie sollten aber immer bedenken, dass neue Versionen von Snort häufig auch neue Angriffe erkennen können. Ein reines Update der Regeln genügt in vielen Fällen nicht, da ein großer Teil der Intelligenz in den Präprozessoren verborgen ist.

Nach der Installation können Sie zunächst den Befehl genprof aurufen:

# genprof /usr/bin/snort
Setting /usr/bin/snort to complain mode.

Please start the application to be profiled in
another window and exercise its functionality now.

Once completed, select the "Scan" button below in
order to scan the system logs for AppArmor events.

For each AppArmor event, you will be given the
opportunity to choose whether the access should be
allowed or denied.

Profiling: /usr/bin/snort

[(S)can system log for SubDomain events] / (F)inish
Nun starten Sie nach Anpassung der Konfiguration den Snort-Dienst über das Startskript:
# /etc/init.d/snort start
Anschließend können Sie direkt durch Auswahl von Scan bei Genprof das Profil erzeugen. Ein typisches Snort-Profil ist im folgenden angegeben:
# vim:syntax=apparmor
# Last Modified: Tue Aug  8 17:00:49 2006
#include <tunables/global>

/usr/bin/snort {
  #include <abstractions/base>
  #include <abstractions/nameservice>

  capability dac_override,
  capability net_raw,
  capability setgid,
  capability setuid,

  /etc/snort/*.conf r,
  /etc/snort/*.config r,
  /etc/snort/rules/*.rules r,
  /etc/snort/unicode.map r,
  /usr/bin/snort r,
  /var/log/snort/* w,
  /var/run/snort_*.pid w,
}
Dieses Profil sollte für die meisten Einsatzzwecke mit Snort ausreichen. Unangenehm ist jedoch die Tatsache dass der Snort-Prozess Zugriff auf die Capability CAP_DAC_OVERRIDE benötigt. Eine Analyse der Fehlermeldungen bei deaktivierter Capability durch AppArmor zeigt, dass diese Capability benötigt wird, damit der Benutzer root Zugriff auf das Verzeichnis /var/log/snort erhält. Dieses Verzeichnis ist bei SUSE nur mit Rechten für den Benutzer snort versehen. Dies kann bei dem Start von Snort aus folgender Protokollmeldung abgelesen werden:
Aug  8 17:15:14 samson snort: FATAL ERROR: log directory '/var/log/snort' does not exist
Folgender Trick löst das Problem:
# chown root.snort -R /var/log/snort/
# chmod 770 -R /var/log/snort/
So erhalten sowohl der Benutzer root, als auch die Gruppe snort, zu der auch der Benutzer snort gehört, Schreibzugriff auf das Verzeichnis /var/log/snort. Dann kann in dem Profil auf die Capability CAP_DAC_OVERRIDE verzichtet werden.

Ralf Spenneberg 2007-11-13