Активность хакеров никогда не сходит на нет. Например, только по данным
одного хакерского сайта zone-h.org (см. раздел Onhold), взламываются
ежедневно сотни сайтов. Вашего сайта там точно нет?
Для взлома не надо быть профессиональным хакером, речь в статье о так
называемых «кулхацкерах», использующих плоды чужих «трудов» и самых
простых случаях взлома. Статья ни в коей мере не howto, как взломать
сайт. Цель — показать, насколько просто осуществляется взлом и
рекомендовать меры по защите сайта и действия, в случае взлома
«косовскими албанцами».
Приведён пример успешного розыска хакера российскими правоохранительными органами.
Как осуществляется взлом сайта?
Наиболее распространённые пути проникновения на сайт:
перебор простых паролей доступа к админке/ftp («имя домена», 12345,
admin, test и т.п.) — большое число взломов, как ни странно, происходит
именно так;
использование уязвимостей скриптов (CMS и модулей).
Поясню на примере Joomla + CKForms. Чтобы не вводить в искушение, не
публикую ссылку на описание, слишком уж просто им воспользоваться, но и найти несложно.
Уязвимости в модуле CKForms позволяют выполнить SQL-инъекцию или
PHP-инклюдинг, и, путём несложных манипуляций, получить доступ к
админке. Использование уязвимости осуществляется через простой запрос в
адресной строке браузера.
Дело буквально пяти минут и не требует серьёзных знаний от взломщика.
Дальнейшие шаги зависят от фантазии автора взлома — от неприятного
дефейсмента, до уничтожения сайта и попытки захвата управления другими
сайтами и сервером.
Я принимал меры, но как взломали сайт?
Как же на виртуальном хостинге хакер может получить доступ к другим
сайтам, если все известные меры владельцем сайта предприняты? Ведь почти
повсеместно доступ к площадкам сайтов разграничивается по логинам
пользователей и, казалось бы, это должно обезопасить сайт от соседей.
Ограничимся одним случаем. Серьёзную опасность представляет запуск
скриптов под модулем Apache, например mod_perl. Запуск скрипта в этом
случае осуществляется под пользователем Apache, который имеет доступ к
данным пользователей сайтов.
Хакер, как описано выше, получает доступ к площадке одного сайта. Затем осуществляется размещение консольного скрипта, например cgi-telnet.
И если права на конфигурационные файлы сайтов других пользователей
выставлены в 644 (или тем более 777!), из консоли несложно прочитать
содержимое файлов с паролями. Но! Только если запуск perl-скрипта
осуществляется под пользователем Apache, т.е. под mod_perl (аналогичная
ситуация с mod_php). При работе, например, под FastCGI — такой способ не
даст доступа к файлам. Защититься от этого можно, устанавливая на
критически важные файлы права 600 и используя FastCGI.
Как можно получить доступ к управлению самим сервером?
Приведу один распространённый пример для Linux-систем. Аналогично, сначала необходим доступ на площадку одного сайта.
Есть несколько уязвимостей в ядре через нулевой указатель, которым подвержены десятки Linux-систем, например: Linux Kernel 'sock_sendpage()' NULL Pointer Dereference Vulnerability. Там же описаны и эксплоиты (осторожнее, это работает!).
Несмотря на то, что данная проблема известна давно, есть множество
непропатченных серверов, в том числе и в России. Самый простой способ
защиты описан, например, здесь.
Это не гарантирует 100% защиту, т.к. например при установке wine
параметр mmap_min_addr может быть сброшен обратно в 0. Настоятельно
рекомендуется использовать патчи, которые можно взять на странице,
указанной выше, или в официальных источниках.
Обсуждение по этому вопросу велось и на хабре.
Ответственность за защиту от данных эксплоитов лежит на администраторе сервера.
Последовательность действий по устранению последствий
«Лечения» восстановлением из бекапа недостаточно, один раз взломав сайт, к Вам ещё вернутся. Что же делать владельцу сайта?
Постарайтесь сразу определить, какие именно файлы были заменены, это
может быть как index.php, так и файлы шаблонов, изображений и т.п.;
Сделайте скриншоты последствий;
Обязательно оповестите хостинг-провайдера и согласуйте свои дальнейшие действия;
Сохраните в отдельный каталог файлы сайта, время модификации файлов в дальнейшем поможет Вам определить злоумышленика;
Восстановите из резервной копии сайт или обратитесь для этого к хостеру;
Скачайте логи ошибок и доступа к сайту или попросите хостера их
предоставить, лучше скопировать их в отдельный каталог, чтобы не
удалились при ротации логов;
Анализ времени изменения файлов и сопоставления с записями в логах
позволяют определить характер используемой уязвимости и IP-адрес
злоумышленника;
Обновите скрипты или (если это невозможно) откажитесь от использования уязвимых модулей;
Обязательно смените все пароли доступа.
Преступление и наказание
Наказать хакера, особенно если он действует под юрисдикцией другого
государства и предпринимает все меры, чтобы его нельзя было отследить —
сложно или практически невозможно. Но есть и успешные примеры.
Отделом К города N возбуждено уголовное дело по ст.272 УК РФ
«Неправомерный доступ к охраняемой законом компьютерной информации...» в
отношении гражданина РФ по заявлению юридического лица (владельца
сайта). В феврале 2010-го года был выполнен взлом сайта производства
одной из российских дизайн-студий («самописный» скрипт), через найденную
злоумышленником уязвимость в коде сайта. Целью взлома являлось
размещение рекламных баннеров. Злоумышленник принёс свои письменные
извинения владельцу сайта с просьбой досудебного урегулирования — кроме
уголовной статьи ему грозит и отчисление из ВУЗа. Так сказать — в
интересах следствия подробности не разглашаются.
Если ущерб значительный, а IP-адрес «местный» (даже динамический и
принадлежит Интернет-провайдеру), а не «китайского прокси» — можно с
заявлением и имеющимися материалами обратиться по месту жительства в
правоохранительные органы, а конкретно в отдел К. Следователи сами
запросят у хостинг-провайдера официальное письмо с журналами и
пояснениями ситуации, у Интернет-провайдера — кому был выделен IP-адрес.
Компании обязаны предоставить эти сведения по запросу
правоохранительных органов.
Взломщику общение с правоохранительными органами доставит много неприятных часов, особенно если на компьютере остались следы противоправной деятельности, не говоря уже о возможном судебном преследовании.
Краткие выводы
Безопасность Вашего сайта — задача не только разработчика и хостера,
который обязан обеспечить максимальную защищённость серверов, но и
администратора сайта.
Тривиальные советы владельцу сайта:
нигде не хранить учётные данные доступа;
использовать длинные комплексные пароли и нестандартные логины, периодически выполнять их смену;
своевременно обновлять скрипты с выходом обновлений;
при выборе компонента проверять на наличие незакрытых уязвимостей;
следить за правами на файлы скриптов и особенно критические файлы конфигурации;
средствами веб-сервера (например, .htaccess и .ftpaccess) разрешить доступ только с Вашего IP;
да, сохранять копирайты авторов скриптов надо, но по ним, а так же
фрагментам адресной строки модулей, злоумышленники и ищут уязвимые сайты
— смените хотя бы стандартные адреса обращения к скриптам;
периодически, в том числе внешними сервисами, проверять доступность конкретных разделов сайта;
иметь локальные бекапы сайтов.
Оценив шансы по розыску злоумышленника — можно и нужно обратиться в правоохранительные органы.
PS: статья не претендует на абсолютную полноту изложения и ориентирована
не на IT-гуру, разумеется, при целенаправленном взломе конкретного
сервера или сайта могут применяться другие средства. Рад буду дополнить
по комментариям хабрасообщества, в том числе и другими примерами.