Поиск по сайту Поиск

Популярные уязвимости сайтов: чем опасны и как их избежать

Для любого, кто управляет веб-сайтом, на первом месте должен стоять вопрос безопасности. Критические угрозы и уязвимости могут сильно ударить как по репутации, так и по кошельку. Вместе со специалистами команды безопасности REG.RU Артёмом Мышенковым и Георгием Шутяевым рассказываем о популярных уязвимостях и способах их устранения.

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

IDOR: простая и очень опасная уязвимость

IDOR (Insecure Direct Object Reference, небезопасные прямые ссылки на объекты) — уязвимость, которая позволяет получить несанкционированный доступ к веб-страницам или файлам. Самый распространенный случай IDOR — когда злоумышленник перебирает предсказуемый идентификатор и получает доступ к чужим данным.

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

onlinestore.ru/user/details/edit?id=39082330

Здесь главную роль играет ваш личный идентификатор (id=39082330). Эксперимента ради вы решили заменить последнюю цифру, и вдруг — попали на страницу с чужими контактными данными, которые можете редактировать.

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

К чему может привести

— Разглашение конфиденциальной информации. Получив доступ к аккаунтам пользователей, злоумышленники увидят их личные данные.

— Обход аутентификации: можно получить доступ сразу к сотням или тысячам учётных записей с этой уязвимостью.

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

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

Как защититься

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

— проверять, есть ли права на указанную страницу или действие;

— проверять принадлежность аккаунта или услуги авторизованному пользователю;

— использовать идентификаторы, которые невозможно предугадать или перебрать;

— использовать подпись идентификатора.

XSS: плохой сценарий

XSS — Cross Site Scripting (межсайтовое выполнение сценариев). Строго говоря, XSS — не уязвимость, а атака. Но условимся, что под XSS мы понимаем уязвимости, позволяющие проводить атаку XSS. 

Когда происходит XSS-атака, в веб-страницу встраивается вредоносный код. И как только посетитель сайта откроет эту страницу, начнёт выполняться какой-либо неприятный сценарий. Чаще всего под вредоносным кодом подразумевается внедрение html-тегов или скриптов на JavaScript.

XSS бывают нескольких разновидностей:

1. Хранимые (stored). Код, который позволяет проводить атаку, постоянно находится на сервере и выполняется автоматически.

2. Отражённые (reflected). В этом случае вредоносного кода нет на самом сайте, но он содержится в заранее созданной злоумышленником веб-ссылке. Обрабатывая этот «плохой» кусок кода, сайт может ненамеренно запустить в браузере пользователя скрипт, который перехватит данные или выполнит другую «полезную нагрузку», если имеется ввиду сама нагрузка XSS.

3. DOM-based. Вариант отражённых, когда вредоносный код не отправляется на сервер, а выполняется сразу в браузере.

К чему может привести

— Перехват сессии пользователя (файлы cookies).

— Подмена страницы (например, формы ввода логина/пароля), чтобы похитить конфиденциальные данные.

— Внедрение скриптов на сайты с высокой посещаемостью (с целью рекламы, накрутки просмотров, DDoS-атак и прочего).

— Внедрение вредоносных программ на внешне безопасных сайтах.

Как защититься

— Выполняйте кодирование данных, вводимых пользователем, при выводе их на страницу.

— Если какие-то данные нельзя закодировать, защитите их дополнительной валидацией.

— Обеспечьте безопасную обработку данных, причём не только на стороне сервера, но и на стороне клиента.

SQL-инъекции

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

Попробуем пояснить, что такое SQL-инъекция, на простом примере.

Как известно, большинство сайтов и веб-приложений состоят из трёх компонентов: бэкенд (код, который выполняется на сервере), фронтенд (код, который выполняется на стороне клиента, например в браузере) и база данных. Базы данных обычно состоят из множества таблиц. Скажем, если вы владеете интернет-магазином, у вас должно быть как минимум две таблицы: характеристики товаров и информация о зарегистрированных покупателях. Чтобы получать из базы информацию, например, о конкретном товаре, используется язык SQL-запросов.

Представим, что вы пришли в отдел бытовой техники (базу данных). У вас собой есть список покупок, где написано: «Один чайник за 1000 рублей». Вы даёте список продавцу, прося его принести то, что в нём указано (SQL-запрос).

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

SQL-инъекция возникает, когда злоумышленник может изменить запрос к базе данных.

В примере выше SQL-инъекция бы возникла, если бы кто-то посторонний исправил ваш список покупок, например дописал в конец: «Чайник за 1000 рублей или смартфон за 30 000 рублей». Получив от вас такой запрос, продавец, видя, что смартфоны лежат гораздо ближе, чем чайники, дал бы вам смартфон — то есть то, что нужно злоумышленнику. 

