Security manual (shared hosting umgebung bauen, LAMP)
Posted: 2007-03-20 11:54
Hallo,
ich hab mich die letzten Tage mit security rund um eine shared hosting Umgebung beschäftigt und es soll ein kleines manual werden. Dinge mit denen ich mich bis jetzt beschäftigt habe.
1. mod_security
* Simple filtering
* Regular Expression based filtering
* URL Encoding Validation
* Unicode Encoding Validation
* Auditing
* Null byte attack prevention
* Upload memory limits
* Server identity masking
* Built in Chroot support
* And more
Rules: http://www.gotroot.com/tiki-index.php?p ... rity+rules
2. suphp
"suPHP is a tool for executing PHP scripts with the permissions of their owners. It consists of an Apache module (mod_suphp) and a setuid root binary (suphp) that is called by the Apache module to change the uid of the process executing the PHP interpreter."
3. Die wichtigsten Sicherheitsoptionen in der php.ini
register_globals = off verhindert, dass Variablenzuweisungen in HTTP-Anfragen und Cookies globale Programmvariablen überschreiben. Diese Option zwingt Skripte dazu, vom Anwenderseite übermittelte Variablen über gesonderte Arrays wie $_REQUEST bewusst abzuholen. Ein Angreifer kann es dadurch nicht mehr ohne Weiteres ausnutzen, falls ein Skript uninitialisierte Variablen verwendet oder leichtfertig von bestimmten globalen Vorbelegungen ausgeht.
allow_url_fopen = off sorgt dafür, dass PHP-Skripte nur lokale Dateien des Servers einbinden können. Dies ist eine besondere Hürde für viele Angriffstypen, da keine Skripte mehr direkt von externen Servern nachgeladen werden können.
safe-mode = on bewirkt unter anderem, dass der PHP-Prozess nur noch auf Dateien und Verzeichnisse zugreifen darf, die dem Nutzer gehören, mit dessen Rechten der PHP-Prozess läuft. Auf Linux-Servern ist dies meist www-data beziehungsweise beim Einsatz von Apache-Modulen wie mod_suexec [8] oder suPHP der Skriptbesitzer. Außerdem sperrt der Safe-Mode in seiner Default-Einstellung gefährliche Funktionen wie shell_exec(), doch sein Verhalten lässt sich durch weitere Optionen steuern [9].
open_basedir = /pfad/zum/www-ordner legt ein Verzeichnis fest, außerhalb dessen PHP-Skripte keine Dateien öffnen können - ähnlich einer chroot-Umgebung. Der Zugriff auf enthaltene Unterordner ist natürlich gestattet, doch das direkte Auslesen beispielsweise von /etc/passwd und anderen vertraulichen Daten außerhalb des WWW-Root durch Path Traversal ist damit nicht mehr möglich.
display_errors = off erschwert unter Umständen die Vorbereitung eines Angriffs. Für einige Attacken ist es beispielsweise nötig, dass der Dateisystempfad zur Webapplikation bekannt ist. Diese Information lässt sich unter anderem vielen PHP-Fehlermeldungen entnehmen. Die Option verhindert, dass Angreifer gezielt Fehlermeldungen provozieren können.
(bei shared hosting nicht wirklich sinnvoll)
quelle: http://www.heise.de/security/artikel/84149/4#kasten2
4. remote logfiles
so bleiben bei einem kompromitiertem system noch logfiles auf einem anderem Server.
5.1 rkhunter als cron
Dieses script als cron für rkhunter:
#!/bin/sh
echo "Subject: SERVERNAME rootkit detector" > rkreport
echo "" >>rkreport
/usr/local/bin/rkhunter --versioncheck >> rkreport
/usr/local/bin/rkhunter --update >> rkreport
/usr/local/bin/rkhunter --cronjob --report-warnings-only >> rkreport
sendmail your@email.com < rkreport
INSTALL rkhunter
5.2 chrootkit als cron
#!/bin/sh
cd /pfad/zu/chkrootkit/
./chkrootkit | /usr/bin/mail -s 'chkrootkit Täglicher Check SERVER' ich@mail.de
6. snort intrusion detection
7. monitors (hab ich noch keine Entscheidung getroffen)
* Angel Network Monitor
* Autostatus
* Big Brother
* Big Sister
* HiWAyS
* MARS
* Mon
* Netup (French)
* NocMonitor
* NodeWatch
* Penemo
* PIKT
* RITW
* Scotty
* Spong
* Sysmon
8. Zugang zum system
8.1 ssh pubkey-Authentifizierung
8.2 IP-tables
9. Backup
Dieses manual für rsync ist denke ich ganz ok. Rsync ist ein Netzwerkprotokoll welches beim synchronisieren nur die Dateien überträgt die seit dem letzten backup verändert wurden. Dies spart enorm Bandbreite.
10. update des systems
ich nehme in diesem thread Änderungen vor und es folgt ein Fragenkatalog...
ich hab mich die letzten Tage mit security rund um eine shared hosting Umgebung beschäftigt und es soll ein kleines manual werden. Dinge mit denen ich mich bis jetzt beschäftigt habe.
1. mod_security
* Simple filtering
* Regular Expression based filtering
* URL Encoding Validation
* Unicode Encoding Validation
* Auditing
* Null byte attack prevention
* Upload memory limits
* Server identity masking
* Built in Chroot support
* And more
Rules: http://www.gotroot.com/tiki-index.php?p ... rity+rules
2. suphp
"suPHP is a tool for executing PHP scripts with the permissions of their owners. It consists of an Apache module (mod_suphp) and a setuid root binary (suphp) that is called by the Apache module to change the uid of the process executing the PHP interpreter."
3. Die wichtigsten Sicherheitsoptionen in der php.ini
register_globals = off verhindert, dass Variablenzuweisungen in HTTP-Anfragen und Cookies globale Programmvariablen überschreiben. Diese Option zwingt Skripte dazu, vom Anwenderseite übermittelte Variablen über gesonderte Arrays wie $_REQUEST bewusst abzuholen. Ein Angreifer kann es dadurch nicht mehr ohne Weiteres ausnutzen, falls ein Skript uninitialisierte Variablen verwendet oder leichtfertig von bestimmten globalen Vorbelegungen ausgeht.
allow_url_fopen = off sorgt dafür, dass PHP-Skripte nur lokale Dateien des Servers einbinden können. Dies ist eine besondere Hürde für viele Angriffstypen, da keine Skripte mehr direkt von externen Servern nachgeladen werden können.
safe-mode = on bewirkt unter anderem, dass der PHP-Prozess nur noch auf Dateien und Verzeichnisse zugreifen darf, die dem Nutzer gehören, mit dessen Rechten der PHP-Prozess läuft. Auf Linux-Servern ist dies meist www-data beziehungsweise beim Einsatz von Apache-Modulen wie mod_suexec [8] oder suPHP der Skriptbesitzer. Außerdem sperrt der Safe-Mode in seiner Default-Einstellung gefährliche Funktionen wie shell_exec(), doch sein Verhalten lässt sich durch weitere Optionen steuern [9].
open_basedir = /pfad/zum/www-ordner legt ein Verzeichnis fest, außerhalb dessen PHP-Skripte keine Dateien öffnen können - ähnlich einer chroot-Umgebung. Der Zugriff auf enthaltene Unterordner ist natürlich gestattet, doch das direkte Auslesen beispielsweise von /etc/passwd und anderen vertraulichen Daten außerhalb des WWW-Root durch Path Traversal ist damit nicht mehr möglich.
display_errors = off erschwert unter Umständen die Vorbereitung eines Angriffs. Für einige Attacken ist es beispielsweise nötig, dass der Dateisystempfad zur Webapplikation bekannt ist. Diese Information lässt sich unter anderem vielen PHP-Fehlermeldungen entnehmen. Die Option verhindert, dass Angreifer gezielt Fehlermeldungen provozieren können.
(bei shared hosting nicht wirklich sinnvoll)
quelle: http://www.heise.de/security/artikel/84149/4#kasten2
4. remote logfiles
so bleiben bei einem kompromitiertem system noch logfiles auf einem anderem Server.
5.1 rkhunter als cron
Dieses script als cron für rkhunter:
#!/bin/sh
echo "Subject: SERVERNAME rootkit detector" > rkreport
echo "" >>rkreport
/usr/local/bin/rkhunter --versioncheck >> rkreport
/usr/local/bin/rkhunter --update >> rkreport
/usr/local/bin/rkhunter --cronjob --report-warnings-only >> rkreport
sendmail your@email.com < rkreport
INSTALL rkhunter
5.2 chrootkit als cron
#!/bin/sh
cd /pfad/zu/chkrootkit/
./chkrootkit | /usr/bin/mail -s 'chkrootkit Täglicher Check SERVER' ich@mail.de
6. snort intrusion detection
7. monitors (hab ich noch keine Entscheidung getroffen)
* Angel Network Monitor
* Autostatus
* Big Brother
* Big Sister
* HiWAyS
* MARS
* Mon
* Netup (French)
* NocMonitor
* NodeWatch
* Penemo
* PIKT
* RITW
* Scotty
* Spong
* Sysmon
8. Zugang zum system
8.1 ssh pubkey-Authentifizierung
8.2 IP-tables
9. Backup
Dieses manual für rsync ist denke ich ganz ok. Rsync ist ein Netzwerkprotokoll welches beim synchronisieren nur die Dateien überträgt die seit dem letzten backup verändert wurden. Dies spart enorm Bandbreite.
10. update des systems
ich nehme in diesem thread Änderungen vor und es folgt ein Fragenkatalog...