Perl Skript - Auslöser Datei orten

Apache, Lighttpd, nginx, Cherokee
luco
Posts: 29
Joined: 2006-09-14 22:21

Perl Skript - Auslöser Datei orten

Post by luco » 2007-07-07 12:14

Hallo,
ich hab nen kleinen RootServer hauptsächlich zum rumspielen.
Seit gestern nun läuft dort ein Perl-Prozess der die CPU absolut auslastet.
Nach eingehender Suche wird durch diesen Perl-Prozess eine Verbindung zu einem externen Host aufgebaut, sodass auch der Traffic des Servers ordentlich in die Höhe steigt.
Bevor ich irgendwas neu mache und mit nem Backup das potentielle Problem wieder einspiele würde ich gerne rausfinden wodurch der Perl-Prozess ausgeführt wird. Kann man das irgendwie rausfinden?
Im Apache-Log steht nichts dergleichen was darauf hinweist.
User des Prozesses ist wwwrun also der Apache-User. Statt dem Pfad steht als Ausführender Parameter nur "system".
Hat jemand ne Idee wie ich dem auf die schliche kommen könnte?
Vielen Dank im Voraus

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Perl Skript - Auslöser Datei orten

Post by Joe User » 2007-07-07 12:26

Code: Select all

ps auxf | grep wwwrun
ls -alh /tmp

luco
Posts: 29
Joined: 2006-09-14 22:21

Re: Perl Skript - Auslöser Datei orten

Post by luco » 2007-07-07 16:02

Vielen Dank für deine Antwort.
"ps auxf | grep wwwrun" hatte ich bereits ausprobiert und liefert mir das vielsagende:

Code: Select all

wwwrun   31307 57.0  0.2  16352  5984 ?        R    15:00   5:05 system  
wwwrun   31315 71.0  0.2  16352  5980 ?        R    15:00   6:18 system  
wwwrun   31349 54.9  0.2  16352  5948 ?        R    15:00   4:44 system  
Gibt es keinen Log dafür, wer wo was Perl ausführt?
Hab über Yast perl-log... gefunden und installiert aber wo bitte speichert der und was? Hab auch mal von strace gehört, dieser command ist jedoch unbekannt wenn ich den ausführe.

Kann mir jemand weiterhelfen auf der Suche wo der Übeltäter sitzt?
Wird das von extern über den Webserver aufgerufen oder doch eher vom System? also Sicherheitslücke in PHP z.b. externe includes oder sowas oder liegt bereits was auf meinem Server? All das wäre interessant vor der Neuinstallation und Restore der alten Daten

Wäre für jede Hilfe dankbar.
MfG

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: Perl Skript - Auslöser Datei orten

Post by Roger Wilco » 2007-07-07 16:48

Den Pfad zu den Programmen kannst du unter /proc/<PID>/ herausfinden.

rootsvr
Posts: 538
Joined: 2005-09-02 11:12

Re: Perl Skript - Auslöser Datei orten

Post by rootsvr » 2007-07-07 17:41

wenn es wwwdata ist sollten die entsprechenden Scriptnamen auch in den apache.logs auftauchen

luco
Posts: 29
Joined: 2006-09-14 22:21

Re: Perl Skript - Auslöser Datei orten

Post by luco » 2007-07-07 19:08

Danke für eure Antworten.
Unter /proc/PID finde ich halt einige Dateien und Ordner die mir erstmal garnichts sagen. Krieg ich dadurch irgendwie den Urheber des Prozesses raus?
Ich weiß ja noch garnicht ob das ganze über den Webserver aufgerufen wird oder einfach ein Perl-Skript, dass auf der Platte liegt und aufgerufen wird.
In access_log finde ich nichts direktes dazu, also .pl Dateien die aufgerufen werden oder sonstiges.
Weiterhin für jede Hilfe dankbar

dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin

Re: Perl Skript - Auslöser Datei orten

Post by dtdesign » 2007-07-07 20:08

Alternativ suche nach .cgi Dateien, Dateierweiterungen sind bekanntlich Schall und Rauch, faktisch braucht man sie nicht, erleichtern einem nur die Arbeit :)

Gruß
dtdesign

luco
Posts: 29
Joined: 2006-09-14 22:21

Re: Perl Skript - Auslöser Datei orten

Post by luco » 2007-07-08 19:33

Guten Abend!
Danke für die Hinweise.
Also ein Skript konnte ich nicht finden das irgendwo liegt und verdächtig aussieht. Nach wie vor ist es mir nicht möglich rauszubekommen wer diesen Perl-Prozess ans Laufen bringt.
"ps auxf | grep wwwrun"
liefert mir nur System als Quelle.

Kann ich davon ausgehen, dass es deshalb kein auf der Platte liegendes Skript ist sondern eher eine einzelne Anweisung die wie auch immer auf dem System ausgeführt wird? Ich finde das muss doch rauszukriegen sein woher der Prozess kommt. Im Apache Log finde ich dazu nichts, bzw. vielleicht verwende ich falsche Suchmuster.
Kann ich aus den /proc/PID Ordnern irgendetwas lesen? Ob die Befehle von außen kommen? Ich kann mir kaum vorstellen das Perlprozesse vollends anonym zu starten sind.

Des weiteren merke ich wenn es sporadisch mal wieder vorkommt, dass diese Perl-Prozesse auftreten, dass auch der Traffic in die Höhe steigt meistens nur der ausgehende. Wie kann ich das aufschlüsseln was der Perl-Prozess da macht, es muss doch so ne Art Perl-Log geben oder nicht?

Bin weiterhin um jede Hilfe dankbar für die Erweiterung unseres Erfahrungssschatzes! :lol:

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Perl Skript - Auslöser Datei orten

Post by Joe User » 2007-07-09 12:24

Quick&Dirty:

Code: Select all

for i in `ps auxf | grep wwwrun | awk '{ print $2 }'`;
 do echo -en "$it"; cat /proc/$i/cmdline; echo; done

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Perl Skript - Auslöser Datei orten

Post by Joe User » 2007-07-09 13:57

Bietest Du (unbewusst) die Möglichkeit zum Dateiupload auf Deinem System an? Greppe mal die entsprechenden Pfade nach perl:

Code: Select all

grep -rin perl /path/to/dir
Alles was nicht in die Liste gehört, ist näher zu untersuchen und zu entsorgen.

dotme
Posts: 150
Joined: 2004-12-15 16:48

Re: Perl Skript - Auslöser Datei orten

Post by dotme » 2007-07-09 14:38

Da mir ein Programm namens "system" nicht bekannt ist, vermute ich mal daß der Programmname verschleiert ist.

Das was "ps aux" und "/proc/<PID>/cmdline" ausgibt läßt sich schließlich einfach ändern.

Code: Select all

# cat perlprogramm.pl
#!/usr/bin/perl

$0 = 'xinetd';

sleep();
Über den Parameter "comm" wie z.B. in "ps -A -o pid,ppid,user,comm" erhält man wieder den ursprünglichen Programmname.

Vielleicht kannst Du über PID des Parents und die STIME eine Verbindung zu einem konkreten Eintrag im Webserverlog herstellen.