2010г.
Количество страниц: 400
В книге 24 смертных греха компьютерной безопасности. Библиотека программиста. Как написать безопасный код. Ховард рассмотрены наиболее распространенные и серьезные ошибки кодирования и программные «дыры», которые используются хакерами для взлома программных продуктов. Рассмотрено большинство языков и платформ программирования, каждая глава посвящена отдельному типу уязвимости («смертному греху»), угрожающему безопасности компьютерных систем и программ. Книга представляет собой капитально переработанное второе издание бестселлера «The 19 Deadly Sins of Software Security», в котором отражены все насущные и актуальные проблемы из области программной безопасности ПО.
Авторы книги Майкл Ховард и Дэвид Лебланк, обучающие программистов компании Microsoft безопасному коду, объединили усилия с Джоном Вьегой, сформулировавшим «24 смертных греха программиста», и создали это полезнейшее руководство, в котором на разнообразных примерах продемонстрированы как сами ошибки программирования, так и способы их исправления и защиты от взлома систем.
Оглавление
Об авторах . . . . . . . . . . . . . . . 24
Предисловие . . . . . . . . . . . . . . 26
Благодарности . 30
Введение . 32
Кому и зачем следует читать эту книгу . 34
Часть I. Грехи веб-приложений
Грех 1. Внедрение SQL . 37
Общие сведения 37
Ссылки CWE . 39
Потенциально опасные языки 39
Объяснение . 39
Пара слов по поводу LINQ . 40
C# 40
PHP 41
Perl/CGI . 41
Python 42
Ruby on Rails 42
Java и JDBC . 42
C/C++ 43
SQL . 44
Сопутствующие грехи 45
Признаки греха 46
Выявление в ходе анализа кода . 46
Приемы тестирования для обнаружения греха 47
Примеры 49
CVE-2006-4953 . 50
CVE-2006-4592 . 50
Путь к искуплению 51
Проверка всего ввода 51
Использование подготовленных команд для построения команд SQL 51
C# 52
PHP 5.0/MySQL 4.1 и выше 52
Perl/CGI . 53
Python 53
Java с JDBC 54
ColdFusion 55
SQL . 55
Использование QUOTENAME и REPLACE . 56
Стоит ли использовать DBMS_ASSERT? 56
Использование CAT.NET 56
Дополнительные меры безопасности 57
Шифрование конфиденциальных и личных данных 57
Использование URLScan 57
Другие ресурсы 58
Итоги 59
Грех 2. Уязвимости, связанные с веб-серверами (XSS, XSRF и расщепление ответа) . . . . . . 60
Общие сведения 60
Ссылки CWE . 61
Потенциально опасные языки 62
Объяснение . 62
Атаки XSS на базе DOM (тип 0) 62
Отраженные атаки XSS, несохраняемые атаки XSS (тип 1) . 62
Сохраняемые атаки XSS, долгосрочные атаки XSS (тип 2) 65
Расщепление ответа HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Межсайтовая фальсификация запросов 67
Ruby on Rails (XSS) 68
Ruby on Rails (расщепление ответа) 68
Приложение CGI, написанное на Python (XSS) . 69
Приложение CGI, написанное на Python (расщепление ответа) 69
ColdFusion (XSS) . 69
C/C++ ISAPI (XSS) 69
C/C++ ISAPI (расщепление ответа) . 70
ASP (XSS) 70
ASP (расщепление ответа) . 70
Формы ASP.NET (XSS) . 70
ASP.NET (расщепление ответа) 70
JSP (XSS) . 71
JSP (расщепление ответа) . 71
PHP (XSS) . 71
PHP (расщепление ответа) 71
CGI/Perl (XSS) 71
mod_perl (XSS) . 72
mod_perl (расщепление ответа) 72
Запросы HTTP (XSRF) . 72
Признаки греха 72
Выявление в ходе анализа кода . 73
Выявление дефектов XSRF в ходе анализа кода . 74
Приемы тестирования для обнаружения греха 74
Примеры 75
CVE-2003-0712 Microsoft Exchange 5.5 Outlook Web Access XSS . 75
CVE-2004-0203 Microsoft Exchange 5.5 Outlook Web Access:
расщепление ответа 76
CVE-2005-1674 Help Center Live (XSS и XSRF) 76
Путь к искуплению (XSS и расщепление ответа) . 76
Ruby on Rails (XSS) 77
ISAPI C/C++ (XSS) 77
Python (XSS) . 78
ASP (XSS) 78
ASP.NET Web Forms (XSS) 79
ASP.NET Web Forms (RS) . 79
JSP (XSS) . 80
PHP (XSS) . 82
CGI (XSS) 82
mod_perl (XSS) . 83
Путь к искуплению (XSRF) 83
По поводу тайм-аута . 83
По поводу POST/GET . 84
Ruby on Rails (XSRF) . 84
ASP.NET Web Forms (XSRF) . 84
Умеренное использование защитного кодирования HTML . 85
Дополнительные защитные меры . 86
Cookie с пометкой HttpOnly 86
Заключение свойств тегов в кавычки . 86
Свойство ASP.NET ViewStateUserKey . 86
Параметр ASP.NET ValidateRequest 87
ASP.NET Security Runtime Engine . 87
OWASP CSRFGuard . 87
Apache::TaintRequest . 87
UrlScan 87
Выбор кодировки по умолчанию 88
Другие ресурсы 88
Итоги 89
Грех 3. Уязвимости, связанные с веб-клиентами (XSS) . . . . . . . . . . . . . . . . . . . . . . . 91
Общие сведения 91
Ссылки CWE . 93
Потенциально опасные языки 93
Объяснение . 93
Уязвимые гаджеты и конфиденциальность 94
JavaScript и HTML 95
Признаки греха 95
Выявление в ходе анализа кода . 96
Приемы тестирования для обнаружения греха 96
Примеры 97
Microsoft ISA Server XSS CVE-2003-0526 . 97
Windows Vista Sidebar CVE-2007-3033 и CVE-2007-3032 . 97
Yahoo! Instant Messenger ActiveX Control CVE-2007-4515 . 98
Путь к искуплению 98
Не используйте непроверенные входные данные . 98
Замена небезопасных конструкций . 99
Дополнительные защитные меры . 100
Другие ресурсы 100
Итоги 100
Грех 4. «Волшебные URL», предсказуемые cookie и скрытые поля форм . . . . . . . . . . . . . . 102
Общие сведения 102
Ссылки CWE . 103
Потенциально опасные языки 103
Объяснение . 103
Волшебные URL 103
Предсказуемые cookie 104
Скрытые поля форм 104
Сопутствующие грехи 104
Признаки греха 104
Выявление в ходе анализа кода . 105
Приемы тестирования для обнаружения греха 106
Примеры 107
CVE-2005-1784 . 107
Путь к искуплению . 107
Атакующий просматривает данные . 107
Атакующий воспроизводит данные . 108
Атакующий угадывает данные 109
Атакующий изменяет данные 110
Дополнительные меры безопасности 111
Другие ресурсы 111
Итоги 111
Часть II. Грехи реализации
Грех 5. Переполнение буфера . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Ссылки CWE . 116
Потенциально опасные языки 117
Объяснение . 118
64-разрядные аспекты 121
C/C++ 122
Сопутствующие грехи 124
Признаки греха 125
Выявление в ходе анализа кода . 125
Приемы тестирования для обнаружения греха 126
Примеры 127
CVE-1999-0042 . 127
CVE-2000-0389–CVE-2000-0392 . 127
CVE-2002-0842, CVE-2003-0095, CAN-2003-0096 . 128
AN-2003-0352 128
Путь к искуплению 129
Замена опасных функций для работы со строками 129
Контроль за выделением памяти 129
Проверка циклов и обращений к массивам 130
Замена строковых буферов C строками C++ . 130
Замена статических массивов контейнерами STL . 130
Использование средств анализа . 130
Дополнительные защитные меры 131
Защита стека 131
Неисполняемый стек и куча 132
Другие ресурсы 132
Итоги 133
Грех 6. Дефекты форматных строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Общие сведения 134
Ссылки CWE . 135
Потенциально опасные языки 135
Объяснение . 135
C/C++ 138
Сопутствующие грехи 139
Признаки греха 139
Выявление в ходе анализа кода . 139
Приемы тестирования для обнаружения греха 140
Примеры 140
CVE-2000-0573 . 140
CVE-2000-0844 . 140
Путь к искуплению 141
C/C++ 141
Дополнительные меры безопасности 142
Другие ресурсы 142
Итоги 142
Грех 7. Целочисленные переполнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Общие сведения 143
Ссылки CWE . 144
Потенциально опасные языки 144
Объяснение . 144
C/C++ 145
Операции преобразования 145
Преобразования операторов 147
Операции сравнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Двоичные операции 150
Проблемы 64-разрядного портирования . 150
Опасные оптимизации . 152
C# 152
Ключевые слова сhecked и unchecked . 153
Visual Basic и Visual Basic .NET 154
Java 155
Perl 155
Признаки греха 156
Выявление в ходе анализа кода . 156
C/C++ 157
C# 159
Java 159
Visual Basic и Visual Basic .NET 159
Perl 160
Приемы тестирования для обнаружения греха 160
Примеры 160
Множественные целочисленные переполнения в SearchKit API
для Apple Mac OS X . 160
Целочисленное переполнение в Google Android SDK 161
Выполнение произвольного кода через дефект
в Windows Script Engine . 161
Переполнение буфера в куче HTR 161
Путь к искуплению 162
Вспомните математику 162
Не изощряйтесь 162
Запись преобразований типов . 163
Используйте SafeInt 164
Дополнительные меры безопасности 165
Другие ресурсы 166
Итоги 166
Грех 8. Катастрофы C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Общие сведения 167
Ссылки CWE . 168
Потенциально опасные языки 168
Объяснение . 169
Вызовы delete 169
Копирующие конструкторы . 170
Уязвимые конструкторы . 171
Отсутствие повторной инициализации . 172
Неумение использовать STL 172
Инициализация указателей . 173
Признаки греха 173
Выявление в ходе анализа кода . 174
Приемы тестирования для обнаружения греха 174
Примеры 174
CVE-2008-1754 . 174
Путь к искуплению 175
Несоответствие между new и delete . 175
Копирующий конструктор . 175
Инициализация в конструкторе . 176
Повторная инициализация . 176
STL 177
Неинициализированные указатели . 177
Дополнительные меры безопасности 177
Другие ресурсы 178
Итоги 178
Грех 9. Обработка исключений . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Общие сведения 179
Ссылки CWE . 179
Потенциально опасные языки 180
Объяснение . 180
Исключения C++ . 180
Уязвимости структурированной обработки исключений 183
Обработка сигналов 185
C#, VB.NET и Java . 185
Ruby 186
Признаки греха 186
Выявление в ходе анализа кода . 187
Приемы тестирования для обнаружения греха 188
Примеры 188
CVE-2007-0038 . 188
Путь к искуплению 188
C++ . 188
SEH . 189
Обработчики сигналов . 189
Другие ресурсы 190
Итоги 190
Грех 10. Внедрение команд . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Общие сведения 191
Ссылки CWE 192
Потенциально опасные языки 192
Объяснение . 192
Сопутствующие грехи 194
Признаки греха 194
Выявление в ходе анализа кода . 194
Приемы тестирования для обнаружения греха 196
Примеры 197
CAN-2001-1187 . 197
CAN-2002-0652 . 197
Путь к искуплению . 198
Проверка данных . 198
Если данные не прошли проверку . 201
Дополнительные защитные меры . 201
Другие ресурсы 202
Итоги 202
Грех 11. Некорректная обработка ошибок . . . . . . . . . . . . . . . . . . . . . . . . 203
Общие сведения 203
Ссылки CWE . 204
Потенциально опасные языки 204
Объяснение . 204
Предоставление лишней информации . 204
Игнорирование ошибок . 204
Неверная интерпретация ошибок 205
Бесполезные возвращаемые значения 206
Возвращение допустимых значений в случае ошибки 206
C/C++ 206
C/C++ для Windows . 207
Сопутствующие грехи 208
Признаки греха 208
Выявление в ходе анализа кода . 208
Приемы тестирования для обнаружения греха 208
Примеры 208
CVE-2007-3798 tcpdump print-bgp.c: уязвимость переполнения буфера . 208
CVE-2004-0077 ядро Linux: do_mremap 208
Путь к искуплению 209
C/C++ 209
C/C++ при использовании Microsoft Visual C++ 209
Другие ресурсы 210
Итоги 210
Грех 12. Утечка информации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Общие сведения 211
Ссылки CWE . 212
Потенциально опасные языки 212
Объяснение 212
Побочные каналы 213
Временные каналы 213
Избыток информации 214
Подробная информация версии 214
Информация о сетевых хостах 215
Информация о приложениях . 215
Информация о пути 216
Информация о структуре стека 216
Модель безопасности передачи информации . 216
C# (и любой другой язык) 218
Сопутствующие грехи 218
Признаки греха 219
Выявление в ходе анализа кода . 219
Приемы тестирования для обнаружения греха 220
Сценарий «украденного ноутбука» . 220
Примеры 221
CVE-2008-4638 . 221
CVE-2005-1133 . 221
Путь к искуплению 221
C# (и другие языки) . 222
Локальные адреса 223
Дополнительные меры безопасности 223
Другие ресурсы 224
Итоги 225
Грех 13. Ситуация гонки . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Ссылки CWE . 227
Потенциально опасные языки 227
Объяснение . 227
Язык C . 229
Сопутствующие грехи 230
Признаки греха 230
Выявление в ходе анализа кода . 231
Приемы тестирования для обнаружения греха 232
Примеры 232
CVE-2008-0379 . 232
CVE-2008-2958 . 233
CVE-2001-1349 . 233
CAN-2003-1073 . 233
CVE-2000-0849 . 233
Путь к искуплению 234
Дополнительные меры безопасности 236
Другие ресурсы 236
Итоги 236
Грех 14. Слабое юзабилити . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Общие сведения 237
Ссылки CWE . 238
Потенциально опасные языки 238
Объяснение . 238
Представления о пользователях 239
Минное поле: вывод информации о безопасности для пользователей 240
Сопутствующие грехи 241
Признаки греха 241
Выявление в ходе анализа кода . 241
Приемы тестирования для обнаружения греха 242
Примеры . 242
Проверка подлинности сертификатов SSL/TLS 242
Установка корневых сертификатов в Internet Explorer 4.0 243
Путь к искуплению 244
Пользовательский интерфейс должен быть простым и понятным 244
Принимайте решения безопасности за пользователей . 244
Не только кнут, но и пряник 245
Упростите избирательное смягчение политики безопасности . 246
Четко описывайте последствия 247
Предоставьте возможность действовать 248
Предоставьте централизованное управление . 248
Другие ресурсы 248
Итоги 249
Грех 15. Трудности с обновлением . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Общие сведения 250
Ссылки CWE . 251
Потенциально опасные языки 251
Объяснение . 251
Установка дополнительных программ 251
Управление доступом . 251
Раздражающие напоминания 252
Нехватка информации . 252
Обновление без оповещения 252
Децентрализованное обновление . 252
Принудительная перезагрузка 252
Слишком сложное обновление . 253
Отсутствие плана восстановления . 253
Доверие к DNS 253
Доверие к серверу обновлений 253
Цифровые подписи обновлений . 253
Распаковка обновлений . 254
Установка на пользовательском уровне . 254
Признаки греха 254
Выявление греха в ходе анализа кода 255
Приемы тестирования для обнаружения греха 255
Примеры 255
Обновление Apple QuickTime . 255
Исправления Microsoft SQL Server 2000 . 256
Браузер Google Chrome . 256
Путь к искуплению 256
Отказ от установки дополнительных программ 256
Управление доступом . 256
Раздражающие напоминания 257
Отсутствие информации . 257
Обновление без оповещения 257
Децентрализованное обновление . 257
Принудительная перезагрузка 258
Слишком сложное обновление . 258
Отсутствие плана восстановления . 259
Доверие к DNS 259
Доверие к серверу обновлений 259
Цифровые подписи обновлений . 260
Распаковка обновлений . 260
Установка на пользовательском уровне . 260
Дополнительные меры безопасности 261
Другие ресурсы 261
Итоги 261
Грех 16. Выполнение кода с завышенными привилегиями . . . . . . . . . . . . . . . . . . . . . . 262
Общие сведения 262
Ссылки CWE . 263
Потенциально опасные языки 263
Объяснение . 263
Сопутствующие грехи 264
Признаки греха 265
Выявление в ходе анализа кода . 265
Приемы тестирования для обнаружения греха 265
Примеры 266
Путь к искуплению 266
Windows, C и C++ 267
Linux, BSD и Mac OS X . 269
Код .NET . 270
Дополнительные меры безопасности 270
Другие ресурсы 270
Итоги 270
Грех 17. Хранение незащищенных данных . . . . . . . . . . . . . . . . . . . . . . . . 271
Общие сведения 271
Ссылки CWE . 272
Потенциально опасные языки 272
Объяснение . 272
Слабое управление доступом к хранимым данным . 272
Списки ACL системы Windows . 273
Модель разрешений UNIX . 273
Управление доступом . 274
Отсутствие ограничений доступа . 276
Слабое шифрование хранимых данных 276
Сопутствующие грехи 277
Признаки греха 277
Выявление в ходе анализа кода . 278
Приемы тестирования для обнаружения греха 278
Примеры 279
CVE-2000-0100 . 280
CVE-2005-1411 . 280
CVE-2004-0907 . 280
Путь к искуплению 280
C++ для Windows 281
C# для Windows . 282
C/C++ (GNOME) 282
Дополнительные меры безопасности 283
Другие ресурсы 283
Итоги 283
Грех 18. Дефекты мобильного кода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Общие сведения 284
Ссылки CWE . 286
Потенциально опасные языки 286
Объяснение . 286
Мобильный код 287
Контейнеры мобильного кода . 287
Сопутствующие грехи 287
Признаки греха 288
Выявление в ходе анализа кода . 288
Приемы тестирования для обнаружения греха 289
Примеры 289
CVE-2006-2198 . 289
CVE-2008-1472 . 290
CVE-2008-5697 . 290
Путь к искуплению 290
Контейнеры мобильного кода . 290
Мобильный код 292
Дополнительные меры безопасности 292
Другие ресурсы 292
Итоги 293
Часть III. Криптографические грехи
Грех 19. Слабые пароли . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Общие сведения 297
Ссылки CWE . 298
Потенциально опасные языки 298
Объяснение . 298
Разглашение паролей . 299
Слабые пароли 299
Серийные пароли . 300
Неограниченный срок действия пароля 300
Пароли по умолчанию 300
Атаки повторного воспроизведения 300
Хранение паролей вместо хеш-кодов 301
Атаки методом «грубой силы» против хеш-кодов паролей . 301
Разглашение информации о причине отказа 302
Атаки реального времени 302
Восстановление забытого пароля . 303
Сопутствующие грехи 303
Признаки греха 303
Разглашение паролей . 303
Слабые пароли 303
Серийные пароли . 303
Неограниченный срок действия пароля 304
Пароли по умолчанию 304
Атаки повторного воспроизведения 304
Атаки методом «грубой силы» 304
Хранение паролей вместо хеш-кодов 305
Атаки реального времени 305
Возвращение забытого пароля вместо сброса 305
Признаки греха 305
Приемы тестирования для обнаружения греха 306
Разглашение паролей . 306
Атаки повторного воспроизведения 306
Атаки методом «грубой силы» 306
Примеры 307
Впереди зомби! . 307
Пароль для изменения файлов Microsoft Office 307
Шифрование в Adobe Acrobat . 308
Аварийные ядра WU-ftpd . 308
CVE-2005-1505 . 308
CVE-2005-0432 . 309
Ошибка TENEX . 309
Взлом электронной почты Сары Пэйлин 309
Путь к искуплению 309
Разглашение пароля 310
Слабые пароли 310
Серийные пароли . 310
Изменение паролей . 310
Пароли по умолчанию 311
Атаки повторного воспроизведения 311
Проверка пароля 311
Атаки реального времени методом «грубой силы» 312
Утечка информации о регистрационных данных 313
Забытый пароль . 313
Дополнительные меры безопасности 313
Другие ресурсы 314
Итоги 314
Грех 20. Слабые случайные числа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Ссылки CWE . 316
Потенциально опасные языки 317
Объяснение . 317
Не-криптографические генераторы 318
Криптографические генераторы . 318
Чистые генераторы случайных чисел . 319
Сопутствующие грехи . 320
Признаки греха 320
Выявление греха в ходе анализа кода 321
Поиск мест для использования случайных чисел 321
Поиск мест использования ГПСЧ . 321
Проверка правильности инициализации КГСЧ . 322
Приемы тестирования для обнаружения греха 323
Примеры 323
Порядковые номера TCP/IP . 323
Стандарт шифрования документов ODF 323
CVE-2008-0166: Генерирование «случайного» ключа в Debian . 325
Браузер Netscape 325
Путь к искуплению 325
Windows, C и C++ 325
Windows с поддержкой TPM (Trusted Platform Module) . 326
Код для .NET . 327
UNIX 327
Java 328
Повторное воспроизведение числовых потоков 329
Дополнительные меры безопасности 329
Другие ресурсы 330
Итоги 330
Грех 21. Неудачный выбор криптографии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Общие сведения 332
Ссылки CWE . 333
Потенциально опасные языки 333
Объяснение . 333
Доморощенные криптографические решения . 333
Создание протоколов на базе низкоуровневых алгоритмов там,
где достаточно высокоуровневых протоколов 334
Использование слабых криптографических примитивов . 334
Неправильное использование криптографических примитивов 335
Неправильный выбор криптографических примитивов 338
Неправильный выбор коммуникационных протоколов 338
Отсутствие затравки . 338
Отсутствие случайного вектора инициализации 338
Слабые функции установления ключа . 339
Отсутствие проверки целостности 339
Отсутствие гибкого шифрования . 340
Сопутствующие грехи . 340
Признаки греха 340
Выявление греха в ходе анализа кода 341
Доморощенные криптографические решения (VB.NET и C++) . . . . . . . . . . . . . . . 341
Создание протоколов на базе низкоуровневых алгоритмов там,
где достаточно высокоуровневых протоколов 342
Использование слабых криптографических примитивов (C# и C++) . 342
Неправильное использование криптографических примитивов
(Ruby, C# и C++) 342
Неправильный выбор криптографических примитивов 343
Неправильный выбор коммуникационных протоколов 343
Приемы тестирования для обнаружения греха 343
Примеры 343
Цифровые сертификаты и слабые хеши 343
Маскировка XOR в Microsoft Office 344
Adobe Acrobat и слабая KDF в Microsoft Office 344
Путь к искуплению 345
Доморощенные криптографические решения . 345
Создание протоколов на базе низкоуровневых алгоритмов там,
где достаточно высокоуровневых протоколов 345
Неправильный выбор криптографических примитивов 345
Неправильное использование криптографических примитивов 345
Конкатенация 346
Неверный выбор криптографических примитивов . 347
Отсутствие затравки . 347
Отсутствие случайного вектора инициализации 347
Слабые функции установления ключа . 348
Отсутствие проверки целостности 348
Отсутствие гибкого шифрования . 349
Неправильный выбор коммуникационных протоколов 349
Дополнительные меры безопасности 350
Другие ресурсы 350
Итоги 350
Часть IV. Сетевые грехи
Грех 22. Незащищенный сетевой трафик . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Общие сведения 355
Ссылки CWE 356
Потенциально опасные языки 356
Объяснение . 356
Сопутствующие грехи . 360
Признаки греха 361
Выявление греха в ходе анализа кода 361
Приемы тестирования для обнаружения греха 361
Примеры 362
TCP/IP 362
Протоколы электронной почты 363
E*TRADE . 363
Путь к искуплению 363
Дополнительные меры безопасности 364
Другие ресурсы 364
Итоги 364
Грех 23. Неправильное использование PKI (и особенно SSL) . . . . . . . . . . . . . . . . . . . . 366
Общие сведения 366
Ссылки CWE . 367
Потенциально опасные языки 368
Объяснение . 368
Сопутствующие грехи 369
Признаки греха 369
Выявление греха в ходе анализа кода 369
Приемы тестирования для обнаружения греха 371
Примеры 372
CVE-2007-4680 . 372
CVE-2008-2420 . 372
Путь к искуплению 372
Проверка действительности сертификата . 373
Проверка имени хоста 374
Проверка отзыва сертификата 375
Иногда некоторые проверки PKI можно не использовать 376
Дополнительные меры безопасности 376
Другие ресурсы 376
Итоги 377
Грех 24. Доверие к механизму разрешения сетевых имен . . . . . . . . . . . . . . . . . . . . . . . . 378
Общие сведения 378
Ссылки CWE . 379
Потенциально опасные языки 379
Объяснение . 379
Грех в приложениях 382
Сопутствующие грехи 383
Признаки греха 383
Выявление греха в ходе анализа кода 384
Приемы тестирования для обнаружения греха 384
Примеры 385
CVE-2002-0676 . 385
CVE-1999-0024 . 385
Путь к искуплению 386
Другие ресурсы 387
Итоги 387
Алфавитный указатель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 |