автореферат диссертации по информатике, вычислительной технике и управлению, 05.13.11, диссертация на тему:Методы и средства противодействия атакам на компьютерные системы, основанным на использовании уязвимостей программного кода

кандидата технических наук
Гуров, Дмитрий Валерьевич
город
Москва
год
2012
специальность ВАК РФ
05.13.11
цена
450 рублей
Диссертация по информатике, вычислительной технике и управлению на тему «Методы и средства противодействия атакам на компьютерные системы, основанным на использовании уязвимостей программного кода»

Автореферат диссертации по теме "Методы и средства противодействия атакам на компьютерные системы, основанным на использовании уязвимостей программного кода"

На правах рукописи

005015978

ГУРОВ ДМИТРИЙ ВАЛЕРЬЕВИЧ

МЕТОДЫ И СРЕДСТВА ПРОТИВОДЕЙСТВИЯ АТАКАМ

НА КОМПЬЮТЕРНЫЕ СИСТЕМЫ, ОСНОВАННЫМ НА ИСПОЛЬЗОВАНИИ УЯЗВИМОСТЕЙ ПРОГРАММНОГО КОДА

Специальности

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

Автореферат диссертации на соискание ученой степени кандидата технических наук

Автор:

Москва - 2012

005015978

Работа выполнена в Национальном исследовательском ядерном университете «МИФИ» (НИЯУ МИФИ)

Научный руководитель: доктор технических наук, профессор

Иванов Михаил Александрович

Официальные оппоненты:

д.т.н., профессор Минаев Владимир Александрович, проректор по инновационно-образовательной деятельности НОУ ВПО Российский новый университет,

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

Ведущая организация: ОАО "Концерн "Системпром".

Защита состоится «30» мая 2012 г. в 16 час. 30 мин. на заседании диссертационного совета Д 212.130.03 при Национальном исследовательском ядерном университете «МИФИ» по адресу: г. Москва, Каширское ш., Д.31.

Телефоны для справок: +7 (499) 324-95-26, +7 (499) 324-73-34.

С диссертацией можно ознакомиться в библиотеке Национального исследовательского ядерного университета «МИФИ».

Отзывы в двух экземплярах, заверенные печатью организации, просьба направлять по адресу: 115409 г. Москва, Каширское ш., 31, диссертационные советы НИЯУ МИФИ, тел. +7 (499) 324-95-26.

Автореферат разослан «3 » 2012 г.

Ученый секретарь диссертационного совета

Леонова Н.М

ОБЩАЯ ХАРАКТЕРИСТИКА РАБОТЫ

Актуальность темы

В настоящее время информатизация проникла практически во все сферы человеческой деятельности. Однако, уделяя большое внимание новым функциональным возможностям средств хранения и обработки информации, разработчики часто упускают из виду вопросы защищённости своих продуктов. Уязвимость программного кода, умышленно или чаще случайно оставленная разработчиком, может стать причиной глобальных электронных «эпидемий», наносящих ощутимый финансовый ущерб, а при определённых обстоятельствах способна даже привести к разрушению материальных объектов и гибели людей. Понятие уязвимости (vulnerability) можно определить как свойство компьютерной системы, наличие которого может позволить злоумышленнику нанести ущерб интересам владельца системы, иначе говоря, привести к реализации угрозы информационной безопасности (ИБ). Уязвимость программного кода -это особенность написания исходного кода программы, в результате наличия которой злоумышленник, используя специальным образом подготовленные входные данные или другие параметры программного окружения, может заставить уязвимую программу работать по алгоритму, отличному от заложенного программистом. Имеющиеся в настоящее время средства противодействия вредоносным программам не всегда могут справиться с решением своей задачи, главным образом потому, что нацелены на обнаружение и устранение последствий функционирования уже известных вредоносных программ и блокирование предварительно обнаруженных уязвимостей. Для повышения защищённости приложений требуется одновременно идти несколькими путями: искать универсальные признаки групп уязвимостей с целью их эффективного обнаружения, разрабатывать превентивные меры противодействия вредоносным программам, а также развивать системный подход к обучению новых разработчиков, способных уже на этапе написания программы обнаруживать и устранять содержащиеся в ней уязвимости.

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

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

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

Безопасность приложения должна закладываться на этапе написания исходного кода. Для этого необходима подготовка новых разработчиков, обладающих не только навыками программирования, но и хорошо знакомых с вопросами разработки защищенного ПО.

О необходимости подготовки таких специалистов говорится в Федеральной целевой программе развития образования на 2011 - 2015 гг., где ставится задача подготовки кадров по приоритетным направлениям модернизации и технологического развития экономики России, в числе которых выделяются стратегические компьютерные технологии и программное обеспечение. Также в Доктрине информационной безопасности среди основных задач выделяется создание единой системы подготовки кадров в области информационной безопасности и информационных технологий.

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

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

Значительный вклад в исследование вопросов безопасного программирования, методов выявления уязвимостей внесли такие ученые как Н. Данжани (Nitesh Dhanjani), Дж. Кларк (Justin Clarke), Дж. С. Фостер (James foster), M. Мейсер (Matt Messier), Дж. Bera (John Viega), M. Ховард (Michael Howard), Д. Лебланк (David LeBlanc), Дж. Эриксон (Jon Erickson), Мэтг Бишоп (Matt Bishop), а также специалисты фирм Лаборатория Касперского, Symantec и других.

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

