Методы и средства автоматизированного обнаружения уязвимостей в программах на языке C на основе статического анализа их исходных текстов тема диссертации и автореферата по ВАК РФ 05.13.19, кандидат физико-математических наук Пучков, Федор Михайлович

  • Пучков, Федор Михайлович
  • кандидат физико-математических науккандидат физико-математических наук
  • 2010, Москва
  • Специальность ВАК РФ05.13.19
  • Количество страниц 120
Пучков, Федор Михайлович. Методы и средства автоматизированного обнаружения уязвимостей в программах на языке C на основе статического анализа их исходных текстов: дис. кандидат физико-математических наук: 05.13.19 - Методы и системы защиты информации, информационная безопасность. Москва. 2010. 120 с.

Оглавление диссертации кандидат физико-математических наук Пучков, Федор Михайлович

Список обозначений

Введение

1 Автоматизированное обнаружение уязвимостей в программах на языке С

1.1 Типы существующих программных дефектов.

1.1.1 Некорректные операции с памятью.

1.1.2 Некорректные операции с целыми типами.

1.1.3 Операции чтения неопределенного значения.

1.1.4 Некорректное использование функций стандартной библиотеки

1.1.5 Утечки памяти

1.2 Методы и средства обнаружения программных дефектов.

1.2.1 Методы лексического и синтаксического анализа.

1.2.2 Программный комплекс Splint.

1.2.3 Программный комплекс BOON.

1.2.4 Метод абстрактной интерпретации программ.

1.3 Выводы.

2 Метод обнаружения дефектов в программах на языке С

2.1 Введение.

2.2 Общий подход к решению задачи обнаружения дефектов в программах на языке С

2.2.1 Лексический и синтаксический анализ С-программы.

2.2.2 Преобразование,дерева разбора в промежуточное представление.

2.2.3 Верификация программы на языке промежуточного представления

2.3 Описание языка IAL.

2.3.1 Синтаксическая структура IAL-программы.

2.3.2 Типы данных.

2.3.3 Константы.

2.3.4 Инструкции.

2.4 Математическая модель языка IAL.

2.5 Инварианты IAL-программы.

2.6 Базовый алгоритм генерирования инвариантов.

2.6.1 Алгоритм обхода управляющего графа.

2.6.2 Свойства систем интервальных уравнений.

2.6.3 Определение инвариантов в вершинах.

2.6.4 Теорема о корректности алгоритма генерирования инвариантов

2.7 Построение и проверка индуктивных гипотез.

2.8 Выводы.

3 Программная реализация средства автоматизированного обнаружения дефектов в программах на языке С

3.1 Требования к программному комплексу.

3.2 Основные этапы метода автоматизированного обнаружения уязвимостей.

3.2.1 Лексический и синтаксический анализ С программы.

3.2.2 Трансляция абстрактного синтаксического дерева в промежуточное представление . 96

3.2.3 Верификация IAL-программы.

3.3 Выводы.

4 Исследование эффективности средства автоматизированного обнаружения уязвимостей в программах на языке С

4.1 Модельные примеры.

4.1.1 Модельный пример stack-overflow.

4.1.2 Модельный пример heap-overflow.

4.2 Анализ программы xorg-server.

4.3 Выводы.•.

Рекомендованный список диссертаций по специальности «Методы и системы защиты информации, информационная безопасность», 05.13.19 шифр ВАК

Введение диссертации (часть автореферата) на тему «Методы и средства автоматизированного обнаружения уязвимостей в программах на языке C на основе статического анализа их исходных текстов»

Актуальность

Одним из важнейших условий успешного функционирования практически значимых объектов, потенциально уязвимых для кибератак, является защита используемого в их составе программного обеспечения от возможных сбоев в работе. Это условие становится особенно важным при проектировании автоматизированных систем с высоким уровнем требований к их защищенности, в том числе — при разработке и реализации программно-технических средств защиты информации, что отражено в соответствующих Руководящих документах ФСТЭК РФ [1-3]. Появление подобных сбоев зачастую связано с наличием уязвимостей (ошибок, дефектов) в программных средствах подобных систем. В их числе такие, использование которых злоумышленником может привести к нерегламентированному политикой информационной безопасности повышению его привилегий на том или ином узле системы, подлежащей защите. Кроме того, сбои в работе программ могут приводить к аварийному завершению работы важных программно-аппаратных компонентов, создавая угрозу отказа для системы в целом. Имея в виду существующие подходы к разработке и последующему сопровождению программного обеспечения [12-14,35,37,44,55], в частности, на основе уже существующих средств с открытым исходным кодом, на первый план выходят следующие задачи:

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

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

