Данный обзор продолжает серию публикаций, посвящённых технологиям безопасности компании Microsoft, которая была начата статьей Internet Explorer 9: новые возможности безопасности. В ней были рассмотрены основные изменения, которые коснулись подсистемы безопасности браузера Internet Explorer (сокращённо IE) к выходу 9-ой версии.
3. История возникновения и развития SDL
Введение
Как известно, корпорация Microsoft потратила очень много усилий на то, чтобы сделать новую версию браузера Internet Explorer 9 по-настоящему безопасной. И эти усилия не ограничивается лишь набором фич, которые лежат на поверхности. Безопасность IE9 начинается гораздо глубже и уходит корнями в процесс его проектирования и разработки, которые велись полностью в соответствие с положениями Security Development Lifecycle (SDL - цикл безопасности при разработке). Давайте же посмотрим, как выполняются положения SDL на примере разработки браузера IE9 и оценим результаты их применения.
SDL можно рассматривать как альтернативный подход к обеспечению безопасности разработки программного обеспечения, который можно применять и при разработке программ по модели open source (программного обеспечения с открытым исходным кодом), и при разработке проприетарного (закрытого) ПО. Модель разработки программного обеспечения с открытым исходным кодом предусматривает публикацию в открытом доступе исходных текстов разрабатываемых программ для того, чтобы любой желающий мог подвергнуть исходный код анализу. Теоретически это увеличивает вероятность обнаружения «слабых мест» кода, которые затем, обычно тем же сообществом, и устраняются. На практике же дело обстоит так, что реальный вклад в развитие кода вносится буквально несколькими процентами из тех, кто имеет к нему доступ.
Корпорация Microsoft достаточно давно, в частности, интересуется свободным ПО – в составе этой корпорации довольно долгое время существуют подразделения, которые занимаются изучением open source проектов на постоянной основе, совместимостью с программными продуктами, созданными по свободной модели. Хотя Microsoft и открыла исходный код ядра Windows для исследовательских нужд и сертификации в госорганах, в корпорации уверены, что их модель разработки способна обеспечить большую чистоту и безопасность кода.
Сразу оговоримся о том, что объективно невозможно на сегодняшний день чётко сказать, какая из моделей разработки – открытая или закрытая – наиболее оптимальна для обеспечения более высокого уровня безопасности ПО. У каждой модели есть плюсы и минусы. При разработке открытого ПО имеется большой круг лиц, имеющих доступ к исходному коду, но способный проводить его грамотный аудит очень немногие. Кроме того, в этой модели никто не застрахован от внесения специальных изменений в код, которые потом могут быть использованы для корыстных целей. В тоже время коллективы, которые разрабатывают такие сложные продукты, как Internet Explorer, зачастую имеют достаточно людских и материальных ресурсов, которые при наличии грамотной политики могут привести к созданию качественного и безопасного продукта.
Вероятность возникновения человеческого фактора, внесения ошибок на этапе разработки, которые могут затем превратиться в уязвимости ПО, всегда очень высока при любой модели разработки. Об этом свидетельствует и любая открытая статистика. Собственно, политики, описываемые в рамках SDL, призваны минимизировать влияние этих неблагоприятных факторов.
Также необходимо заметить, что положения SDL вполне применимы для открытых разработок и дают им дополнительные преимущества – эти политики разработки уже сейчас применяются многими разработчиками, которые используют open source-модель. В настоящее время положения этой политики разработки, равно как и все необходимые программные средства, открыты для всех желающих.
Это позволяет облегчить процесс внедрения SDL в цикл разработки сторонних приложений. Большинство независимых разработчиков ПО с открытым исходным кодом (в том числе и разработчики альтернативных интернет-браузеров для Windows) сегодня используют такие инструменты как DEP (Data Execution Prevention, Предотвращение выполнения данных) и ASLR (Address Space Layout Randomization, Рандомизация размещения адресного пространства). Сегодня эти технологии являются неотъемлемой частью SDL, поэтому являются некоторым косвенным индикатором следования разработчиков свободного ПО положениям SDL.
Суть SDL
Специалисты, занимающиеся разработкой программного обеспечения, соглашаются с тем, что невозможно полностью исключить появление ошибок при разработке сложных проектов. Человеческий фактор будет присутствовать всегда. И некоторые из совершённых ошибок приводят к появлению уязвимостей, которые вполне охотно используются злоумышленниками.
Согласно таким достоверным источникам, как Национальная база уязвимостей каждый год обнаруживаются тысячи уязвимостей в программном обеспечении, большинство из которых достаточно серьёзные и, при этом, достаточно легко эксплуатируемые.
Собственно, SDL – это рекомендации от компании Microsoft по разработке надёжных и безопасных продуктов и сервисов. Компания убеждена, что ответственность перед пользователями за обнаруживаемые уязвимости лежит на производителях ПО, и этот факт признания ответственности вызывает положительные эмоции как у пользователей продуктов, так и у специалистов по информационной безопасности. При этом SDL называется ключевым компонентом защиты информационных систем и является обязательной корпоративной политикой компании с 2004-го года при разработке её продуктов.
В настоящее время Microsoft свободно предоставляет методики SDL организациям, разрабатывающим программное обеспечение, и которые стремятся к большей безопасности своих продуктов. В конечном итоге, применение сторонними производителями политик разработки безопасного ПО должно привести к более безопасному использованию различного рода комплексных продуктов как интернет-браузеры, в т.ч. Internet Explorer. Ведь безопасность такого ПО напрямую зависит от безопасности дополнений сторонних производителей, которые используются совместно с браузерами, о чём Microsoft постоянно напоминает в своих материалах.
В общем-то, если посмотреть на этапы разработки безопасного программного обеспечения, которым предлагает следовать SDL, то можно видеть, что в этих политиках разработки отражён общий опыт софтверной индустрии за многие годы. Microsoft скрупулёзно исследовала и систематизировала этот опыт, а также предложила свои инструменты для реализации соответствующих производственных процессов. Отдельные элементы данного процесса разработки используются многими производителями программного обеспечения. Но Microsoft при этом предоставляет возможность посредством SDL взглянуть на своё видение всего пласта опыта разработки приложений, которые могут подвергнуться атакам извне. И это делает данное начинание весьма полезным для начинающих разработчиков или разработчиков, которые не могут позволить себе содержать в штате достаточно квалифицированных менеджеров проектов.
Рисунок 1: Этапы разработки безопасного ПО согласно SDL
Также внутри SDL следует выделять такое понятие как наука обеспечения безопасности (security science). Эта наука занимается разработкой современных средств и технологий, которые позволяют предотвратить успешные атаки на программное обеспечение. Достигается эта цель с помощью поиска уязвимостей, собственно, разработки технологий и непрерывного отслеживания и анализа тенденций угроз.
История возникновения и развития SDL
Чтобы лучше понять суть какой-либо сущности, часто бывает полезным проследить причины её возникновения и основные этапы развития. История у SDL достаточно солидная для IT-эпохи, так как началась она в 1990 году.
До принятия SDL различные группы разработки софтверного гиганта оставляли необходимость и выбор средств обеспечения безопасности и конфиденциальности при разработке продуктов на своё усмотрение. В результате этого появились такие широко известные угрозы как Melissa, Code Red, Nimda, UPnP, заставившие Microsoft пересмотреть свои взгляды на обеспечение безопасности при разработке ПО.
Результаты этих изысканий не заставили себя ждать – сначала были разработаны процессы моделирования угроз, была введена универсальная шкала ошибок для определения степени серьёзности уязвимостей, был проведён анализ основных причин допущения уязвимостей в продуктах, а также был внедрён статический анализ кода PREfix. Все эти начинания стали применяться при разработке Windows 2000 и со временем привели к созданию SDL.
В 2002-м году Билл Гейтс опубликовал свой меморандум о защите информационных систем, после чего главным приоритетом корпорации Microsoft была задекларирована безопасность. В этом же году компания даже приостановила разработки .NET Framework для того, чтобы переориентировать группу разработки в сторону обеспечения безопасности процесса. Аналогичный подход затем был применён при разработке Windows Server 2003.
Подобные действия приводили к существенным результатам при разработке очередных версий популярных продуктов Microsoft. При этом стало понятно, что аудит написанного кода перед выпуском продукта в релиз не так эффективен, как внедрение политик безопасности при разработке продуктов на этапе их проектирования. В результате этого понимания в 2004-ом году было принято решение использовать SDL в обязательном порядке для всего ПО, которое выпускается Microsoft.
После этого составляющие SDL с годами вбирали в себя всё больше элементов, которые позволяли создавать ещё более защищённые приложения. Из значительных вех истории SDL можно отметить выпуск первого открытого выпуска процесса Microsoft SDL в 2007-ом году. В 2009-ом году состоялся первый открытый выпуск средств для автоматизации применения политик SDL при разработке ПО, таких как средство моделирования угроз SDL, соответствующий шаблон для среды разработки Visual Studio и других. В 2010-ом году состоялся открытый выпуск упрощённой реализации Microsoft SDL, которая адаптирована для использования в сторонних сценариях разработки и с использованием альтернативных платформ разработки ПО.
SDL и Internet Explorer
Как уже было сказано выше, с 2004 года SDL стал обязательным для применения в компании Microsoft. И, так как работа пользователя в интернет-браузере связана со многими рисками потери и компрометации информации и, во многом защищённости операционной системы в целом, то нет ничего удивительного в том, что разработка Internet Explorer уже не первый год находится на рельсах SDL.
В связи с изложенным весьма интересно рассмотреть таблицу, в которой указаны даты начала разработки и выхода в свет различных версий Internet Explorer, а также появления новых элементов в политиках SDL. В таблице изложены лишь наиболее важные элементы SDL, появление которых, по мнению автора, интересно сопоставить с определёнными этапами развития интернет-браузера Internet Explorer.
Таблица 1: Влияние развития SDL на разработку Internet Explorer
Год | Развитие Internet Explorer | Новые элементы SDL с указанием номеров редакций |
2001 | Internet Explorer 6 – Релиз | |
2002 | ||
2003 | ||
2004 | 2.0. Первая официальная версия SDL. Моделирование угроз, статический анализ и заключительный анализ безопасности обязательны для программного обеспечения Microsoft. | |
2005 | Internet Explorer 7 – Beta 1 | 2.1 и 2.2. Шкала ошибок – критерий качества, применяемый ко всему проекту разработки программного обеспечения. Нечёткое тестирование – намеренное внесение произвольных или недействительных данных в программу. Стандарты шифрования – изложены требования к использованию шифрования в приложениях Microsoft. Проверочное испытание среды выполнения – проверка приложения путём его пассивного мониторинга в стандартной ситуации. |
2006 | Internet Explorer 7 – Релиз | 3.0 и 3.1. Нечёткое тестирование (ActiveX). Заблокированные API – автоматизация борьбы с проблемами переполнения буфера. Стандарты конфиденциальности для разработки – введены внутренние стандарты, связанные с защитой конфиденциальности клиента и пользователя. Требования к интерактивным службам – объединение требований для разработки клиент-серверных приложений и при разработке интерактивных служб, таких как MSN. |
2007 | 3.2. Защита межсайтовых сценариев – ведение обязательных процедур по снижению риска атак межсайтовых сценариев (XSS). Защита от внедрения кода SQL – инструкции по защите от атак путём внедрения кода SQL. Защита синтаксического анализа XML – обязательное нечёткое тестирование соответствующих интерфейсов и требования использования безопасных версий средств синтаксического анализа XML. | |
2008 | Internet Explorer 8 – Beta 1 | 4.0 и 4.1. Рандомизация размещения адресного пространства (ASLR) – переведена из разряда рекомендаций в разряд требований. Защита от подделки межсайтовых запросов (CSRF) – гарантия использования уникальных сеансовых токенов для предотвращения атак CSRF на веб-приложения. |
2009 | Internet Explorer 8 – Релиз | 5.0. Нечёткое тестирование (сеть) Требования безопасности лицензирования сторонних производителей – применение всех критериев SDL ко всему коду сторонних производителей с лицензией на использование в продуктах и службах Microsoft |
2010 | Internet Explorer 9 Platform Preview 1 | 5.1. Соответствие «примера кода» SDL – соответствие шаблонов кода, предлагаемых по умолчанию в продуктах Microsoft для разработки продуктов сторонних производителей, должны соответствовать SDL. |
2011 | Internet Explorer 9 – Релиз Internet Explorer 10 Platform Preview 1 |
Выводы
Из представленной выше таблицы можно увидеть, что цикл разработки новых версий Internet Explorer сокращается. Вероятно, это стало возможным в результате повышения эффективности производственных процессов, организованных в рамках SDL. Также можно увидеть, что процесс разработки Internet Explorer стал непрерывным – практически одновременно с выходом в релиз IE9 вышло первое технологическое превью IE10.
Как можно заметить, основные актуальные элементы SDL были внедрены уже в Internet Explorer 8, и следующая, девятая, версия этого интернет-браузера уже была нацелена на исправление недостатков реализации этих элементов в Internet Explorer 8. Насколько можно понять, в данном случае при разработке IE9 действовал последний этап разработки согласно SDL, который называется «Реагирование». В рамках этого этапа работает план реагирования на инциденты, которые возникают во время работы ПО после релиза. Как уже заметили многочисленные пользователи продуктов Microsoft, эта корпорация все больше интересуется отзывами пользователей при проектировании новых разработок.
Что касается уязвимостей, то, если следовать статистике, предлагаемой компанией Secunia, можно заметить, что число сообщений об уязвимостях в годы наиболее активного использования каждой версии браузера постепенно снижается. Эту информацию следует рассматривать лишь как грубую оценку, но которая показывает тенденцию, можно представить в виде диаграммы. Следует заметить, что некоторые сайты публикуют информацию об уязвимостях, которые найдены в Internet Explorer 9, но эта информация на данный момент не подтверждена производителем данного интернет-браузера. Пока же статистики очень мало и лишь месяцы спустя станет видно, будет ли и дальше фиксироваться снижение количества уязвимостей в единицу времени, которые будут обнаруживаться в этом браузере. Но на данный момент данной позитивной тенденции ничего не угрожает.
Рисунок 2: Среднегодовое количество уязвимостей, обнаруженное в различных версиях Internet Explorer
В целом можно сказать, что корпорация Microsoft в последние годы уделяет значительное внимание безопасности в своих продуктах, и это однозначно положительным образом сказывается на состоянии софтверной индустрии в целом.
Дополнительная литература
Более подробно с информацией о SDL и о применении данных политик при разработке Internet Explorer можно ознакомиться в следующих источниках:
1. Официальный сайт Microsoft Security Development Lifecycle.
2. Security Intelligence Report (на англ. языке).
4. Internet Explorer 8 and the Security Development Lifecycle (на англ. языке).
Автор: Валерий Ледовской