Server hat hohe cpuload durch perl script

aclasse

New Member
Hallo,

scheinbar wurde auf einem meiner webs ein pearl script aktiviert evtl. duch eine veraltete Joomla Typo3 komponente.
Es wird unter dem www-data user ein command pearl ausgeführt. zu sehen unter TOP (CPU 100%) mit lsof habe ich informationen herausgefunden, dass es udp Pakete zu einem irc channel sendet leider kann ich das Script nicht finden. Hat jemand eine Idee wie ich dem auf den Grund gehen kann?
Ein
Code:
strace -p 16047
Ergab folgendes:
Code:
select(8, [4], NULL, NULL, {0, 0})      = 0 (Timeout)
select(8, [4], NULL, NULL, {0, 0})      = 0 (Timeout)
select(8, [4], NULL, NULL, {0, 0})      = 0 (Timeout)
select(8, [4], NULL, NULL, {0, 0})      = 0 (Timeout)
select(8, [4], NULL, NULL, {0, 0})      = 0 (Timeout)
select(8, [4], NULL, NULL, {0, 0})      = 0 (Timeout)
select(8, [4], NULL, NULL, {0, 0})      = 0 (Timeout)
select(8, [4], NULL, NULL, {0, 0})      = 0 (Timeout)
select(8, [4], NULL, NULL, {0, 0})      = 0 (Timeout)
Ein
Code:
locate .pl | grep www
Ergab auch keine inspirierenden treffer...

nach einem kill ist dann erst mal wieder ruhe,

Wäre echt dankbar für hilfe!
 
Last edited by a moderator:
Herzlichen Glückwunsch, dein Server ist höchstwahrscheinlich Teil eines DDoS-Botnetzes geworden - die IRC-Kommunikation wäre typisch dafür.

'locate' bringt dich nur weiter, wenn auch regelmäßig die Dateien indiziert werden. Ist das der Fall? Ich denke, dass du mit 'find' etwas weiter kommen solltest.

Ansonsten hätte dir 'lsof' übrigens eigentlich auch den Pfad verraten.
 
Warum du die Datei nicht gefunden hast hat s24! ja schon beschrieben, jedoch als kleine Anmerkung:
Unter Linux (und afaik generell UNIXoiden Systemen) ist es möglich eine Datei zu löschen während sie benutzt wird. Sie bleibt dann weiter für dieses Programm bestehen, ist aber normal im Dateisystem nicht mehr auffindbar.
Habe das Verhalten schon bei Malware beobachtet, in dem Fall muss man sich über /proc/#PID#/ zur Datei durchhageln.
 
Auf deinem Linux-Server kann niemals pearl ausgeführt werden. Das wäre technisch wenig sinnvoll. Oder ist dein Server ein Prozessrechner für Echtzeitsteuerungen?
PEARL ist eine Echtzeit- und Multitasking-Programmiersprache unter RTOS.
 
Vielen Dank für die Infos!
Leider wurde es nach dem killen nicht nochmal gestartet....
Ich checke das nun aber laufend per bash script und werde den lsof Output dann in ein File umleiten.
Ich hoffe ich bin dann schlauer. Danke!
 
Jaja, Vertipper. Oder pure Unwissenheit.

Wieso sollten Perl-Programme eine Endung haben? Muss nicht. Selbst unter WinDos nicht.
Shebang entscheidet was wen startet. Jedenfalls im Webserver und auf den U*ixen. ;) Und wenns über eine Kommandozeile getartet wird oder perl als Symlink "umbenannt" wurde, ist es eh essig, wenn man nicht weiß was man suchen muss.

Wenn schon sollte mann nach dem Shebang greppen.

ym2c ;)
 
Last edited by a moderator:
Hallo,

vielen Dank für die Hilfe. Ein
Code:
 grep -ril "usr/bin/perl" ./
wäre da vermutlich besser gewesen hat mir aber leider nicht geholfen.
Da es nun wieder da war:
Code:
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
15425 www-data  20   0 22620 3380  960 R  100  0.0  22:49.34 perl
habe ich ein
Code:
lsof -p 15425
gemacht und folgenden output erhalten.
Code:
COMMAND   PID     USER   FD   TYPE             DEVICE    SIZE       NODE NAME
perl    15425 www-data  cwd    DIR                8,7    4096          2 /
perl    15425 www-data  rtd    DIR                8,7    4096          2 /
perl    15425 www-data  txt    REG                8,7    6856     237344 /usr/bin/perl
perl    15425 www-data  mem    REG                8,7   25536     276794 /usr/lib/perl/5.10.0/auto/Socket/Socket.so
perl    15425 www-data  mem    REG                8,7   19704     284938 /usr/lib/perl/5.10.0/auto/IO/IO.so
perl    15425 www-data  mem    REG                8,7   39112     471533 /lib/libcrypt-2.7.so
perl    15425 www-data  mem    REG                8,7 1375536     471529 /lib/libc-2.7.so
perl    15425 www-data  mem    REG                8,7  130114     471431 /lib/libpthread-2.7.so
perl    15425 www-data  mem    REG                8,7  534736     471535 /lib/libm-2.7.so
perl    15425 www-data  mem    REG                8,7   14616     471534 /lib/libdl-2.7.so
perl    15425 www-data  mem    REG                8,7 1499640     276424 /usr/lib/libperl.so.5.10.0
perl    15425 www-data  mem    REG                8,7  119288     471462 /lib/ld-2.7.so
perl    15425 www-data    0r  FIFO                0,6         1039426622 pipe
perl    15425 www-data    1w  FIFO                0,6         1039426625 pipe
perl    15425 www-data    2w  FIFO                0,6         1039426624 pipe
perl    15425 www-data    3r   REG                8,7 5636816     308922 /usr/lib/cgi-bin/php5
perl    15425 www-data    4u  IPv4         1039430705                TCP serverx.DOMAIN.TLD:53751->71signe.typhon.net:domain (ESTABLISHED)
perl    15425 www-data   43r  FIFO                0,6             378451 pipe
perl    15425 www-data   44w  FIFO                0,6             378445 pipe
perl    15425 www-data   45w  FIFO                0,6             378451 pipe
perl    15425 www-data   46w  FIFO                0,6             378446 pipe
perl    15425 www-data   47r  FIFO                0,6             378452 pipe
perl    15425 www-data   48w  FIFO                0,6             378452 pipe
perl    15425 www-data   50u  unix 0xffff8102070c86c0         1039423677 socket
perl    15425 www-data   51u  unix 0xffff81022f822080         1039426504 socket
Wie kann ich dort den Pfad des Scripts erkennen?

Für alle Hinweise bin ich dankbar!
 
Ich kann den Pfad leider auch nicht entdecken.

In welchem Verzeichnis hast du grep laufen lassen?
 
Ich würde einmal raten, dass der Perl-Code direkt über die Kommandozeile (perl -e …) ausgeführt wird, also ohne Scriptdatei ;)

Laufen unter dem Webserver andere Scriptsprachen, die z.B. die Ausführung von Systembefehlen erlauben?


MfG Christian
 
Back
Top