Обнаружение основных уязвимостей веб-приложений с помощью ручного и автоматизированного тестирования безопасности

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

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

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

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

В тестировании безопасности соотношение между ручным и автоматизированным тестированием является чрезвычайно важным.

Ручное тестирование безопасности. XSS и SQL-инъекции

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

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

Существует два основных типа атак, которые могут быть осуществлены вручную: XSS (Cross-Site Scripting) и SQL-инъекции. Обе эти атаки требуют более точного описания.

XSS-инъекции

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

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

http:\/\/test-site.com\/search.php?q=<script>document.cookie<\/script>.<\/p>

Скрипт похищает файлы cookie вошедшего в систему пользователя. .

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

Рассмотрим пример SQL-инъекции:

SELECT * FROM Users; DROP TABLE Customers

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

<\/p>

Как предотвратить SQL-инъекцию?

На самом деле уязвимости SQL-инъекции достаточно легко избежать. Для этого достаточно выполнить следующие действия:

  • Использовать параметризованные запросы к базе данных. Это позволяет базе данных отличить код от данных и не пропустить SQL-инъекцию.
  • Использовать хранимые процедуры для обработки данных.
  • Использовать белый список проверки ввода. Такой подход не позволит пользователю ввести данные в формате, отличном от ожидаемого.

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

Другие уязвимости, которые можно обнаружить при ручном тестировании

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

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

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

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

Автоматизированное тестирование безопасности

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

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

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

Заключение

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