Оглавление Благодарности 3
Об авторе 5
О книге 7
Предполагаемая аудитория 8
Предварительные требования 8
Описание компакт-диска 8
Особенности книги 9
Информационные заметки 10
Обозначения клавиш 10
Начало работы 11
Аппаратные требования 11
Требования к приложениям 11
Инструкции по установке 12
Программа сертификации Microsoft 12
Сертификация специалистов 12
Требования для получения статуса MCP 14
Техническая поддержка 15
ЧАСТЬ I. ОСНОВЫ ЗАЩИТЫ ПРИЛОЖЕНИЙ 17
Глава 1. Реализация защиты во время проектирования 19
Почему эта глава важна 19
Прежде всего 20
Занятие 1. Оценка угроз 20
Почему разработчики создают уязвимые приложения 21
Типы атак на приложения 21
Типы атак, к которым уязвимы определенные приложения 32
Практикум. Оценка угроз 33
Резюме 34
Занятие 2. Проектирование защиты приложений 35
Всесторонняя защита 35
Стратегия SD3 37
Рекомендации по реализации принципа защиты при проектировании 38
Рекомендации по реализации принципа защиты по умолчанию 44
Рекомендации по реализации принципа защиты при разработке 47
Практикум. Реализация рекомендаций по проектированию защищенных приложений 53
Резюме 54
Занятие 3
. Доступ к ресурсам с использованием наименьших привилегий 54
Почему следует использовать наименьшие привилегии 55
Правила написания кода, использующего принцип наименьших привилегий 56
Правила определения подходящего уровня привилегий 57
Выделение недостающих привилегий 60
Практикум. Обновление приложения для использования наименьших привилегий 67
Резюме 71
Лабораторная работа 72
Применение рекомендаций по проектированию защищенных приложений 72
Упражнение 74
Резюме главы 74
Подготовка к экзамену 75
Ключевые положения 75
Основные термины 76
Вопросы и ответы 76
Практикум. Оценка угроз 76
Практикум. Реализация рекомендаций по проектированию защищенных приложений 77
Практикум. Обновление приложения для использования наименьших привилегий 79
Лабораторная работа. Применение рекомендаций по проектированию защищенных приложений 80
Упражнение 80
Глава 2. Рекомендации по созданию защищенного кода 82
Почему важна эта глава 82
Прежде всего 83
Занятие 1. Проверка входных данных 83
Наложение ограничений на входные данные 85
Отклонение подозрительных входных данных 99
Исключение данных 100
Практикум. Проверка входных данных 101
Резюме 103
Занятие 2. Решение проблем канонизации 103
Решение проблем канонизации в приложениях Windows Forms 103
Решение проблем канонизации в приложениях ASP.NET 107
Резюме 109
Занятие 3. Предотвращение атак со вставкой SQL 109
Структурирование приложения для облегчения обслуживания кода, обращающегося к базам данных 110
Настройка разрешений SQL 112
Хранимые процедуры 116
Параметризированные команды SQL 116
Защита выражений, соответствующих шаблону 121
Практикум. Предотвращение атак со вставкой SQL 122
Резюме 126
Занятие 4
. Предотвращение атак с использованием межсайтового кодирования 126
Очистка комментариев пользователей 127
Очистка параметров запросов 129
Практикум. Предотвращение атак CSS 131
Резюме 132
Занятие 5. Сообщения об ошибках и обработка сбоев 132
Почему доступ к подробной информации об ошибках следует предоставлять только администраторам 133
Сохранение сообщений об ошибках в журнале событий 135
Управление сообщениями об ошибках на основе свойств пользователей 137
Закрытие открытых подключений 138
Переход в более безопасный режим 139
Резюме 140
Лабораторная работа 140
Применение рекомендаций по созданию защищенного кода 140
Резюме главы 141
Подготовка к экзамену 142
Ключевые положения 142
Основные термины 142
Вопросы и ответы 143
Практикум. Проверка входных данных 143
Практикум. Предотвращение атак со вставкой SQL 143
Практикум. Предотвращение атак CSS 147
Лабораторная работа. Применение рекомендаций по созданию защищенного кода 147
Глава 3. Проверка приложений на наличие уязвимостей 149
Почему важна эта глава 149
Прежде всего 149
Занятие 1. Автоматизированное тестирование модулей 150
Тестирование модулей 150
Упреждающее тестирование 151
Выполнение упреждающего тестирования модулей 152
Реализация тестирования модулей при помощи утилиты NUnit 152
Практикум. Создание автоматизированных тестов модулей 158
Резюме 161
Занятие 2. Проверка сборок на наличие уязвимостей 161
Тестирование системы безопасности перед выпуском приложения 162
Рекомендации по проверке приложения на наличие уязвимостей 163
Средства тестирования системы безопасности 164
Практикум. Проверка сборок на наличие уязвимостей 171
Резюме 173
Лабораторная работа 174
Проверка приложений на наличие уязвимостей 174
Резюме главы 176
Подготовка к экзамену 176
Ключевые положения 176
Основные термины 176
Вопросы и ответы 177
Упражнение 2. Добавление тестов модулей 177
Упражнение 3. Добавление дополнительных методов проверки 178
Практикум. Проверка сборок на наличие уязвимостей 179
Лабораторная работа 180
ЧАСТЬ II. ИСПОЛЬЗОВАНИЕ СИСТЕМЫ БЕЗОПАСНОСТИ .NET FRAMEWORK 181
Глава 4. Использование функций безопасности платформы 183
Почему важна эта глава 183
Прежде всего 184
Занятие 1. Защита файлов при помощи списков управления доступом 184
Списки управления избирательным доступом 184
Списки управления доступом к системе безопасности 185
Стандартные и особые разрешения на доступ к файлам и папкам 186
Определение действующих разрешений 189
Настройка списков ACL 190
Практикум. Защита файлов при помощи списков ACL 201
Резюме 204
Занятие 2. Защита файлов при помощи изолированного хранилища 204
Изолированное хранилище 206
Расположение хранилищ в файловой системе 208
Классы для работы с изолированным хранилищем 209
Доступ к изолированному хранилищу 210
Использование утилиты Storeadm 213
Практикум. Обновление существующего кода для использования изолированного хранилища 214
Резюме 215
Занятие 3. Настройка среды разработки 215
Группы, в которые должен входить пользователь 216
Настройка учетной записи для разработки с наименьшими привилегиями 217
Создание веб-приложений на компьютерах без установленной среды разработки Visual Studio .NET 221
Отладка веб-приложений 222
Регистрация компонентов 226
Настройка системы для облегчения решения проблем 227
Практикум. Настройка среды разработки 228
Резюме 234
Лабораторная работа. Использование системы безопасности платформы 235
Результаты опроса 235
Упражнение 236
Резюме главы 236
Подготовка к экзамену 237
Ключевые положения 237
Основные термины 237
Вопросы и ответы 238
Практикум. Защита файлов при помощи списков ACL 238
Практикум. Обновление существующего кода для использования изолированного хранилища 239
Лабораторная работа. Использование системы безопасности платформы 240
Глава 5. Применение защиты на основе ролей 241
Почему важна эта глава 241
Прежде всего 242
Занятие 1. Основы аутентификации и авторизации пользователей 242
Что такое аутентификация? 243
Связь авторизации с аутентификацией 245
Практикум. Механизмы аутентификации и авторизации 246
Резюме 247
Занятие 2. Авторизация пользователей 247
Класс WindowsIdentity 248
Проверка имени и типа аутентификации текущего пользователя 249
Класс WindowsPrincipal 252
Политика участников системы безопасности 253
Проверка членства в группах 254
Практикум. Авторизация пользователей при помощи системы безопасности Windows 257
Резюме 259
Занятие 3. Запросы защиты на основе ролей 259
Класс PrincipalPermission 260
Декларативные запросы защиты на основе ролей 261
Императивные запросы защиты на основе ролей 265
Рекомендации по использованию различных способов проверки RBS 268
Практикум. Выбор и реализация проверки RBS 271
Резюме 274
Занятие 4. Создание собственных методов аутентификации 275
Интерфейс IIdentity 275
Создание собственных классов идентификационных данных 276
Интерфейс IPrincipal 282
Создание собственных простых моделей привилегий пользователей 285
Использование запросов RBS 286
Создание собственных механизмов аутентификации 289
Реальный мир. Надежность аутентификации 292
Практикум. Создание собственных методов аутентификации 293
Резюме 295
Лабораторная работа 296
Реализация защиты на основе ролей 296
Технические требования 297
Упражнение 297
Резюме главы 298
Подготовка к экзамену 298
Ключевые положения 298
Основные термины 299
Вопросы и ответы 299
Практикум. Рассмотрение механизмов аутентификации и авторизации пользователей 299
Практикум. Авторизация пользователей при помощи системы безопасности Windows 301
Практикум. Выбор и реализация проверки RBS 304
Практикум. Создание собственных методов аутентификации 314
Лабораторная работа. Реализация защиты на основе ролей 315
Глава 6. Реализация защиты по правам доступа кода 316
Почему важна эта глава 316
Прежде всего 317
Занятие 1. Принципы защиты по правам доступа кода 317
Что такое защита по правам доступа кода 318
Элементы защиты по правам доступа кода 319
Советы по работе с файлами 325
Политика безопасности 327
Взаимодействие CAS с системой безопасности операционной системы 328
Практикум. Объяснение принципов защиты по правам доступа кода 331
Резюме 331
Занятие 2. Настройка защиты по правам доступа кода 332
Использование утилиты .NET Framework Configuration 332
Использование утилиты Code Access Security Policy 341
Практикум. Настройка CAS 347
Резюме 351
Занятие 3. Запросы разрешений сборок 351
Причины для использования объявлений сборок CAS 352
Классы для работы с разрешениями CAS 353
Типы объявлений разрешений сборки 357
Создание объявлений сборок 357
Инструкции по использованию объявлений сборок 361
Практикум. Использование запросов разрешений сборок 361
Резюме 364
Занятие 4. Защита методов по правам доступа кода 364
Типы запросов разрешений методов 365
Инструкции по применению запросов на разрешения методов 366
Способы запроса разрешений 367
Анализ предоставленных разрешений 369
Способы ограничения разрешений 374
Ослабление строгости разрешений для повышения производительности 377
Вызов доверенного кода из кода с частичным доверием 381
Использование наборов разрешений 382
Практикум. Защита методов при помощи запросов CAS 383
Резюме 390
Занятие 5. Настройка защиты по правам доступа кода 391
Домены приложений 391
Использование домена приложений для запуска сборок с ограниченными разрешениями 392
Как настраивать CAS 400
Практикум. Изменение CAS 405
Резюме 406
Лабораторная работа. Реализация защиты по правам доступа 406
Упражнение 407
Резюме главы 408
Подготовка к экзамену 408
Ключевые положения 408
Основные термины 408
Вопросы и ответы 409
Практикум. Объяснение принципов защиты по правам доступа кода 409
Практикум. Настройка CAS 410
Практикум. Использование запросов разрешений сборок 411
Практикум. Защита методов при помощи запросов CAS 414
Практикум. Изменение CAS 418
Лабораторная работа. Реализация защиты по правам доступа 419
Глава 7. Максимальная защита во время разработки 420
Почему важна эта глава 420
Прежде всего 421
Занятие 1. Подписание сборок при помощи строгих имен 421
Строгие имена 421
Утилита Strong Name 424
Процесс подписания сборок 426
Подписание с задержкой 431
Использование строгих имен совместно с CAS 433
Практикум. Подписание сборок при помощи строгих имен 438
Резюме 444
Занятие 2. Настройка кэша глобальных сборок 445
Кэш глобальных сборок 445
Добавление сборок в GAC 446
Практикум. Настройка исполняющей среды на клиентских компьютерах 450
Резюме 455
Лабораторная работа. Защита от уязвимостей к замене компонентов приложения 456
Упражнение 458
Резюме главы 458
Подготовка к экзамену 459
Ключевые положения 459
Основные термины 459
Вопросы и ответы 459
Упражнение 2
. Создание сборки со строгим именем при помощи подписания с задержкой 459
Упражнение 4. Обращение к сборке со строгим именем 460
Упражнение 2. Установка и удаление сборок в GAC 461
Лабораторная работа. Защита от уязвимостей к замене компонентов приложения 461
ЧАСТЬ III. ЗАЩИТА ДАННЫХ И СЕТЕВЫХ ПРИЛОЖЕНИЙ 463
Глава 8. Защита данных при помощи криптографии 465
Почему важна эта глава 465
Прежде всего 466
Занятие 1
. Шифрование и расшифровка данных при помощи симметричных ключей 466
Шифрование с симметричным ключом 467
Классы симметричных алгоритмов в .NET Framework 470
Создание ключа симметричного шифрования 473
Создание случайного ключа 475
Шифрование и расшифровка сообщений при помощи симметричных ключей 481
Что такое DPAPI 484
Практикум. Шифрование и расшифровка данных при помощи симметричных ключей 486
Резюме 487
Занятие 2
. Шифрование и расшифровка данных при помощи асимметричных ключей 488
Асимметричное шифрование 488
Классы асимметричных алгоритмов в .NET Framework 490
Экспорт и импорт асимметричных ключей и пар ключей 492
Сохранение пар ключей для повторного использования 494
Шифрование и расшифровка сообщений при помощи асимметричных ключей 496
Практикум. Шифрование и расшифровка данных при помощи асимметричных ключей 497
Резюме 501
Занятие 3. Проверка целостности данных при помощи хэша 501
Что такое хэш 502
Алгоритмы хэширования в .NET Framework 502
Вычисление хэша без ключа 504
Вычисления хэша с ключом 506
Практикум. Проверка целостности данных при помощи хэшей 508
Резюме 510
Занятие 4. Подписание файлов 510
Цифровые подписи 510
Классы для работы с цифровыми подписями в .NET Framework 511
Создание и проверка цифровой подписи для файла 512
Создание цифровой подписи для документа XML 515
Практикум. Проверка данных при помощи хэшей 518
Резюме 520
Лабораторная работа. Защита данных при помощи криптографии 520
Резюме главы 521
Подготовка к экзамену 522
Ключевые положения 522
Основные термины 522
Вопросы и ответы 524
Практикум. Шифрование и расшифровка данных при помощи симметричных ключей 524
Практикум. Шифрование и расшифровка данных при помощи асимметричных ключей 525
Практикум. Проверка целостности данных при помощи хэшей 529
Практикум. Проверка данных при помощи хэшей 532
Лабораторная работа. Защита данных при помощи криптографии 536
Глава 9. Защита приложений ASP.NET 538
Почему важна эта глава 538
Прежде всего 539
Занятие 1. Настройка аутентификации в приложениях ASP.NET 539
Файлы Web.config 540
Настройка веб-приложений для использования аутентификации Windows 542
Настройка веб-приложений для использования только анонимного доступа 545
Создание форм ASP.NET для аутентификации пользователей 545
Настройка веб-приложений для использования аутентификации в системе Passport 553
Практикум. Настройка аутентификации в приложениях ASP.NET 554
Резюме 556
Занятие 2. Управление авторизацией в приложениях ASP.NET 556
Ограничение доступа к веб-приложениям ASP.NET, файлам и папкам 557
Ограничение привилегий при помощи защиты по правам доступа кода 566
Ограничение доступа по IP-адресам 567
Обработка расширений файлов в IIS и ASP.NET 568
Уменьшение поверхности атаки веб-служб ASP.NET 574
Практикум. Управление авторизацией в приложениях ASP.NET 576
Резюме 577
Занятие 3
. Настройка SSL для шифрования передаваемых по сети данных 577
Сертификаты SSL 578
Настройка IIS для использования сертификатов SSL, выпущенных службами сертификации Windows Server 583
Настройка IIS для использования шифрования SSL для веб-сайта или приложения 587
Практикум. Настройка SSL для шифрования сетевых взаимодействий 588
Резюме 597
Лабораторная работа. Аутентификация и авторизация Windows в приложении ASP.NET 597
Резюме главы 599
Подготовка к экзамену 600
Ключевые положения 600
Основные термины 600
Вопросы и ответы 601
Практикум. Настройка аутентификации в приложениях ASP.NET 601
Практикум. Управление авторизацией в приложениях ASP.NET 603
Лабораторная работа. Использование аутентификации и авторизации Windows в приложении ASP.NET 604
Глава 10. Обеспечение защиты при использовании внешних компонентов и служб 606
Почему важна эта глава 606
Прежде всего 607
Занятие 1. Минимизация риска при вызове внешних компонентов 607
Риск вызова внешних компонентов 607
Рекомендации по вызову неуправляемого кода 609
Проверка целостности внешних файлов 610
Практикум. Минимизация риска при вызове внешних компонентов 613
Резюме 615
Занятие 2. Обеспечение защиты веб-служб 616
Аутентификация клиента веб-служб 616
WS-Security 618
Web Services Enhancements 621
Наиболее важные классы WSE 622
Использование WSE для добавления функций аутентификации в веб-службу 626
Практикум. Обеспечение безопасности веб-служб 633
Резюме 634
Занятие 3
. Обеспечение безопасности функций удаленного взаимодействия 635
Удаленное взаимодействие 635
Рекомендации по обеспечению безопасности удаленного взаимодействия 636
Аутентификация клиентов удаленного взаимодействия 637
Ограничение доступа к службе удаленного взаимодействия 644
Практикум. Обеспечение безопасности удаленного взаимодействия 644
Резюме 645
Лабораторная работа. Проектирование архитектуры распределенного приложения 646
Резюме главы 647
Подготовка к экзамену 648
Ключевые положения 648
Основные термины 648
Вопросы и ответы 649
Практикум. Минимизация риска при вызове внешних компонентов 649
Практикум. Обеспечение безопасности веб-служб 650
Практикум. Обеспечение безопасности удаленного взаимодействия 652
Лабораторная работа. Проектирование архитектуры распределенного приложения 653
Глоссарий 655
Приложение. Описание компакт-диска 661
Как использовать компакт-диск 661
Автоматически запускаемое меню компакт-диска 661
Readiness Review Suit 661
Файлы занятий 662
Электронная книга 662
Техническая поддержка Microsoft Learning 662