Debian/PHP-Update: Sporadische Fehlermeldungen

#1
Hallo zusammen.

Es geht um einen produktiven Debian-5.0-Server mit Apache, MySQL, PHP (als Apache-Modul eingebunden) und Suhosin.
Nun habe ich vor einigen Tagen PHP aktualisiert (auf php5_5.2.6.dfsg.1-1+lenny6) und seitdem tauchen sporadisch Fehlermeldungen auf:

Feb 24 07:58:10 localhost suhosin[6004]: ALERT - possible memory corruption detected - unknown Hashtable destructor (attacker 'xx.xx.xx.xx', file '/var/www/XXX/index.php')
oder
Feb 25 00:26:16 localhost suhosin[25289]: ALERT - canary mismatch on efree() - heap overflow detected (attacker 'xx.xx.xx.xx', file '/var/www/YYY/index.php')
Davon sind momentan 2 Webseiten betroffen: 1 Wordpress-Blog und 1 Joomla-CMS.
An einen Angreifer glaube ich nicht, da einer der Fehler auch zufällig bei der Wartung des Joomla-CMS aufgetreten ist und ich nur eine CSS-Datei bearbeitet und die Startseite aktualisiert habe. Das Joomla-CMS und das Blog haben auch nichts miteinander zu tun.
Einen Reim kann ich mir darauf nicht machen, außer dass die Fehler erst seit ein paar Tagen auftreten, kurz nach dem PHP-Update.

Mittels Google findet man zwar einige Bug-Reports und Forenberichte, aber nichts davon hat mir wirklich weitergeholfen außer dass durch eine Deaktivierung von Suhosin der Fehler wesentlich seltener auftritt...

Reproduzieren kann ich den Fehler auch nicht. Es scheint absolut zufällig zu sein.

Kennt jemand das Phänomen oder hat einen Tipp wie ich nun weiter vorgehen könnte um die Fehlerquelle einzugrenzen?

Beste Grüße
Dresko
 
#2
Du könntest einfach erstmal das Logging etwas detaillierter machen, um z.B. zu sehen, ob der Fehler im Zusammenhang mit bestimmten GET/POST-Parametern, mit bestimmten Browser-Versionen, beim Wechsel einer Session o.ä. auftaucht. Ausserdem könntest du mal eine Dateiüberwachung auf das DocumentRoot setzen um zu sehen, ob der Fehler ggf. bei Änderungen von Dateien auftritt. Und auch eine Prozesslisten-Überwachung könnte evtl. helfen, falls der Fehler z.B. immer dann auftritt, wenn ein Worker-Prozess des Indianers erneuert wird, weil er seine MaxRequestsPerChild erreicht hat. Und zu guter Letzt könntest du es auf die Spitze treiben und die Apache-Prozesse z.B. mittels systemtap oder ähnlichen dtrace-Alternativen überwachen, um ganz genau zu sehen was der Webserver im Moment des Fehlers an Daten verarbeitet, welchen Request er bekommt, wohin er die Parameter im Speicher schreibt etc..
 
#3
Hallo bitmuncher,

danke für deine Tipps. Ein Teil davon habe ich schon versucht und kann folgende Sachen ausschließen:

- GET/POST-Parameter
- bestimmten Browser-Versionen
- Wechsel einer Session

Es sind auch unterschiedliche Dateien involviert. Mal ist irgendeine Datei aus dem wp-include-Ordner, mal die index.php, mal diese und mal jene. Bisher sind die Fehler bei insgesamt 6 versch. Dateien aufgetaucht.
Ein umfangreiches Logging oder ein Trace über einen längeren Zeitraum anzufertigen ist auch schwierig, da der Server unter Last steht und verfügbar bleiben sollte. Eine Prozess-/Dateisystemüberwachung werde ich aber mal noch durchführen.

Gestern abend ist aber noch etwas passiert:
Feb 26 00:13:02 localhost kernel: [1917062.122789] awstats.pl[12937]: segfault at
e3fe0 ip 7f45f6d1ef7f sp 7fff01730e10 error 4 in
libperl.so.5.10.0[7f45f6cbf000+166000]
Zudem gab es vor einem Monat schonmal einen ominösen Segfault bei meinem täglichen Backup:
/usr/local/bin/backup.sh: line 107: 27184 Segmentation fault gzip
backup_${DATE}.tar
Ich werde heute nacht den Server mal vom Netz nehmen und ein e2fsck und memcheck ausführen. So langsam vermute ich einen Defekt in einem der RAM-Riegel.

Sobald ich mehr weiß, melde ich mich wieder.

Grüße
Dresko
 
#5
Das wird (fast) definitiv ein Hardware-Fehler sein, wenn ich mir den Suhosin Output zusammen mit den Segfaults so betrachte. Entweder das, oder eine ziemlich schlechte Kernel-Konfiguration.
 

Chromatin

Moderator
Mitarbeiter
#6
ALERT - canary mismatch on efree()
Da Speziell dieser Fehler eher im Zusammenhang mit PHP auftritt, ist davon auszugehen dasz dort irgendwas verbuggtes ist - sofern du keine generellen Speicherfehler bekommst (memtest).
Und da hast du Recht, es ist wahrscheinlich kein Angreifer. suhosin setzt diese canary flags, PHP oder eine der extensions verursacht diesen Fehler - suhosin wird aufmerksam.
Das ist zumindest anzunehmen, auch wenn PHP Entwickler das gerne dementieren: http://news.php.net/php.internals/40919

Wenn Du die Moeglichkeit und Lust hast, kannst das ganze mal gegen Valgrind bauen und selbst etwas rumdebuggen.

Wir hosten selbst eine Anzahl von Joomla Sites und ich habe diesen Fehler nicht. Probier testweise einige extensions zu deaktivieren, vielleicht reicht das schon um eine Fehlerquelle zu finden.
 
#7
Danke für eure Antworten.
Wie schon geschrieben, will ich den Server erst heute nacht vom Netz nehmen. Ich bin gespannt was memtest ausspuckt, da ich momentan auch am ehesten ein Hardware-Defekt vermute.

Wenn Du die Moeglichkeit und Lust hast, kannst das ganze mal gegen Valgrind bauen und selbst etwas rumdebuggen.
Sehr schöne Idee. Valgrind ist mir nicht in den Sinn gekommen. Danke! :)
 
#8
Hallo.

Memtest hat bei einem Riegel wirklich mehrere Fehler gefunden.
Er wurde ausgetauscht und seitdem läuft die Kiste wieder stabil und ohne irgendwelche Fehler. :)

Danke und beste Grüße,
Dresko
 
Oben