Практические аспекты разработки безопасного кода с...

45
ПРАКТИЧЕСКИЕ АСПЕКТЫ РАЗРАБОТКИ БЕЗОПАСНОГО КОДА С ПОМОЩЬЮ MICROSOFT SDL Андрей Бешков Менеджер программы информационной безопасности Microsoft Россия [email protected] http://beshkov.ru http://twitter.com/abeshkov

description

 

Transcript of Практические аспекты разработки безопасного кода с...

Page 1: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

ПРАКТИЧЕСКИЕ АСПЕКТЫ РАЗРАБОТКИ БЕЗОПАСНОГО КОДА С ПОМОЩЬЮ MICROSOFT SDL

Андрей Бешков Менеджер программы информационной безопасностиMicrosoft Россия[email protected] http://beshkov.ru http://twitter.com/abeshkov

Page 2: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Содержание

• Зачем вам разработка безопасного ПО?

• Текущая ситуация с безопасностью ПО

• Практика применения SDL• Программы безопасности Microsoft

Page 3: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Почему ПО не безопасно?

• Сроки запуска проекта горят• Нет ресурсов на

обеспечение безопасных практик

• Мы стартап – нам нужно быстрее стать популярными и заработать много денег

Page 4: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Зачем вам разработка безопасного ПО?

• Новейшие исследования показывают однозначную связь между разработкой безопасного ПО и бизнес эффективностью компании:

– Исследование Aberdeen:• Предотвращение одной уязвимости почти полностью покрывает

годовые затраты на повышение безопасности разработки• Предотвратить проблему с безопасностью в 4 раза дешевле чем

разбираться с ее последствиями

– Исследование Forrester: • Разработка безопасного ПО еще не стала широко распространенной

практикой• Компании применяющие методы SDL демонстрируют гораздо более

быстрый возврат инвестиций

Page 5: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Стоимость устранения уязвимостей

0

5

10

15

20

25

30Относительная стоимость устранения ошибок

Требования/ Архитектура

Кодирование Интеграция/ Тестирование

компонент

Финальное тестирование

После выпуска

Выпуск

Источник: National Institute of Standards and Technology

Исправлять ошибки после выпуска дороже в 30 раз чем на стадии разработки дизайна

Page 6: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Microsoft SDL и Windows

Источник: доклад «Windows Vista One Year Vulnerability Report», блог Microsoft Security, 23 января 2008 г.

Windows XP Windows Vista ОС I ОС II ОС III

11966

400

242

157

До введения SDLПосле введения SDL

Количество уязвимостей сократилось на 45 %

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

Page 7: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

SDL и SQL Server(исследование компании NGS Software)

Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q42000 2001 2002 2003 2004 2005 2006

8

17

20

31

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

Пакет обновления 3 (SP3) для SQL

Server 2000 – первый выпуск,

разработанный с применением процесса SDL

Источник: Which database is more secure? Oracle vs. Microsoft (Чья СУБД безопаснее? Oracle или Microsoft?), David Litchfield, NGS Software, 21 ноября-2006 г.

Page 8: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Уязвимости в ПО

2H06 1H07 2H07 1H08 2H08 1H09 2H09 1H100

500

1,000

1,500

2,000

2,500

3,000

3,500

4,0003450 3474

2919 29623188

27072546

2360

Статистика по отрасли, с шагом в 6 месяцев

Page 9: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Критичность уязвимостей по отрасли

2H06 1H07 2H07 1H08 2H08 1H09 2H09 1H100

200400600800

1,0001,2001,4001,6001,8002,000

19598 124 83 109 98 89 126

1562

1494

15871447

14021266

11441693

1882

1208

1677

12891191

1090

Низкая (0 - 3.9)Средняя (4 - 6.9)Критическая (7 - 10)

Page 10: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Доля уязвимостей Microsoft 3-6%

2H06 1H07 2H07 1H08 2H08 1H09 2H09 1H100

500

1,000

1,500

2,000

2,500

3,000

3,500 3,280 3,322

2,822 2,869 3,042

2,594 2,417

2,215

170 152 97 93 146 113 129 145

Не MicrosoftMicrosoft

Page 11: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Распределение уязвимостей

2H06 1H07 2H07 1H08 2H08 1H09 2H09 1H100

500

1,000

1,500

2,000

2,500

3,000

3,5003079 3110

2547 25732807

23512161

1943

259 242 276 310 256 207 237 196 112 122

96 79

ПриложенияОС Браузеры