• обоснование отсутствия других уязвимостей (дефектов) в используемом программном обеспечении.

Актуальность выбора для анализа именно программ, написанных с использованием языка программирования С, обусловлена широкой распространенностью этого языка в среде программного обеспечения с открытым исходным кодом. Согласно проведенным исследованиям [63,64], на долю языка С приходится более 80% объема кода, используемого в современных программных средствах. Дополнительным фактором такого выбора является и то обстоятельство, что обеспечение корректности операций с памятью и указателями в языке С является задачей разработчика программного обеспечения.

Следует отметить, что в настоящее время эффективных и широко распространенных автоматизированных средств, позволяющих проверять корректность программ на языке С и выявлять в них возможные уязвимости, не существует. Традиционные средства статического анализа (аудита) исходного кода недостаточно точно анализируют семантику программы, и, как следствие, — приводят к большому количеству ложных предупреждений. Например, программный комплекс ITS4 [36, 74] анализирует лишь наборы лексем, сопоставляя их с образцами «потенциально опасных конструкций», хранящимися в специальной базе данных. Подобный алгоритм проверки может выдавать до 100% ложных предупреждений, не обнаружив при этом в исследуемой программе ни одной реальной уязвимости. Программный комплекс Splint [47,76] позволяет находить лишь простейшие уязвимости такие, как, например, выход за границу статического массива при обращении по фиксированному индексу. Для обнаружения уязвимостей в более сложных ситуациях анализатору необходимо предоставить специальные аннотации, составление которых представляется весьма трудоемкой процедурой. Программный комплекс BOON [58,67] реализует один из простейших вариантов «интервального анализа» — для каждой целочисленной пер'еменной х вычисляется интервал [а, 6] ее возможных значений такой, что в каждой точке программы справедливо соотношение а < х < Ь. К недостаткам алгоритма можно отнести следующие факторы, значительно снижающие точность анализа.

• Алгоритм анализа нечувствителен к потоку управления. Анализируются лишь инструкции присваивания, причем независимо от порядка, в котором они встречаются в исследуемой программе.

• Отсутствует анализ указателей.

• Не исследуются зависимости между различными переменными.

На рынке информационных технологий представлен также ряд коммерческих продуктов (Coverity [70], PolySpace [75]), позволяющих (по мнению их разработчиков) проводить более точный анализ исходного кода 'программ. Однако, результаты использования указанных продуктов, а также применяемые методы и алгоритмы не были опубликованы.

Программный комплекс ASTREE [65] позволяет верифицировать программы на языке С, не содержащие операций динамического выделения/освобождения памяти, а также не использующие рекурсию.

Средства динамического анализа, применяемые непосредственно во время работы исследуемой программы (например, Valgrind [49,77]), могут быть весьма эффективными для обнаружения «ошибок времени выполнения» (runtime errors). Однако, во-первых, они существенно замедляют работу программы, а во-вторых, указанные средства проверяют корректность выполнения программы лишь на конечном множестве наборов входных данных (тестов) и не могут гарантировать корректность работы исследуемой программы в процессе ее дальнейшей эксплуатации. По этой причине, методы динамического анализа не являются полноценной заменой статическим методам аудита исходного кода С-программ.

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

Цель работы

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

Основные результаты работы

На защиту выносятся следующие основные результаты диссертационной работы:

1) систематизирована исследуемая предметная область, введено понятие программного дефекта, предложена классификация существующих программных дефектов С-программ;

2) предложен метод автоматизированного обнаружения дефектов в программах на языке С, основанный на преобразовании исходной программы в промежуточный формат «IAL» (от Intermediate Analyser Language) с последующей верификацией полученной IAL-программы;

3) разработан язык IAL промежуточного представления С-программ, описаны его синтаксис и семантика, разработана математическая модель языка IAL, в рамках которой формализована задача верификации IAL-программ;

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

