php shells

Wer Webserver fuer eine groessere Anzahl an Benutzern betreibt, wird wohl oder uebel mit Php Shells konfrontiert werden.
Einen 100% zuverlaessigen Schutz gibt es natuerlich nicht. Ein paar einfache Moeglichkeiten den Schaden in Grenzen zu halten gibt es jedoch:

  • open_basedir Direktive fuer vhosts nutzen
  • Web und File Server trennen, besonders wenn sinnfreier Weise ssh erlaubt ist
  • Beobachten was fuer neue Dateien (auch Besitzerrechte, ggf. nach Mustern grepen) und wann sie angelegt wurden (klingt aufwendiger als es ist)
  • Falls man eine shell findet, zeit nah nach Pattern daraus auf dem Fileserver suchen
  • clamav laufen lassen

Shells gibt es sowohl im Klartext, als auch in gepackter Form.

Also etwas in der Art wie

<? eval(gzinflate(base64_decode('7X1rcxs5kuBnd0T/B7...

oder klassisch etwas wie

$language='ru';
$auth = 0;
$name='r57'; // knchm onk|gnb`rek?  (user login)
$pass='r57'; // o`pnk| onk|gnb`rek? (user password)

Die Dateien werden entweder hochgeladen oder ueber cross-site scripting aufgerufen.

Es gibt eine ganze Reihe solcher Php shells: r57, c99, c100, madshell, small php web shell, nst shell, php bypass shell, sim attacker shell, safe0ver bypass shell….
Klar worauf ich hinaus will? Diese shells existieren in unterschiedlichen Versionen und Anpassungen. Der Funktionsumfang der shells reicht dabei vom einfachen Kommando ausfuehren, bis hin zu irc remote und checks auf bestimmte Sicherheitsluecken und vieles mehr.
Kurz gesagt: ist das System nicht aktuell und man findet eine solche Shell, steigen die Chancen auf eine Kompromittierung des gesamten Systems. Einen local root exploit nachzuladen und auszufuheren ist kein grosser Aufwand.

Was tun wenn der Einbruch festgestellt wurde?
Da gibt es sicherlich eine Reihe von Vorgehensweisen, die empfohlen werden. Als ersten Schritt wuerde ich immer den entsprechenden vhost deaktiveren, die Dateien aber nicht loeschen sondern untersuchen (am besten auf einen anderen System). Sich selbst anschauen was fuer Funktionen die Shell bietet, also ruhig ausprobieren was man damit alles so anstellen kann, das hilft den moeglichen Schaden einzuschaetzen. Natuerlich den Vhost Inhaber informieren. Versuchen mit dem Vhost Administrator herauszufinden wie der Einbruch ueberhaupt moeglich war. Relativ haeufig sind nicht geupdatete CMS Systeme das Einstiegstor. Den Vhost erst wieder online nehmen wenn die Luecke gestopft ist.

Intrusion detection ist ein weites (weites) Feld. Daher beschraenke ich mich mal auf diesen kleinen Beitrag. Das man intrusion detection Systeme und diverse Monitoring tools im Einsatz haben sollte,  ist selbstverstaendlich. Es ist schwierig bei einer grossen Anzahl von Usern den Ueberblick zu behalten, trotzdem sollte man versuchen besonders CMS Systeme im Auge zu behalten und gegebenenfalls auch zentral anzubieten, bzw. upzudaten.

titanpad

Ich mag etherpad und wollte das auch vor einiger Zeit selbst aufsetzten (als ich gehoert habe, dass es nun opensource ist), dann aber keine Lust mehr gehabt weil irgendwas nicht funktioniert hat. Nun lese ich grad bei michael-prokop, dass er und Freunde eine alternative zu etherpad.com bereit stellen. Etherpad stellt seinen Dienst ein (sind ja eh alle bei google).

Finde ich dufte.

StatusNet und remote groups

Es ist problemlos moeglich  Gruppen unter http://identi.ca/group/ in der eigene StatusNet Installation zu joinen. Dazu einfach die Gruppe auf  http://identi.ca/group (bzw. wo auch immer) joinen und bei Profile Account einfach den Useraccount@Sitename angeben, also so was kero@mexdc.exdc.net. Danach erscheinen alle Nachrichten die auf der remote Installation mit !group getagt sind auch auf der eigenen Installation, genauso werden natuerlich eigene messages mit !group als tag auf der remote  Installation veroeffentlicht. Nette Sache, ob man was mit Anfangen kann haengt natuerlich vom Inhalt der Gruppen ab.  Die messages werden je nach Einstellungen dann auch via Jabber gepostet. Wer StatusNet nutzt wird das eh alles schon wissen. Man sollte vielleicht noch auf das TextLimit achten, ich hab meins auf 160 erhoeht, wodurch messages ueber 140 nicht auf anderen Seiten dargestellt werden (so war es jedenfalls bei Twitter).

Sprich mit mir apache

Wer etwas mehr ueber seinen Apache wissen will als das „normale“ mod-status liefert, sollte einfach mal

ExtendedStatus On

in die apache2.conf eintragen (muss im Server Bereich stehen und nicht im vhost)
und

a2enmod status

und nicht vergessen sowas wie

  <Location /_status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 1.2.3.4
</Location>

z.B. in die

/etc/apache2/sites-available/default

einzutragen.

/etc/init.d/apache2 reload

nun

http://derollewebserver/_status

aufrufen. Ruft man die Seite mit refresh=N als Parameter auf, gibt N den refresh Intervall an:

http://derollewebserver/_status?refresh=5

Jetzt waere natuerlich eine Abfrage via cati interessant.

Kritik:

mod_status and ExtendedStatus On

If you include mod_status and you also set ExtendedStatus On when building and running Apache, then on every request Apache will perform two calls to gettimeofday(2) (or times(2) depending on your operating system), and (pre-1.3) several extra calls to time(2). This is all done so that the status report contains timing indications. For highest performance, set ExtendedStatus off (which is the default).

Link: http://httpd.apache.org/docs/2.2/misc/perf-tuning.html

Sollten also die Ressourcen knapp sein, lieber die Finger davon lassen ;-).

exaile und shoutcast

Sollte sich exaile weigern shoutcast streams abzuspielen und verlangt dabei irgendwelche fehlenden decoder, hilft eventuell ein

aptitude install gstreamer0.10-fluendo-mp3

Eventuell liegt das auch an dieser netbook ubuntu remix Installation auf meinem netbook (sollte es aber eigentlich nicht aber who knows!?). Beim Desktop gab es das Problem jedenfalls nicht. Muesste man mal mit einer frischen Installation testen…

Fan Update 1.1 to 2.0

Hallo Menschheit,
koenntest du bitte dieses Skript fuer  mich testen
http://lkco.gezen.fr/dokuwiki/doku.php?id=supervision:update_fan_1.1_to_fan_2.0
und falls es funktioniert vorbeikommen, mein momentanes System auf eine VM spiegeln, dort das Skript ausfuehren, falls erfolgreich den Vorgang bei der produktiven Maschine wiederholen und sollte es nicht funktionieren uebernimm bitte auch die volle Verantwortung…komm vorbei, gibt auch Kaffee und Balisto.