Page 12: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Уязвимости основных производителей ПО в 2010 году

http://secunia.com/gfx/pdf/Secunia_Half_Year_Report_2010.pdf

Page 13: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Категория 1

Категория 2

Категория 3

Категория 4

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5

Ряд 3Ряд 2Ряд 1

Уязвимости Microsoft Office и OpenOffice

http://www.h-online.com/security/news/item/Vulnerabilities-in-Microsoft-Office-and-OpenOffice-compared-1230956.html

Page 14: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Основные заблуждения об SDL

SDL применим только к коробочным продуктам

SDL предназначен для модели водопад или спираль

Для SDL нужны инструменты разработки Microsoft

SDL предназначен только для Windows® ОС

SDL независим от платформы и языка разработки

SDL подходит для разных сценариев разработки включая бизнес приложения (LOB) и онлайн сервисы

SDL применим к разным методам разработки таким как водопад, спираль и agile

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

Чтобы реализовать SDL нужно много ресурсов.

SDL подходит организациям любого размера. От разработчика одиночки до огромных корпораций.

Page 15: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

История развития SDL

Процесс безопасной разработки прошел многолетнее тестирование и шлифовку в рамках Microsoft и других компаний.

Page 16: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Введение: процесс Microsoft SDL

Концепция

ВыпускОсновные принципы

Защита пользователей: сокращение количества

уязвимостей; сокращение опасности

уязвимостей.

Практический подходУпреждение угроз - этоне просто поиск ошибокРешение проблем безопасностина ранних стадияхБезопасность при разработкеБезопасность после выпуска ПО

Цели

Page 17: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Этапы применения SDL

Обучение

Начальное обучение по основам безопасности

Требования

Определение владельца от бизнесаАнализ рисков безопасности и конфиден-циальности Определение требований к качеству

Проектирование

Моделирование угрозАнализ опасных областей

Реализация

Выбор инструментовБлокирование запрещенных функций Статический анализ

Проверка

Динамическое тестирование и fuzzing Проверка моделей угроз и опасных областей

Выпуск

План реагированияЗаключитель-ный анализ безопасностиАрхив выпусков

Реагирование

Выполнение плана реагирования на инциденты

SDL – обязательная политика в Майкрософт с 2004 г.

Технология и процессОбучение Ответственность

Постоянные улучшения процессов

Page 18: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Фаза: Обучение

Обследовать подготовленность организации по темам безопасности и защиты приватных данных.

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

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

тестирования и защиты приватных данных

– Определить частоту тренингов• Разработчик должен пройти не менее n тренингов в год

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

тренинги до выпуска RTM версии продукта

Training Requirements DesignImplementati

onVerification Release ResponseОбучение Требования Проекти

рованиеРеализация Проверка Выпуск Реагирова

ние

Page 19: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

