Блог19 мин. чтения2113 просмотров

Безопасность сайта. Продолжение

Профилактические методы защиты и практические способы очистки зараженного сайта.

Безопасность сайта. Продолжение

Профилактические методы защиты

Данная статья является продолжением прошлой нашей статьи.

Точнее, мы хотели в прошлый раз изложить все, но тема оказалась настолько обширной, что пришлось разделить статью на две части.

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

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

Угон пароля

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

XSS

С помощью XSS (англ. Cross-Site Scripting — «межсайтовый скриптинг») злоумышленник может перехватить ваши куки и, соответственно, зайти в ваш аккаунт, где вы авторизованы. Есть два способа, активный и пассивный.

Пассивный. Вам кидают ссылку, зачастую сокращенную, а в ней URL с кодом

http://site.ru/page.php?q=1">

вредоносный код

В итоге ваши печеньки (cookie) уйдут в зрительный зал. После чего останется только подставить их и зайти вместо вас в ваш же аккаунт.

Активный. Злоумышленник нашел уязвимость на форуме и вставил аватарку картинку со сниффера, в итоге все, кто зашел в тему, отдали свои данные.

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

  • проверить на вирусы - https://virustotal.com
  • посмотреть через сервис скриншотов, что там на странице – http://s-shot.ru
  • если вирусов не обнаружено и контент нормально вроде отображается, то открываем через тор браузер, печеньки там не хранятся, воровать нечего

Может показаться долгим процессом, тратить 5 минут, чтобы зайти на сайт. Но просто вспомните, как часто вы переходите на сомнительные сайты? В большинстве случаев пользователи ежедневно посещают проверенные временем сайты, а на незнакомые заходят один-два раза за день, если серфинг по незнакомым сайта не является профессиональным занятием. И в итоге из-за экономии пары минут потом тратить время и нервы на восстановление доступов к почте, сайту, другим аккаунтам.

Троян

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

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

Решение:

  • Не сохраняйте пароли в браузерах!
  • Не открывайте незнакомые файлы без проверки на сайте, даже присланные от друзей. В том числе и фото. Лучше уточните, что это за фото или проверьте их перед открытием.
  • Установите антивирус и файрволл. Антивирус будет контролировать вашу файловую систему, а файрволл предотвратит утечку данных, даже при условии, что антивирус пропустил трояна.

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

Фишинг

Фишинг – это рыбалка. Да, хакеры тоже люди и им тоже не чужды людские забавы. Только рыбачить они любят не только на водоеме, но и в пучинах сети Интернет. Закидывают сети и ждут, когда рыбешка в них попадет. А рыбешка — это пользователь, который ввел свои данные в поле и нажал кнопку отправить, только данные ушли хакеру на сервер, т.к. это была поддельная страница.

Создается точная копия страницы авторизации, кидаются ссылки в людные места или прогоняются хрумером по базе форумов. Анкор делается в виде https://vk.com/photo14234 и пользователь уверен, что идет смотреть фотки котиков или симпатичной девушки, а тут что-то авторизация слетела, не беда, вводим логин/пароль, жмем ОК и нас редиректит куда надо, а попутно и пароли наши отправляются на сервер к злоумышленнику.

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

Решение:

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

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

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

Социальная инженерия

В реальности это можно сравнить с цыганами, которые, заболтав тебя, очистят тебе карманы.

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

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

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

Решение: в ответе на секретный вопрос не указывайте банальные вещи. Есть базы под стандартные ответы: это перечень блюд, фамилий, кличек животных и т.д. Если все же хочется указать кличку животного, добавьте к нему год рождения питомца. А лучше использовать значимое для вас слово, желательно на английском. И пусть на вопрос "Ваше любимое блюдо" ответом будет ваш старый ник, используемый в компьютерных клубах – Devil666, зато такой подход позволит вам оставаться в безопасности.

Брутфорс

