Current File : //proc/24011/root/proc/3/root/usr/local/scripts/rt.pl
#!/usr/local/cpanel/3rdparty/bin/perl


#BEGIN { unshift @INC, '/usr/local/cpanel'; }
use lib '/usr/local/share/perl5';


use DBI;
#use Cpanel::SafetyBits ();
#use Cpanel::AcctUtils  ();
#use Cpanel::PublicAPI ();
#use Cpanel::LiveAPI ();
use MIME::Lite;


$server = `hostname`;
chomp($server);




###################

my $driver   = "SQLite";

open(FD,"</usr/local/scripts/replyto");
@bad = <FD>;
close(FD);

open(FD,"</etc/trueuserdomains");
@all = <FD>;
close(FD);

foreach $event ( @all) {

	chomp($event);
	($domain,$user) = split(/:/,$event);
	$domain  =~ s/ +//;
	$user  =~ s/ +//;



@rc = `ls /home/$user/etc/$domain/*.rcube.db`;

foreach $line ( @rc ) {

	$p = 0;
        chomp($line);
        #$a = $line;
        #$a =~ s/\/home\/$user\/etc\/$domain\///g;
        #$a =~ s/.rcube.db//g;

	(undef,undef,undef,undef,undef,$a) = split(/\//, $line);
	$a =~ s/.rcube.db//g;
	
        $out = `sqlite3 $line 'select "reply-to" from identities;'`;
        chomp($out);
        #$out =~ s/ +//;
        #$out =~ s/\n//;
        #$out =~ s/\r//;
        $out =~ s/[\n\r]+/,/g;
        $out =~ s/[\s]+//g;

        @replyto = split /,/,$out;

	$msg = "";
	$sub = "";
	$subject = "";


        foreach $rto (@replyto) {
        	(undef,$dom) = split(/\@/,$rto );
		if ((scalar @replyto > 0) and ((length($rto) > 5) and ($dom ne $domain)) and ($p eq 0) and (index($rto, "@") != -1) and ( grep( /^$rto/, @bad))) {
        		$subject = "Conta: $a\@$domain - Possível anomalia com reply-to \n" if ((scalar @replyto > 0) and ((length($rto) > 5) and ($dom ne $domain)) );
			$p=1;
                        $own = `whmapi1 accountsummary user=$user |grep owner`;
                        chomp($own);
                        (undef,$owner) = split(/:/,$own);
                        $owner =~ s/ +//;
                        if (($owner ne "root") and ($owner ne "ptispapi")) {
                        $msg = "ATEN&Ccedil;&Atilde;O !!! - ENVIAR PARA CONTA DE REVENDA  - <strong> $owner </strong> - servidor $server !!!! <BR><BR>";
                        } else {
                        $msg = "Conta \"$user\" n&atilde;o pertence a revenda. - Servidor $server <br><br><hr><br><br>";
                        }

                        $msg = $msg . "Estimado(a) Cliente,<br><br>Vimos por este meio notific&aacute;-lo que foi detectada a presen&ccedil;a de endere&ccedil;os \"Reply-to\" configurados no webmail Roundcube da conta $a\@$domain e que pedimos que verifique dado que os mesmos nos parecem suspeitos. <br><br>";
                        $msg = $msg . "Segue abaixo a lista dos endere&ccedil;o(s) encontrado(s), a sua data de cria&ccedil;&atilde;o e nome da \"Identity\" configurada no Roundcube: <br><br>";
		}

		if (index($rto, "<") != -1) {
			(undef,$right) = split(/\</,$rto);
			($rto1,undef) = split(/\>/,$right ); 
		} else {
			$rto1 = $rto;
		}

		$cnt = $rto1 =~ tr/\@//;
		if ($cnt >1 ) {
			@replyto1 = split /\;/,$rto;
			foreach $rto1 (@replyto1) {
				if ( grep( /^$rto1/, @bad)) {
					(undef,$dom) = split(/\@/,$rto1 );
					$driver   = "SQLite";
					$database = "$line";
					$dsn = "DBI:$driver:dbname=$database";
					$userid = "";
					$password = "";
					$dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) or die $DBI::errstr;
					$stmt = qq(SELECT changed,name from identities where \"reply-to\" = \"$rto1\";);
					$sth = $dbh->prepare( $stmt );
					$rv = $sth->execute() or die $DBI::errstr;
					while(my @row = $sth->fetchrow_array()) {
						$dados = "( Identity name: $row[1] - criada em: $row[0] )";
					}
					$sub = $sub . "Reply-to: $rto1 : $dados <br>" if ((length($rto1) > 5) and ($dom ne $domain) and (index($rto, "@") != -1) );
				}
			}

		} else {
				if ( grep( /^$rto/, @bad)) {
					(undef,$dom) = split(/\@/,$rto );
					$driver   = "SQLite";
                                	$database = "$line";
                                	$dsn = "DBI:$driver:dbname=$database";
                                	$userid = "";
                                	$password = "";
                                	$dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) or die $DBI::errstr;
                                	$stmt = qq(SELECT changed,name from identities where \"reply-to\" = \"$rto\";);
                                	$sth = $dbh->prepare( $stmt );
                                	$rv = $sth->execute() or die $DBI::errstr;
                                	while(my @row = $sth->fetchrow_array()) {
						$dados = "( Identity name: $row[1] - criada em: $row[0] )";
	                                }
					$sub = $sub . "Reply-to: $rto : $dados <br>" if ((length($rto) > 5) and ($dom ne $domain) and (index($rto, "@") != -1) );
		        		#print "\tReply-to: $rto : $dados \n" if ((length($rto1) > 5) and ($dom ne $domain) and (index($rto, "@") != -1) );
				}
		}


	}

	if ($subject ne "") {



		$msg = $msg . $sub;

		$msg = $msg . "<br><br>Se estes endere&ccedil;os \"Reply-to\" n&atilde;o foram criados por v&oacute;s dever&atilde;o ser removidos com urg&ecirc;ncia.<br><br> Caso a password da conta de email em quest&atilde;o n&atilde;o tenha sido mudada desde a data de cria&ccedil;&atilde;o do \"Reply-to\" mais recente dever&atilde;o alterar a mesma porque poder&aacute; estar ainda comprometida.<br><br>";
        	$msg = $msg . "Ap&oacute;s essa ac&ccedil;&atilde;o tomada sugerimos que verifiquem os pontos de acesso &agrave; referida conta para a presen&ccedil;a de v&iacute;rus, trojans, keyloggers, etc, que possam estar a facilitar as credenciais  a terceiros.<br><br>";
		$msg = $msg . "Lembramos que este tipo de ac&ccedil;&atilde;o &eacute; conseguido atrav&eacute;s do acesso indevido a contas de email por terceiros, usando as credenciais v&aacute;lidas das mesmas. Essas credenciais s&atilde;o obtidas na esmagadora maioria dos casos atrav&eacute;s de trojans/virus/keyloggers/etc instalados nos dispositivos onde as contas s&atilde;o acedidas. <br><br>";
        	$msg = $msg . "Outra forma poder&aacute; ser atrav&eacute;s do uso de redes WiFi n&atilde;o encriptadas ( normalmente p&uacute;blicas e sem password ) e com protocolos de mail sem TLS/SSL, facilitando o \"sniffing\" desses dados por terceiros.<br><br>";
        	$msg = $msg . "IMPORTANTE: caso estes \"Reply-to\" sejam v&aacute;lidos queiram por favor informar-nos em resposta a este ticket para que os possamos remover da lista de endere&ccedil;os suspeitos.<br><br>";


		$to = "pazevedo\@ptisp.pt";
		$msg = MIME::Lite->new(
		From     =>'Malware/intrusion detector <message@ptisp.pt>',
		To       =>$to,
		Subject  =>$subject,
		Data     =>$msg,
		Type     =>'text/html'
		);

		$user = "message\@ptisp.systems";
		$pass = "geicu7ohy4utaiceiN6eGe";

		$msg->send('smtp', 'mta.ptisp.systems', AuthUser=>$user, AuthPass=>$pass, Timeout=>60,);

		}

     }
}