Получить консультацию по Solar appScreener

Эксплуатация уязвимостей в исходном коде ПО, в зависимости от их типа, позволяет злоумышленникам получить контроль над уязвимыми системами, что в итоге может привести к разным негативным последствиям: от кражи важных для компании данных до «отказа в обслуживании» какой-либо корпоративной информационной системы (далее – ИС).

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

Методы поиска уязвимостей в программном коде

Проверить код приложения можно вручную или с помощью автоматизированных средств.

Ручной поиск

Для реализации этого метода требуется высокий уровень квалификации разработчиков, умение анализировать код (в том числе дизассемблированный), находить в нем изъяны и писать код для тестирования.

Довольно подробно алгоритм ручного поиска уязвимостей описывают Грег Хогланд и Гар Мак-Гроу в своей книге «Взлом программного обеспечения».

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

  1. В фрагменте имеется потенциально опасный вызов функции.

  2. Вызываемая функция обрабатывает данные, вводимые пользователем ПО.

Обнаружение проблем в исходных кодах с помощью ручного поиска – очень трудоемкий и занимающий немало времени процесс. Однако его все-таки используют некоторые разработчики. Ведь далеко не все уязвимости являются шаблонными и их можно выявить по какому-то алгоритму. Конечно, одним ручным поиском и анализом обойтись вряд ли получится – его целесообразно использовать совместно со средствами автоматизации проверки кода приложений. И тем не менее он все-таки работает. Хакеры во многих случаях ищут проблемные места в ПО именно таким способом: тратя уйму времени на ручной анализ исходного кода. Однако зачастую их трудозатраты окупаются с лихвой.

Динамическое тестирование (DAST)

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

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

Есть у этого метода и слабые стороны. Один из главных его минусов – необходимость развертывания отдельной копии ПО для проведения тестирования. Это требует дополнительных ресурсов, которые есть не у всех. К тому же с помощью DAST не удается покрыть 100% кода. Плюс проблемы с поддержкой отдельных технологий. Некоторые динамические сканеры не сильны при работе с jQuery, REST, SOAP, XSRF/CSRF-токенами, ошибками использования криптографии, слабыми механизмами генерации cookie или session ID.

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

Статическое тестирование (SAST)

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

Из плюсов этого подхода можно выделить:

  • Высокую скорость тестирования. Современные анализаторы могут сканировать по несколько миллионов строк в секунду. А, например, при использовании DAST часто не удается завершить проверку ПО, уложившись в выделенное окно тестирования.

  • Высокая точность. Но здесь многое зависит от алгоритмов и шаблонов, заложенных разработчиками решения.

  • Почти 100-процентное покрытие кода. Современные SAST-инструменты (в частности, Solar appScreener и его аналоги) поддерживают множество языков программирования. Помимо основного кода они могут анализировать подключаемые файлы, библиотеки и так далее.

Однозначно сказать, что какой-то из рассмотренных способов поиска уязвимых мест в программном обеспечении лучше, нельзя. У каждого есть свои особенности и нюансы. Кому-то проще, быстрее и дешевле пользоваться ручным поиском (если исходный код не совсем громоздкий), у кого-то есть возможность и время использовать DAST, а кому-то удобнее SAST. Многие комбинируют методы проверки ПО на безопасность. И это работает: недостатки одного перекрываются преимуществами другого.

ДРУГИЕ СТАТЬИ ПРОДУКТА

Еще больше о наших возможностях