Так мы плавно подошли к известному способу получения ваших паролей, как брутфорс. В брутфорсе есть два варианта, чтобы получить ваш аккаунт.

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

Перебор по символам. Это когда перебираются все известные комбинаций цифр, букв, спецсимволов. Полным перебором пользуются, когда перебор по словарям не дал результата. И данный вариант брутфорса может длиться годами, в зависимости от сложности пароля.

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

Достаточно добавить буквы разных регистров, спецсимвол и цифру, и срок взлома увеличится в разы. Также советуем использовать минимум 12 символов . Если интересно, можете проверить надежность вашего пароля на сервисе. Это не точные данные, но ориентироваться вполне можно.

Взлом сайта

Брутфорс

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

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

  • Если у вас известная CMS, поставить плагин/модуль, который бы банил IP-адрес при 3-5 неудачных попытках входа.
  • Изменить URL-страницы входа администратора со стандартного на свой.
  • Поставить капчу на странице авторизации. Как автоматическую от Google например, так можно и выводить рандомно простые примеры 1+2, 5+4, 3+6 и т.д. Даже 10 таких легких примеров в сотни раз усложнят брутфорс, т.к. будут выводиться рандомно.
  • Если у вас нет возможности установить плагин/модуль для проверки количества проверок или не хотите обременять пользователей капчей, то можно использовать БД и небольшой скрипт для этого.

