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

  • Маликов, Олег Рустэмович
  • кандидат физико-математических науккандидат физико-математических наук
  • 2006, Москва
  • Специальность ВАК РФ05.13.11
  • Количество страниц 101
Маликов, Олег Рустэмович. Исследование и разработка методики автоматического обнаружения уязвимостей в исходном коде программ на языке Си: дис. кандидат физико-математических наук: 05.13.11 - Математическое и программное обеспечение вычислительных машин, комплексов и компьютерных сетей. Москва. 2006. 101 с.

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

Введение.

1. Постановка задачи.

2. Обзор работ и классификация.

2.1 Лексический анализ.

2.2 Синтаксический анализ.

2.3 Использование спецификаторов типов.

2.4 Анализ потока данных.

3. Используемые понятия и методы.

3.1 Абстрактный объект памяти (АОП).

3.2 Модельный целочисленный тип.

3.3 Атрибуты АОП.

3.4 Полурешетка контекстов.

4. Общая схема методики поиска уязвимостей.

4.1 Внутрипроцедурный анализ.

4.1.1 Представление функции.

4.1.2 Анализ циклов.

4.1.3 Компактное представление потока данных.

4.1.4 Алгоритм работы с представлением потока данных.

4.1.5 Вычисление контекстов инструкций.

4.1.6 Инструкции увеличения счетчика в цикле.

4.1.7 Условные переходы.

4.1.8 Прямые вызовы функций.

4.1.9 Вызовы функций по указателю.

4.1.10 Остальные инструкции.

4.1.11 Входной и выходной контексты функции.

4.2 Межпроцедурный анализ.

4.2.1 Общий межпроцедурный алгоритм.

4.2.2 Стратегия обхода графа вызовов.

4.2.3 Анализ вершины графа вызовов.

4.2.4 Интерфейс для внутрипроцедурного анализа.

4.3 Обнаружение уязвимостей на основе вычисленных атрибутов.

4.4 Реализация уточнения уязвимостей и обнаружения их источников

5. Реализация методов.

6. Экспериментальные результаты.

Рекомендованный список диссертаций по специальности «Математическое и программное обеспечение вычислительных машин, комплексов и компьютерных сетей», 05.13.11 шифр ВАК

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

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

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

С 1983 по 1988 год Министерство обороны США и Национальный комитет компьютерной безопасности разработали систему стандартов в области компьютерной безопасности, известную как «Оранжевая книга»[46]. В рамках этих стандартов операционные системы делятся на 4 основных класса - А, В, С, D:

• Класс D. К данному классу относятся все системы, не удовлетворяющие требованием более высокого класса. Примерами таких ОС являются MS-DOS[48], Palm OS[47].

• Класс С. Имеет подклассы С1 и С2:

• Подкласс С1. Требуется наличие избирательного разграничения доступа и подсистемы аутентификации при начале работы с ОС. К операционным системам данного подкласса относятся ранние версии UNIX[50], IBM RACF[49].

• Подкласс С2. ОС должна удовлетворять требованием подкласса

С1. Кроме того, все субъекты и объекты ОС должны иметь идентификаторы. Запрещены действия субъектов, способные нарушить безопасность системы. Вся информация, удаляемая из оперативной памяти и с внешних носителей, не может быть доступна в дальнейшем ни одному субъекту. VMS[51], IBM 3

C)S/400[52](c некоторого времени называется i5/OS), Windows NT[53], Novell NetWare 4.11 [54] являются примерами ОС, относящихся к данному подклассу.

• Класс В. Имеет подклассы В1, В2, ВЗ:

• Подкласс В1. Кроме того, поддерживается разграничение доступа к объектам ОС на основе полномочий. К данному подклассу относятся ОС HP-UX BLS, Cray Research Trusted Unicos 8.0, Digital SEVMS, Harris CS/SX, SGI Trusted IRIX[57].

• Подкласс B2. ОС должна удовлетворять требованиям подкласса В1. Подсистема защиты ОС должна иметь формально определенную и хорошо документированную модель безопасности. Интерфейс подсистемы защиты должен быть четко и формально определен. Более жесткие по сравнению с подклассом В1 требования к разграничению доступа. Существует по крайней мере одна ОС - Multics[55], принадлежащая к этому подклассу.

• Подкласс ВЗ. ОС должна удовлетворять требованиям подкласса В2. Должны иметься средства восстановления после сбоев без нарушения защиты. Для произвольного управления доступом должны использоваться списки с указанием разрешенных режимов. Единственной известной на данный момент ОС подкласса ВЗ является XTS-300[56].

