Webhoster Security Fail | 08.07.2018
Gerne nutze ich die Möglichkeit, für ein neues Projekt auch einen neuen Webhoster auszuprobieren. So bin ich schon bei einigen Hostern gelandet und die Liste wächst. Besonders interessant finde ich immer, wie das Webhosting auf Servern mit vielen Nutzern organisiert wird.
Vor kurzem habe ich einen Webhoster getestet und festgestellt, dass bei der Konfiguration etwas schief gelaufen ist. Das Ganze schiebe ich an dieser Stelle mal auf den Admin und Plesk. Warum? Der Admin muss das System einrichten und überwachen. Und Plesk bietet gewisse Services an, die wiederum z. B. Logdateien anlegen und damit für diese (irgendwie) verantwortlich sind. Und eigentlich darf ich von Plesk erwarten, dass es etwas wie einen Sicherheitscheck durchführt (Schreib- und Leseberechtigungen prüfen z. B.). Ob Plesk nun schlecht ist oder gut, das kann ich nicht sagen. Ich weiß nur, dass Plesk alleine nicht ausreicht, um sicheres Webhosting zu betreiben.
Als ich ein bisschen mit PHP gespielt habe (und mir ein Webterminal eingerichtet hatte, da das gelieferte Terminal nichts konnte), ist mir aufgefallen, dass ich etwas mehr sehe als ich dürfte. Der Nutzer, unter welchem PHP ausgeführt wird, durfte aus der Umgebung des Webhosting-Pakets raus und sich umschauen.
Aus Spaß habe ich einfach mal folgendes versucht:
:#~ ls -ls /var/www/vhosts
total 416
4 drwx--x--- 5 ftp*** psaserv 4096 Oct 31 2017 U***.server**.webhosteranbieter.de
4 drwx--x--- 7 ftp*** psaserv 4096 Jun 18 11:37 bla*****chen.de
4 drwxr-x--- 7 root root 4096 Jun 16 09:26 chroot
4 drwxr-xr-x 5 root root 4096 Apr 25 08:10 default
4 drwxr-xr-x 3 root root 4096 Jul 15 2017 dig*****rks.nl
4 drwx--x--- 5 ftp*** psaserv 4096 May 13 20:42 e*****r.eu
20 drwxr-xr-x 322 root root 20480 Jul 6 22:26 system
4 drwx--x--- 4 webhosteranbieter psaserv 4096 Apr 28 2017 system**.webhosteranbieter.de
4 drwx--x--- 8 marius psaserv 4096 Jul 1 15:12 U***.server**.webhosteranbieter.de
Okay. Interessant. 416 "Kunden" liegen also auf dem Server. Was halte ich davon? Grundsätzlich ist es ja so, dass ich auch bei anderen Hostern sehen kann, welche Nutzer im System sind. Hier ist es aber so, dass ich automatisch die Nutzernummern erhalte und zum Teil auch Domains. Damit ließen sich Rückschlüsse auf die Kunden des Anbieters ziehen. Dies kann ich auch, wenn ich rückwärts die IP untersuche und schaue, welche Domains auf dieser laufen. Aber dies ist etwas anderes und hat nichts mit der Konfiguration des Servers zu tun.
Dann ein Test, wie weit ich komme:
:#~ ls -ls /var/www/vhosts/kli*****h.de
ls: cannot open directory /var/www/vhosts/kli*****h.de: Permission denied
Alles klar, das ist beruhigend. Zumindest in die Ordner komme ich nicht rein. Oder? Ich habe mal versucht, einen root:root-Ordner auszulesen. Und ... naja ... es klappt. Und wenn dann irgendwo eine Datei auch noch root:root gehört und lesbar ist, kann ich diese einfach in mein eigenes Verzeichnis kopieren und auch lesen. Zum Verständnis: Der Fehler ist, dass gewisse Dateien einen globalen Lesezugriff haben. In diesem Fall fast alle der Gruppe/Eigentümer Root.
Wer jetzt denkt: Okay, ich sehe eigentlich nur die Adressen, die vom System vergeben werden, sollte sich den Inhalt des Ordners system
anzeigen lassen. Dort, so scheint es, sind alle Subdomains aufgelistet, die im aktuellen System eingetragen sind:
:#~ ls -ls /var/www/vhosts/system
total 1280
4 drwx--x--x 7 root psaserv 4096 May 24 21:39*******
4 drwx--x--x 7 root psaserv 4096 Mar 24 16:00 1cen*******
4 drwx--x--x 7 root psaserv 4096 Jun 27 04:0*******
4 drwx--x--x 7 root psaserv 4096 Nov 2 2017 Andr*******
4 drwx--x--x 7 root psaserv 4096 Aug 28 2017 Anni*******
4 drwx--x--x 7 root psaserv 4096 Apr 14 09:46 BTC.n*******
4 drwx--x--x 7 root psaserv 4096 Aug 8 2017 Hel*******
4 drwx--x--x 7 root psaserv 4096 Jun 26 15:33 Schiffselekt*******
4 drwx--x--x 7 root psaserv 4096 Oct 31 2017 U****V***.server**.webhosteranbieter.de
4 drwx--x--x 7 root psaserv 4096 Apr 1 18:25 U****V***.server**.webhosteranbieter.de
4 drwx--x--x 7 root psaserv 4096 Apr 2 21:07 U****V***..server**.webhosteranbieter.de
4 drwx--x--x 7 root psaserv 4096 May 28 01:50 U****V***.server**.webhosteranbieter.de
4 drwx--x--x 7 root psaserv 4096 Feb 14 20:19 cloud.d*****eat*******
4 drwx--x--x 7 root psaserv 4096 Jun 27 04:03 cloud.*******
4 drwx--x--x 7 root psaserv 4096 Apr 8 12:39 cloud.jonathan*******
4 drwx--x--x 7 root psaserv 4096 Apr 16 15:57 cloud.pic-*******
4 drwx--x--x 7 root psaserv 4096 Dec 4 2017 cloud.*******
4 drwx--x--x 7 root psaserv 4096 Jun 27 04:03 cloud.waldo*******
4 drwx--x--x 7 root psaserv 4096 Jun 14 2017 vetmed-versic*******
4 drwx--x--x 7 root psaserv 4096 Jun 27 04:03 webmail.dystem*******
4 drwx--x--x 7 root psaserv 4096 Jun 27 04:03 webmail.eag*******
4 drwx--x--x 7 root psaserv 4096 Jun 27 04:03 webmail.gssk*******
4 drwx--x--x 7 root psaserv 4096 May 11 08:50 xn--sex-aufklru*******
4 drwx--x--x 7 root psaserv 4096 May 24 17:50 yacht-elek*******
Also die 416 Kunden haben insgesamt 1280 Domains und Subdomains auf dem Server aktiviert. Zum Teil erkenne ich Hinweise auf Webmail-Clients oder Cloud-Umgebungen. Es gibt Firmenwebsites und private Blogs.
Weiter runter kommt man zum Glück nicht. Aber es reicht zum Teil schon aus. Okay, also mal weiter umschauen auf dem System. Eventuell kann ich ja Logs lesen:
:#~ ls -l /var/log
total 229460
-rw------- 1 root utmp 14614272 Jul 7 00:32 btmp
-rw------- 1 root utmp 74356992 Jul 1 05:26 btmp-20180701
-rw------- 1 root root 1906093 Jul 7 00:33 cron
-rw------- 1 root root 4370503 Jun 10 05:15 cron-20180610
-rw------- 1 root root 4137152 Jun 17 05:18 cron-20180617
-rw------- 1 root root 2778917 Jun 24 05:20 cron-20180624
-rw------- 1 root root 2583637 Jul 1 05:27 cron-20180701
-rw-r--r-- 1 root root 113322 Jun 15 13:28 dnssec_debug.log
-rw------- 1 root root 109 Jul 1 05:27 fail2ban.log
-rw------- 1 root root 108 May 13 05:01 fail2ban.log-20180520.gz
-rw------- 1 root root 108 May 20 05:02 fail2ban.log-20180527.gz
-rw------- 1 root root 108 May 27 05:13 fail2ban.log-20180603.gz
-rw------- 1 root root 106 Jun 3 05:25 fail2ban.log-20180610.gz
-rw------- 1 root root 250 Jun 16 09:22 fail2ban.log-20180617.gz
-rw------- 1 root root 110 Jun 17 05:18 fail2ban.log-20180624.gz
-rw------- 1 root root 110 Jun 24 05:20 fail2ban.log-20180701.gz
drwx------ 2 root root 4096 Jun 27 15:49 httpd
drwxr-sr-x 3 root systemd-journal 4096 Apr 26 2017 journal
-rw-r--r-- 1 root root 2976940 Jul 6 23:45 lastlog
-rw-r----- 1 root root 3467222 Jul 7 00:33 maillog
-rw-r----- 1 root root 33036 Jul 6 04:33 maillog.processed
-rw-r----- 1 root root 1284651 Jul 6 04:10 maillog.processed.1.gz
-rw-r----- 1 root root 1628475 Jul 4 04:15 maillog.processed.2.gz
-rw-r----- 1 root root 1658867 Jul 2 04:11 maillog.processed.3.gz
drwxrwxr-x 2 root mailman 4096 Jul 1 05:27 mailman
drwxr-x--- 2 mysql mysql 92 Aug 4 2017 mariadb
-rw------- 1 root root 2101379 Jul 7 00:31 messages
-rw------- 1 root root 4721567 Jun 10 05:15 messages-20180610
-rw------- 1 root root 5290713 Jun 17 05:18 messages-20180617
-rw------- 1 root root 4004525 Jun 24 05:20 messages-20180624
-rw------- 1 root root 3561575 Jul 1 05:27 messages-20180701
drwxr-xr-x 2 ntp ntp 4096 Apr 13 14:52 ntpstats
drwxrwx--- 2 apache root 4096 Jun 11 05:15 php-fpm
drwxr-x--- 5 psaadm root 4096 Jul 6 04:33 plesk
drwx------ 2 root root 4096 Jul 1 05:27 plesk-php55-fpm
drwx------ 2 root root 4096 Jul 1 05:27 plesk-php56-fpm
drwx------ 2 root root 4096 Jul 1 05:27 plesk-php70-fpm
drwx------ 2 root root 4096 Jul 1 05:27 plesk-php71-fpm
drwx------ 2 root root 4096 Jul 1 05:27 plesk-php72-fpm
drwxr-x--- 2 horde_sysuser root 4096 Jul 1 04:07 psa-horde
-rw-r--r-- 1 root root 215 Jul 6 05:26 sa-update.log
-rw-r--r-- 1 root root 86 Apr 1 04:53 sa-update.log-20180401
-rw-r--r-- 1 root root 1315 May 1 05:33 sa-update.log-20180501
-rw-r--r-- 1 root root 1290 Jun 1 05:40 sa-update.log-20180601
-rw-r--r-- 1 root root 1290 Jul 1 05:27 sa-update.log-20180701
drwx------ 3 root root 4096 Apr 13 17:34 samba
-rw------- 1 root root 16205928 Jul 7 00:32 secure
-rw------- 1 root root 17937142 Jun 10 05:14 secure-20180610
-rw------- 1 root root 23011227 Jun 17 05:18 secure-20180617
-rw------- 1 root root 24260772 Jun 24 05:20 secure-20180624
-rw------- 1 root root 18445428 Jul 1 05:27 secure-20180701
-rw------- 1 root root 0 Jul 1 05:27 spooler
-rw------- 1 root root 0 Jun 3 05:25 spooler-20180610
-rw------- 1 root root 0 Jun 10 05:15 spooler-20180617
-rw------- 1 root root 0 Jun 17 05:18 spooler-20180624
-rw------- 1 root root 0 Jun 24 05:20 spooler-20180701
drwxr-x--- 2 root root 4096 Jul 2 05:22 sw-cp-server
-rw------- 1 root root 0 Mar 27 2017 tallylog
-rw-rw-r-- 1 root utmp 31872 Jul 6 23:45 wtmp
-rw-rw-r-- 1 root utmp 1476096 Jul 2 05:52 wtmp-20180701
-rw------- 1 root root 45501 Jul 4 04:03 yum.log
-rw------- 1 root root 67548 Dec 13 2017 yum.log-20180101
-rw------- 1 root root 19618 Mar 28 04:03 yum.log-20180329
Okay, das sieht jetzt nicht so gut aus. Ich kann also in Logdateien von dnssec
schauen oder auch andere Logs kopieren.
:#~ cp /var/log/wtmp wtmp
:#~ cp /var/log/wtmp-20180701 wtmp-2018070
Ich komme also in den Besitz von IP-Adressen der Nutzer und Zeitpunkten, zu denen sie online waren.
Nun stellt sich natürlich die Frage, ob es sich hierbei um eine Schwäche von Plesk handelt oder ob es einen Fehler in den genutzten Serverimages gibt. Möglich ist auch, dass die Server händisch aufgesetzt werden und hier der Administrator etwas vergessen hat. Natürlich habe ich den Betreiber informiert und dabei auf Folgendes hingewiesen: