Электронная библиотека диссертаций и авторефератов России
dslib.net
Библиотека диссертаций
Навигация
Каталог диссертаций России
Англоязычные диссертации
Диссертации бесплатно
Предстоящие защиты
Рецензии на автореферат
Отчисления авторам
Мой кабинет
Заказы: забрать, оплатить
Мой личный счет
Мой профиль
Мой авторский профиль
Подписки на рассылки



расширенный поиск

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

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

Диссертация - 480 руб., доставка 10 минут, круглосуточно, без выходных и праздников

Автореферат - бесплатно, доставка 10 минут, круглосуточно, без выходных и праздников

Маликов Олег Рустэмович. Исследование и разработка методики автоматического обнаружения уязвимостей в исходном коде программ на языке Си : дис. ... канд. физ.-мат. наук : 05.13.11 Москва, 2006 101 с. РГБ ОД, 61:07-1/513

Содержание к диссертации

Введение 3

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

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

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

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

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

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

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

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

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

  3. Атрибуты АОП 41

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

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

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

4ЛЛ Представление функции 53

  1. Анализ циклов 59

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

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

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

4Л.6 Инструкции увеличения счетчика в цикле 67

4Л.7 Условные переходы 68

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

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

4Л.10 Остальные инструкции 69

4Л.11 Входной и выходной контексты функции 70

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

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

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

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

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

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

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

  1. Реализация методов , 86

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

Заключение л 92

Список литературы 94

Введение к работе

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

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

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

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

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

Подкласс CL Требуется наличие избирательного разграничения

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

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

доступна в дальнейшем ни одному субъекту, VMS[51], IBM

OS/400[52](c некоторого времени называется 15/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. ОС должна удовлетворять требованиям подкласса

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

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

82. Должны иметься средства восстановления после сбоев без
нарушения защиты. Для произвольного управления доступом
должны использоваться списки с указанием разрешенных
режимов. Единственной известной па данный момент ОС
подкласса ВЗ является 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-м году студентом Карнсльского университета Робертом Моррисом была написана программа, использующая уязвимость типа «переполнение буфера» в программном коде сервиса f ingerd операционной системы 4.3BSD. Вирус использовал данную уязвимость для получения контроля над атакуемым компьютером, сканирования локальной сети и распространения своего тела на другие компьютеры, на которых имелась данная уязвимость.

Программный код системного демона f ingerd содержал в себе примерно такие же строки, как и изображенные на рисунке 1.

void 1 () {

char buf[512];

gets(buf); }

Рисунок L Примерный фрагмент кода демона f ingerd

Библиотечная функция 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»,
Лас-Вегас, июнь 27-30, 2005.

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

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

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

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

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

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

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

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

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