Контакты
Подписка
МЕНЮ
Контакты
Подписка

Аудит программного кода по требованиям безопасности

Аудит программного кода по требованиям безопасности

В рубрику "Управление" | К списку рубрик  |  К списку авторов  |  К списку публикаций

Аудит программного кода по требованиям безопасности

Алексей Марков, к. т.н., старший научный сотрудник, CISSP, эксперт по информационной безопасности

Валентин Цирлов, CISSP, эксперт по информационной безопасности

Проблема безопасности программного кода

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

Данная проблема явилась толчком к широкому развитию во многих странах аудита безопасности программного кода, получившего название security code reviews.

Процедуры security code reviews могут быть либо реализованы в системе менеджмента качества крупных корпораций (например, в SDL-системе компании Microsoft), либо отданы на откуп независимым лабораториям, специализирующимся на тестировании безопасности прикладных программных продуктов и их обновлений. Как правило, аудит безопасности кода проводят в рамках комплексного тестирования программных продуктов, реже при аудите безопасности информационной системы.

Понятие аудита безопасности программного кода

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

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

В общем плане аудит безопасности кода является итерационным процессом, включающим мероприятия по планированию, проведению анализа, выработке рекомендаций по доработке программы и документации, а также развитию методик и средств выявления и анализа уязвимостей (см. рис. 1).

Некорректности кодирования как основой класс уязвимостей

Уязвимости программного кода могут являться некорректностями кодирования или ошибками проектирования, а также иметь злоумышленный или непреднамеренный характер. Однако, согласно открытым публикациям, основные приемы security code reviews, используемые при проверках кода, ориентированы на выявление некорректностей кодирования подсистем безопасности. Перечислим основные классы указанных уязвимостей:

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

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

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

Методы аудита безопасности кода

Выделяют несколько методов аудита безопасности кода:

  1. просмотр (инспекция) кода вручную;
  2. статический анализ кода по шаблону;
  3. динамический анализ выполнения кода.

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

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

Статический анализ кода по шаблону заключается в использовании средств автоматизации поиска и анализа потенциально опасных конструкций кода (сигнатур) в исходном коде программ. Данный метод эффективен при поиске несложных уязвимостей и немаскируемых закладок, таких как переполнение буфера, парольные константы или "логические бомбы". К автоматизированным средствам проведения статического метода по шаблону относят сканеры уязвимостей кода PREfix, PREfast, АК-ВС, UCA, FlawFinder, ITS4, RATS, FxCop.

Современные сканеры кода позволяют в той или иной степени автоматизировать:

  • поиск уязвимостей переполнения буфера;
  • поиск OS-инъекций (выполнения произвольных команд);
  • поиск SQL-инъекций;
  • поиск XSS-запросов (межсайтовый скриптинг);
  • поиск ошибок входных и выходных значений;
  • проведение структурного разбора подпрограмм, реализующих функции защиты.

Исследование авторов показало, что выявление уязвимостей с использованием средств автоматизации позволяет сократить время проверок в десять-двадцать раз.

Опубликовано: Журнал "Information Security/ Информационная безопасность" #2, 2008

Приобрести этот номер или подписаться

Статьи про теме