Ich weiß nicht wie viele von euch es mitbekommen haben, aber ich hatte im Laufe der letzten Woche einige Probleme mit Hackerangriffen aus Bangladesch und China. Wer zu dem Zeitpunkt auf meine Seite zugreifen wollte, der bekam nur eine kurze Meldung zu lesen:
hacked by murkho manob, from cyber 71
Nach kurzer Recherche habe ich herausgefunden, dass sich hinter cyber 71 eine Hacker Organisation aus Bangladesch mit dem Motto „সাইবার ৭১ -We Hack to Protect Bangladesh“ verbirgt. Was genau ich damit am Hut habe, weiß ich ehrlich gesagt auch nicht. Und nachdem ich die Server Logs durchforstet habe, haben die Jungs auch keinen großen Schaden angerichtet, sondern lediglich ein Exploit ausgenutzt – also eher Skript Kiddies und keine große Bedrohung – und lediglich per XSS die index.php überschrieben. Also alles halb so wild. die wichtigen Daten bleiben dabei unberührt, wobei es natürlich trotzdem ärgerlich ist.
Was mir dann aber wesentlich mehr Sorgen bereitet hat, waren die unzähligen Login-Versuche als root per SSH, meist von chinesischen IP Adressen. Das ganze sah in der var/log/secure dann in etwa so aus:
Mar 08 03:55:36 s17879425 sshd[25607]: Failed password for root from 115.239.228.15 port 57612 ssh2 Mar 08 03:55:39 s17879425 sshd[25607]: Failed password for root from 115.239.228.15 port 57612 ssh2 Mar 08 03:58:55 s17879425 sshd[25629]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=115.230.126.151 user=root Mar 08 03:58:58 s17879425 sshd[25629]: Failed password for root from 115.230.126.151 port 33306 ssh2 ....
Das geht dann noch etwa 20 Seiten im Minutentakt weiter, … Fraglich ist nur warum? Auf diesem Server hier hoste ich eigentlich nur einige Blogs sowie eher unnütze Spielereien, habe mich daher wohl auch nicht wirklich um den vorbeugenden Schutz gekümmert, wie ich es sonst eigentlich mache.
Ich gehe einfach mal davon aus, das diese Script Kiddies ihren mehr oder weniger gelungenen Hack inkl. dazugehöriger IP Adresse auf einer Seite wie zone-h veröffentlicht haben um den Ruhm zu ernten – haha. Auf derartigen Seiten suchen „Hacker“ gerne nach ungeschützten Servern, dort haben sie dann meist mit Brute-Force-Angriffen leichtes Spiel.
Bevor ich jetzt aber zu weit vom Thema abweiche, möchte ich zum wesentlichen zurück kommen. In diesem Tutorial möchte ich euch zeigen, wie ihr bei einem Hack eurer WordPress Installation vorgeht und wie ihr diese absichern könnt. Wie ihr euren kompletten Server gegen unerwünschte Besucher und Angriffe von Außerhalb schützt, könnt ihr hier nachlesen.
Also, was tun, wenn der eigene Blog gehackt wurde?
- Zunächst solltet ihr erst einmal Ruhe bewahren! Meistens ist alles halb so wild – vorausgesetzt ihr verfügt über ein Backup eurer Seite. Aber keine Angst, die meisten Hoster verfügen eigentlich über automatische Updates, so sollte zumindest das Gröbste gesichert sein. Wie ihr zusätzlich tägliche Backups von einzelne Ordner oder zumindest der Datenbanken anlegt, hatte ich mal an dieser Stelle beschrieben.
- Dann solltet ihr die Seite erst einmal vom Netz nehmen, denn ihr wisst nie genau, welchen zusätzlichen Schadcode die Angreifer evtl. zusätzlich hinterlassen haben. Außerdem sieht es weder für eure Besucher, noch für den Google Bot wirklich gut aus, wenn statt der Startseite nur eine gehackte Seite zu sehen ist.
- Nun ändert ihr erst einmal in Ruhe alle Passwörter. Sowohl von eurem WordPress Account, als auch von eurem Datenbanknutzer. Sicherheitshalber empfiehlt es sich gleich auch noch, falls ihr die Seite selber hostet, die Passwörter für root und den Zugang zu eurem Konfigurationstools, wie z.B. Plesk oder cPanel zu ändern – natürlich nur, falls vorhanden.
- Jetzt könnt ihr damit beginnen, eure Backups einzuspielen. Denkt daran das Passwort für den Datenbanknutzer in eurer wp-config.php anzupassen:
define('DB_PASSWORD', 'neues Passwort');
Aber wie sichere ich nun meinen Blog ab?
Hier könnt ihr 100 WordPress Nutzer fragen und werdet wohl 100 verschieden Antworten erhalten. Einige schwören auf Plugins, andere auf Handarbeit. Manche Sachen sind wohl überflüssig, andere erfordern einen ziemlich großen Arbeitsaufwand. Da ich persönlich kein Fan von Plugins bin, da zu viele Plugins den Blog unnötig verlangsamen, werde ich nur auf einige manuelle Tricks eingehen.
Fangen wir mit der wp-config.php an. Erst einmal ersetzt ihr die von Haus aus generierten Sicherheitskeys. WordPress denkt hier mit und ihr könnt euch direkt über deren API neue Keys generieren lassen.
Nun kümmern wir uns um den Schutz der wp-config.php. Dafür öffnen wir einfach die .htaccess im WordPress Verzeichnis und fügen folgende Zeilen ein.
#protect wp-config.php <files wp-config.php> order allow,deny deny from all </files>
Damit besteht nun kein Zugriff von Außen mehr auf eure Config File.
Die .htaccess eignet sich aber nicht nur zum Absichern der Config File, sondern auch zum Schutz des gesamten Admin Bereichs. WordPress kommt hier mit einem relativ einfachen Login daher. Den Zugang zu dieser Anmeldung sichern wir nun durch eine Zusätzliche Passwortabfrage. Dafür erstellen wir zunächst eine .htpasswd. Dann benutzen wir einen htpasswd Generator und erstellen uns einen User, mitsamt Passwort. Den Inhalt kopieren wir nun in unsere .htpasswd. Jetzt fehlt eigentlich nur noch die Änderung der .htaccess. Dort fügen wir nun folgendes hinzu:
#protect wp-login.php <files wp-login.php> AuthName “Admin-Area” AuthType Basic AuthUserFile /pfad zur/.htpasswd require valid-user </files>
Als letztes modifizieren wir nun die functions.php unseres derzeitigen Templates.
add_filter('login_errors',create_function('$a', "return null;"));
Dadurch wird verhindert, dass bei der Eingabe eines falschen Nutzernames oder Passworts eine Fehlermeldung ausgegeben wird. Der potentielle Angreifer bekommt also kein Feedback, sollte er sich doch Zugang zum Login verschafft haben.
Jetzt fehlt eigentlich nur noch ein Tipp von meiner Seite. Ihr könnt es euch sicherlich denken! Achtet immer darauf, dass alle verwendeten Plugins up-to-date sind!
Hallo und lieben Dank für die Hilfe, was jedoch wenn ich gar keinen Zugriff auf die wp-admin Seite habe?