JS/TrojanDownloader

Az volt ma, hogy a szép nagy céges hálón sikerült valakinek (nem feltétlen webes embernek) beszedni egy trójait, ami végül több weboldal megfertőzött. Hogy ez miért lehetett így hosszú lenne leírni, a lényeg hogy sok gépen nem volt spyware / virus írtó, de még tűzfal se. Ennek meg is ittuk a levét, a mai nap azzal ment el, hogy oltottuk a tűzet.

Ismerősömnek is sikerült már belefutnia, ők is a maguk kárán tanulták meg hogy kell _minden_ gépre valami vírusirtó. Ez a mocsok is azt csinálja, mint a hasonló webes férgek, hogy bekerülve az XP-s gépre felkutatja az FTP lehetőségeket (msn log, totalcommander stb), és a gyakori fájlokba (php, html, js) beleírja magát. Legtöbb fertőzést a js képes beszedni, ott válogatás nélkül beírja magát mindenhova, php/html estén csak index*/main*/default* dolgok a fertőzöttek.

Mire észbekaptunk már elég sok oldalon fent volt, és kézzel nem lehetett volna kiszedni a fertőzéseket. Ezért a született ez a 0.0.0.0.1 beta cucc, ami elég szar tudom, de hátha valaki hasznát veszi, szépít rajta, stb. Ha én találtam volna ilyet, biztos örültem volna.

3 lépésben működik a dolog.

1. Felderítjük a fertőzött fájlokat.


find . -name "*.php" -print | xargs grep "try{ window\.onload" > v_php.txt&
find . -name "*.js" -print | xargs grep "try{ window\.onload" > v_js.txt&
find . -name "*.html" -print | xargs grep "try{ window\.onload" > v_html.txt&

Ezzel három különböző fájlba tudjuk begyűjteni az érintett elemeket, innen még le kell darabolni a sallangokat a fájlnevek mögül.

2. Takarítás


#!/usr/bin/php
<?php
echo "ok";

$fajlok = array();
$fajlok = file("v_js.txt");
$f=array();
foreach($fajlok as $fajl){
$tmp=array();
$tmp=explode(":", $fajl);
$f[]=$tmp[0];
}

file_put_contents("js_v.txt", implode("\n", $f));

$fajlok = array();
$fajlok = file("v_php.txt");
$f=array();

foreach($fajlok as $fajl){
$tmp=array();
$tmp=explode(":", $fajl);
$f[]=$tmp[0];
}

file_put_contents("php_v.txt", implode("\n", $f));

$fajlok = array();
$fajlok = file("v_html.txt");
$f=array();

foreach($fajlok as $fajl){
$tmp=array();
$tmp=explode(":", $fajl);
$f[]=$tmp[0];
}

file_put_contents("html_v.txt", implode("\n", $f));

Ha ez meg van, érdemes átfutni a fájlt, mert néha kerül bele bash szemét "binary file.." stb.

3. Eltávolítás

Itt jön a lényeg, töröljük a kérdéses fájlokból az utolsó sort. Ahogy mi megfigyeltük mindig az utolsó sorba rakja magát vírus.
Ismert BUG:
- php és html esetén 2x kell futtatni, mivel ott két sorba teszi be magát (egy hívás egy ellenőrző hash)
- a listák utolsó elemeit kézzel kell megcsinálni :)
- sed esetén a felülírás valamiért nem ment, azért van két lépésben megoldva (törlés és másolás, majd visszaállítás az eredeti névre)


#!/bin/bash
cat "./IDE_JON_A_TISZTITOTT_FAJL.txt" | while read line;
do
echo $line
sed -e '$d' $line > "$line.bak"
mv "$line.bak" $line
done

Kevert bash/php van benne minden. Remélem van aki hasznát veszi a kódszüleménynek, és várjuk a javaslatokat is, hogyan lehetett volna szebben, okosabban megoldani a dolgokat.

Akit érdekel a vírus itt van: http://www.sendspace.com/file/c02aro (be van zipelve, csak a js kódja található meg egy index.html-be)

Jah, a script-rol: Egy másik js-t próbál betöltnei valami iszonyat hosszu domainról, természetesen a végén valami orosz site csücsült, 8080-as porttal. A behuzandó file (index.php?js) egyelőre üres tartalmat ad vissza, lehet későbbre tervezték a komolyabb feladatot a cuccnak.

Hozzászólások

A címet NE írt vissza, mert szétnyomja az oldalt. Nem véletlenül volt megváltoztatva.

--
trey @ gépház