CREATE TABLE `antibrutforce` (

В БД создаем таблицу с 3 полями: айпи-адрес, количество попыток и дата

//.... //выше происходит валидация отправленных данных //если валидация прошла успешно, if($error == '') { //инициализируем подключение к БД //для работы с БД используется класс phpDatabase 2.1 $dbh = new CDataBase(DB_BASE_NAME, DB_HOST, $DB_USER, $DB_PASSWORD); if ($res = $dbh->fetch_array($dbh->query('SELECT `unban` FROM `antibrutforce` WHERE `ip`="' . $_SERVER['REMOTE_ADDR'] . '"')) ) { $unban = $res['unban']; $day = (int)date("d"); if($day<$unban && $unban!=0) { $error = 'Для Вашего IP исчерпан лимит попыток авторизации. Зайдите завтра.'; require ('design/html/auth.html'); die(); } } $dbh->query('DELETE FROM `antibrutforce` WHERE `unban`<="' . (int)date("d") . '" AND `unban`>"0"'); //.... / if ($res = $dbh->fetch_array($dbh->query('SELECT `col` FROM `antibrutforce` WHERE `ip`="' . $_SERVER['REMOTE_ADDR'] . '"'))) { //получаем количество совершенных попыток с этого ай пи $col = $res['col']; if($col < PASS_ATTEMPTS) { //если их меньше, чем константа PASS_ATTEMPTS (макс. количество попыток) //то просто записываем в БД, что попыток стало на 1 больше } else //больше нет попыток - в бан на 1 день { $date = (int)date("d") + 1; $dbh->query('UPDATE `antibrutforce` SET `unban` = "' . $date . '" WHERE `ip`="' . $_SERVER['REMOTE_ADDR'].'"'); } } else //если ip отсутствует в БД, добавляем его туда { $dbh->query('INSERT INTO `antibrutforce` ( `ip` , `col` , `unban` ) VALUES ("'. $_SERVER['REMOTE_ADDR'] .'", "1", ") '); $error .= ' Осталось ' .(PASS_ATTEMPTS - 1). ' попыток.'; } }

И, собственно, сам PHP код

Плагины

Зачастую взлом сайта происходит из-за сторонних плагинов/модулей/компонентов. Находят уязвимость и с помощью SQL инъекции добывают пароли, заливают шелл или исполняют свой код.

Решение: нужно пересмотреть свой набор плагинов, а также рациональность их применения. Возможно, можно обойтись своими средствами, например е ставить плагин для слайдера, а использовать проверенный код JS и прописать все в коде. В итоге слайдер не обращается к БД и вы обезопасили себя в данном случае от SQL инъекции.

Также не забываем регулярно следить за актуальной версии плагинов и своевременно их обновлять.

Ну и следим за новыми уязвимостями плагинов. А при наличии 0day (Нет решения проблемы) уязвимости возможно вообще отключить плагин до того момента, пока не найдут способа закрытия данной уязвимости.

Обновление CMS

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

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

Htaccess

С помощью .htaccess можно предотвратить множество атак. Как SQL инъекций, так и XSS атак. Поэтому грамотная настройка этого файла позволит вам не беспокоиться об атаках на ваш сайт.

Решение: вставляем дальнейшие правила в файл .htaccess

#6G:[QUERY STRINGS] RewriteEngine On RewriteCond %{QUERY_STRING} (eval\() [NC,OR] RewriteCond %{QUERY_STRING} (127\.0\.0\.1) [NC,OR] RewriteCond %{QUERY_STRING} ([a-z0-9]{2000,}) [NC,OR] RewriteCond %{QUERY_STRING} (javascript:)(.*)(;) [NC,OR] RewriteCond %{QUERY_STRING} (base64_encode)(.*)(\() [NC,OR] RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC,OR] RewriteCond %{QUERY_STRING} (<|%3C)(.*)script(.*)(>|%3) [NC,OR] RewriteCond %{QUERY_STRING} (\\|\.\.\.|\.\./|~|`|<|>|\|) [NC,OR] RewriteCond %{QUERY_STRING} (boot\.ini|etc/passwd|self/environ) [NC,OR] RewriteCond %{QUERY_STRING} (thumbs?(_editor|open)?|tim(thumb)?)\.php [NC,OR] RewriteCond %{QUERY_STRING} (\'|\")(.*)(drop|insert|md5|select|union) [NC] R

Защищаемся от sql инъекции, XSS атак

# 6G:[REQUEST METHOD] RewriteCond %{REQUEST_METHOD} ^(connect|debug|move|put|trace|track) [NC] RewriteRule .* - [F]

Исключаем явно ненужные нам методы подключения

# 6G:[REFERRERS] RewriteCond %{HTTP_REFERER} ([a-z0-9]{2000,}) [NC,OR] RewriteCond %{HTTP_REFERER} (semalt.com|todaperfeita) [NC] RewriteRule .* - [F]

Отрубаем левые реферы

#6G:[REQUEST STRINGS] RedirectMatch 403 (?i)([a-z0-9]{2000,}) RedirectMatch 403 (?i)(https?|ftp|php):/ RedirectMatch 403 (?i)(base64_encode)(.*)(\() RedirectMatch 403 (?i)(=\\\'|=\\%27|/\\\'/?)\. RedirectMatch 403 (?i)/(\$(\&)?|\*|\"|\.|,|&|&?)/?$ RedirectMatch 403 (?i)(\{0\}|\(/\(|\.\.\.|\+\+\+|\\\"\\\") RedirectMatch 403 (?i)(~|`|<|>|:|;|,|%|\\|\s|\{|\}|\[|\]|\|) RedirectMatch 403 (?i)/(=|\$&|_mm|cgi-|etc/passwd|muieblack) RedirectMatch 403 (?i)(&pws=0|_vti_|\(null\)|\{\$itemURL\}|echo(.*)kae|etc/passwd|eval\(|self/environ) RedirectMatch 403 (?i)\.(aspx?|bash|bak?|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rar|rdf)$ RedirectMatch 403 (?i)/(^$|(wp-)?config|mobiquo|phpinfo|shell|sqlpatch|thumb|thumb_editor|thumbopen|timthumb|webshell)\.php

Не пускаем в системные файлы и защищаем модуль алиас

# 6G:[USER AGENTS] SetEnvIfNoCase User-Agent ([a-z0-9]{2000,}) bad_bot SetEnvIfNoCase User-Agent (archive.org |binlar|casper|checkpriv|choppy|clshttp|cmsworld|diavol|dotbot|extract|feedfinder|flicky|g00g1e |harvest|heritrix|httrack|kmccrew|loader|miner|nikto|nutch|planetwork|postrank|purebot|pycurl |python|seekerspider|siclab|skygrid|sqlmap|sucker|turnit|vikspider|winhttp|xxxyy|youda|zmeu|zune) bad_bot # Apache < 2.3 Order Allow,Deny Allow from all Deny from env=bad_bot # Apache >= 2.3 Require all Granted Require not env bad_bot

Отсекаем коннект с плохими юзер-агентами

# 6G:[BAD IPS] Order Allow,Deny Allow from All # uncomment/edit/repeat next line to block IPs # Deny from 123.456.789

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

Рекомендую обратить внимание в первую очередь на код от sql инъекций, т.к. большинство сайтов ломают именно так.

Robots и права

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

Решение: закрываем от индексации все системные и технические папки и файлы. А также проверяем выставленные права. На папки должны быть выставлены 755 права, на файлы 644, а на важные системные файлы 444. К важным файлам относятся файлы конфигурации CMS, сервера, файлы, где хранятся пароли БД, ФТП.

Sitemap

То же самое касается и файла sitemap.xml, в который могут попасть системные и технические URL вашего сайта.

Решение: проверяем визуально или с помощью поиска по файлу, не попало ли что лишнее в карту сайта.

Чистка сайта после заражения

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

Для начала проверяем сайт с помощью скрипта Ai-Bolit. Скачать его можно здесь

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

Также с помощью программы PuTTY можно выявить зараженные участки кода.

Особое внимание уделить таким сигнатурам, как base64, , file_get_contents, найти их можно, используя следующие команды:

find /Директория сайта -type f -iname "*" -exec grep -Him1 "" {} \\; > ./.log find / Директория сайта -type f -iname "*" -exec grep -Him1 "base64" {} \\; > ./base64.log find / Директория сайта -type f -iname "*" -exec grep -Him1 "file_get_contents" {} \\; > ./file_get_contents.log

команда find

Во всех папках, в которые загружаются файлы, создаем .htaccess, который либо делает

deny from all

либо запрещает вызов php

-Indexes php_flag engine 0 RemoveHandler .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml AddType application/x-httpd-php-source .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml

Options

Заключение

Для безопасности ресурса мало защитить сам сайт. Надо еще побеспокоиться, чтобы пароли и cookie не украли злоумышленники. Следуя нашим рекомендациям, вы сможете обезопасить себя и свой сайт. И напоследок:

  • Будьте внимательны - не переходите по незнакомым ссылкам, всегда ссмотрите в строку состояния браузера прежде, чем перейти по ссылке.
  • При скачивании незнакомого файла проверьте его через сервис https://virustotal.com/
  • Установите обязательно антивирус и файрволл.
  • Защитите свой сайт с помощью htaccess и поддержанием в актуальной версии своей CMS и плагинов.
Подпишитесь на полезные материалы по интернет-маркетингу
Нажимая на кнопку, вы даете согласие на обработку ваших персональных данных согласно политике конфиденциальности
Комментарии
  • Скажите, а с какими вирусами вы сталкивались в своей работе и как от них избавлялись?

    Здравствуйте, Наталья! На самом чаще всего мы сталкиваемся с шеллами (о них мы рассказывали в первой статье https://itb-company.com/blog/security/site-security). Их очень много, но самый распространенный все же WSO. Также попадаются в последнее время вредоносные скрипты, которые "майнят" криптовалюту нагружая ваш компьютер до максимума. 





    Избавиться от шелла это только малая часть, основная проблема в том, чтобы узнать, как он там оказался. Через какую дыру его залили. Как правило, если логи не помогают в этом, то обновляем полностью CMS, плагины, модули, компоненты, меняем пароли везде (хостинг, фтп, админка, почта которая связанна с созданием сайта). 

  • Впервые встречаю такое доступное описание вирусов и избавления от них, автор- молодец!