• Класс А. Должно иметься формальное доказательство модели подсистемы безопасности и доказательство того, что реализация соответствует модели. К данному классу относятся специализированные ОС Boeing MLS LAN, Gemini Trusted Network Processor, Honeywell SCOMP.

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

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

Отдельно стоит сказать о безопасности сетевых подсистем операционных систем, которые практически никак не нашли отражения в «Оранжевой книге», хотя в последнее время именно сетевые коммуникации стали средой возникновения большей части уязвимостей ОС. Многие проблемы, появившиеся в связи с возможностью удаленного доступа, не осознавались во время проектирования операционной системы UNIX, разрабатывавшейся в 60-70-х годах 20-го века, когда не существовало локальных сетей и сети Интернет. Естественно, что операционные системы семейства UNIX, Windows и др. создавались с учетом необходимой функциональности и достижения определенной производительности, в связи с чем, к примеру, невозможно было обеспечить идеальную систему разграничения прав доступа в рамках операционной системы.

Первым известным случаем использования уязвимостей в программном обеспечении был вирус Морриса. В 1988-м году студентом Карнельского университета Робертом Моррисом была написана программа, использующая уязвимость типа «переполнение буфера» в программном коде сервиса fingerd операционной системы 4.3BSD. Вирус использовал данную уязвимость для получения контроля над атакуемым компьютером, сканирования локальной сети и распространения своего тела на другие компьютеры, на которых имелась данная уязвимость.

