No quiero molestar con esta consulta pero no encuentro forma de bloquear el continuo hackeo a mi servidor.
Cada vez que entran encuentro un archivo en Perl de nombre ftpchk3.pl
y que contiene esto:
Using perl Syntax Highlighting
#!/usr/bin/perl -w
$| = 1;
my $smtp = 'smtp.mail.ru';
my $dns = '208.67.222.222';
print "Content-type: text/plain; charset=windows-1251\n\n" if $ENV{HTTP_USER_AGENT};
#print "System info\n";
#print "-----------\n\n";
#print "$^O";
#print "\n", `uname -a` if $^O !~ /win/i;
#print "\n\n";
#print "Perl modules\n";
#print "------------\n\n";
#print "strict .......................... ";
unless (eval ("use strict; return 1;")) { print "Error"; } else { }
#print "\nSys::Hostname ................... ";
unless (eval ("use Sys::Hostname; return 1;")) { print "Error"; } else { }
#print "\nPOSIX ........................... ";
unless (eval ("use POSIX qw(setsid); return 1;")) { print "Error"; } else { }
#print "\nErrno ........................... ";
unless (eval ("use Errno qw(EINPROGRESS); return 1;")) { print "Error"; } else { }
#print "\nIO::Socket ...................... ";
unless (eval ("use IO::Socket qw(:DEFAULT :crlf); return 1;")) { print "Error"; } else { use IO::Socket qw(:DEFAULT :crlf); }
#print "\nIO::Select ...................... ";
unless (eval ("use IO::Select; return 1;")) { print "Error"; } else { }
#print "\n\n";
#print "Local server test\n";
#print "-----------\n\n";
my $s = IO::Socket::INET->new(Proto => "tcp", LocalPort => 36000, Listen => SOMAXCONN, Reuse => 1);
unless ($s) { print "Error"; } else { close $s; }
#print "\n\n";
#print "DNS client test ($dns)\n";
#print "-----------\n\n";
my $r = (gethostbyname $dns)[4];
unless ($r) { print "Error > Can't resolve DNS hostname"; exit; }
$s = IO::Socket::INET->new(Proto => "tcp", Type => SOCK_STREAM);
unless ($s) { print "Error > Can't create socket > $!"; exit; }
unless ($s->connect(pack ("Sna4x8", 2, 53, $r))) { close $s; print "Error > Can't connect > $!"; exit; }
close $s; #print "Ok";
#print "\n\n";
#print "SMTP Client test ($smtp)\n";
#print "-----------\n\n";
$r = (gethostbyname $smtp)[4];
unless ($r) { print "Error > Can't resolve SMTP hostname"; exit; }
$s = IO::Socket::INET->new(Proto => "tcp", Type => SOCK_STREAM);
unless ($s) { print "Error > Can't create socket > $!"; exit; }
unless ($s->connect(pack ("Sna4x8", 2, 25, $r))) { close $s; print "Error > Can't connect > $!"; exit; }
$r = <$s>; close $s;
if (length $r) { print "OK"; } else { print "Error > Can't read response"; }
$| = 1;
my $smtp = 'smtp.mail.ru';
my $dns = '208.67.222.222';
print "Content-type: text/plain; charset=windows-1251\n\n" if $ENV{HTTP_USER_AGENT};
#print "System info\n";
#print "-----------\n\n";
#print "$^O";
#print "\n", `uname -a` if $^O !~ /win/i;
#print "\n\n";
#print "Perl modules\n";
#print "------------\n\n";
#print "strict .......................... ";
unless (eval ("use strict; return 1;")) { print "Error"; } else { }
#print "\nSys::Hostname ................... ";
unless (eval ("use Sys::Hostname; return 1;")) { print "Error"; } else { }
#print "\nPOSIX ........................... ";
unless (eval ("use POSIX qw(setsid); return 1;")) { print "Error"; } else { }
#print "\nErrno ........................... ";
unless (eval ("use Errno qw(EINPROGRESS); return 1;")) { print "Error"; } else { }
#print "\nIO::Socket ...................... ";
unless (eval ("use IO::Socket qw(:DEFAULT :crlf); return 1;")) { print "Error"; } else { use IO::Socket qw(:DEFAULT :crlf); }
#print "\nIO::Select ...................... ";
unless (eval ("use IO::Select; return 1;")) { print "Error"; } else { }
#print "\n\n";
#print "Local server test\n";
#print "-----------\n\n";
my $s = IO::Socket::INET->new(Proto => "tcp", LocalPort => 36000, Listen => SOMAXCONN, Reuse => 1);
unless ($s) { print "Error"; } else { close $s; }
#print "\n\n";
#print "DNS client test ($dns)\n";
#print "-----------\n\n";
my $r = (gethostbyname $dns)[4];
unless ($r) { print "Error > Can't resolve DNS hostname"; exit; }
$s = IO::Socket::INET->new(Proto => "tcp", Type => SOCK_STREAM);
unless ($s) { print "Error > Can't create socket > $!"; exit; }
unless ($s->connect(pack ("Sna4x8", 2, 53, $r))) { close $s; print "Error > Can't connect > $!"; exit; }
close $s; #print "Ok";
#print "\n\n";
#print "SMTP Client test ($smtp)\n";
#print "-----------\n\n";
$r = (gethostbyname $smtp)[4];
unless ($r) { print "Error > Can't resolve SMTP hostname"; exit; }
$s = IO::Socket::INET->new(Proto => "tcp", Type => SOCK_STREAM);
unless ($s) { print "Error > Can't create socket > $!"; exit; }
unless ($s->connect(pack ("Sna4x8", 2, 25, $r))) { close $s; print "Error > Can't connect > $!"; exit; }
$r = <$s>; close $s;
if (length $r) { print "OK"; } else { print "Error > Can't read response"; }
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Como nunca programé en este lenguaje quisiera que me digan qué hace este archivo y hasta que punto es malicioso (por lo que veo parece que intenta enviar datos a una dirección de correo).
También si tienen experiencia de haber sufrido estos ataques y pueden decirme cómo bloquearlos, estaré muy agradecido.
He leído por ahí que estos archivos son parte del viejo virus Bagle pero no comentan nada más que eso.
Espero sus comentarios.
Cordiales saludos.
Adrián