Identifizierung einer Sicherheitslücke

Rund um die Sicherheit des Systems und die Applikationen
Post Reply
Anonymous
 

Identifizierung einer Sicherheitslücke

Post by Anonymous »

Hallo,
auf einen unserer Server wurde heute Nacht das zweite Mal zugegriffen, d.h. eine Datei PHP-Shell aufgespielt.

Zu dem Server:
- Linux debian 2.4.32 #3 SMP
- Debian Etch, aktuell
- Apache 2.2.3, suPHP 0.6.2, PHP 5.2.5

Die Sicherheitsarchitektur unterteilt die Kundenaccounts in separate Accounts, d.h. durch die suPHP-Implementierung sind die Accounts strikt getrennt.

In einem bestimmten Account war bisher nur eine index.php-Datei, die nur eine einzige Zeile enthält (einfache Weiterleitung, keine Variablen). Vorgestern Nacht wurde durch einen Angreifer/Robot eine PHP-Shell aufgespielt, die als User/Group die Daten des Accounts enthält. Gestern haben wir mod_security zusätzlich aufgespielt, um dem genauer auf den Grund zu gehen und weiteres zu verhindern.

Heute Nacht wurde eine weitere PHP-Shell unter anderem Namen aufgespielt, aber Dank mod_security konnte sie nicht ausgeführt werden. Da keine weiteren Dateien in dem Account sind, wodurch eine Injection erfolgt sein könnte, macht mir das große Sorgen, weil es den Schluss nahelegt, dass der Angreifer weitere Rechte erlangt hat, und die Datei dann einfach in den Ordner gelegt wurde. Der Kernel ist 'relativ' alt, allerdings sind mir auch keine remote root exploits >= 2.4.32 bekannt.

Wir werden den Server in Kürze neu aufsetzen und haben bis dahin permanent den Traffic im Auge, um sofort abschalten zu können, falls es losgehen sollte. Bis dahin möchte ich jedoch analysieren, um das Loch zu finden, um es dauerhaft zu schließen, dass es zukünftig nicht mehr auftritt.

Kann mir hier jemand einen konkreten Hinweis liefern, wo ich weitergucken könnte? Selbstredend ist an den klassischen Stellen wie u.a. /tmp nichts zu finden. Im error_log des spezifischen VHosts findet sich auch nur:
[Tue Apr 01 23:54:27 2008] [error] [client 89.35.68.156] File does not exist: /home/www/kunde5/domain.com/www/htdocs/mzz.php
[Tue Apr 01 23:55:45 2008] [error] [client 89.35.68.156] Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html, referer: http://www.domain.com/a.php
[Tue Apr 01 23:55:48 2008] [error] [client 89.35.68.156] ModSecurity: Access denied with code 500 (phase 2). Pattern match "(\\?((LOCAL|INCLUDE|PEAR|SQUIZLIB)_PATH|action|content|dir|name|menu|pm_path|path|pathtoroot|cat|pagina|path|include_location|root|page|gorumDir|site|topside|pun_root|open|seite)=(http|https|ftp)\\:/|(cmd|command)=(cd|\\;|perl |killall |python |rpm |yu ..." at REQUEST_BODY. [hostname "www.domain.com"] [uri "/a.php"] [unique_id "1M1Ghn8AAAEAAGSSBPkAAABF"]
mzz.php war der Name der PHP-Shell, die vorgestern Nacht aufgeladen wurde (gestern gelöscht). Die Datei, die ich heute Morgen vorgefunden habe, war die a.php

Ich würde mich freuen, eine konkrete Hilfe zu bekommen, um das Problem zu beheben. Die leider häufig vorkommenden Kommentare "Sofort trennen, neu bespielen, etc." helfen hier nicht weiter, weil die Ursache zuerst eingekreist werden muss (zudem haben wir das MRTG die ganze Zeit fest im Auge).

Vielen Dank,
dertechniker
User avatar
Joe User
Project Manager
Project Manager
Posts: 11191
Joined: 2003-02-27 01:00
Location: Hamburg
Contact:
 

Re: Identifizierung einer Sicherheitslücke

Post by Joe User »

access.log nach myz.php greppen. suPHP-0.6.2 hat bekannte und aktiv genutzte Schwachstellen ebenso wie Debians PHP-Paket. Und warum noch einen 2.4er Kernel?
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53
 

Re: Identifizierung einer Sicherheitslücke

Post by Roger Wilco »

Zunächst mal sollte die Analyse nicht im laufenden System erfolgen. Falls sich tatsächlich ein Rootkit eingenistet hat, kannst du weder den laufenden Programmen, noch den Dateien auf der Festplatte trauen. So könnte die Prozessliste schlicht gefälscht sein, die relevanten Dateien versteckt werden usw. usf.; das übliche bei Rootkits eben.

Wenn du etwas rumspielen willst, kannst du `find` über die ganze Festplatte jagen und dir alle Dateien auflisten lassen, die dem betroffenen Benutzer gehören. Die Logs sollten, sofern der Angreifer keine Rootrechte hat um diese zu verändern, zumindest einige Angriffsversuche aufzeigen. Gute Kandidaten für grep über die Skripte sind dabei Strings wie "http://", "ftp://", "php://", "perl", "python", "curl", "wget"... Einfach alles, über das man Code nachladen kann.

Gestern oder vorgestern wurde auch eine neue Version von SuPHP veröffentlicht, die einige (kritische) Sicherheitslücken schließt. Eventuell könnte da auch ein Angriffsvektor bestehen.
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53
 

Re: Identifizierung einer Sicherheitslücke

Post by Roger Wilco »

Joe User wrote:Und warum noch einen 2.4er Kernel?
Weil er stale^Wstable ist. ;)
Post Reply