Для достижения данной цели были решены следующие задачи:

- проведён анализ и разработана классификация существующих уяз-вимостей ПО;

- исследованы наиболее распространённые уязвимости ПО типа Buffer overflow (Stack smashing и Heap overflow), Race condition, Integer overflow (Widthness overflow, Arithmetic overflow, Signedness errors), Format string error, создающие предпосылки для проведения атак, в том числе основанных на внедрении вредоносного кода;

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

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

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

Объектом исследования является системное и прикладное ПО компьютерных систем.

Предмет исследования — уязвимости программного кода, создающие предпосылки для проведения атак на компьютерные системы, методы противодействия атакам на компьютерные системы.

Методы исследования. При решении поставленных задач использовались методы теории вероятностей и математической статистики, методы имитационного моделирования, методы модульного и объектно-ориентированного программирования, теория надёжности ПО, методы принятия решений.

Работа соответствует пунктам 1, 6, 14, 15 специальности 05.13.11 и пунктам 3, 8 специальности 05.13.19.

Научная новизна результатов работы заключается в следующем.

1) Разработана классификация уязвимостей ПО, создающая предпосылки для создания наиболее эффективных методов противодействия выявленным типам уязвимостей.

2) Разработаны модель нарушителя и модель атаки на компьютерную систему, основанной на использовании уязвимостей программного кода;

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

4) Предложен аппаратный метод защиты от эксплойтов, основанных на вставке вредоносного кода в программу; разработана модель рандоми-зационного генератора псевдослучайных чисел (ГПСЧ);

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

Практическая значимость результатов работы заключается в следующем.

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

2) Разработана методика обучения безопасному программированию, поддержанная учебно-методическим пособием, электронными средствами обучения и системой тестирования знаний.

3) Впервые проведен анализ защищенности отечественного высокопроизводительного ВК «Эльбрус-ЗМ1».

На защиту выносятся:

- классификация уязвимостей ПО;

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

- аппаратный метод повышения защищённости вычислительной системы от атак, основанных на внедрении вредоносного кода и разрушении стека;

- метод оценки количества уязвимостей, остающихся в программе после этапа её тестирования на предмет наличия уязвимостей;

- результаты исследования защищенности отечественного высокопроизводительного ВК «Эльбрус-ЗМ1»;

- методы повышения защищённости вычислительных систем, работающих в режиме двоичного транслятора

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

Апробация работы. Основные результаты работы докладывались и обсуждались на Научных сессиях МИФИ 2003, 2004, 2008 гг. и НИЯУ МИФИ 2010 г., выставках-конференциях «Телекоммуникации и новые информационные технологии в образовании» (МИФИ, 2004 и 2006 гг.), международных телекоммуникационных конференциях студентов и молодых ученых "МОЛОДЕЖЬ И НАУКА" (МИФИ, 2005, 2010, 2012 гг.), Международном симпозиуме «Образование через науку», посвященную 1756

летаю МГТУ им. Н.Э. Баумана (2005 г.), Первой Международной научно-практической конференции «Современные информационные технологии и ИТ-образование» (МГУ, 2005 г.), Международном научно-техническом семинаре «Современные технологии и задачи управления, автоматики и обработки информации» (Алушта, 2006 г.), Всероссийской научно-практической конференции с международным участием «Информационные технологии в обеспечении нового качества высшего образования» (Москва, 2010 г.), 54-й научной конференции МФТИ - Всероссийской молодёжной научной конференции с международным участием «Проблемы фундаментальных и прикладных, естественных и технических наук в современном информационном обществе» (2011 г.), XIX Всероссийской научной конференции "Проблемы информационной безопасности в системе высшей школы" (НИЯУ МИФИ, 2012 г.), научном семинаре ЗАО МЦСТ (2010 г.). Система тестирования «Исток» экспонировалась на Всероссийской выставке научно-технического творчества молодежи НТТМ-2006.

Реализация результатов работы.

Разработанная классификация уязвимостей была использована при анализе защищённости ВК «Эльбрус-ЗМ1» (ЗАО МЦСТ). Разработанная методика обучения безопасному программированию внедрена на кафедре «Компьютерные системы и технологии» НИЯУ МИФИ.

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

Основные научные результаты работы были получены в процессе выполнения НИР в рамках Федеральной целевой программы «Научные и научно-педагогические кадры инновационной России» на 2009-2012 гг.

За работы в области создания средств учебного назначения автор в составе коллектива разработчиков награжден Дипломом Всероссийской выставки научно-технического творчества молодежи НТТМ-2006 и тремя Грамотами выставок-конференций «Телекоммуникации и новые технологии в образовании», проводимых в рамках ежегодных Научных сессий НИЯУ МИФИ.

Практическое использование результатов диссертации подтверждено тремя актами о внедрении.

Публпкацин.

Результаты диссертации опубликованы в 22-х печатных работах, в том числе трёх статьях в журналах, входящих в Перечень ведущих рецензируемых научных журналов и изданий, рекомендованных ВАК. 7 работ

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