5) создан прототип программного комплекса автоматизированного обнаружения дефектов в программах на языке С, эффективность которого продемонстрирована как на ряде специально подобранных модельных примеров, так и на примере программы xorg-server — основной части подсистемы управления графикой в UNIX-подобных операционных системах.

Методы исследования

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

Научная новизна

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

Практическая значимость

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

Апробация работы

Основные результаты диссертации докладывались на международной научной конференции «Информационная безопасность регионов России (ИБРР-2003)», на международных конференциях «Математика и безопасность информационных технологий» (2004-2006), «Ломоносовские чтения» (2006-2007), на механико-математическом факультете МГУ имени М.В. Ломоносова на семинаре «Проблемы современных информационно-вычислительных систем» под руководством д.ф.-м.н., проф. В.А. Васенина <2004, 2009).

Публикации

По теме диссертации опубликовано 10 научных работ, в том числе в зарубежных журналах, из них одна статья [24] в журнале из перечня ВАК ведущих рецензируемых журналов, а также — 4 патента на изобретения [29-32]. Материалы работы вошли в главу 7 опубликованной в 2008 году книги «Критически важные объекты и кибертерроризм. Часть 2. Аспекты программной реализации средств противодействия» под ред. д.ф.-м.н., проф. В.А. Васенина [27].

Структура и объем диссертации

Работа состоит из введения, четырех глав, заключения, списка литературы. Общий объем диссертации — 120 страниц. Список литературы включает 77 наименований.

Похожие диссертационные работы по специальности «Методы и системы защиты информации, информационная безопасность», 05.13.19 шифр ВАК

Заключение диссертации по теме «Методы и системы защиты информации, информационная безопасность», Пучков, Федор Михайлович

4.3 Выводы

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

Проведенные эксперименты на модельных программах свидетельствуют о том, что разработанный прототип в полной мере удовлетворяет предъявленным к нему функциональным требованиям. Для всех тестовых программ, содержащих тот или иной тип дефекта, указанные дефекты были обнаружены «Анализатором»; для всех корректных программ «Анализатором» была доказана их корректность. Отметим, что обзор существующих средств аудита С-программ, проведенный в главе 1, показал, что такие средства уже на модельных примерах зачастую выдают ложные срабатывания или пропускают реальные дефекты.

Проведенные эксперименты с программной xorg-server свидетельствуют о применимости на практике разработанного прототипа для анализа крупных программных проектов: время анализа всего проекта является приемлемым (не превышает 20 часов), плотность количества ложных срабатываний не превышает 10 на 1000 строк исходного кода, а эффективность верификации составила около 86%. Отметим, что эффективность верификации существующих известных автору средств аудита исходного кода программ на языке С не превышает 52%.

Заключение

В настоящей диссертационной работе получены следующие основные результаты:

1) систематизирована исследуемая предметная область, введено понятие программного дефекта, предложена классификация существующих программных дефектов С-программ;

2) предложен метод автоматизированного обнаружения дефектов в программах на языке С, основанный на преобразовании исходной программы в промежуточный формат «IAL» (от Intermediate Analyser Language) с последующей верификацией полученной IAL-программы;

3) разработан язык IAL промежуточного представления С-программ, описаны его синтаксис и семантика, разработана математическая модель языка IAL, в рамках которой формализована задача верификации IAL-программ;

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

5) создан прототип программного комплекса автоматизированного обнаружения дефектов в программах на языке С, эффективность которого продемонстрирована как на ряде специально подобранных модельных примеров, так и на примере программы xorg-server — основной части подсистемы управления графикой в UNIX-подобных операционных системах.

Список литературы диссертационного исследования кандидат физико-математических наук Пучков, Федор Михайлович, 2010 год

1. Нормативные документы

2. Защита от несанкционированного доступа к информации. Термины и определения. // Руководящий документ. Гостехкомиссия России, 1992.

3. Средства вычислительной техники. Защита от несанкционированного доступа к информации. Показатели защищенности от несанкционированного доступа к информации. // Руководящий документ. Гостехкомиссия России, 1992.

4. Научно-техническая литература

5. Ахо А., Сети Р., Ульман Дж. Компиляторы: принципы, технологии и инструменты. — М.: Издательский дом «Вильяме», 2003. — 768 с.

