Harter Gefängnis-Alltag
Posted by Jesco Freund at Sept. 21, 2007 9:54 p.m.
Am Montag hat das Hardened Gentoo Projekt Version 2.6.22-r4 der hardened-sources, eines speziell gepatchten und auf Sicherheit getrimmten Linux-Kernels, veröffentlicht. Insbesondere chroot-Umgebungen werden zu regelrechten Festungen erweitert, aus denen ein Ausbruch nur äußerst schwer gelingt (mir ist bis dato keine Methode bekannt, mit der das zu bewerkstelligen wäre). Bis auf die unter Linux noch fehlende Ressourcenbeschränkung (z. B. auf eine bestimmte IP-Adresse) sind die virtuellen Knasts vergleichbar mit Jails unter BSD, zur Zeit vermutlich sogar noch ausbruchssicherer.
Neu hinzugekommen ist ein eigens definierter Security Level für grsecurity namens Hardened [Gentoo]. Dieser deckt so ziemlich genau die Voreinstellungen ab, die ich bisher von Hand als Custom-Profil gepflegt habe. Unter anderem sieht der Security Level vor, so gut wie alle Features von grsecurity in den Kernel einzukompilieren, ihre Aktivierung aber über sysctl steuern zu lassen. Das ist gemeinhin eine recht gute Idee, da einige Aktivitäten (z. B. ausführen von emerge innerhalb einer chroot-Umgebung) nicht durchgeführt werden können, wenn alle Restriktionen in Kraft gesetzt sind.
Von daher bietet es sich an, ein einfaches Init-Skript zu verwenden, dass die gewünschten Restriktionen beim booten des Rechners aktiviert. Zur Durchführung bestimmter administrativer Aufgaben ist es dann aber ein leichtes, diese vorübergehend außer Kraft zu setzen. Nach getaner Arbeit sind sie auch fix wieder aktiviert und der Rechner in gewohnt sicherem Betriebsmodus. Hier mein auf Gentoo's Runscript-Interpreter basierendes Init-Skript:
#!/sbin/runscript
# init-script for grsecurity sysctls
#
# ===========================================================================
# "THE COFFEE-WARE LICENSE" (Revision 1/2007):
# Jesco Freund <alleinherrscher@my-universe.com> wrote this file. As long as
# you retain this notice you can do whatever you want with this stuff. If we
# meet some day, and you think this stuff is worth it, you can buy me a cup
# of coffee in return.
# -----
# adapted from the BEER-WARE LICENSE by Poul-Henning Kamp
# ===========================================================================
depend() {
before sshd
}
start() {
flag=1
ebegin "Starting grsecurity"
sysctl -w kernel.grsecurity.linking_restrictions=$flag
sysctl -w kernel.grsecurity.fifo_restrictions=$flag
sysctl -w kernel.grsecurity.execve_limiting=$flag
sysctl -w kernel.grsecurity.exec_logging=$flag
sysctl -w kernel.grsecurity.signal_logging=$flag
sysctl -w kernel.grsecurity.forkfail_logging=$flag
sysctl -w kernel.grsecurity.timechange_logging=$flag
sysctl -w kernel.grsecurity.resource_logging=$flag
sysctl -w kernel.grsecurity.chroot_deny_shmat=$flag
sysctl -w kernel.grsecurity.chroot_deny_unix=$flag
sysctl -w kernel.grsecurity.chroot_deny_mount=$flag
sysctl -w kernel.grsecurity.chroot_deny_fchdir=$flag
sysctl -w kernel.grsecurity.chroot_deny_chroot=$flag
sysctl -w kernel.grsecurity.chroot_deny_pivot=$flag
sysctl -w kernel.grsecurity.chroot_enforce_chdir=$flag
sysctl -w kernel.grsecurity.chroot_deny_chmod=$flag
sysctl -w kernel.grsecurity.chroot_deny_mknod=$flag
sysctl -w kernel.grsecurity.chroot_restrict_nice=$flag
sysctl -w kernel.grsecurity.chroot_execlog=$flag
sysctl -w kernel.grsecurity.chroot_caps=$flag
sysctl -w kernel.grsecurity.chroot_deny_sysctl=$flag
sysctl -w kernel.grsecurity.tpe=$flag
sysctl -w kernel.grsecurity.tpe_gid=1234
sysctl -w kernel.grsecurity.tpe_restrict_all=$flag
sysctl -w kernel.grsecurity.audit_chdir=$flag
sysctl -w kernel.grsecurity.audit_mount=$flag
sysctl -w kernel.grsecurity.audit_ipc=$flag
sysctl -w kernel.grsecurity.dmesg=$flag
sysctl -w kernel.grsecurity.chroot_findtask=$flag
sysctl -w kernel.grsecurity.destroy_unused_shm=$flag
eend $?
}
stop() {
flag=0
ebegin "Stopping grsecurity"
sysctl -w kernel.grsecurity.linking_restrictions=$flag
sysctl -w kernel.grsecurity.fifo_restrictions=$flag
sysctl -w kernel.grsecurity.execve_limiting=$flag
sysctl -w kernel.grsecurity.exec_logging=$flag
sysctl -w kernel.grsecurity.signal_logging=$flag
sysctl -w kernel.grsecurity.forkfail_logging=$flag
sysctl -w kernel.grsecurity.timechange_logging=$flag
sysctl -w kernel.grsecurity.resource_logging=$flag
sysctl -w kernel.grsecurity.chroot_deny_shmat=$flag
sysctl -w kernel.grsecurity.chroot_deny_unix=$flag
sysctl -w kernel.grsecurity.chroot_deny_mount=$flag
sysctl -w kernel.grsecurity.chroot_deny_fchdir=$flag
sysctl -w kernel.grsecurity.chroot_deny_chroot=$flag
sysctl -w kernel.grsecurity.chroot_deny_pivot=$flag
sysctl -w kernel.grsecurity.chroot_enforce_chdir=$flag
sysctl -w kernel.grsecurity.chroot_deny_chmod=$flag
sysctl -w kernel.grsecurity.chroot_deny_mknod=$flag
sysctl -w kernel.grsecurity.chroot_restrict_nice=$flag
sysctl -w kernel.grsecurity.chroot_execlog=$flag
sysctl -w kernel.grsecurity.chroot_caps=$flag
sysctl -w kernel.grsecurity.chroot_deny_sysctl=$flag
sysctl -w kernel.grsecurity.tpe=$flag
sysctl -w kernel.grsecurity.tpe_gid=1234
sysctl -w kernel.grsecurity.tpe_restrict_all=$flag
sysctl -w kernel.grsecurity.audit_chdir=$flag
sysctl -w kernel.grsecurity.audit_mount=$flag
sysctl -w kernel.grsecurity.audit_ipc=$flag
sysctl -w kernel.grsecurity.dmesg=$flag
sysctl -w kernel.grsecurity.chroot_findtask=$flag
sysctl -w kernel.grsecurity.destroy_unused_shm=$flag
eend $?
}
Zu guter letzt noch einige Hinweise zur Verwendung:
- Wenn TPE eingesetzt werden soll, muss natürlich die GID an die eigenen Bedürfnisse angepasst werden
- Ggf. ist die Option tpe_restrict_all nicht erforderlich oder gewünscht – hier ist blindes Copy & Paste nicht ungefährlich!
- Werden die Logging-Optionen aktiviert, werden gewaltige Mengen an Log-Daten erzeugt. Auf einem Server mit mittlerer Auslastung kommen locker 2 – 3 GiB pro Tag zusammen. Die Logs sind zwar ein prima Ansatzpunkt zur Systemüberwachung (Auswertung durch ein IDS-Skript o. ä.), aber eventuell sollte man die Logs (grsec.log, kern.log) dann öfter als nur einmal täglich rotieren…
- Setzen Sie nie die Option grsec_lock – hierdurch könnte keine grsecurity-Option mehr verändert werden, ohne den Rechner neu zu starten, was den Sinn des Init-Skripts vollständig aushebeln würde
1 comment | Defined tags for this entry: Gentoo, Linux, security

Content is subject to the conditions of the
Moin Jesco,
danke für das Init-Script, habe es eben in http://www.rootforum.de/wiki/howto/gentoo/basesystem eingebaut.
Gruss,
Joe User
Joe User on Sept. 22, 2007 23:28 CEST