Структура и объем работы. Работа состоит из введения, четырех глав, заключения, списка использованных источников из 135 наименований и приложения. Общий объем работы составляет 189 страниц и включает 36 рисунков и 22 таблицы.

ОСНОВНОЕ СОДЕРЖАНИЕ РАБОТЫ

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

Глава 1 диссертации посвящена анализу современного состояния проблемы уязвимостей компьютерных систем. Рассматриваются существующие в настоящее время методы и средства противодействия таким уязви-мостям. Обосновывается актуальность разработки средств противодействия РПВ, использующим уязвимости ПО.

Проведённый анализ сообщений, в которых говорится об успешных хакерских атаках или выпущенных программных «заплатках» позволяет заключить, что увеличивается как количество отдельных атак, так и ущерб, наносимый каждой из них. Так, относительно недавно заявил о себе сетевой червь 8й1хпе1, функционирование которого привело к физическому разрушению оборудования, задействованного в иранской ядерной программе. Если до БШхпе! можно было считать, что разработкой вирусов и других РПВ занимались, в основном, любители, то этот червь стал без преувеличения настоящим кибероружием, положившим начало новому этапу в развитии РПВ.

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

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

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

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

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

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

Таким образом, необходимо:

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

- разработать набор правил, позволяющих реализовывать распространённые операции безопасным образом;

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

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

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

9

Splint, ITS4 и др. Недостатками сканеров являются высокие требования к квалификации программиста при исправлении найденных уязвимых мест, а также длительное время работы, т.к. процесс итерационен. Динамические анализаторы работают путём многократного запуска тестируемого приложения с автоматически формируемыми входными параметрами, которые выбираются по принципу близости к пограничным значениями (большая длина, максимально возможное целое и т.п.) Такая технология получила название Fuzzing и чаще применяется для web-приложений. К динамическим анализаторам относятся приложения Sharefuzz, OWASP JBroFuzz, Bunny the Fuzzer и др.

Для повышения защищённости приложения используются надстройки к компилятору. При компиляции программы опасные функции могут заменяться на безопасные «обёртки», которые проверяют корректность входных параметров, могут использоваться «сторожевые байты» для выявления факта записи за пределы выделенной памяти, может быть использовано перемешивание данных уязвимой функции для более безопасного их размещения. Наиболее распространёнными надстройками к компилятору являются приложения Stackguard, ProPolice, StackShield, PointGuard, FormatGuard, Libformat и др. Недостатками в работе надстроек к компиляторам являются требование доступности исходного кода для безопасной компиляции, снижение быстродействия программы, а также требования по расстановке специальных символов в программе для возможности проверки компилятором замысла разработчика.

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

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

Глава 2 работы посвящена исследованию уязвимостей программного кода. В ходе работы была составлена ЕЫ-модель эксплуатации уязвимости, показанная на рис. 1.

Рис. 1. ЕЯ-модель процесса эксплуатации уязвимостей

На основании информации о причинах возникновения уязвимостей, встречающихся в программах, была составлена их классификация по следующим параметрам (рис. 2 - 6): модифицируемой сущности; последствиям атаки; эффективным методам обнаружения; механизму возникновения и размещению вредоносной сущности.

Систематизация уязвимостей позволяет:

1) с высокой достоверностью обнаруживать их в исходных кодах;

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

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

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

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

Рис. 2. Классификация уязвимостей по модифицируемой сущности

Рис. 3. Классификация уязвимостей по последствиям атаки с использованием уязвимости

Если представить множество всех уязвимых функций как Р = {/\,/г> ■■'/»}> а всех уязвимостей, к которым может привести использование этих функций как V = {V,, у2,..., , то определив множество вероятностей, с которыми функция £ может привести к появлению уязвимости V] как Р = {р/} (г = 1, ..., л, у" = 1, ..., т), можно определить

п т

уровень опасности той или иной программы как (К,^ р/п), где К, -

/=1 ' м

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

Уязвимости исходного кода

Уязвимости компилируемых языков

Переполнение буфера

Переполнение целого

Паремппсь л о калыме данных

Перемлиеь системных денных

На куче

Состязание условий

Схеме геНо иь.о

ВнедрСннмй код е переменим! окружения

Перезапись таблицы виртуальных фумц»1и

Пвре«пигь лояельмых данных

Перезапись адрес* фунц^и ■ ОРТ

Зелие» большего чист

• мленькув _Переменную

Переполнение 1 результате

Уязвимости интерпретируемых языков

Формат строки

Чтение байга паияти

Запись бейта памяти

С ост* »а ни* при доступа к фейлу

Состямиия сипчалев

Предмшуемме ним временных файлов

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

Подялючеиие внешних _ файлов

Использование глобалы**х ___переменмь«

Внедрение команд (вЬ*и1, _РНР)

Межеайтоеый скрипт инг

Переполнение е »нехе

Рис. 4. Классификация уязвимостей по механизму возникновения

Рис. 5. Классификация уязвимостей по размещению вредоносной сущности

Рис. 6. Классификация уязвимостей по эффективному методу обнаружения

Предлагаемый подход позволяет практически полностью устранить ряд уязвимых функций из исходного кода, в результате вероятность, что они приведут к появлению уязвимости, становится равной нулю. Тогда повышение защищённости приложения можно оценить как отношение уровня опасности программы до (£>) и после (£)') применения методики безопасного программирования. Проведённые исследования показали, что оно составит около 20%.

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

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

конечном счете приведет к более обоснованным выводам.

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

где к, - количество оставшихся «собственных» уязвимоетей /-го типа (то есть существовавших в программе до внесения дополнительных уязвимоетей);

sí — количество вносимых уязвимоетей ¡-го типа;

V, — количество обнаруженных уязвимоетей /-го типа из числа внесённых;

л, — количество обнаруженных уязвимоетей /-го типа из числа «собственных».

Мера достоверности рассчитанного количества оставшихся уязвимоетей может быть определена в общем случае (если удалось обнаружить не все из внесённых уязвимоетей) по формуле

где у, - количество обнаруженных в ходе тестирования уязвимоетей /-го типа из числа «собственных» Ц, <3^.

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

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

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

п,

1,

при я, >Аг, при л, <к„

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

Таблица замен

Рис. 7. Схема формирования таблицы замен

Проведена оценка временных и аппаратных затрат, связанных с реализацией предложенного метода. Показано, что для реализации динамической рандомизации потребуется дополнительный объём памяти около 64К, при этом замедление скорости работы составит примерно 6%.

Проведена оценка трудоемкости реализации вариантов компрометации системы, построенной с применением предлагаемых аппаратных модификаций процессора. Таких вариантов три: считывание сегмента кода из оперативной памяти, где он хранится в преобразованном виде, после чего его можно сравнить с исходным кодом, затем подбор таблицы замен методом грубой силы и, наконец, восстановление таблицы замен с помощью статистического анализа кода преобразованной программы. Первый способ нереализуем ввиду того, что из другого процесса память сегмента кода недоступна (даже на уровне привилегий 0). Вероятность подбора кодов 9 команд (именно столько используется в БЬеП-коде, который вызывает командную строку) при реализации второго способа составляет ~ 10'16. Наконец, третьему способу противопоставляется особенность формата команд х86, который предполагает различную длину каждой команды: не восстановив первую, невозможно найти начало следующей, и, следовательно, не представляется возможным собрать статистику по частоте появления команд.

Проведена оценка степени перемешивания системы команд в зависимости от шага перемешивания в соответствии с предложенным алгоритмом. При этом было выявлено, что степень перемешивания в 98,5% является практически достижимым максимумом. При достижении степени переме-

шивания в 97,5% дальнейшее её увеличение требует существенного повышения числа шагов перемешивания.

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

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

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

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

При помещении в стек системные данные рандомизируются и становятся недоступны для чтения и предсказуемого изменения.

Выделены критерии эффективности разработанной системы. Они представлены в таблице 1.

Для выявления наиболее приоритетных критериев была использована процедура, принятая в методе анализа иерархий. При этом составляется матрица А парных сравнений выбранных критериев: А = [a¡j }, где /, j = l,...,N,nN— число критериев (в рассматриваемом случае семь). Сравнение осуществляется по 9-ти бальной шкале, где оценки проставляются от 1 до 9 таким образом, что 1 означает равную предпочтительность двух критериев (два критерия одинаково значимы), ..а 9 - один из критериев очевидно и неоспоримо значимее другого.

Таблица 1. Критерии эффективности предложенного метода рандомизации

Условное обозначение критерия Наименование критерия Содержательное описание критерия

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

к2 Снижение производительности системы Определяет, насколько велики накладные расходы (используемая память, время работы процессора)

к3 Объём защищаемого кода Система защищает только код пользовательских приложений, либо также защищает код системных библиотек и программ ядра

к» Сложность компрометации Определяет стойкость системы защиты

к5 Затраты на внедрение Определяются расходами на проектирование системы и стоимостью её реализации непосредственно на ЭВМ

к6 Объём дополнительного оборудования Поскольку все блоки и таблицы замен выполняются аппаратным способом, требуется дополнительные логические элементы на кристалле, обеспечивающую рандомизацию

Кп Требования к обслуживающему персоналу Определяет минимальный уровень квалификации, которым должен обладать персонал, использующий предлагаемую систему

Для определения вектора приоритетов выбранных критериев необходимо найти собственный вектор матрицы А. Расчёт компонентов собственного вектора происходит итеративно путём последовательного

19

возведения ¿матрицы парных сравнений в степени с вычислением по следующим формулам:

N 7=1

IV; =

0)

# N г=1/=1

Процесс расчета заканчивается, когда вьшолнено условие:

N шахф 1=1

,.Т-1

)<5

где "И^ - /-Й компонент вектора (1) для матрицы парных сравнений на шаге Г, а б - заданная точность вычислений.

В результате определения вектора приоритетов критериев эффективности были получены следующие веса для выбранных критериев (табл. 2):

Таблица 2. Веса критериев эффективности предложенного метода

Критерий Кг К2 к3 ки к5 к7

Вес 0,28 0,06 0,14 0,39 0,04 0,05 0,04

Таким образом, были выделены следующие наиболее важные критерии:

1) сложность компрометации системы защиты;

2) степень покрытия множества уязвимостей;

3) объём защищаемого кода (пользовательские программы, ядро и др.).

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

Показаны преимущества предложенного метода рандомизации по сравнению с другими системами.

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

Был выбран и обоснован метод подготовки таблиц замен, основанный на использовании ГПСЧ с ^-блоками в цепи обратной связи (М-Ж). Традицион-

но Ш^БЫ строятся на основе одного образующего многочлена. В работе проведено исследование вопросов реализации ГПСЧ, соответствующего двум образующим многочленам. Рассмотрены варианты реализации ГПСЧ по схемам Фибоначчи и Галуа. Выбранный вариант реализации генератора имеет следующие достоинства:

- наличие нелинейных функций обратной связи и выхода;

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

- сигналы с выходов ^-блоков не поступают в цепь обратной связи, иначе говоря, выходы стохастических сумматоров не доступны для анализа, а сигналы обратной связи ГПСЧ не проходят на выход.

Рассмотрен пример построения генератора д ля случая, когда в качестве образующих многочленов были взяты ф,(х) = х7 + х4 +1 и ф2(х) = х5 + х2 +1.

При таких значениях многочленов получаются следующие уравнения работы ГПСЧ, построенного по схеме Галуа

з, 5,6,

б2с+1 )=дшо,а(0), ои/(о=*(а(о, ас».

где — содержимое /-го регистра генератора в момент времени Я(А, В) результат стохастического преобразования, А - преобразуемое значение, В — параметр преобразования. Статистическое тестирование ГПСЧ по методике №БТ подтвердило обоснованность сделанного выбора.

Глава 4 содержит описание результатов исследования защищённости отечественного высокопроизводительного комплекса «Эльбрус-ЗМ1», выполненного с применением разработанной в диссертации классификации уязвимостей и методики безопасного программирования. На основании проведённого исследования были составлены рекомендации программистам для повышения защищённости разрабатываемого ПО.

Также было проведено исследование режима двоичного транслятора, в котором может работать «Эльбрус-ЗМ1». Даны рекомендации по повышению защищённости системы, работающей в этом режиме.

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

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

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

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

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

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

Программа для анализа:

integer overflow ^include <err.h> #include <stdio.h> ^include <stdlib.h> #indude <string.h>

char buf(266);

Строка редактирований;

. ¡void c*iecK_and_copylchar Impbuf. unsigned short ¡en)

Режим работки "Br* оцести*

printf("copying %d byteS\n". len): if (len > sizeof(buf) -1)

errx(1. "string too long"); strcpy(buf, tmpbut):

int main(int arge, char "argv(l) I

size_t len; char "tmpbuf:

if (arge != 2) {

iprintf(stderr, "usage: %s len\n". argv[0j); exit{1);

i

I en = atoif argvjl]);

==j

Рис. 8. Общий вид экранной формы электронного урока

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

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

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

ОСНОВНЫЕ РЕЗУЛЬТАТЫ РАБОТЫ

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

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

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

4) впервые проведён анализ защищённости отечественного высокопроизводительного вычислительного комплекса «Эльбрус-ЗМ1»; даны рекомендации по повышению защищённости ВК; разработаны тестовые модели РПВ, функционирующие в среде ВК «Элью-рус-ЗМ1»;

5) разработана методика безопасного программирования, позволяющая создавать программы, свободные от наиболее распространённых уязвимостей; описаны механизмы появления уязвимостей, даны примеры уязвимого и безопасного кода, принципы их использования РПВ, основные методы противодействия уязвимостям различных классов;

6) предложен метод оценки эффективности мероприятий по противодействию уязвимостям, основанный на использовании модели надежности ПО Миллса; метод позволяет оценить вероятное количество уязвимостей, остающихся в программе после этапа её тестирования;

7) разработана методика обучения безопасному программированию, нацеленная на увеличение компетенций обучаемых в области разработки защшцённого ПО; методика подкреплена учебно-методическим пособием, компьютерными средствами обучения и тестирования знаний.

СПИСОК ПУБЛИКАЦИЙ ПО ТЕМЕ ДИССЕРТАЦИИ

В журналах, рекомендованных ВАК, опубликованы следующие работы:

1. Гуров В.В., Гуров Д.В., Иванов М.А., Шустова Л.И. Технология безопасного программирования и особенности ее преподавания в вузе. -Дистанционное и виртуальное обучение, 09.2010. - С. 35-44.

2. Гуров Д.В. Применение аппаратного шифрования при работе со стеком для защиты от эксплойтов. - Безопасность информационных технологий, № 3, 2011. - С. 37-41.

3. Гуров Д.В., Иванов М.А. Динамическая рандомизация системы команд микропроцессора для защиты от эксплойтов. - Вестник Рязанского государственного радиотехнического университета. № 1 (выпуск 35) 2011 г.-С. 81-86.

Основные положения диссертации изложены также в следующих печатных трудах:

4. Разрушающие программные воздействия: Учебно-методическое пособие / Васильев Н.П., Вельмякина Е.В., Гуров Д.В. и др.; Под ред. М.А. Иванова. -М.: НИЯУ МИФИ, 2011. -328 с.