6. Верещагин Н. К., Шень А. Лекции по математической логике и теории алгоритмов. Часть 1. Начала теории множеств. — М.: МЦНМО, 2002. — 128 с.

7. Верещагин Н. К., Шень А. Лекции по математической логике и теории алгоритмов. Часть 2. Языки и исчисления. — М.: МЦНМО, 2002. — 288 с.

8. Верещагин Н. К., Шень А. Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции. — М.: МЦНМО, 2002. — 192 с.

9. Вирт Н. Алгоритмы и структуры данных. — М.: Мир, 1989. — 360 с.

10. Гайсарян С. С., Чернов А. В., Белеванцев А. А., Маликов О. Р., Мельник Д. М., Меньшикова А. В. О некоторых задачах анализа и трансформации программ. // Труды ИСП РАН, 2005. 78 с.

11. Галатенко А. В., Пучков Ф. М., Шапченко К. А. Способ анализа программ на наличие угроз переполнения буферов. // Материалы конференции «Информационная безопасность регионов России» (ИБРР-2003). — СПб.: 2003. С. 33.

12. Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгоритмы: построение и анализ. Второе издание. — М.: Издательский дом «Вильяме», 2005. — 1296 с.

13. Липаев В. В. Методы обеспечения качества крупномасштабных программных средств. — М.: Синтег, 2003. — 520 с.

14. Липаев В. В. Программная иноюенерия. Методологические основы. — М.: Теис, 2006. — 608 с.

15. Липаев В. В. Процессы и стандарты жизненного цикла сложных программных средств. Справочник. — М.: Синтег, 2006. — 276 с.

16. Мак-Клар С., Скембрей Дж., Курц Дж. Секреты хакеров. Безопасность сетей — готовые решения, 3-е издание. — М.: Издательский дом «Вильяме», 2002. — 736 с.

17. Маликов О. Р. Автоматическое обнаружение уязвимостей в исходном коде программ. // Известия ТРТУ №4, 2005. С. 48-53.

18. Маликов О. Р., Несов В. С. Автоматический поиск уязвимостей в больших программах. // Известия ТРТУ, Тематический выпуск «Информационная безопасность», №7, 2006. — С. 114-120.

19. Маликов О. Р. Исследование и разработка методики автоматического обнаружения уязвимостей в исходном коде программ на языке Си. // Дис. . канд. физ.-мат. наук: 05.13.11. — М.: 2006. 101 с.

20. Непомнящий В. А., Ануреев И. С., Михайлов И. Н., Промский А. В. На пути к верификации С-программ. Часть 1. Язык C-light. // Препр./ РАН. Сиб. Отд-ние. ИСИ; №84, 2001.

21. Непомнящий В. А., Ануреев И. С., Михайлов И. Н., Промский А. В. На пути к верификации С-программ. Часть 2. Язык C-light-kemel и его аксиоматическая семантика. // Препр./ РАН. Сиб. Отд-ние. ИСИ; №87, 2001.

22. Непомнящий В. А., Ануреев И. С., Михайлов И. Н., Промский А. В. На пути к верификации С-программ. Язык CLlight и его формальная семантика. // Программирование, №6, 2002. С. 65-80.

23. Несов В. С., Маликов О. Р. Использование информации о линейных зависимостях для обнаружения уязвимостей в исходном коде программ. // Труды ИСП РАН №9, 2006. — С. 51-57.

24. Промский А. В. Формальная• семантика C-light программ и их верификация методом Хоара. // Дис. . канд. физ.-мат. наук: 05.13.11 / ИСИ СО РАН. — Новосибирск, 2004. — 158 с.

25. Пучков Ф. М., Шапченко К. А. Статический метод анализа программного обеспечения на наличие угроз переполнения буферов. // Программирование №4, 2005. — С. 19-34.

26. Пучков Ф. М., Шапченко К. А. К вопросу о выявлении возможных переполнений буферов посредством статического анализа исходного кода программ. // Материалы конференции МаБИТ-04. М.: МЦНМО, 2005. - С. 347-359.

27. Пучков Ф. М., Шапченко К. А., Андреев О. О. К созданию автоматизированных средств верификации программного кода. // Материалы конференции МаБИТ-06. — М.: МЦНМО, 2007. С. 401-439.