Программный код системного демона fingerd содержал в себе примерно такие же строки, как и изображенные на рисунке 1. void f () { char buf[512]; gets(buf);

Рисунок 1. Примерный фрагмент кода демона fingerd.

Библиотечная функция gets считывает в буфер по адресу первого параметра buf строку символов со стандартного ввода. При этом длина строки никак не контролируется. На рисунке 2 упрощенно показано расположение данных на стеке в момент вызова функции f, характерное для подавляющего большинства операционных систем. Адрес возврата соответствует адресу, по которому будет передаваться управление после окончания выполнения кода функции f. Легко заметить, что адрес возврата из функции располагается за локальным массивом s и в начале выполнения функции f указывает на некоторый корректный код выполняемой программы. Таким образом, в случае если функция gets считает строку длиною больше 512 байт, возникнет ставшая классической ситуация «переполнения буфера», когда введенные пользователем данные, записываемые в строку s «заденут» адрес возврата. Моррису оставалось лишь подобрать вводимую пользовательскую строку таким образом, чтобы адрес возврата указывал на необходимый участок программного кода. Таким кодом в случае вируса Морриса было выполнение командного интерпретатора с правами суперпользователя, что позволяло выполнить любые операции на пораженной вирусом машине.

Направление роста адресов -►

Локальный массив s

Направление роста стека

Рисунок 2. Схематичное расположение данных на стеке.

ОС семейства UNIX спроектированы таким образом, что каждый пользователь в рамках ОС является либо простым пользователем, либо суперпользователем с неограниченными правами. Такое разделение подразумевает разграничение прав доступа к файлам для различных пользователей системы. Однако часто возникает необходимость обращения от имени обычного пользователя к системным файлам, владельцем которых по определению является суперпользователь. Например, для того, чтобы пользователь имел возможность менять свой пароль для входа в систему, существует программа passwd, которая, очевидно, должна иметь права на запись в файл с паролями, который принадлежит суперпользователю. Для этого нужно, чтобы была обеспечена возможность запуска программы passwd от имени обычного пользователя, но с правами суперпользователя. Очевидно, что такое требование нарушает идеальную модель разграничения доступа, при которой пользователь может влиять лишь на принадлежащие ему данные.

Именно поэтому большинство UNIX-подобных операционных систем имеет класс безопасности по терминологии «Оранжевой книги» не выше С1. Заметим, что такой механизм не может иметь места в ОС класса В и выше.

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

Другие распространенные операционные системы также имеют похожие механизмы, нарушающие идеальную модель разграничения прав. Поэтому некоторые ОС семейства Windows, а также ОС Solaris[61] имеют класс безопасности С2, что недостаточно для гарантии отсутствия уязвимых механизмов операционной системы.

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

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

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

• Угрозы компьютерным системам и сетям все возрастают

• Возрастает размер ущерба, вызванного злоумышленными атаками

• Системы, не обладающие соответствующей защитой и не проверенные на наличие уязвимостей, очень уязвимы для хакерских атак

По оценкам NIST [7] (национального института стандартов и технологий США), общий годовой ущерб США от недостаточного обеспечения информационной безопасности составляет порядка 60 миллиардов долларов в год, причем ущерб в 20 миллиардов долларов может быть устранен при помощи специально разрабатываемых программных инструментов, обнаруживающих уязвимости в программном обеспечении на самых ранних стадиях жизненного цикла программного обеспечения.

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

Согласно последнему отчету компании Symantec[8] около 69% всех уязвимостей связаны с технологиями web-приложений, являющихся главным источником мест несанкционированного проникновения в компьютерную систему. Также в отчете отмечается изменение характера угроз. Организаторы атак постепенно отказываются от крупных, многоцелевых атак, направленных против периметра сети, и все чаще осуществляют небольшие, фокусированные атаки против клиентских систем. На общей ситуации безопасности будет сказываться появление новых типов угроз, таких как сети бот-модулей, настраиваемые модульные вредоносные коды, а также атаки, направленные против веб-приложений и веб-браузеров. Если раньше традиционные атаки организовывались из любопытства и из-за желания атакующего проявить собственное техническое мастерство, то теперь во многих случаях современные атаки объясняются стремлением получить выгоду. Вполне логично, что в 2005 году основной целью атак с использованием уязвимостей впервые стали предприятия финансовой сферы. Далее по количеству направленных против них атак идут образовательные и правительственные учреждения.

Следует отметить, что, согласно отчету Symantec, обнаруженная уязвимость в среднем остается не исправленной в течение 42 дней, которые могут быть использованы злоумышленниками для взлома системы.

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

• Исследование проблемной области, существующих подходов и инструментов статического обнаружения уязвимостей.

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

• Обоснование корректности и применимости разработанной методики для анализа реальных программ на языке Си.

• Разработка на базе методики статического анализатора, позволяющего проводить анализ программ промышленных масштабов.

Основные результаты. Диссертационная работа содержит ряд результатов, обладающих научной новизной:

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

2. Разработан и обоснован многофазный алгоритм высокоточного обнаружения уязвимостей в исходном коде программ.

3. На основе теоретических исследований разработана программная система обнаружения уязвимостей, применимая к программам промышленных масштабов на языке Си.

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

Практическая ценность работы.

Разработан инструмент «Интегрированная среда поиска уязвимостей в исходном коде программ на языке Си», базирующаяся на представленной в диссертационной работе методике. Инструмент позволяет в полностью автоматическом режиме осуществлять анализ исходного текста программы и обнаруживать уязвимости двух типов: «переполнение буфера» и «форматная строка».

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

Основные результаты работы опубликованы в статьях [1-6] и обсуждались на следующих конференциях, семинарах и выставках:

1. Конференция «Технологии Майкрософт в теории и практике программирования», Москва, март 4-5,2004.

2. Международная конференция «Programming Languages and Compilers», JIac-Berac, июнь 27-30,2005.

3. Международная конференция «Информационная безопасность-2005», Таганрог, июль 4-8,2005.

4. Международная конференция «Информационная безопасность-2006», Таганрог, июль 3-7,2006.

5. Конференция «Тихоновские чтения 2005», Москва, ВМиК МГУ им. М.В.Ломоносова, октябрь 24-28,2005.

6. Конференция «Тихоновские чтения 2006», Москва, ВМиК МГУ им. М.В.Ломоносова, октябрь 24-27,2006.

7. Научно-технические семинары ИСП РАН и ВМиК МГУ им. М.В. Ломоносова.

8. Международная выставка «CeBit-2006», Ганновер, март 9-15,2006.

Краткое содержание работы.

Диссертация состоит из введения, шести разделов и заключения. Список источников насчитывает 86 наименований. Диссертация содержит 3 таблицы и 20 рисунков.

Похожие диссертационные работы по специальности «Математическое и программное обеспечение вычислительных машин, комплексов и компьютерных сетей», 05.13.11 шифр ВАК

Заключение диссертации по теме «Математическое и программное обеспечение вычислительных машин, комплексов и компьютерных сетей», Маликов, Олег Рустэмович

Основные результаты диссертационной работы опубликованы в [1]-[6].

На базе описанной методики по контракту с Федеральным агентством по науке и инновациям РФ был разработан инструмент обнаружения уязвимостей, который был представлен на выставке CeBit-2006[64], проходившей в г. Ганновере в марте 2006-го года.

Разработанный на базе описанной в диссертационной работе методики инструмент был внедрен в Институте системного программирования Российской академии наук и на факультете ВМиК МГУ им. Ломоносова, в будущем предполагается осуществить внедрение в Научно-исследовательском вычислительном центре при МГУ им. М.В. Ломоносова.

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

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

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

• Расширение методики за счет использования пользовательских аннотаций исходного текста программы.

• Реализация специальных алгоритмов подкачки, позволяющих проводить анализ больших программ при ограниченной оперативной памяти.

Заключение

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

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

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

2. Разработан и обоснован многофазный алгоритм высокоточного обнаружения уязвимостей в исходном коде программ.

3. На основе теоретических исследований разработана программная система обнаружения уязвимостей, применимая к программам промышленных масштабов на языке Си.

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

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

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

• Неинициализированный указатель

Средняя доля истинных предупреждений в этом случае составила около 53% (Таблица 3).

Список литературы диссертационного исследования кандидат физико-математических наук Маликов, Олег Рустэмович, 2006 год

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

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

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

4. Oleg Malikov, Andrey Belevantsev, Using Data Flow Analysis for Detecting Security Vulnerabilities, PLC'05: Proceedings of the International Conference on Programming Languages and Compilers, 2005

5. Маликов O.P., Белеванцев A.A., Автоматическое обнаружение уязвимостей в программах, Материалы конференции «Технологии Майкрософт в теории и практике программирования», Москва, 2004

6. Гайсарян С.С., Чернов А.В., Белеванцев А.А., Маликов О.Р., Мельник Д.М., Меньшикова А.В., О некоторых задачах анализа и трансформации программ, Труды ИСП РАН, №5, с.7-41,2004

7. National Institute of Standards and Technology, The Economic Impacts of the Inadequate Infrastructure for Software Testing, May, 2002, http://www.nist.gov/director/prog-ofc/report02-3.pdf

8. Symantec, Symantec Internet Security Threat Report, Volume IX, March, 2006, httп://www.symantec.com/enteфrise/threatreport/index.isp

9. Чернов A.B., Интегрированная инструментальная среда Poirot для изучения методов маскировки программ. Препринт Института системного программирования РАН. ИСП РАН, 2003

10. The IRE Home Page, http://www.ispras.ru/groups/ctt/ire.html

11. Steve Bellovin, Buffer Overflows and Remote Root Exploits, Personal Communications, October, 1999

12. Колищак А., Атаки на переполнение буфера, ноябрь, 1999, http://securitv.nnov.ru/articles/bo.asp

13. Tim Newsham, Format String Attacks, September, 2000, http://www.thenewsh.com/~newsham/format-string-attacks.pdf

14. David Wheeler, Flawfinder Home Page, http://www.dwheeler.com/flawfinder/

15. J. Viega, J.T. Bloch, T. Kohno, and G. McGraw, ITS4: A Static Vulnerability Scanner for С and С++ Code, In Proceedings of the 16th Annual Computer Security Applications Conference, December, 2000

16. RATS checker, http://www.securesoftware.com/downloadrats.htm

17. PScan Home Page, http://www.striker.ottawa.on.ca/~aland/pscan/

18. Umesh Shankar, Kunal Talwar, Jeffrey S. Foster, and David Wagner, Detecting Format String Vulnerabilities with Type Qualifiers, In Proceedings of the 10th Usenix Security Symposium, Washington, D.C., August, 2001

19. The Perl Directory, http://www.perl.org

20. J. S. Foster, R. Johnson, J. Kodumal, T. Terauchi, U. Shankar, K. Talwar, D. Wagner, A. Aiken, M. Elsman, and C. Harrelson, Cqual: A tool for adding type qualifiers to C, http://www.cs.umd.edu/~jfoster/cqual/, 2003

21. N. Dor, M. Rodeh, and M. Sagiv, Cleanness checking of string manipulations in С programs via integer analysis, In Static Analysis Symposium,volume 2126 of Lecture Notes in Computer Science, pages 194--212. Springer Verlag, June 2001

22. D. Wagner, J. S. Foster, E. A. Brewer, and A. Aiken, A First Step Towards Automated Detection of Buffer Overrun Vulnerabilities, In Proceedings of 7th Network and Distributed System Security Symposium, February, 2000

23. BOON Home Page, http://www.cs.berkeley.edu/~daw/boon/

24. Uno Tool Synopsis, http://spinroot.com/uno/

25. Gerard J.Holzmann, UNO: Static Source Code Checking for User-Defined Properties, in Proc. 6th World Conference on Integrated Design and Process Technology (IDPT2002), 26-30 June 2002, Pasadena, CA

26. D. Larochelle and D. Evans, Statically detecting likely buffer overflow vulnerabilities, In USENIX Security Symposium, pages 177-190,2001

27. Splint Home Page, http://lclint.cs.virginia.edu/

28. W. R. Bush, J. D. Pincus, and D. J. Sielaff, A static analyzer for finding dynamic programming errors, In Proceedings of Software Practice and Experience, pages 775-802,2000

29. A. Milanova. Precise and Practical Flow Analysis of Object-Oriented Software. PhD thesis, Rutgers University, Available as Techical Report DCS-TR-539, August, 2003

30. J. B. Kam and J. D. Ullman, Monotone data flow analysis frameworks, Acta Informatica, vol. 7, pp. 305-317,1977, Springer-Verlag

31. Flexelint static checker, http://www.gimpel.com/html/products.htm

32. Coverity: Automated Error Prevention and Source Code Analysis, http://www.coverity.com

33. S. Muchnick. Advanced Compiler Design and Implementation. Morgan Kaufmann Publishers, 1997,3rd edition

34. Carl D. Offner. Notes on Graph Algorithms Used in Optimizing Compilers, http://www.cs.umb.edu/~offner/files/flowgraph.ps

35. Crispin Cowan. StackGuard Mechanism: Emsi's Vulnerability. http://www.immunix.org/StackGuard/emsivuln.html, November 1999

36. Bulba and Kil3r. Bypassing StackGuard and StackShield. Phrack Magazine Volume 10, Issue 56 http://www.phrack.org/phrack/56/p56-0x05, May 2000

37. Richarte, G. Four different tricks to bypass stackshield and stackguard protection, http://www.c0rest.c0m/f1les/f1les/l 1/StackguardPaper.pdf, June 2002

38. Cowan, C., Barringer, M., Beattie, S., Kroah-Hartman, G., Frantzen, M., and Lokier, J. Formatguard: Automatic Protection from Printf Format String Vulnerabilities. USENIX Security Symposium, pp. 191--199, Washington, DC, August 2001

39. J. Seward. Valgrind, an open-source memory debugger for x86gnu /linux. In http://valgrind.kde.org/, 2004

40. Julian Seward and Nicholas Nethercote. Using Valgrind to detect undefined value errors with bit-precision. In USENIX Annual Technical Conference, Anaheim, CA, April 2005

41. Valgrind Developers: Valgrind. Web page at http://valgrind.org

42. Gelato ICE (Itanium Conference and Expo), April 2006, http://www.gelato.org/pdf/apr2006/gelato ICE06apr pin kampermanintel.pdf

43. Trusted Computer System Evaluation Criteria (TCSEC), US DoD 5200.28-STD, 1983

44. Palm OS home page, http://www.palmsource.com/palmos/

45. MS-DOS Reference, http://www.nukesoft.co.uk/msdos/

46. RACF, http://www-03.ibm.com/servers/eserver/zseries/zos/racf/

47. The UNIX System, http://www.unix.org/

48. HP OpenVMS Systems Site, http://www.hp.com/go/openvms/

49. IBM System i operating systems i5/0S, http://www-03.ibm.eom/systems/i/os/i5os/

50. Microsoft TechNet: Windows NT Server 4.0, http://www.microsoft.com/technet/archive/winntas/default.mspx?mfr=true

51. Novell NetWare, http://www.novell.com/products/netware/

52. Multics OS, http://www.multicians.org/

53. DigitalNet Solutions, http://www.digitalnet.com/solutions/informationassurance/xts400 trusted sys.htm

54. SGI-Products: IRIX http://www.sgi.com/products/software/irix/

55. Lawrie Brown, Trusted Computer Systems, http://williamstallings.com/Extras/Securitv-Notes/lectures/trusted.html

56. ISO/IEC 9899/1999, http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=17782

57. GNU General Public License, http://www.gnu.org/licenses/gpl.html

58. Solaris Enterprise System, http://www.sun.com/software/solaris/index.isp

59. Stack Checking GNU Compiler Collection (GCC) Internals, http://gcc.gnu.org/onlinedocs/gccint/Stack-Checking.html

60. Stack Smashing Protection GNU Compiler Collection (GCC) Internals, http://gcc.gnu.org/onlinedocs/gccint/Stack-Smashing-Protection.html

61. CeBIT Homepage, http://www.cebit.de

62. D. Avots, M. Dalton, V. B. Livshits, and M. S. Lam. Improving software security with а С pointer analysis. In ICSE '05: Proceedings of the 27th International Conference on Software Engineering. ACM Press, 2005

63. Antoine Mine, Field-Sensitive Value Analysis of Embedded С Programs with Union Types and Pointer Arithmetic, Proceedings of LCTES'06, June 2006

64. Kildall, G. A., Global expression optimization during compilation, Proceedings ACM Conference on Principles of Programming Languages, Boston (Mass.), pp. 194-206, October 1973

65. W. Landi. Undecidability of static analysis. ACM Letters on Programming Languages and Systems, l(4):323-337, December 1992

66. G. Ramalingam. The undecidability of aliasing. ACM Transactions on Programming Languages and Systems, 16(5): 1467-1471, September 1994

67. L. 0. Andersen. Program Analysis and Specialization for the С Programming Language. PhD thesis, DIKU, University of Copenhagen, May 1994

68. M. Burke, P. Carini, J.-D. Choi, and M. Hind. Flow-insensitive interprocedural alias analysis in the presence of pointers. Lecture Notes in Computer Science, 892, pages 234-250. Springer-Verlag, 1995

69. J.-D. Choi, M. Burke, and P. Carini. Efficient flow-sensitive interprocedural computation of pointer-induced aliases and side effects. In 20th Annual ACM SIGACT-SIGPLAN Symposium on the Principles of Programming Languages, pages 232-245, January 1993

70. M. Hind, М. Burke, P. Carini, and J.-D. Choi. Interprocedural pointer alias analysis. ACM Transactions on Programming Languages and Systems, 21(4):848-894, July 1999

71. B. Steensgaard. Points-to analysis in almost linear time. In 23rd Annual ACM SIGACT-SIGPLAN Symposium on the Principles of Programming Languages, pages 32-41, January 1996

72. T. J. Marlowe, B. G. Ryder, and M. G. Burke. Defining flow sensitivity in data flow problems. Technical Report RC20138, IBM T. J. Watson Research Center, July 1995

73. M. Shapiro and S. Horwitz. Fast and accurate flow-insensitive point-to analysis. In 24th Annual ACMSIGACT-SIGPLAN Symposium on the Principles of Programming Languages, pages 1-14, January 1997

74. P. A. Stocks, B. G. Ryder, W. A. Landi, and S. Zhang. Comparing flow and context sensitivity on the modifications-side-effects problem. In International Symposium on Software Testing and Analysis, pages 21-31, March 1998

75. A. Diwan, K. S. McKinley, and J. E. B. Moss. Type-based alias analysis. In SIGPLAN '98 Conference on Programming Language Design and Implementation, pages 106-117, June 1998

76. D. Liang and M. J. Harrold. Efficient points-to analysis for whole-program analysis. In 0. Nierstrasz and M. Lemoine, editors, Lecture Notes in Computer Science, 1687, pages 199-215. Springer-Verlag, September 1999

77. S. Zhang, B. G. Ryder, and W. Landi. Program decomposition for pointer aliasing: A step toward practical analyses. In 4th Symposium on the Foundations of Software Engineering, pages 81-92, October 1996

78. J. D. Morgenthaler. Static Analysis for a Software Transformation Tool. PhD thesis, UCSD, August 1997

79. D. С. Atkinson and W. G. Griswold. Effective whole-program analysis in the presence of pointers. In ACM SIGSOFT 1998 Symposium on the Foundations of Software Engineering, pages 131-142, November 1998

80. P. Cousot and R. Cousot, Static determination of dynamic properties of programs, In Proceedings of the Second International Symposium on Programming, pages 106—130, Dunod, Paris, France, 1976

81. M. Emami, R. Ghiya, and L. Hendren, Context-Sensitive Interprocedural Points-to Analysis in the Presence of Function Pointers, In Proceedings of the SIGPLAN '94 Conference on Program Language Design and Implementation, Orlando, US, 1994

82. E. Haugh and M. Bishop. Testing С Programs for Buffer Overflow Vulnerabilities, In Proceedings of the Network and Distributed System Security Symposium, San Diego, CA, February, 2003

83. Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman. Compilers: Principles, Techniques, and Tools. Addison-Wesley, 1986.

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