| Current File : //usr/local/scripts/inject.pl |
#!/usr/local/cpanel/3rdparty/bin/perl
use Cpanel::SafetyBits ();
use Cpanel::AcctUtils ();
use Cpanel::PublicAPI ();
use Cpanel::LiveAPI ();
use MIME::Lite;
use LWP::UserAgent;
$DEBUG = 0;
$filetolocate = '/root/.accesshash';
if (!(-f $filetolocate)) {
$cmd = "/usr/local/cpanel/bin/realmkaccesshash";
system($cmd);
$cmd = "chmod 660 /root/.accesshash";
system($cmd);
}
@cenas = `grep \"/var/tmp/\" /var/spool/cron/*`;
foreach $linha ( @cenas ){
chomp($linha);
($tmp,$omal) = split(/\:/,$linha);
(undef,undef,undef,undef,$username) = split(/\//,$tmp);
print "Account $username found compromised. Clearing malicious cronjobs ... \n" if $DEBUG ;
$cmd = "crontab -u $username -l | grep -v '/var/tmp/' | crontab -u $username -";
system($cmd);
print "Terminando processos do user $username \n" if $DEBUG ;
$cmd = "pkill -9 -u $username";
system($cmd);
print "Scheduling malware scan ...\n" if $DEBUG ;
$cmd = " imunify360-agent malware on-demand start --path /home/$username";
system($cmd);
print "Abrindo ticket em Abuse ... \n" if $DEBUG ;
print "Obtendo dominio base\n" if $DEBUG;
$tmp = `grep $username /etc/userdatadomains|grep main`;
chomp($tmp);
($conta,$undef) = split (/:/,$tmp);
$server = `hostname --fqdn`;
chomp($server);
$msg = "";
my $owner = Cpanel::AcctUtils::getdomainowner( $conta, { 'default' => '' } );
if ( !$owner ) {
die "Cannot find the owner of $owner, try rebuilding /etc/userdomains first with /usr/local/cpanel/scripts/updateuserdomains";
}
my $pubapi = Cpanel::PublicAPI->new( 'usessl' => '0');
my $res = $pubapi->whm_api('domainuserdata', "domain=$conta");
my $owner = $res->{'data'}->{'userdata'}->{'owner'};
my $fuser = $res->{'data'}->{'userdata'}->{'user'};
my $contacto = $res->{'data'}->{'userdata'}->{'serveradmin'};
my $homedir = $res->{'data'}->{'userdata'}->{'homedir'};
$msg = "";
if (($owner ne "root") and ($owner ne "ptispapi")) {
$msg = "ATENÇÃO !!! - ENVIAR PARA CONTA DE REVENDA - <strong> $owner </strong> - servidor $server ( hint: $contacto ) !!!! <BR><BR>";
} else {
$msg = "Conta nao pertence a revenda. Cliente: $fuser endereco indicado na conta: $contacto <br><br>";
}
$msg = $msg . "Estimado(a) Cliente,<br><br>Detectamos a presença de ficheiros maliciosos e/ou código injectado na conta <b>$conta</b> ( user $username / servidor $server ) que estariam a ser usados para ataques ( DoS/Bruteforce ) ou envios massivos de SPAM.<br><br>";
$msg = $msg . "Para mitigar a situação removemos os referidos scripts mas deverá verificar a conta em questão para a existência de outros ficheiros que possam ter sido injectados com código malicioso. Sugerimos ainda que efectuem um update/upgrade a todo o software usado no referido alojamento dado este ser um comum vector para este tipo de ataques.<br><br>";
$msg = $msg . "De referir que esta prática pode dar origem a bloqueio dos nossos endereços IP em diversas listas o que resultará em dificuldades no envio de mensagens para si e para outros clientes.<br><br><br><br>";
$msg = $msg . "Evidencias removidas: <br> Linha de Crontab: $omal<br><br>";
$message2 = "IMPORTANTE !!! Servidor $server - Conta $conta ( $username ) comprometida com injecção de binários maliciosos a efectuar ataques DoS - Processos terminados e scan iniciado - Verificar !";
$message3 = "$server - Compromised account $conta ( $username ) - /var/tmp content in cronjob ";
$to = "abusecc\@ptisp.pt";
#$to = "pazevedo\@ptisp.pt";
$msg = MIME::Lite->new(
From =>'Malicious script notifier <message@ptisp.pt>',
To =>$to,
Subject =>"Conta $conta - Scripts maliciosos detectados ",
Data =>$msg,
Type =>'text/html'
);
$user = "message\@ptisp.systems";
$pass = "geicu7ohy4utaiceiN6eGe";
$msg->send('smtp', 'mta.ptisp.systems', AuthUser=>$user, AuthPass=>$pass, Timeout=>60,);
my $uri = 'https://hooks.slack.com/services/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';
my $color = "danger";
my $json='{ "channel": "pt-team-infranotifications-ptisp", "color":"'.$color.'" , "text": "'.$message3.'"}';
my $req = HTTP::Request->new( 'POST', $uri );
$req->header( 'Content-Type' => 'application/json' );
$req->content( $json );
my $lwp = LWP::UserAgent->new;
#$lwp->request( $req );
print "Done. \n\n" if $DEBUG ;
}
@cenas = `grep \"/wp-content/upload\" /var/spool/cron/* | grep -v vossamkt2020 | grep -v madibel`;
foreach $linha ( @cenas ){
chomp($linha);
($tmp,$omal) = split(/\:/,$linha);
(undef,undef,undef,undef,$username) = split(/\//,$tmp);
print "Account $username found compromised. Clearing malicious cronjobs ... \n" if $DEBUG ;
$cmd = "crontab -u $username -l | grep -v '/wp-content/upload' | crontab -u $username -";
system($cmd);
print "Terminando processos do user $username \n" if $DEBUG ;
$cmd = "pkill -9 -u $username";
system($cmd);
print "Abrindo ticket em Abuse ... \n" if $DEBUG ;
$msg = "";
print "Obtendo dominio base\n" if $DEBUG;
$tmp = `grep $username /etc/userdatadomains|grep main`;
chomp($tmp);
($conta,$undef) = split (/:/,$tmp);
$server = `hostname --fqdn`;
chomp($server);
$msg = "";
my $owner = Cpanel::AcctUtils::getdomainowner( $conta, { 'default' => '' } );
if ( !$owner ) {
die "Cannot find the owner of $owner, try rebuilding /etc/userdomains first with /usr/local/cpanel/scripts/updateuserdomains";
}
my $pubapi = Cpanel::PublicAPI->new( 'usessl' => '0');
my $res = $pubapi->whm_api('domainuserdata', "domain=$conta");
my $owner = $res->{'data'}->{'userdata'}->{'owner'};
my $fuser = $res->{'data'}->{'userdata'}->{'user'};
my $contacto = $res->{'data'}->{'userdata'}->{'serveradmin'};
my $homedir = $res->{'data'}->{'userdata'}->{'homedir'};
$msg = "";
if (($owner ne "root") and ($owner ne "ptispapi")) {
$msg = "ATENÇÃO !!! - ENVIAR PARA CONTA DE REVENDA - <strong> $owner </strong> - servidor $server ( hint: $contacto ) !!!! <BR><BR>";
} else {
$msg = "Conta nao pertence a revenda. Cliente: $fuser endereco indicado na conta: $contacto <br><br>";
}
$msg = $msg . "Estimado(a) Cliente,<br><br>Detectamos a presença de ficheiros maliciosos e/ou código injectado na conta <b>$conta</b> ( user $username / servidor $server ) que estariam a ser usados para ataques ( DoS/Bruteforce ) ou envios massivos de SPAM.<br><br>";
$msg = $msg . "Para mitigar a situação removemos os referidos scripts mas deverá verificar a conta em questão para a existência de outros ficheiros que possam ter sido injectados com código malicioso. Sugerimos ainda que efectuem um update/upgrade a todo o software usado no referido alojamento dado este ser um comum vector para este tipo de ataques.<br><br>";
$msg = $msg . "De referir que esta prática pode dar origem a bloqueio dos nossos endereços IP em diversas listas o que resultará em dificuldades no envio de mensagens para si e para outros clientes.<br><br><br><br>";
$msg = $msg . "Evidencias removidas: <br> Linha de Crontab: $omal<br><br>";
$message2 = "IMPORTANTE !!! Servidor $server - Conta $conta ($username) comprometida com injecção de binários maliciosos a efectuar ataques DoS - Processos terminados e scan iniciado - Verificar !";
$message3 = "$server - Compromised account $conta ( $username ) - wp-content/upload in cronjob ";
$to = "abusecc\@ptisp.pt";
#$to = "pazevedo\@ptisp.pt";
$msg = MIME::Lite->new(
From =>'Malware Notifier <message@ptisp.pt>',
To =>$to,
Subject =>"Conta $conta - Scripts maliciosos detectados ",
Data =>$msg,
Type =>'text/html'
);
$user = "message\@ptisp.systems";
$pass = "geicu7ohy4utaiceiN6eGe";
$msg->send('smtp', 'mta.ptisp.systems', AuthUser=>$user, AuthPass=>$pass, Timeout=>60,);
my $uri = 'https://hooks.slack.com/services/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';
my $color = "danger";
my $json='{ "channel": "pt-team-infranotifications-ptisp", "color":"'.$color.'" , "text": "'.$message3.'"}';
my $req = HTTP::Request->new( 'POST', $uri );
$req->header( 'Content-Type' => 'application/json' );
$req->content( $json );
my $lwp = LWP::UserAgent->new;
#$lwp->request( $req );
print "Done. \n\n" if $DEBUG ;
}
@cenas = `grep \"python -c \\"import\" /var/spool/cron/*`;
foreach $linha ( @cenas ){
chomp($linha);
($tmp,$omal) = split(/\:/,$linha);
(undef,undef,undef,undef,$username) = split(/\//,$tmp);
print "Account $username found compromised. Clearing malicious cronjobs ... \n" if $DEBUG ;
$cmd = "crontab -u $username -l | grep -v 'python -c \"import\' | crontab -u $username -";
system($cmd);
print "Terminando processos do user $username \n" if $DEBUG ;
$cmd = "pkill -9 -u $username";
system($cmd);
print "Abrindo ticket em Abuse ... \n" if $DEBUG ;
$message = "";
print "Obtendo dominio base\n" if $DEBUG;
$tmp = `grep $username /etc/userdatadomains|grep main`;
chomp($tmp);
($conta,$undef) = split (/:/,$tmp);
$server = `hostname --fqdn`;
chomp($server);
$msg = "";
my $owner = Cpanel::AcctUtils::getdomainowner( $conta, { 'default' => '' } );
if ( !$owner ) {
die "Cannot find the owner of $owner, try rebuilding /etc/userdomains first with /usr/local/cpanel/scripts/updateuserdomains";
}
my $pubapi = Cpanel::PublicAPI->new( 'usessl' => '0');
my $res = $pubapi->whm_api('domainuserdata', "domain=$conta");
my $owner = $res->{'data'}->{'userdata'}->{'owner'};
my $fuser = $res->{'data'}->{'userdata'}->{'user'};
my $contacto = $res->{'data'}->{'userdata'}->{'serveradmin'};
my $homedir = $res->{'data'}->{'userdata'}->{'homedir'};
$msg = "";
if (($owner ne "root") and ($owner ne "ptispapi")) {
$msg = "ATENÇÃO !!! - ENVIAR PARA CONTA DE REVENDA - <strong> $owner </strong> - servidor $server ( hint: $contacto ) !!!! <BR><BR>";
} else {
$msg = "Conta nao pertence a revenda. Cliente: $fuser endereco indicado na conta: $contacto <br><br>";
}
$msg = $msg . "Estimado(a) Cliente,<br><br>Detectamos a presença de ficheiros maliciosos e/ou código injectado na conta <b>$conta</b> ( user $username / servidor $server ) que estariam a ser usados para ataques ( DoS/Bruteforce ) ou envios massivos de SPAM.<br><br>";
$msg = $msg . "Para mitigar a situação removemos os referidos scripts mas deverá verificar a conta em questão para a existência de outros ficheiros que possam ter sido injectados com código malicioso. Sugerimos ainda que efectuem um update/upgrade a todo o software usado no referido alojamento dado este ser um comum vector para este tipo de ataques.<br><br>";
$msg = $msg . "De referir que esta prática pode dar origem a bloqueio dos nossos endereços IP em diversas listas o que resultará em dificuldades no envio de mensagens para si e para outros clientes.<br><br><br><br>";
$msg = $msg . "Evidencias removidas: <br> Linha de Crontab: $omal<br><br>";
$message2 = "IMPORTANTE !!! Servidor $server - Conta $conta ( $username ) comprometida com injecção de binários maliciosos a efectuar ataques DoS - INTERVENÇÃO URGENTE !!";
$message3 = "$server - Compromised account $conta ( $username ) - python -c --import in cronjob ";
$to = "abusecc\@ptisp.pt";
#$to = "pazevedo\@ptisp.pt";
$msg = MIME::Lite->new(
From =>'Malware Notifier <message@ptisp.pt>',
To =>$to,
Subject =>"Conta $conta - Scripts maliciosos detectados ",
Data =>$msg,
Type =>'text/html'
);
$user = "message\@ptisp.systems";
$pass = "geicu7ohy4utaiceiN6eGe";
$msg->send('smtp', 'mta.ptisp.systems', AuthUser=>$user, AuthPass=>$pass, Timeout=>60,);
my $uri = 'https://hooks.slack.com/services/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';
my $color = "danger";
my $json='{ "channel": "pt-team-infranotifications-ptisp", "color":"'.$color.'" , "text": "'.$message3.'"}';
my $req = HTTP::Request->new( 'POST', $uri );
$req->header( 'Content-Type' => 'application/json' );
$req->content( $json );
my $lwp = LWP::UserAgent->new;
#$lwp->request( $req );
print "Done. \n\n" if $DEBUG ;
}
@out = `ps aux|grep stealth | grep -v grep | awk {'print \$1 " " \$2'}`;
foreach $linha ( @out ) {
chomp($linha);
($username, $pid ) = split (/ /,$linha);
$usr = `ps -o user= -p $pid`;
chomp($usr);
$username = $usr;
@source = `lsof -n -p $pid |awk {'print $9'} |grep home|grep -v pid `;
foreach $li ( @source ){
chomp($li);
$li =~ s/ +/ /g;
(undef,undef,undef,undef,undef,undef,undef,undef,$stu) = split (/ /,$li);
if (-f $stu) {
$cmd = "crontab -u $username -l | grep -v '$stu' | crontab -u $username -";
system($cmd);
}
}
print "Terminando processos do user $username \n" if $DEBUG ;
$cmd = "pkill -9 -u $username";
system($cmd);
print "Abrindo ticket em Abuse ... \n" if $DEBUG ;
$message = "";
print "Obtendo dominio base\n" if $DEBUG;
$tmp = `grep $username /etc/userdatadomains|grep main`;
chomp($tmp);
($conta,$undef) = split (/:/,$tmp);
$server = `hostname --fqdn`;
chomp($server);
$msg = "";
my $owner = Cpanel::AcctUtils::getdomainowner( $conta, { 'default' => '' } );
if ( !$owner ) {
die "Cannot find the owner of $owner, try rebuilding /etc/userdomains first with /usr/local/cpanel/scripts/updateuserdomains";
}
my $pubapi = Cpanel::PublicAPI->new( 'usessl' => '0');
my $res = $pubapi->whm_api('domainuserdata', "domain=$conta");
my $owner = $res->{'data'}->{'userdata'}->{'owner'};
my $fuser = $res->{'data'}->{'userdata'}->{'user'};
my $contacto = $res->{'data'}->{'userdata'}->{'serveradmin'};
my $homedir = $res->{'data'}->{'userdata'}->{'homedir'};
$msg = "";
if (($owner ne "root") and ($owner ne "ptispapi")) {
$msg = "ATENÇÃO !!! - ENVIAR PARA CONTA DE REVENDA - <strong> $owner </strong> - servidor $server ( hint: $contacto ) !!!! <BR><BR>";
} else {
$msg = "Conta nao pertence a revenda. Cliente: $fuser endereco indicado na conta: $contacto <br><br>";
}
$msg = $msg . "<b>IMPORTANTE</b> - Os processos do user foram terminados e o binario injectado deverá ser o $stu . Confirmar, remover o mesmo e lançar um scan à conta no IM360 <br><br>";
$msg = $msg . "Estimado(a) Cliente,<br><br>Detectamos a presença de ficheiros maliciosos e/ou código injectado na conta <b>$conta</b> ( user $username / servidor $server ) que estariam a ser usados para ataques ( DoS/Bruteforce ) <br><br>";
$msg = $msg . "Para mitigar a situação removemos os referidos scripts mas deverá verificar a conta em questão para a existência de outros ficheiros que possam ter sido injectados com código malicioso. Sugerimos ainda que efectuem um update/upgrade a todo o software usado no referido alojamento dado este ser um comum vector para este tipo de ataques.<br><br>";
$msg = $msg . "De referir que esta prática pode dar origem a bloqueio dos nossos endereços IP em diversas listas o que resultará em dificuldades no envio de mensagens para si e para outros clientes.<br><br><br><br>";
$message2 = "IMPORTANTE !!! Servidor $server - Conta $conta ( $username ) comprometida com injecção de binários maliciosos a efectuar ataques DoS - INTERVENÇÃO URGENTE !! ( Processos do user terminados mas o binario responsável ( provavelmente $stu ) não foi removido. Confirmar, remover o mesmo e lançar um scan à conta no IM360 ( e enviar o ticket de abuse ao cliente ) ";
$message3 = "$server - Compromised account $conta ( $username ) - stealth process running ";
$to = "abusecc\@ptisp.pt";
$msg = MIME::Lite->new(
From =>'Malware Notifier <message@ptisp.pt>',
To =>$to,
Subject =>"Conta $conta - Scripts maliciosos detectados ",
Data =>$msg,
Type =>'text/html'
);
$user = "message\@ptisp.systems";
$pass = "geicu7ohy4utaiceiN6eGe";
$msg->send('smtp', 'mta.ptisp.systems', AuthUser=>$user, AuthPass=>$pass, Timeout=>60,);
my $uri = 'https://hooks.slack.com/services/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';
my $color = "danger";
my $json='{ "channel": "pt-team-infranotifications-ptisp", "color":"'.$color.'" , "text": "'.$message3.'"}';
my $req = HTTP::Request->new( 'POST', $uri );
$req->header( 'Content-Type' => 'application/json' );
$req->content( $json );
my $lwp = LWP::UserAgent->new;
#$lwp->request( $req );
print "Done. \n\n" if $DEBUG ;
}
@cenas = `grep \"base64 --decode\" /var/spool/cron/*`;
foreach $linha ( @cenas ){
chomp($linha);
($tmp,$omal) = split(/\:/,$linha);
(undef,undef,undef,undef,$username) = split(/\//,$tmp);
print "Account $username found compromised. Clearing malicious cronjobs ... \n" if $DEBUG ;
$cmd = "crontab -u $username -l | grep -v 'base64 --decode' | crontab -u $username -";
system($cmd);
print "Terminando processos do user $username \n" if $DEBUG ;
$cmd = "pkill -9 -u $username";
system($cmd);
print "Abrindo ticket em Abuse ... \n" if $DEBUG ;
$message = "";
print "Obtendo dominio base\n" if $DEBUG;
$tmp = `grep $username /etc/userdatadomains|grep main`;
chomp($tmp);
($conta,$undef) = split (/:/,$tmp);
$server = `hostname --fqdn`;
chomp($server);
$msg = "";
my $owner = Cpanel::AcctUtils::getdomainowner( $conta, { 'default' => '' } );
if ( !$owner ) {
die "Cannot find the owner of $owner, try rebuilding /etc/userdomains first with /usr/local/cpanel/scripts/updateuserdomains";
}
my $pubapi = Cpanel::PublicAPI->new( 'usessl' => '0');
my $res = $pubapi->whm_api('domainuserdata', "domain=$conta");
my $owner = $res->{'data'}->{'userdata'}->{'owner'};
my $fuser = $res->{'data'}->{'userdata'}->{'user'};
my $contacto = $res->{'data'}->{'userdata'}->{'serveradmin'};
my $homedir = $res->{'data'}->{'userdata'}->{'homedir'};
$msg = "";
if (($owner ne "root") and ($owner ne "ptispapi")) {
$msg = "ATENÇÃO !!! - ENVIAR PARA CONTA DE REVENDA - <strong> $owner </strong> - servidor $server ( hint: $contacto ) !!!! <BR><BR>";
} else {
$msg = "Conta nao pertence a revenda. Cliente: $fuser endereco indicado na conta: $contacto <br><br>";
}
$msg = $msg . "Estimado(a) Cliente,<br><br>Detectamos a presença de ficheiros maliciosos e/ou código injectado no cronjob da conta <b>$conta</b> ( user $username / servidor $server ) que estariam a ser usados para ataques ( DoS/Bruteforce ) ou envios massivos de SPAM.<br><br>";
$msg = $msg . "Para mitigar a situação removemos as referidas linhas do cronjob mas deverá verificar a conta em questão para a existência de outros ficheiros que possam ter sido injectados com código malicioso. Sugerimos ainda que efectuem um update/upgrade a todo o software usado no referido alojamento dado este ser um comum vector para este tipo de ataques.<br><br>";
$msg = $msg . "De referir que esta prática pode dar origem a bloqueio dos nossos endereços IP em diversas listas o que resultará em dificuldades no envio de mensagens para si e para outros clientes.<br><br><br><br>";
$msg = $msg . "Evidencias removidas: <br> Linha de Crontab: $omal<br><br>";
$message2 = "IMPORTANTE !!! Servidor $server - Conta $conta ( $username ) comprometida com injecção de binários maliciosos a efectuar ataques DoS - INTERVENÇÃO URGENTE !!";
$message3 = "$server - Compromised account $conta ( $username ) - base64 content in cronjob ";
$to = "abusecc\@ptisp.pt";
#$to = "pazevedo\@ptisp.pt";
$msg = MIME::Lite->new(
From =>'Malware Notifier <message@ptisp.pt>',
To =>$to,
Subject =>"Conta $conta - Scripts maliciosos detectados ",
Data =>$msg,
Type =>'text/html'
);
$user = "message\@ptisp.systems";
$pass = "geicu7ohy4utaiceiN6eGe";
$msg->send('smtp', 'mta.ptisp.systems', AuthUser=>$user, AuthPass=>$pass, Timeout=>60,);
my $uri = 'https://hooks.slack.com/services/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';
my $color = "danger";
my $json='{ "channel": "pt-team-infranotifications-ptisp", "color":"'.$color.'" , "text": "'.$message3.'"}';
my $req = HTTP::Request->new( 'POST', $uri );
$req->header( 'Content-Type' => 'application/json' );
$req->content( $json );
my $lwp = LWP::UserAgent->new;
$resp=$lwp->request( $req );
print "Done. \n\n" if $DEBUG ;
}