28. Юдин Д. В., Гольштейн Е. Г. Линейное программирование. Теория, методы и приложения. — М.: Государственное издательство физико-математической литературы, 1969. — 424 с.1. Патенты

29. Пучков Ф. М., Шапченко К. А. Способ генерации баз данных для систем верификации программного обеспечения распределенных вычислительных комплексов и устройство для его реализации. // Патент на изобретение №2364929. — 2009.

30. Пучков Ф. М., Шапченко К. А. Способ генерации баз знаний для систем верификации программного обеспечения распределенных вычислительных комплексов и устройство для его реализации. // Патент на изобретение №2364930. — 2009.

31. Пучков Ф. М., Шапченко К. А. Способ генерации баз данных и баз знаний для систем верификации программного обеспечения распределенных вычислительных комплексов и устройство для его реализации. // Патент на изобретение №2373569. — 2009.

32. Пучков Ф. М., Шапченко К. А. Способ верификации программного обеспечения распределенных вычислительных комплексов и система для его реализации. // Патент на изобретение №2373570. — 2009.

33. Зарубежные нормативные документы

34. ISO/IEC 10967-1:1994 International Standard. Information Technology — Language Independent Arithmetic — Part 1: integer and floating point arithmetic.

35. ISO/IEC 9899:1999 International Standard. Programming languages — C.

36. Зарубежная научно-техническая литература

37. Beck К. Extreme Programming Explained: Embrace Change. // Addison Wesley Professional, November 2004.

38. Bloch J. Т., Kohno Т., McGraw G., Viega J. ITS4: A Static Vulnerability Scanner for С and С++ Code. // Annual Computer Security Applications Conference, December 11-15, 2000, pp. 257-267.

39. Boehm B. A Spiral Model of Software Development and Enhancement. // TRW Defense Systems Group. — COMPUTER Journal, May 1988, pp. 61-72.

40. Cooper D. C. Theorem Proving in Arithmetic without Multiplication. // Machine Intelligence №, 1972, pp. 91-99.

41. Cousot P., Cousot R. Abstract Interpretation: A Uniffied Lattice Model for Static Analysis of Programs by Construction or Approximation of Fixpoints //In Proc. POPL'77, P. 238-252. ACM Press, 1977.

42. Dor N., Rodeh M., Sagiv M. CSSV: Towards a Realistic Tool for Statically Detection All Buffer Overflows in C. // Proceedings of the ACM SIGPLAN 2003 conference, San Diego, California, USA, 2003, pp. 155-167.

43. Ellenbogen R. Fully Automatic Verification of Absence of Errors via Interprocedural Integer Analysis. Master's thesis, School of Computer Science, Tel-Aviv University, Tel-Aviv, Israel, December 2004.

44. Floyd R. W. Assigning meanings to Programs. // Proc. Symposium in Appl. Math. Vol. 19. Mathematical Aspects of Computer Science. AMS, Providence, P. 19-32., 1967.

45. Fogel K. Producing Open Source Software. — O'Reilly, October 2005.

46. Ganesh V. Decision Procedures for Bit-Vectors, Arrays and Integers. // PhD Dissertation, Department of Computer Science, Stanford University, September 2007, p. 125.

47. Kaluzny B. L. Polyhedral computation: A Survey of Projection Methods. // School of Computer Science, McGill University. "April, 2002.

48. Larochelle D., Evans D. Statically Detecting Likely Buffer Overflow Vulnerabilities. // Proceedings of the 10th USENIX Security Symposium, Washington, D. C., August 13-17, 2001.

49. Nethercote N., Fitzhardinge J. Bounds-Checking Entire Programs without Recompiling. // Informal Proceedings of the SPACE 2004, Venice, Italy, January 2004, p. 12.

50. Nethercote N., Seward J. Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation. // Proceedings of the 2007 PLDI conference. ACM SIGPLAN Notices. Volume 42, Issue 6, June 2007, pp. 89-100.

51. Nielson F., Nielson H. R., Hankin C. Principles of Program Analysis. Springer Berlin Heidelberg New York. 1st edition 1999. Corrected 2nd printing 2005.

52. Norrish M. С Formalized in HOL // PhD Dissertation, Computer Laboratory, University of Cambridge 1998.

53. Plotkin G. A Structural Approach to Operational Semantics. Tech. Rep. DAIMI FN-19, Computer Science Department, University of Aarhus, Denmark, 1981.

