В связи с ростом объема данных, хранящихся в приложениях, и увеличением количества транзакций в Интернете, надлежащее тестирование безопасности веб-приложений с каждым днем приобретает все большую важность.
Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.
В этом руководстве мы подробно рассмотрим значение, инструменты и ключевые термины, используемые в тестировании безопасности веб-сайтов, а также подходы к тестированию безопасности.
Содержание
- Что такое тестирование безопасности?
- Ключевые термины, используемые при тестировании безопасности
- Методы тестирования веб-безопасности
- Заключение
Что такое тестирование безопасности?
Тестирование безопасности – это процесс, который проверяет, остаются ли данные конфиденциальными (т.е. не подвергаются ли они воздействию лиц, для которых они не предназначены) и могут ли пользователи выполнять только те задачи, к которым они имеют доступ. Например, пользователь не должен иметь возможность ограничить доступ других пользователей к функционалу сайта.
Ключевые термины, используемые при тестировании безопасности
Прежде чем мы продолжим, будет полезно ознакомиться с несколькими терминами, которые часто используются при тестировании безопасности веб-приложений.
- Уязвимость. Это слабое место в реализации веб-приложения. Причиной наличия уязвимостей могут быть ошибки в приложении, инъекции (SQL/скрипт-коды) или наличие вирусов.
- Манипуляция URL. Некоторые веб-приложения передают дополнительную информацию между клиентом (браузером) и сервером в URL. Изменение некоторой информации в URL иногда может привести к непреднамеренному поведению сервера, и это называется манипуляцией URL.
- SQL-инъекция. Это процесс вставки SQL-запросов через пользовательский интерфейс веб-приложения в некоторые поля как запрос, который затем выполняется сервером.
- XSS (межсайтовый скриптинг). Когда пользователь вставляет HTML/скрипт на стороне клиента в пользовательский интерфейс веб-приложения, эта вставка становится видимой для других пользователей, и это называется XSS.
- Спуфинг. Это создание визуальных копий сайтов и электронных писем.
Методы тестирования веб-безопасности
Для того чтобы провести эффективное тестирование безопасности веб-приложения, тестировщик должен хорошо знать протокол HTTP. Важно иметь представление о том, как клиент (браузер) и сервер взаимодействуют с помощью HTTP.
Кроме того, тестировщик должен, по крайней мере, знать основы SQL-инъекций и XSS.
Взлом пароля
Тестирование безопасности веб-приложения можно начать со “взлома пароля”. Для того чтобы войти в защищенные разделы приложения, можно либо угадать имя пользователя/пароль, либо использовать какой-либо инструмент для взлома паролей. Список распространенных имен пользователей и паролей доступен вместе с программами для взлома паролей с открытым исходным кодом.
Если веб-приложение не использует сложный пароль (например, с алфавитом, цифрами и специальными символами или хотя бы с необходимым количеством символов), взлом имени пользователя и пароля не займет много времени.
Если имя пользователя или пароль хранятся в cookies без шифрования, то злоумышленник может использовать различные методы для кражи cookies и информации, хранящейся в cookies, такой как имя пользователя и пароль.
Манипуляция URL с помощью GET-методов HTTP
Тестировщик должен проверить, передает ли приложение важную информацию в строке запроса. Это происходит, когда приложение использует GET-метод HTTP для передачи информации между клиентом и сервером.
Информация передается через параметры в строке запроса. Тестировщик может изменить значение параметра в строке запроса, чтобы проверить, принимает ли его сервер.
Через GET-запрос информация о пользователе передается на сервер для аутентификации или получения данных. Злоумышленник может манипулировать каждой входной переменной, передаваемой в GET-запросе на сервер, чтобы получить необходимую информацию или испортить данные. В таких условиях любое необычное поведение приложения или веб-сервера является для злоумышленника дверью для проникновения в приложение.
SQL-инъекция
Следующий фактор, который необходимо проверить, – это SQL-инъекции. Ввод одинарной кавычки (‘) в любое текстовое поле должен валидироваться приложением. Аналогично, если тестировщик сталкивается с ошибкой базы данных, это означает, что ввод данных из пользовательского интерфейса и их вставка в какой-либо запрос некорректны. В таком случае приложение уязвимо для SQL-инъекции.
Атаки SQL-инъекций очень опасны, поскольку злоумышленник может получить жизненно важную информацию из базы данных сервера.
Чтобы проверить точки входа SQL-инъекций в ваше веб-приложение, найдите в кодовой базе код, в котором выполняются прямые запросы MySQL к базе данных, принимая некоторые пользовательские данные.
Если данные, вводимые пользователем, используются в SQL-запросах к базе данных, злоумышленник может внедрить SQL-запросы или часть SQL-запросов в качестве пользовательских данных для извлечения важной информации из базы данных.
Даже если злоумышленнику не удастся вывести приложение из строя, из ошибки SQL-запроса, отображаемой в браузере, он также может получить нужную информацию. В таких случаях необходимо правильно обрабатывать/выводить специальные символы.
Межсайтовый скриптинг (XSS)
Тестировщик должен дополнительно проверить веб-приложение на наличие XSS (межсайтового скриптинга). Любой HTML, например, <HTML>
или любой скрипт, например, <SCRIPT>
, не должны приниматься приложением. Если они принимаются, то приложение может быть подвержено XSS-атаке.
Злоумышленник может использовать этот метод для выполнения вредоносного скрипта или URL в браузере жертвы. С помощью межсайтового скриптинга злоумышленник может использовать скрипты типа JavaScript для кражи пользовательских cookie и информации, хранящейся в cookie.
Многие веб-приложения получают и отправляют с сервера нужную пользовательскую информацию с разных страниц.
Например, http://www.examplesite.com/index.php?userid=123&query=xyz
.
Злоумышленник может легко передать некоторые вредоносные данные или <script>
в качестве параметра '&query'
, с помощью чего можно заполучить важные данные пользователя/сервера через браузер.
Важно: во время тестирования безопасности тестировщик должен быть очень осторожен и не должен изменять ничего из нижеперечисленного:
- Конфигурация приложения или сервера.
- Службы, запущенные на сервере.
- Существующие реальные данные пользователей или клиентов, размещенные в приложении.
Кроме того, следует избегать проведения тестирования безопасности в продакшен-среде.
Заключение
Цель тестирования безопасности – обнаружить уязвимости веб-приложения, чтобы разработчики могли устранить их и сделать веб-приложение и его данные защищенными от любых несанкционированных действий.
Перевод статьи “Web Application Security Testing Guide”