5. Гуров Д.В. Разработка электронных уроков для обучения специальным дисциплинам. — Современные проблемы информатизации в непроизводственной сфере и экономике: Сб. трудов. Вып. 10 / Под ред. д.т.н., проф. О.Я. Кравца. — Воронеж: Изд-во «Научная книга», 2005. — С. 37-38.

6. Гуров Д.В. Использование метода проверки логики результата при анализе ответа пользователя. - Научная сессия МИФИ-2005. Сборник научных трудов. - М.: МИФИ, 2005. Т. 14: Конференция "Молодежь и наука". Компьютерные науки. Информационные технологии. Экономика и управление. — С. 94-95.

7. Гуров В.В., Гуров Д.В., Кузнецова П.В., Михайлов Д.М. Использование компьютерных обучающих программ при обучении техническим дисциплинам. - Образование через науку. Сборник тезисов докладов Международного симпозиума " Образование через науку", посвященную 175-летию МГТУ им. Н.Э. Баумана. - М.: Изд. МГТУ им. Баумана, 2005. - С. 44-45.

8. Гуров Д.В. Разработка инструментальных средств подготовки и проведения электронного тестирования. - Сборник докладов Первой Международной научно-практической конференции. Под ред. проф. В.А. Сухомлина. -М.: МАКС Пресс, 2005. - С. 129-130.

9. Гуров Д.В., Кузнецова П.В., Михайлов Д.М. Контроль знаний через сеть Internet и оптимизация конструирования тестов. - Современные технологии и задачи управления, автоматики и обработки информации: Труды XV Международного научно-технического семинара. Сентябрь 2006 г., Алушта. - М.: МИФИ, 2006. - С. 178.

10. Гуров В.В., Гуров Д.В. Использование электронных образовательных ресурсов в учебном процессе технического вуза. — Труды Все-

российской научно-практической конференции с международным участием «Информационные технологии в обеспечении нового качества высшего образования» (14-15 апреля 2010 г., Москва). - М.: Исследовательский центр проблем качества подготовки специалистов, 2010. -С. 53-58.

11. Гуров Д.В. Анализ статистики обнаружения уязвимостей в продуктах семейства Microsoft Office. - Научная сессия НИЯУ МИФИ-2010. Конференция "Молодежь и наука". Компьютерные науки. Информационные технологии. - М.: НИЯУ МИФИ, 2010. - С. 193-194.

12. Гуров Д.В. Однобайтовое переполнение при использовании механизмов шлюзов. - Научная сессия НИЯУ МИФИ-2010. Аннотации докладов. В 3 тт. Т. 3. Информационно-телекоммуникационные системы. Проблемы информационной безопасности в системе высшей школы. Экономика, управление и нормативно-правовые вопросы высоких технологий. Инновационные образовательные технологии в Национальном исследовательском ядерном университете. М.: НИЯУ МИФИ, 2010.-С. 119.

13. Гуров В.В., Гуров Д.В. Оценка эффективности аппаратных методов защиты информации. - Труды 54-й конференции МФТИ «Проблемы фундаментальных и прикладных естественных и технических наук в современном информационном обществе» Информационные бизнес-системы. - М.: МФТИ, 2011. - С. 25-26.

14. Гуров Д.В. Программные средства обучения безопасному программированию. - XV Международная телекоммуникационная конференция молодых учёных и студентов «МОЛОДЁЖЬ И НАУКА». Тезисы докладов. В 3-х частях. Ч. 3. М.: НИЯУ МИФИ, 2012. - С. 18-19.

15. Гуров Д.В., Гуров В.В., Криводаев А.В., Матюшенков Н.В. Пакет компьютерных обучающих программ по курсу "Организация ЭВМ" -Свидетельство об официальной регистрации программы для ЭВМ №2007611495. Зарегистрировано в реестре программ для ЭВМ 10.04.2007.

16. Гуров В.В., Гуров Д.В., Кузнецова П.В., Михайлов Д.М. Программа «Интерактивная система тестирования на основе компьютерных технологий ИСТОК». - Свидетельство об официальной регистрации программы для ЭВМ №2006613218. Зарегистрировано в реестре программ для ЭВМ 13.09.2006.

Подписано в печать 17.04.2012 г.

Печать трафаретная Усл.п.л. -1,5 Заказ № 7209 Тираж: 110 экз. Типография «11-й ФОРМАТ» ИНН 7726330900 115230, Москва, Варшавское ш., 36 (499) 788-78-56 www.autoreferat.ru

Текст работы Гуров, Дмитрий Валерьевич, диссертация по теме Математическое и программное обеспечение вычислительных машин, комплексов и компьютерных сетей

61 12-5/3692

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение высшего профессионального образования

Национальный исследовательский ядерный университет «МИФИ»

ГУРОВ ДМИТРИЙ ВАЛЕРЬЕВИЧ

МЕТОДЫ И СРЕДСТВА ПРОТИВОДЕЙСТВИЯ АТАКАМ НА КОМПЬЮТЕРНЫЕ СИСТЕМЫ,

ОСНОВАННЫМ НА ИСПОЛЬЗОВАНИИ УЯЗВИМОСТЕИ