54. Puchkov F., Shapchenko K. Static Analysis Method for Detecting Buffer Overflow Vulnerabilities // Programming and Computer Software, Volume 31, Issue 4, July 2005, pp. 179-189.

55. Royce W. Managing the Development of Large Software Systems: Concepts and Techniques. // Technical Papers of Western Electronic Show and Convention, Los Angeles, USA, 1970, pp. 328-338.

56. Sankaranarayanan Sriram.' Mathematical Analysis of Programs // PhD Dissertation, Department of Computer Science, Stanford University, September 2005, p. 163.

57. Shacham H., Page M., Pfaff В., Goh E.-J., Modadugu N., Boneh D. On the Effectiveness of Address-Space Randomization // CCS'04, October 25-29, 2004, Washington, DC, USA.

58. Wagner D., Foster J., Brewer E., Aiken A. A First Step Towards Automated Detection of Buffer Overrun Vulnerabilities. // Proceedings of the 2000 Network and Distributed'Systems Security Conference, February 2000, pp. 423-460.

59. Zitser M. Securing Software: An Evaluation of Static Source Code Analyzers. // MSc thesis, Department of Electrical Engineering and Computer Science, Massachusetts Institute" of Technology, August, 2003, p. 130.

60. Ссылки на Интернет-ресурсы

61. Aleph One. Smashing the stack for fun and profit. // Phrack Magazine, 49(14), Nov. 1996. Электронный ресурс]. Режим доступа: http://www.phrack.org/phrack/49/P49-14, свободный. — Электрон, текст, док.

62. Drepper U. Security Enhancements in Red Hat Enterprise Linux (beside SELinux). // Red Hat, Inc., December 9, 2005. Электронный ресурс]. Режим доступа: http://people .redhat. com/drepper/nonselsec. pdf, свободный. — Электрон, текст, док.

63. Lea D. A Memory Allocator. Электронный ресурс]. Режим доступа: http://gee.cs. oswego.edu/dl/html/malloc.html, свободный. — Электрон, текст, док.

64. Measuring Libre Software Using Debian 3.1 (Sarge) as A Case Study: Preliminary Results. Электронный ресурс]. Режим доступа: http://www.upgrade-cepis.Org/issues/2005/3/ up6-3Amor.pdf, свободный. — Электрон, текст, док.

65. Wheeler D. More Than a Gigabuck: Estimating GNU/Linux's Size. Электронный ресурс]. Режим доступа: http://www.dwheeler.com/sloc/redhat71-vl/redhat71sloc.html, свободный. — Электрон, текст, док.

66. The ASTREE Static Analyzer. Электронный ресурс]. Режим доступа: http: //www. astree. ens. fг/, свободный.

67. Bison — GNU Parser Generator. Электронный ресурс]. Режим доступа: http://www.gnu. org/software/bison/, свободный.

68. BOON — Buffer Overrun detectiON. Электронный ресурс]. Режим доступа: http://www. eecs.berkley.edu/~daw/boon/,свободный.

69. Common Vulnerabilities and Exposures. Электронный ресурс]. Режим доступа: http: //www. cve.mitre.org, свободный.

70. Computer Emergency Response Team. Электронный ресурс]. Режим доступа: http://www. kb.cert.org/vuls/, свободный.

71. Coverity. Электронный ресурс]. Режим доступа: http://www.coverity.com/, свободный.

72. Flawfinder. Электронный ресурс]. Режим доступа: http://www.dweeler.com/ flawfinder/, свободный.

73. The GNU Grep. Электронный ресурс]. Режим доступа: http://www.gnu.org/software/ grep/, свободный.

74. The GNU Compiler Collection. Электронный ресурс]. Режим доступа: http://gcc.gnu. org/, свободный.

75. ITS4: Software Security Tool. Электронный ресурс]. Режим доступа: http: //www. cigital. com/its4/, свободный.

76. Poly Space Embedded Software Verification. Электронный ресурс]. Режим доступа: http: //www.mathworks.com/products/polyspace/,свободный.

77. Splint — Secure Programming Lint. Электронный ресурс]. Режим доступа: http://www. splint. org, свободный.

78. Valgrind. Электронный ресурс]. Режим доступа: http://www.valgrind.org, свободный.

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