Типы ошибок и уязвимостей в коде по

Поиск уязвимостей в коде

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

S AST

Статические тестирование защищенности приложений (Static Application Security Testing, или сокращенно SAST) – это анализ кода или его части на наличие уязвимостей без реального запуска исследуемого приложения.

Что ищет SAST с точки зрения иб:

Условно дефекты, которые так или иначе интересуют злоумышленников, а следовательно, и аудиторов, можно разделить на следующие группы:

  • ошибки валидирования,
  • ошибки утечки информации,

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

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

  • ошибки аутентификации.

 

Недостатки статического анализа кода

  • Статический анализ, как правило, слаб в диагностике утечек памяти и параллельных ошибок. Чтобы выявлять подобные ошибки, фактически необходимо виртуально выполнить часть программы. Это крайне сложно реализовать. Также подобные алгоритмы требуют очень много памяти и процессорного времени. Как правило, статические анализаторы ограничиваются диагностикой простых случаев. Более эффективным способом выявления утечек памяти и параллельных ошибок является использование инструментов динамического анализа.
  • Программа статического анализа предупреждает о подозрительных местах. Это значит, что на самом деле код, может быть совершенно корректен. Это называется ложно-позитивными срабатываниями. Понять, указывает анализатор на ошибку или выдал ложное срабатывание, может только программист. Необходимость просматривать ложные срабатывания отнимает рабочее время и ослабляет внимание к тем участкам кода, где в действительности содержатся ошибки.

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

 

DAST

Динамический анализ (Dynamic Application Security Testing, DAST) подразумевает наличие развернутой среды выполнения приложения и ее прогон на наиболее интересных с точки зрения анализа наборах входных данных. Упрощая, его можно охарактеризовать, как метод «осознанного научного тыка»

Достоинства динамического анализа кода:

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

Недостатки динамического анализа кода:

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

 не может проверить правильность работы кода, что код делает то, что должен;

 требуются значительные вычислительные ресурсы для проведения тестирования;

 только один путь выполнения может быть проверен в каждый конкретный момент времени, что требует большого количества тестовых запусков для большей полноты тестирования;

Основными задачами, которые решаются при динамическом анализе, являются: задача генерации наборов входных данных, покрывающих интересующие пути выполнения программы; запуск и трансляция программы; отслеживание возникающих уязвимостей. Часто исследование программы затрудняется применением приемов антиотладки, упаковщиков кода и навесными системами защиты от обратной инженерии. При этом не все пути исполнения программы представляют интерес, и для более интеллектуальной генерации входных данных требуется учитывать трассу выполнения программы. Для решения этой задачи программа исполняется неким транслятором, который позволяет анализировать пути выполнения, инструментировать исполняемый код или снимать трассу исполнения для последующего анализа. Попытка сгенерировать все возможные сочетания входных данных приводит к экспоненциальному росту их объема. А значит, от транслятора требуется возможность: производить анализ выбранных или интересующих для анализа путей (например, применяя технологию символьного исполнения для некоторых путей); генерации входных данных, обеспечивающих переход по интересующим путям для увеличения покрытия; возможность параллельного запуска системы с разными входными данными для ускорения анализа.


 

IAST

Относительно недавно перспективным считался подход, комбинирующий преимущества SAST и DAST – интерактивный анализ (Interactive…, IAST). Отличительной особенностью этого подхода является то, что SAST используется для формирования наборов входных данных и шаблонов ожидаемых результатов, а DAST выполняет тестирование системы на этих наборах, опционально привлекая к процессу человека-оператора в неоднозначных ситуациях. Этот подход вобрал в себя как преимущества, так и недостатки SAST и DAST, что не могло не сказаться на его практической применимости.

 

Типы ошибок и уязвимостей в коде по

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

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

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


 

Что было на семинаре

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


Дата добавления: 2019-07-17; просмотров: 136; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!