Abstract

An approach is presented for the detection of software vulnerabilities using the widely known SPIN model checker. Classes of vulnerabilities in C programs that can be detected using the presented approach are discussed. We present the results of experiments on detecting vulnerabilities in student-made software tools implementing array processing algorithms.

Highlights

  • Предлагается метод тестирования безопасности С программ с использованием широко известного верификатора SPIN

  • Некорректная работа программиста с памятью может также привести к наличию уязвимости

  • Далее мы сканируем исходную C программу инструкция за инструкцией; каждый раз при встрече оператора new в C (С++) коде в соответствующей PROMELA программе мы увеличиваем значение v на единицу

Read more

Summary

Введение

Задача безопасности программного обеспечения становится все более актуальной, особенно для программного обеспечения, используемого в критических системах (к которым относятся системы связи, медицина, ряд протоколов в системах связи и др.), где большое количество программ написано на языке программирования С. Верификатор проверяет, найдутся ли такие входные данные для программы, что выполняется свойство, соответствующее наличию проверяемой уязвимости. Далее на основе полученного контрпримера формируются входные данные, которые подаются на проверяемую программу, и, если программа ведет себя некорректно, то уязвимость найдена; в противном случае можно заключить, что верификация, которая обычно проводится по некоторой модели программы, была выполнена некорректно. Мы рассматриваем уязвимость как особое свойство C программы, и для того чтобы проверить, обладает ли программа данным свойством, мы используем программу-верификатор SPIN [5], которая позволяет осуществлять динамический поиск уязвимостей в программе. Которая сохраняется в ее PROMELA модели, то, как и любой верификатор, SPIN выдает контрпример с соответствующими значениями локальных переменных или входных данных. С одной стороны, такие ограничения сужают класс программ, к которым применим предлагаемый метод обнаружения уязвимостей, с другой стороны, как правило, на уязвимости тестируют не все приложение целиком, а лишь некоторые его части (например, некоторую функцию или блок инструкций)

Переполнение типа
Переполнение приведения типа
Переполнение в массивах
Отрицательное переполнение
Строковое переполнение
Уязвимость повторного освобождения памяти
Генерация входных данных
Генерация входных данных с шагом
Скачкообразная генерация входных данных
Генерация граничных значений
Экспериментальные результаты поиска уязвимостей в C программах
Заключение
A SPIN-based Approach for Detecting Vulnerabilities in C Programs

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call

Disclaimer: All third-party content on this website/platform is and will remain the property of their respective owners and is provided on "as is" basis without any warranties, express or implied. Use of third-party content does not indicate any affiliation, sponsorship with or endorsement by them. Any references to third-party content is to identify the corresponding services and shall be considered fair use under The CopyrightLaw.