SQL-инъекция возможна при отсутствии фильтраций входящих параметров — хакеры могут менять их, чтобы получать нужные им данные. Уязвимыми местами в этом случае служат поля пользовательского ввода и URL-адреса, взаимодействующие с базой данных.

К чему может привести

— Утечка конфиденциальных данных (паролей, данных банковских карт и прочего).

— Внедрение вредоносного контента в уязвимые поля.

— Изменение базы данных.

— Доступ к операциям администрирования.

Как защититься

— При составлении запросов используйте плейсхолдеры (параметризированные запросы).

— Настройте белый список полей ввода.

— Отделите базу данных от логики веб-приложения.

— Используйте экранирование запросов.

Обход директорий

Обход директорий (Path traversal или Directory traversal) заключается в том, что хакер получает доступ к директориям или файлам на сервере с помощью манипуляций переменных, ссылающиеся на эти файлы. Например, для скачивания файла с сервера указывается его имя:

www.site.ru/download?file=file.pdf

С помощью символа, обозначающего директории (../), можно получить доступ к другим файлам, просто добавив его в строку:

www.site.ru/download?file=../../../etc/passwd

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

Уязвимость становится ещё опаснее, если помимо чтения файлов есть ещё и возможность загружать их в произвольные директории. 

К чему может привести

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

— Удалённое выполнение вредоносного кода

— Подмена страниц сайта.

Как защититься

— Старайтесь не использовать вызовы файловой системы при пользовательском вводе.

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

Уязвимости при загрузке файлов

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

Самая распространённая ошибка — отсутствие проверки типа файла. Например, пользователь при загрузке фотографии может вместо .jpeg или .png подгрузить php-скрипт и выполнить его.

Тип файла обычно проверяется по заголовку, но такая проверка опасна, так как заголовок можно подменить. Проверки на стороне клиента тоже иногда можно обойти. И даже использование чёрного/белого списка расширений может быть неэффективным, поскольку иногда вредоносный код встраивается прямо в файл с «правильным» расширением.

К чему может привести

Злоумышленник подгрузит на сайт вредоносные скрипты, сможет «сломать» его или извлечь какие-либо данные.

Как защититься

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

1. запретить выполнение файлов в директории, куда они сохраняются;

2. переименовывать пользовательские файлы так, чтобы пользователь не мог повлиять на них;

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

⌘⌘⌘

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

Также рекомендуем ознакомиться со статьями про безопасность сайта в нашей Базе знаний.

Кто придумал интернет, первый сайт и другие интересные факты о Всемирной паутине

Многие пользователи уже не представляют свою жизнь без интернета и думают, что знают о нём всё, но это не так....
Read More

.ART, .DOMAINS, .BABY! Как тематические домены могут быть полезны бизнесу?

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

Версии панели ISPmanager: какую выбрать для управления сайтом?

В одном из прошлых постов мы рассказывали про специальные панели для управления хостингом. Сегодня же мы хотим хотим подробнее разобрать...
Read More

Инструменты SEO-специалиста — чем можно пользоваться и чем заменить ушедшие сервисы

Работа SEO-специалиста опирается на целый ряд сложных инструментов — многие из которых в текущей ситуации стали недоступны российским пользователям или...
Read More

6 плагинов WordPress для роста продаж

Сейчас почти на любом сайте WordPress есть различные плагины, как просто повышающие скорость его загрузки, так и призывающие посетителей к...
Read More

Выбираем панель управления хостингом

Управлять хостингом можно по-разному: через SSH, по FTP или через специальную панель. В этой статье мы рассмотрим, что это за...
Read More

Как разместить статический сайт с помощью Yandex.Cloud Object Storage

Если у вас есть простой HTML-сайт и вы пока не выбрали, на какой платформе его разместить, — мы поможем. В...
Read More

Вперёд в прошлое: подборка винтажных компьютеров

Недавно мы рассказывали про современные мощные компьютеры. Сегодня же редакция подготовила «пост-машину времени», благодаря которому вы узнаете о винтажных компьютерах...
Read More

Латаем дыры: что такое сканеры уязвимостей

Для обеспечения стабильной работы ваших проектов крайне важно следить за появлением уязвимостей и потенциальных рисков. Опытные IT-специалисты, имеющие и особые...
Read More

С днём рождения, .RU!

Сегодня, 7 апреля, национальной доменной зоне .RU исполняется 28 лет. Мы решили вспомнить, как всё начиналось: в этом материале расскажем,...
Read More