xtc ['ekstəsi]: The feeling when ICT succeeds

Deutsch

Was ist das GX Website-Sicherheits-Plugin für CMSimple?

Das GX Website-Sicherheits-Plugin ist ein Skript, das versucht, gewisse generelle Sicherheitsprobleme in PHP-Skripts zu bekämpfen.

Es dient der direkten und transparenten Sicherheit in diversen Szenarien, die durch regelmäßige Anfälligkeiten in Skripts enstehen, weil z.B. beim Programmieren nicht genug auf Sicherheit geachtet wurde. Das Plugin versucht, diese Achtlosigkeit zu kompensieren.

Ursprünglich basierte es auf dem Cafe CounterIntelligence PHP Website Security Skript von Mike Parniak.

Es ist ein Plugin für das CMS CMS CMSimple (XH).


Wogegen kann das GX Website-Sicherheits-Plugin helfen?

Anfragenüberflutung (HTTP request floods)

Diese Art von Problemen war eine der ersten Anforderungen, die das Skript bekämpfen sollte.

Es gibt Programme, die eine Website mit schnell hintereinander erfolgenden GET oder POST Anforderungen überfluten, um die CPU lahm zu legen, um tausende von Emails zu erstellen, um Datenbanken zu füllen oder um sonstige Dinge zu tun. Es gibt viele Skripts, die so etwas tun können und die meisten Webhoster neigen dazu, Accounts zu sperren, die Ziel eines solchen Angriffs geworden sind. Das Plugin hilft sich vor solchen Angriffen zu schützen.

Anzeigeanfälligkeiten in Skripts

Eine der häufigsten Anfälligkeiten in PHP Skripts.

Benutzer finden eine CGI Variable, die wörtlich angezeigt wird und schicken HTML-Kode (meistens Javascript) damit durch, der z.B. ein Benutzer-Cookie an ihren Webserver schickt. Dann wird diese Information genutzt um ein Login zu stehlen oder Schlimmeres zu tun. Das GX Skript besitzt die Möglichkeit, alle GET, POST bzw. Cookie Daten zu säubern, um alle < > Zeichen in ihre anzeigbare, jedoch nicht ausführbare, Version zu ersetzen. Dies reduziert meistens das Risiko von Anfälligkeiten dieser Art.

Allgemeiner Überflutungs-Schutz (flood protection)

Eine weitere Möglichkeit des Skripts ist es zeitbasierte Überflutungstests für gewisse Funktionen durchzuführen. Das bedeutet, dass man einen eindeutigen Bezeichner (z.B. "messagepost"), einen Zeitwert (z.B. 60 Sekunden) und optional einen Schwellenwert (vorgegeben ist 1) angeben kann und die Funktion dann TRUE zurückgibt wenn sie mehr als <Schwellenwert> mal vom gleichen Benutzer aufgerufen wurde, ohne dass zwischen den Aufrufen die angegebene Zahl von Sekunden lag.

Sperren von IP via .htaccess

Optional (standardmäßig ist dies eingeschaltet) kann das Skript die Datei .htaccess anpassen um IPs von Benutzern zu sperren, die die Website missbraucht haben. Dies reduziert drastisch die CPU-Last und verhindert weitere Versuche, die Website zu missbrauchen.

Damit diese Möglichkeit funktionieren kann, muss das Skript Schreibrechte auf die Datei .htaccess haben (wenn sie existiert).

Anzeige bzw. Stehlen von HTML Quellkode

Das Skript kann automatisch Seiten in Javascript-Funktionen verpacken. Es wird entweder die gängige "Escape"-Technik oder die interne Verschlüsselungsmethode von GXSecurity benutzt, die die Seitendaten zwar nutzbar lassen, aber den Quellkode verstecken. Der Schlüssel wird in einem Cookie gespeichert, das bei jedem Aufruf ändert. Somit erhält der Benutzer das Cookie und die Daten gleichzeitig, kann sie aber nachher nicht mehr entschlüsseln.

Blockieren von IP-Adressen auf schwarzen Listen (RBL)

Das Skript identifiziert automatisch IP-Adressen, die sich auf so genannten schwarzen Listen befinden und kann diese sperren um zu verhindern, dass bekannte Spammer auf die Website zugreifen und versuchen sie zu hacken.

Blockieren von Besuchern aus benutzerdefinierten Ländern

Websites werden oft von Benutzern besucht, die sich in Ländern befinden, die für Missbrauch von Hackern und/oder Bots bekannt sind.

Das Skript hat die Möglichkeit, Besucher aus diesen Ländern individuell zu sperren.

URL Cracks und Injektionen aufspüren

Das Skript spürt automatisch Angriffe auf, die von URL Cracks bzw. Injektionen ausgehen.


Wie wird das Plugin benutzt?

GXSecurity installieren

Einfach das Plugin in den Plugin-Ordner von CMSimple kopieren. Das war es schon!!!

Ok, wenn etwas geändert und gespeichert werden soll, dann müssen die Rechte gewisser Ordner und Dateien durch chmod angepasst werden. Im Plugin-Ordner gibt es fünf Ordner (config, css, languages, log und lib), die mittels chmod in 777 geändert werden müssen. Das Gleiche gilt für die Dateien in diesen Ordnern.

Ferner muss das Plugin mit dem Template verbunden werden. Dazu genügt es einfach die folgende Linie in die erste Zeile von template.htm zu kopieren:

<?php echo GXSecurity();?>

bzw. wenn Probleme im Admin-Modus bestehen:

<?php if (!$adm) echo GXSecurity();?>

GXSecurity konfigurieren

Es gibt eine Reihe von Variablen in der Konfiguration, die man sich ansehen und nach den eigenen Anforderungen anpassen kann.

Variable Value
usehtaccessbans 1 = .htaccess verändern um IPs zu sperren
0 = IPs nicht sperren
filterGETvars 1 = HTML Tags in GET Variablen säubern
0 = nicht
filterCOOKIEvars 1 = 1 = HTML Tags in COOKIE Variablen säubern
0 = nicht
filterPOSTvars 1 = 1 = HTML Tags in POST Variablen säubern
0 = nicht
extraPOSTprotection 1 = zusätzlichen POST-Schutz benutzen
0 = nicht
extraGETprotection 1 = zusätzlichen GET-Schutz benutzen
0 = nicht (nicht angeraten!)
checkmultiPOST 1 = nur die Anzahl von maxmultiPOST sich folgenden POSTs erlauben
0 = nicht drum kümmern
maxmultiPOST maximale Anzahl von sich folgenden POSTs, wenn checkmultipost aktiviert ist
zipcompress 1 = Seiten mittels der GZIP Bibliothek komprimieren (niedrigere Bandbreite, höhere CPU-Last
0 = nicht
compresslevel Komprimierungs-Lever für zipcompress, von 1 (niedrig) bis 9 (Maximum)
cpuloadmonitor 1 = Zugriff blockieren wenn eine gewisse Systemlast erreicht ist
0 = nicht
cpumaxload maximum 5 Minuten mittlere Systemlast bevor der Zugriff blockiert wird
gxsessionpath wenn nicht leer, bezeichnet einen Ordner um die Sitzungsdateien zu speichern
filterblacklistedIPs 1 = IPs von schwarzen Listen sperren
0 = nicht
dnsbl_lists DNS-based Blackhole List
filtercountries 1 = Länder aus countryfile sperren
0 = nicht
crackcheck 1 = auf Cracks und Injektionen testen
0 = nicht
countryfile Name der Datei mit den zu sperrenden Länderkodes
crackfile Name der Datei mit den aufzuspürenden Cracks und Injektionen
badattempts Anzahl der unerlaubten Zugriffe bevor die IP in .htaccess gesperrt wird oder eine Mitteilung kommt, dass zu viele schnell aufeinander folgende Zugriffe gewesen sind.
logheader Kopfzeile der Logfiles
logcycle Zyklus der Logdateien: <D>aily (eine Datei pro Tag), <M>onthly (eine Datei pro Monat) oder <Y>early (eine Datei pro Jahr)
logdelimiter Trenner zwischen den Feldern in den Logdateien
httpBL_key Persönlicher http:BL Zugriffskode vom Projekt Honey Pot.
Wenn die Variable leer ist, dann wird der Test übersprungen.
httpBL_spamthreat Schwellenwert der Spambedrohung (default = 1)
Detaillierte Infos siehe http://www.projecthoneypot.org/httpbl_api.php
httpBL_otherthreat Schwellenwert anderer Bedrohungen (default = 40)
Detaillierte Infos siehe http://www.projecthoneypot.org/httpbl_api.php
checkbothost 1 = Host bei Robots (user agent) gegentesten
0 = nicht
checkhosttype 1 = Standard (gethostbyaddr())
2 = *nix (schneller als 1)
3 = Win (schneller als 1)
waitingtime Zeit in Sekunden, bevor nach einer Sperrung ein neuer Zugriff erlaubt wird

Alle Optionen, die CPU lastig sind oder Probleme bereiten können, sind standardmäßig abgeschaltet. Durch Ausprobieren kann man am besten die geeignetesten Optionen für die eigene Site herausfinden.

Zu beachten: GZIP-Kodierung / HTML-Verschüsselung

Wenn die eine oder andere Option in Zusammenarbeit mit GXSecurity benutzt werden soll, muss sicher gestellt sein, dass nicht bereits GZIP-Kodierung benutzt wird. Falls dem so ist, muss es in dem anderen Skript ausgeschaltet sein und anstelle dessen in GXSecurity aktiviert werden. Die HTML-Verschüsselung kann nicht benutzt werden wenn ein Skript bereits seinen eigenen GZIP-Buffer hat, da der GZIP-Buffer von dem Verschlüsselungs-Buffer eingesetzt werden muss. GXSecurity vergewissert sich, dass der Benutzer GZIP-Kodierung annehmen kann, bevor sie benutzt wird. GXSecurity's GZIP kann also getrost anstelle des anderen Skripts verwendet werden.

Zu beachten: Säubern von POST-Variabeln

Manche Skipts erlauben das Einfügen von HTML-Kode in Artikeln, Mitteilungen, Signaturen, usw. In diesem Fall muss das Säubern von POST-Variabeln ausgeschaltet sein, damit nicht alle < > Zeichen in ;lt ;gt konvertiert werden. Wenn HTML-Kode jedoch nicht gebraucht wird, sollte das Säubern von POST-Variabeln eingeschaltet werden, da es die Risiken von XSS (Cross-Site Scripting) extrem verringert.

Zu beachten: CPU Monitor

Es ist wahrscheinlich besser diese Option ausgeschaltet zu lassen. Es ist unsicher, ob sie je helfen wird oder ob sie nur einfach alles verlangsamt weil ein externer Befehl ausgeführt werden muss... Benutzung auf eigene Gefahr!


Bekannte Probleme

Damit der interne Editor von CMSimple (OEdit) korrekt mit GXSecurity funktioniert, muss in PHP.INI "session use_trans_sid" auf "OFF" stehen oder die PHP-Variablen müssen durch GXSecurity veränderbar sein. Mehr Informationen dazu findet man hier: http://www.php.net/manual/de/ref.session.php.

Mehrstufige Formulare werden durch checkMultiPost blockiert, bzw. der maxmultiPost muss global auf einen recht hohen Wert eingestellt werden. Bei checkMultiPost auf OFF sind die Eingaben noch relativ geschützt, da immer zusätzlich getestet wird, ob Aufrufe (zu) schnell hintereinander erfolgen.


Garantie

Es gibt keine Garantie bei der Benutzung des Plugins. Es wird auf eigenes Risiko benutzt und es wird keine Haftung für Datenverluste übernommen, die ggf. durch den Gebrauch von GXSecurity entstehen.


Wo finde ich GXSecurity?

Die aktuelle Version von GXSecurity kann man hier downloaden.


Hilfe und Fragen

Hilfe und Fragen bitte nur im CMSimple-Forum und/oder CMSimple-Wiki.


Verbesserungsvorschläge für GXSecurity?

Ich bin weder Sicherheits- noch PHP-Experte. Wenn es also Möglichkeiten gibt, das Plugin zu verbessern, würde ich mich über eine Rückmeldung mittels meiner Website freuen.

 

© 2007-2015 by Gerd Xhonneux, xtc