ПРОГРАММНОГО КОДА

Диссертация на соискание ученой степени кандидата технических наук по специальностям 05.13.11 - математическое и программное обеспечение вычислительных машин, комплексов

и компьютерных сетей 05.13.19 - методы и системы защиты информации, информационная безопасность

На правах рукописи

Научный руководитель: д.т.н., профессор Иванов М.А.

Москва-2012

ОГЛАВЛЕНИЕ

Введение 4

1. Современное состояние проблемы уязвимостей компьютерных систем 15

1.1 Особенности современного этапа развития информационных сис- 15 тем с точки зрения их безопасности

1.2. Программные средства автоматического обнаружения и блокиро- 22 вания уязвимостей

1.2.1 Статические и динамические сканеры уязвимостей 24

1.2.2. Надстройки к компилятору 27

1.2.3. Надстройки к ядру 29

1.3. Аппаратные средства блокирования уязвимостей 31 Выводы к главе 1 33

2. Исследование уязвимостей программного кода, создающих предпо- 35 сылки для проведения атак на компьютерные системы

2.1. Переполнение буфера 42

2.1.1. Структура памяти процесса 42

2.1.2. Переполнение буфера, размещенного в стеке 47

2.1.3. Переполнение произвольного буфера 55

2.1.4. Переполнение буфера, размещенного в куче 56

2.2. Уязвимость форматной строки 61

2.3. Переполнение целого 66

2.3.1. Переполнение разрядной сетки 66

2.3.2. Арифметическое переполнение 69

2.3.3. Ошибки в знаке 74

2.4. Состязания условий 76

2.5. Уязвимости интерпретируемых языков 85

2.6. Методика безопасного программирования 90

2.6.1. Правила безопасного программирования 90

2.6.2. Метод оценки количества уязвимостей в программе 92

2.6.3. Оценка повышения защищённости программ при использо-

вании предлагаемой методики 97

Выводы к главе 2 100

3. Использование рандомизации элементов архитектуры процессора для 102 повышения его защищённости

3.1. Рандомизация системы команд 104

3.1.1. Изменения, вносимые в архитектуру процессора 104

3.1.2. Описание функционирования системы 108

3.1.3. Особенности обработки команд переходов 112

3.1.4. Оценка накладных расходов 120

3.2. Противодействие атакам, построенным по схеме «ret to libe» 124

3.3. Противодействие уязвимостям переполнения целого 128

3.4. Критерии эффективности системы рандомизации 129 3.4.1. Выявление наиболее важных критериев 130

3.5. Исследование вопросов реализации ГПСЧ для формирования таблицы замен 135

3.5.1. Регистр сдвига со стохастической обратной связью (RFSR) 139

3.5.2. Выбор рандомизационного генератора ПСЧ 140 Выводы к главе 3 141

4. Внедрение разработанных методов и средств противодействия уязви- 144 мостям компьютерных систем

4.1. Исследование уязвимостей ВК «Эльбрус-ЗМ1» 144

4.2. Исследование двоичного транслятора ВК «Эльбрус-ЗМ1» 147

4.3. Разработка методики обучения безопасному программированию 159

4.3.1. Особенности обучения безопасному программированию 159

4.3.2. Программные средства для обучения безопасному программированию 168

Выводы к главе 4 174

Заключение 176

Список использованных источников 179

Приложение 190

ВВЕДЕНИЕ

Современный этап развития общества характеризуется его широкой информатизацией, и со временем роль информационной сферы будет всё более возрастать. Однако развитие компьютерных технологий требует повышенного внимания к защите информационных ресурсов от несанкционированного доступа, обеспечению безопасности информационных и телекоммуникационных систем, как уже развернутых, так и вновь создаваемых на территории России. В 2000 году был принят специальный документ - Доктрина информационной безопасности Российской Федерации [1], определяющий основные направления развития средств защиты информации.

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

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

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

Угрозы безопасности системы могут иметь самую разную природу. Более того, потенциал для появления угроз может быть заложен на любом этапе про-

ектирования системы, как случайно, так и преднамеренно, при этом проявиться в самый неожиданный момент эксплуатации системы. Угрозу безопасности могут представлять предсказуемый генератор псевдослучайных чисел (ГПСЧ), используемый при реализации алгоритмов защиты информации (ЗИ), неправильная реализация или неправильное использование криптоалгоритмов, ошибки, связанные с конфигурированием системы, значениями тех или иных параметров, установленных «по умолчанию», ошибки, допущенные при написании программного кода, недостатки компилятора и многие другие [2].

Программы, предназначенные для выполнения деструктивных действий, получили обобщенное название разрушающие программные воздействия (РПВ) [3, 4]. Для обозначения РПВ, использующих при своем функционировании уязвимости программного кода, применяется термин «эксплойт» [5].

Для защиты от РПВ созданы и используются такие средства, как межсетевые экраны, системы обнаружения вторжений (IDS), средства анализа защищённости (сканирования уязвимостей), ложные объекты атаки (системы Honeypot и Honeynet), методы внесения неопределённости в работу объектов и средств защиты, сигнатурный анализ, эвристический анализ, эмуляция процессора, мониторинг потенциально опасных действий, контроль хода выполнения программ, аудит, обнаружение несанкционированных изменений с использованием контрольных кодов целостности [6, 7].

