Entwickler-Ecke

Off Topic - Wordpress: Admin-Account absichern!


Martok - Sa 29.12.12 01:47
Titel: Wordpress: Admin-Account absichern!
Hallo!

Public Service Announcement: aktuell (ca eine Woche) habe ich auf allen mir bekannten Wordpress-Installationen massenweise Loginversuche auf den Account "admin" mit Passwörtern aus einem ziemlich umfangreichen Wörterbuch. Das ganze 24/7 so ca. alle 10 Minuten.

Ob eine Installation betroffen ist, lässt sich z.B. mit einem Login-Log [http://wordpress.org/extend/plugins/simple-login-log/]-Plugin herausfinden (in den Einstellungen aktivieren, dass auch fehlgeschlagene aufgezeichnet werden).

Solltet ihr also ein WP haben oder betreuen oder jemanden kennen der eins hat: nochmal nachsehen, ob euer Passwort einigermaßen sicher ist [http://howsecureismypassword.net/]. Ggf. kann man auch den Admin-Account umbenennen [http://codex.wordpress.org/Hardening_WordPress#Security_through_obscurity], so wie ich das beobachtet hab wird nur "admin" versucht.



Die haben alle den gleichen User-Agent (nämlich den eines IE6 auf XPSP2), man kann also einfach auf diesen filtern und die Verbindung beenden. Sowas sollte in freier Wildbahn eigentlich nicht mehr existieren, Overblocking ist also unwahrscheinlich ;)
Diesen Code habe ich dazu ganz oben in die wp-config.php (weil die Upgrades überlebt) eingefügt. Damit wird die Verbindung so früh wie einfach möglich beendet, wenn der Bewusste erkannt wird. Das Ganze läuft bei mir seit ein paar Stunden, ist aber bis auf weiteres ungetestet und ohne jede Garantie.

PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
if (isset($_SERVER['REQUEST_URI']) && ($rq = $_SERVER['REQUEST_URI']) && !empty($rq) &&
  isset($_SERVER['HTTP_USER_AGENT']) && ($ua = $_SERVER['HTTP_USER_AGENT']) && !empty($ua)) {
  if (preg_match('#wp-login\.php#i',$rq) && preg_match('#SV1#i',$ua)) {
//OPTIONAL: Loggen, was los war
    $what = array();
    foreach(array('HTTP_USER_AGENT','CONTENT_TYPE','HTTP_REFERER','REMOTE_ADDR','REQUEST_METHOD','QUERY_STRING','REQUEST_URI'as $k) {
      $what[$k] = $_SERVER[$k];
    }
    $what['POST'] = &$_POST;
    $what['GET'] = &$_GET;
    file_put_contents(ABSPATH.'login-block.txt',date('c').';'.json_encode($what)."\r\n",FILE_APPEND);
//ENDE OPTIONAL
    header('HTTP/1.1 403 You are a bot, you don\'t belong here.');
    die('Bugger off!');
  }
}


Ende der Durchsage.

Grüße,
Martok


Martok - Sa 13.04.13 17:34

Update:

Es geht wieder los [http://www.heise.de/-1841419]. Diesmal etwas cleverer, mit mehr als 90k Angreifer-Hosts und auch nicht mehr so einfach blockbar, da die sich jetzt als Firefox 18 ausgeben - der ist zwar auch schon etwas her, aber nicht ganz so offensichtlich "böse".

Der Angriff ist aber (besonder was die Timing-Muster angeht) der selbe, ich vermute also mal dass das erste der Probelauf dazu war.

Am Besten ist immer noch, den Adminaccount nicht "admin" zu nennen (und auch nicht so wie ein User, der Beiträge postet) und ein nicht-wörterbuchiges Passwort zu haben.


Dude566 - Sa 13.04.13 18:01

Der Link zu heise.de führt ins Leere user profile iconMartok. ;)

Hier der richtige Link zum Artikel: http://www.heise.de/newsticker/meldung/Botnet-attackiert-Wordpress-Installationen-weltweit-1841419.html


Martok - Sa 13.04.13 19:06

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Der Link zu heise.de führt ins Leere user profile iconMartok. ;)
Ach stimmt, da muss man ja dann alles wegkürzen. Hatte das nur hier im Editor gemacht, nicht direkt den Kurzlink kopiert ;)