Сайты в интернете, как и другое программное обеспечение, подвержены различным уязвимостям, что позволяет злоумышленникам получать доступ к секретным и важным данным или выполнять другие незаконные действия. Некоторые уязвимости очень опасны и встречаются чаще, чем хотелось бы, другие же менее опасны и встречаются редко. Важно знать какие уязвимости бывают, проверять свой ресурс на их присутствие и вовремя их исправлять.
В этой статье мы рассмотрим самые опасные типы уязвимостей сайтов и веб-приложений по версии проекта ТОП 10 OWASP в 2017 году. Все уязвимости отсортированы по важности. Самые частые и самые опасные - вверху, менее опасные - ниже. Но если они уже попали в этот список, значит на них стоит обратить внимание.
Содержание статьи
Типы уязвимостей сайтов
А теперь давайте перейдем к нашему списку.
1. Инъекции/Injection
Под инъекциями подразумеваются уязвимости, которые возникают в результате передачи не проверенных, введенных пользователем данных интерпретатору для выполнения. Таким образом, любой пользователь может выполнить произвольный код в интерпретаторе. Самые распространенные типы инъекций - SQL, OS, XXE и LDAP.
Если три последние вам ни о чем не говорят, то про SQL инъекции вы однозначно слышали. С помощью них злоумышленник может получить доступ к базе данных, прочитать из нее секретные данные или даже записать свои значения. Инъекции возникают, когда данные, передаваемые интерпретатору не проверяются на наличие управляющих последовательностей и команд, таких, как кавычки в SQL.
2. Проблемы аутентификации и проверки сессий
Многим приложениям необходимо идентифицировать пользователей для работы с ними. Часто функции для проверки подлинности и управления сессиями реализуются неверно, что позволяет злоумышленникам получать доступ к учетным записям пользователей в обход паролей. Злоумышленники могут каким-либо образом перехватить ключи или токены сеанса, которые выступают в качестве идентификаторов пользователей и использовать их временно или постоянно.
3. XSS
Первые две уязвимости представляли больше опасности для сайта и его сервера. XSS не так опасна для сервера, но опасна для пользователя. Она работает в браузере пользователя, и поэтому позволяет только украсть его данные. XSS или Cross-Site Scripting работает в JavaScript. Принцип тот же, что и в инъекциях. Злоумышленник передает специальную строку в каком-либо поле, в строке содержится JS код, далее браузер думает, что этот код отправлен сайтом и выполняет его, а код может быть любым. Для противодействия таким атакам нужно экранировать все специальные символы с помощью функции htmlspecialchars или аналогов.
4. Проблемы контроля доступа
Нередко по недосмотру администраторов обычным пользователям становятся доступны данные, которые должны быть закрыты. Этой проблеме подвержены даже популярные движки. Ярким тому примером можно привести файлы в корне сайта. Например, файл wp-config.php с паролями доступа к базе данных недоступен, потому что имеет расширение php. Но если вы редактируете его в Vim и сохраняете неверно, то создается резервная копия с расширением .swp и ее то уже можно открыть в браузере без препятствий.
Также под проблемой контроля доступа можно понимать ошибки в коде вашего приложения, которые открывают доступ к секретным данным для не авторизованных пользователей.
5. Неверная конфигурация
Для хорошей безопасности приложению требуется безопасная конфигурация не только спланированная и разработанная на уровне приложения и фреймворка, но и правильно настроенные сервера. Настройки безопасности должны разрабатываться, реализовываться и постоянно поддерживаться. Конфигурация многих сервисов по умолчанию не безопасна. Кроме того, программное обеспечение должно быть всегда в актуальном состоянии.
6. Незащищенные конфиденциальные данные
Многие веб-приложения, сайты и API не защищают конфиденциальные данные пользователя и передают их в открытом виде. К таким данным могут относиться не только пароли, токены и ключи, но и медицинская, финансовая информация. Злоумышленники могут похитить или даже модифицировать важные данные с помощью атаки "Человек посередине". Конфиденциальные данные должны быть защищены, например, с помощью шифрования https или других методов.
7. Недостаточная защита от атак
Большинство приложений и API не имеют базовых возможностей по обнаружению, предотвращению и реагированию как на ручные, так и на автоматические атаки. Защита от атак - это нечто большее, чем базовая проверка соответствия логина и пароля. Она также должна включать обнаружение, протоколирование и даже блокирование попыток неверного входа и других несанкционированных действий. Авторы приложений также должны иметь возможность быстро развертывать исправления для защиты от новых атак.
8. Уязвимости CSRF
Атака CSRF или Cross-Site Request Forgery позволяет злоумышленнику заставить браузер жертвы отправить определенный HTTP запрос, включая куки, файлы сеанса и любую другую, автоматически включаемую информацию в уязвимое веб-приложение.
Таким образом, злоумышленник получает возможность генерировать запросы из браузера жертвы, которые приложение считает правильными и отправленными самой жертвой. Например, вы просто открываете ссылку, а сайт уже отправляет вашим друзьям сообщение с рекламным содержанием без вашего ведома или удаляет ваш аккаунт.
9. Использование компонентов с уязвимостями
Компоненты, такие как библиотеки, фреймворки и другие программные модули работают с теми же полномочиями, что и приложение. Если в одном из компонентов есть уязвимость, то в результате атаки на нее злоумышленник может украсть важные данные или даже получить управление над сервером. Приложения и API, использующие компоненты с известными уязвимостями могут подорвать защиту приложений и сделать возможными различные атаки. Там могут быть разные типы уязвимостей сайтов, и они могут открыть доступ к разным данным.
10. Незащищенные API
Большинство современных приложений часто включают в себя клиентские приложение и богатые API интерфейсы, доступные через JavaScript в браузере или из мобильных приложений. Они могут работать по протоколам SOAP/XML, REST/JSON, RPC, GWT и так далее. Эти API очень часто не защищены и тоже содержат множество ошибок, которые приводят к уязвимостям.
Выводы
В этой статье мы рассмотрели виды уязвимостей сайта, которые встречаются чаще всего по версии ресурса owasp. Как видите, среди чисто программных проблем, таких, как SQL инъекции, XSS или СSRF есть и проблемы в настройке серверов, которые тоже часто причиняют проблемы. Во всяком случае, теперь вы знаете какие уязвимости веб-сайтов бывают, и можете сделать ваш ресурс более безопасным.
Здравствуйте, зачастую начинаю утро на работе не с чашки кофе - а с просмотра этого сайта)
Интересно было бы узнать - есть ли средства диагностики данных уязвимостей сайта ? И может статейку про это было бы классно почитать) Спасибо)