Защищенность автоматизированной системы обработки данных (АСОД) определяется степенью защищённости её самого слабого звена. Поэтому эффективность средств ОБИ определяется наличием чёткой классификации угроз информационной безопасности (ИБ), связанных с функционированием РПВ.

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

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

Даже кратковременное наличие уязвимости может быть совершенно недопустимым в системах специального назначения. Среди таких объектов Доктрина информационной безопасности выделяет системы управления сложными исследовательскими комплексами, экологически опасными и экономически важными производствами, системы управления войсками и оружием. Однако, как показывает практика, между обнаружением уязвимости и её ликвидацией проходит до полугода [9].

К наиболее распространённым уязвимостям информационных систем следует отнести те, которые вносятся в связи с внедрением компонентов, реализующих функции, не предусмотренные документацией.

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

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

Средства, реализующие методы первого направления, работают, как правило, по принципу анализа исходного кода на языке высокого уровня в соответствии с заложенными сигнатурами и обращают внимание программиста на те или иные наборы команд, выполнение которых может привести к неожиданным последствиям. Эти методы позволяют выявить программные закладки, оставленные в коде злоумышленником, или ошибки программирования, позволяющие в последующем использовать их для проникновения в информационную систему. Однако эти методы весьма трудоёмки, требуют длительного

времени работы специалистов высокой квалификации и не гарантируют 100%-го результата.

Динамические методы работают совместно с недоверенной программой, но сами по себе являются независимыми продуктами (программными либо аппаратными). Программные динамические методы контролируют действия программы, её взаимодействие с другими программами и системой ввода-ввода и при необходимости прерывают работу недоверенной программы или блокируют её до подтверждения продолжения пользователем.

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

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

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

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

Все эти факты требуют подготовки специалистов, не только хорошо владеющими навыками программирования, но и представляющих весь комплекс проблем обеспечения безопасности, возникающих при выполнении программ на компьютере и взаимодействии компонентов программно-аппаратного комплекса. Именно по этой причине этим вопросам уделяется большое внимание. IT-компании сообщают о росте своих расходов на решения, связанные с ОБИ, обучение и сертификацию специалистов.

Так, в 2010 году мировой рынок решений по обеспечению информационной безопасности достиг 16,5 млрд. долл., по оценкам Gartner, рост составил 12% по сравнению с 2009 годом [10, 11]. При этом увеличивается доля ассигнований на обеспечение безопасности в IT-бюджете компаний. Более двух третей (68%) организаций выделяет какую-то часть своего IT-бюджета на обучение или сертификацию, тогда как годом ранее их было 55% [12].

В Доктрине информационной безопасности среди основных задач выделяется создание единой системы подготовки кадров в области информационной безопасности и информационных технологий.

В Федеральной целевой программе развития образования на 2011 -2015 гг. [13] также ставится задача подготовки кадров по приоритетным направлениям модернизации и технологического развития экономики России, в числе которых выделяются стратегические компьютерные технологии и программное обеспечение. При этом отмечается, что в процессе обучения необходимо широко использовать новые электронные образовательные ресурсы и пособия.

Значительный вклад в исследование вопросов безопасного программирования, методов выявления уязвимостей внесли такие ученые как Н. Данжани (Nitesh Dhanjani), Дж. Кларк (Justin Clarke), Дж. С. Фостер (James foster), M. Мейсер (Matt Messier), Дж. Bera (John Viega), M. Ховард (Michael Howard), Д. Лебланк (David LeBlanc), Дж. Эриксон (Jon Erickson), Мэтт Бишоп (Matt

Bishop), а также специалисты фирм Symantec, Лаборатория Касперского и других.

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

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

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

- анализ и классификация существующих уязвимостей ПО;

- исследование наиболее распространённых уязвимостей ПО типа Buffer overflow (Stack smashing и Heap overflow), Race condition, Integer overflow (Widthness overflow, Arithmetic overflow, Signedness errors), Format string error, SQL-injection и других уязвимостей интерпретаторов, создающих предпосылки для проведения атак, в том числе основанных на внедрении вредоносного кода;

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

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

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

- анализ защищенности отечественного высокопроизводительного вычислительного комплекса (ВК) «Эльбрус-ЗМ1», выработка рекомендаций по устранению выявленных уязвимостей.

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

При решении поставленных задач использовались методы теории вероятностей и математической статистики, методы имитационного моделирования, методы модульного и объектно-ориентированного программирования, теория надёжности ПО, методы принятия решений.

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

1) Разработана классификация уязвимостей ПО, создающая предпосылки для создания наиболее эффективных методов противодействия выявленным типам уязвимостей;

2) Разработаны модель нарушителя и модель атаки на компьютерную систему, основанной на использовании уязвимостей программного кода;

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

4) Предложен аппаратный метод защиты от эксплойтов, основанных на вставке вредоносного кода в программу; разработана модель рандомизацион-ного генератора псевдослучайных чисел (ГПСЧ);

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

На защиту выносятся:

- классификация уязвимостей ПО;

- методика безопасного программирования, позволяющая создавать программы, св