Zusammenfassung vom Hacking-Contest

Eingesetzte Software


Als Betriebssystem kam OpenBSD im Release 3.6 zum Einsatz, aber nicht weil es am sichersten ist, sondern weil es sehr schnell installiert und konfiguriert werden kann. Der eingesetzte ftp-Server war vsftpd 2.0.1. OpenSSH lief in der Version 3.9 in Verbindung mit OpenSSL 0.9.7d 17 Mar 2004 und als Loginshell hab ich die Zsh 4.2.0 installiert. Ansonsten habe ich keine zusaetzliche Software eingesetzt.

Grundsaetzliche Aenderungen


Zusaetzlich zum GENERIC-Kernel habe ich noch Stephanie verwendet, damit ich die Loginclass h4x0r weiter einschraenken konnte (die /etc/sysctl.conf ist hier zu finden). Fuer genauere Informationen seht euch die Homepage von Stephanie an. Den Start von sendmail (der Default-MTA von OpenBSD) habe ich in der /etc/rc.conf unterbunden; gleiches gilt auch fuer den Apache, BIND und den RPC. Die einzigen Daemons die liefen, waren also OpenSSH und vsftpd.
Der User h4x0r hatte eine eigene Loginclass, die wie folgt aussah:
h4x0r:\
        :welcome=/etc/motd.h4x0rs:\
        :path=/usr/bin /bin /usr/local/bin:\
        :umask=077:\
        :cputime:20s:\
        :priority=2:\
        :datasize=16M:\
        :maxproc=32:\
        :memoryuse=26M:\
        :openfiles=82:\
        :stacksize=5M:\
        :tc=default:
Genauere Informationen sind in der Manpage login.conf(5) zu finden.
Der User h4x0r unterlag zusaetzlich noch einem Quota, falls jemand auf die Idee gekommen waere, die Partition zuzumuellen.
[root@hellfire:~]# quota -u h4x0r
Disk quotas for user h4x0r (uid 1001):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
          /home     250    1000    1050              19       0       0
[root@hellfire:~]#
Zudem habe ich noch bei einigen dateien das S-{UID,GID} Bit entfernt. Also
$ chmod a-s \
/sbin/ping \
/sbin/ping6 \ 
/sbin/shutdown \
/usr/bin/chfn \
/usr/bin/chfn \
/usr/bin/chsh \
/usr/bin/lpr \
/usr/bin/lprm \
/usr/bin/passwd \
/usr/bin/sudo \
/usr/sbin/traceroute \
/usr/sbin/traceroute6 
und von folgenden Dateien das Lese/Schreibrecht genommen:
$ chmod o= \
/usr/bin/crontab \
/usr/bin/at \
/usr/bin/atq \
/usr/bin/atrm \
/usr/bin/batch \
/etc/fstab \
/etc/ftpusers \
/etc/group \
/etc/hosts \
/etc/inetd.conf \
/etc/login.conf \
/etc/newsyslog.conf \
/etc/rc.conf \
/etc/sysctl.conf \
/etc/syslog.conf \
/etc/ttys
/var/log
Fuer den unwahrscheinlichen Fall der Faelle, hab ich folgende chflags gesetzt
$ chflags sappnd /var/log
$ chflags sappnd /var/log/*
$ chflags schg,uappnd /home/h4x0r/.{cshrc,exrc,login,mailrc.msgsrc,profile}


Loesungsweg


Einige haben es mit Exploits, BruteForce-Attacken, .. versucht, aber das war alles sinnlos. Fuer die von mir eingesetzte Software gab es keine Exploits. BruteForce-Attacken waren auch sinnlos, weil ein su nicht funktioniert hat (lag daran, dass nur User ein 'su' machen koennen, die in der Gruppe wheel eingetragen waren und das war niemand).
Vom Prinzip her war es ganz einfach. In der /etc/ssh/sshd_config war folgender Eintrag zu finden PermitRootLogin without-password. Wenn man sich jetzt sshd_config(5) ansieht, wird man auf folgende stossen:
PermitRootLogin
         Specifies whether root can login using ssh(1).  The argument must
	 be ``yes'', ``without-password'', ``forced-commands-only'' or
	 ``no''.  The default is ``yes''.
	 
	 If this option is set to ``without-password'' password authenti-
	 cation is disabled for root.
Ergo kann sich root nur via SSH einloggen, wenn er kein Password eingibt und das ist nur via Authentifikation ueber einen Schluessel moeglich. Und der lag auf einem anderem Host. Welche Hosts ins Netzwerk eingebunden waren, konnte man ganz leicht dadurch rauskriegen, indem man einen kleinen Einzeiler schreibt, der alle Hosts im Subnet anpingt. Katze hat for ((i=1;i<=254;i++)) do ping -c 1 192.168.13.$i; done verwendet und wurde schon auf 192.168.13.6 fuendig. Sie musste sich jetzt nur noch den Useraccount auf 192.168.13.6 unter den Nagel reissen und von dort aus dann eine Verbindung via SSH zurueck auf hellfire.hopto.org starten (der benoetigte Key fuer root lag unter ${HOME}/.ssh/ rum).
Wie sich Katze eine Shell auf 192.168.13.6 besorgt hat, werde ich (und hoffentlich auch Katze) nicht sagen. Das soll der geneigte Anwender selbst rausbekommen.

Die $HISTFILE


Die $HISTFILE kann hier eingesehen werden. Sollten Eintraege fehlen, dann liegt das daran, dass einige die $HISTFILE kurzzeitig gegen /dev/null verlinkt oder geloescht haben.
Note: Eine hab ich noch .. h4x0r-histfile2.txt Sollten jetzt noch Fragen offen sein, auf die ich hier nicht eingegangen bin, dann schickt mir einfach eine hacking-contest@strcat.de und ich werde auf dieser Seite darauf eingehen.
$Id: contest/index.html,v 1.2 2003/06/23 10:51:25 dope Exp dope $
Send comments to hacking-contest@strcat.de.
Last modified: [ 2004-12-09 14:07:40 ]
© 2003-2004 Christian 'strcat' Schneider <hacking-contest@strcat.de>