• Минимизация поверхности атаки:– Безопасный дизайн (уменьшение

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

–Моделирование угроз– Безопасное кодирование (переполнение

буфера, XSS, SQL инъекции, криптография)

– Тестирование безопасности– Соответствие ФЗ 152

Чему учить?

Page 20: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Источники для обучение

Как написать безопасный код на С++, Java, Perl, PHP, ASP. NET

Защищенный код для Windows Vista

Игра «Spot the vuln»

10 уязвимостей веб проектов - OWASP Top Ten

Курсы SANS

Книга по SDL

Упрощенный SDL

Page 21: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Фаза: Требования

Возможность заложить безопасный фундамент для проекта

– Команда разработки определяет лидеров и консультантов по темам безопасности

– Назначается ответственный за безопасность – Ответственный проверяет план разработки

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

– Определить приоритет, процедуру отслеживания и исправления ошибок (bug tracking/job assignment system)

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

Training Requirements DesignImplementati

onVerification Release ResponseОбучение Требования Проекти

рованиеРеализация Проверка Выпуск Реагирова

ние

Page 22: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Шаблоны SDL для VSTS (Spiral)

• Включает– SDL требования как задачи– SDL-based check-in policies– Создание отчета Final Security

Review– Интеграция с инструментами

сторонних производителей– Библиотека пошаговых указаний

SDL how-to

• Интегрируется с бесплатными SDL инструментами– SDL Threat Modeling Tool– Binscope Binary

Analyzer– Minifuzz File Fuzzer

Шаблоны SDL процессов интегрируют SDL 4.1 со средой разработки VSTS

Page 23: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

MSF Agile + SDL шаблоны для VSTS

• Автоматически создает процессы соблюдения SDL в момент создания нового спринта или выполнения check in.

• Контролирует выполнение всех необходимых процессов безопасности

• Интегрируется с бесплатными SDL инструментами– SDL Threat Modeling Tool– Binscope Binary Analyzer– Minifuzz File Fuzzer

Page 24: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Фаза: Проектирование

Определить и задокументировать архитектуру безопасности и идентифицировать критические компоненты безопасности

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

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

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

Training Requirements DesignImplementati

onVerification Release ResponseОбучение Требования Проекти

рованиеРеализация Проверка Выпуск Реагирова

ние

Page 25: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Процесс моделирования угроз

Проверка

Диаграмма

Идентификация угроз

Снижение угроз

Видение

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

• Идентифицировать классы пользователей.

• Ожидаемое поведение.

Создать диаграммы движения данных.Определить Trust Boundaries

Использовать модель STRIDE для идентификации и учета угроз:Spoofing of user identityTamperingRepudiationInformation DisclousureDenial of ServiceElevation of privilege

Анализ.Переработка дизайна.Уменьшение угроз.Принятие риска.

Поддерживать актуальность диаграмм.Проверять угрозы выявленные STRIDE.Убедиться что выявленные угрозы закрыты.Не закрытые угрозы найдены и учтены.

Page 26: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

SDL Threat Modeling Tool

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

– Обучает созданию диаграмм угроз

– Анализ угроз и мер защиты 

– Интеграция с багтреккером 

– Отчеты по угрозам и уязвимостям

Page 27: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Демо SDL Threat Modeling Tool

Page 28: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Фаза: Реализация

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

Спецификация утвержденных инструментов и их аналоговСтатический анализ (/analyze (PREfast), FXCop, CAT.NET)

Поиск случаев использования запрещенных APIПрименение механизмов защиты предоставляемых ОС (NX, ASLR и HeapTermination)

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

Использование безопасных версий библиотек и фреймворковПрочие рекомендации ( Standard Annotation Language (SAL))

Training Requirements DesignImplementati

onVerification Release ResponseОбучение Требования Проекти

рованиеРеализация Проверка Выпуск Реагирова

ние

Page 29: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Фаза: Проверка

Начните проверки как можно раньше. В идеале сразу же после стадии “code complete”.

Начните планирование процесса реагирования на обнаружение уязвимостей в выпущенном продуктеПовторно проверьте поверхность атаки. Все ли вы учли?MiniFuzz тестирование – файлами, вводом данных в интерфейсные элементы и код сетевой подсистемыПри необходимости выполнить “security push” (с каждым разом все реже)

Не является заменой работе над безопасностью в процессе разработки продуктаРевью кодаТестирование на проникновениеРевью дизайна и архитектуры в свете вновь обнаруженных угроз

Training Requirements DesignImplementati

onVerification Release ResponseОбучение Требования Проекти

рованиеРеализация Проверка Выпуск Реагирова

ние

Page 30: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Фаза: Проверка - Инструменты• BinScope Binary Analyzer– Убедиться что SDL соблюден при

компиляции и сборке

• MiniFuzz File Fuzzer– !exploitable

• RegexFuzer• Attack Surface Analyzer– Анализ снимков системы

• AppVerifier– Динамический анализ системы

Page 31: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Демо CAT.NET и Anti-XSS

Page 32: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

MiniFuzz File Fuzzer• MiniFuzz основной

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

приложение поврежденные данные

– Выявляет не декларированное поведение приложения

– Используется отдельно или в составе Visual Studio и Team Foundation Server

Page 33: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Демо MiniFuzz

Page 34: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Attack Surface Analyzer• Измеряет потенциальную

поверхность атаки на приложение и ОС

• Может использоваться разработчиками, тестировщиками, ИТ специалистами.

• Отображает изменения вносимые в чистую копию Windows ОС после установки приложения.

• Проверяет– Новые или измененные файлы– Ключи реестра– Сервисы– ActiveX– Открытые сетевые порты– Списки доступа ACL– Browser Helper Objects– И.т.д

Page 35: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Фаза: Выпуск и план реагирования

Создать политики поддержки продукта

Создать план реагирования на инциденты безопасности - Software Security Incident Response Plan (SSIRP)

Контакты и ресурсы внутри организации для адекватной реакции на обнаружение уязвимостей и защиту от атак24x7x365 контакт с 3-5 инженерами, 3-5 специалистами маркетинга, и 1-2 менеджеров верхнего уровня

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

Training Requirements DesignImplementati

onVerification Release ResponseОбучение Требования Проекти

рованиеРеализация Проверка Выпуск Реагирова

ние

Page 36: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Фаза: Выпуск – Final Security Review (FSR)

Проверить продукт на соответствие требованиям SDL и отсутствие известных уязвимостей

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

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

Ключевая концепция: Эта фаза не используется как точка для завершения всех задач пропущенных на предыдущих стадиях

Training Requirements DesignImplementati

onVerification Release ResponseОбучение Требования Проекти

рованиеРеализация Проверка Выпуск Реагирова

ние

Page 37: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Механизмы защиты ОС от атак

Win7

SEHOP SEHOP

Включено по умолчанию Heap terminate Heap terminate

Выключено по умолчанию DEP DEP

ASLR ASLR

Vista SP1, SP2

SEHOP SEHOP SEHOP

Heap terminate Heap terminate Heap terminate

DEP DEP DEP

ASLR ASLR ASLR

Vista RTM

SEHOP SEHOP

Heap terminate Heap terminate

DEP DEP

ASLR ASLR

XP SP3

SEHOP SEHOP SEHOP

Heap terminate Heap terminate Heap terminate

DEP DEP DEP

ASLR ASLR ASLR

XP SP2

SEHOP SEHOP SEHOP

Heap terminate Heap terminate Heap terminate

DEP DEP DEP

ASLR ASLR ASLR

IE 6 IE 7 IE 8 IE 9

Page 38: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

EMET: Защита от типовых уязвимостей

• Командная строка и GUI

• Настройка системных защит от уязвимостей

• Включение защиты для конкретных приложений

• Проверка настроек защиты

Page 39: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

EMET: Защита приложений

• Защищает приложения с известными уязвимостями

• Защищает от атак 0-day

• Тонкий контроль применяемых защит

Page 40: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Фаза: Выпуск – Архив

План реагирования на инциденты безопасности создан

Документация для клиентов обновленаСоздан централизованный архив исходного кода, символов, моделей атак RTM версии продукта

Training Requirements DesignImplementati

onVerification Release ResponseОбучение Требования Проекти

рованиеРеализация Проверка Выпуск Реагирова

ние

Page 41: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Фаза: Реагирование

Инцидент случился? Идем по заранее созданному плану.

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

Training Requirements DesignImplementati

onVerification Release ResponseОбучение Требования Проекти

рованиеРеализация Проверка Выпуск Реагирова

ние

Page 42: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Реагирование на инцидентыВыгоды планового реагирования

• Понятно что происходит

• Есть ответственные• Удовлетворенность

клиента растет• Собираем данные

для будущих разработок

• Проводим тренинги

Watch Alert and MobilizeResources

Assess and Stabilize Resolve

Reporting

Analysis and Mitigation

Create Fix

Update Models

Test Fix

Выпуск

Lessons Learned

Provide Guidance

Software Security Incident Response Plan (SSIRP)

http://www.microsoft.com/security/msrc/whatwedo/responding.aspx

Page 43: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Атаки переходят на уровень приложений

Разработка безопасного кода с помощью SDL – экономия денег компании

SDL cсущественно улучшил продукты Microsoft

Microsoft сделал процесс SDL доступным всем

Пора применять SDL

Page 45: Практические аспекты разработки безопасного кода с помощью Microsoft SDL

Ресурсы• [HOLMES 2010]. Holmes, Graham. (2010, April 05). Cisco CSDL

Announcement – http://blogs.cisco.com/security/the_cisco_secure_development_lifecycle_an_overview/

• [LANE 2010]. Lane, Adrian. (2010, May 10). FireStarter: Secure Development Lifecycle – You’re Doing It Wrong. Securosis. Retrieved December 29 2010, from http://securosis.com/blog/firestarter-secure-development-lifecycle-your-doing-it-wrong

• [LADD 2010]. Ladd, David. (2010, May 11). “Do what Microsoft did, not what they do”. Retrieved December 29 2010, from http://blogs.msdn.com/b/sdl/archive/2010/05/11/do-what-microsoft-did-not-what-they-do.aspx

• [LARSON_LADD 2010]. Larson, Larry. Ladd, David. (2010, May 14). Security Talk: Simplified SDL with David Ladd. Channel 9. Retrieved December 29 2010, from http://channel9.msdn.com/Blogs/LarryLarsen/Security-Talk-Simplified-SDL-with-David-Ladd