Уязвимости в программном коде и борьба с ними
Покупка
Тематика:
Защита информации. Компьютерная безопасность / Проектирование, отладка и тестирование ПО. Вспомогательные средства проектирования. CASE-технологии
Издательство:
ДМК Пресс
Перевод:
Слинкин Алексей Александрович
Год издания: 2023
Кол-во страниц: 289
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Профессиональное образование
ISBN: 978-5-89818-460-5
Артикул: 606531.03.99
Доступ онлайн
В корзину
Эта книга необходима всем разработчикам программного обеспечения, независимо от платформы, языка или вида приложений. Рассмотрены уязвимости на языках C/C++, C#, Java, Visual Basic, Visual Basic .NET, Perl, Python в операционных системах Windows, Unix, Linux, Mac OS, Novell Netware. Авторы издания, Майкл Ховард и Дэвид Лебланк, обучают программистов как писать безопасный код в компании Microsoft. На различных примерах продемонстрированы как сами ошибки, так и способы их исправления и защиты от них. Если вы — программист, то вам просто необходимо прочесть эту книгу.
- Полная коллекция по информатике и вычислительной технике
- ДМК Пресс. Информационная безопасность
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для профессионалов
- Защита информации. Компьютерная безопасность
- Интермедиатор. Информационная безопасность (сводная)
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для профессионалов (сводная)
- Интермедиатор. Обеспечение безопасности (сводная)
- Информационная безопасность
Тематика:
- 0604: Защита информации. Компьютерная безопасность
- 061407: Проектирование, отладка и тестирование ПО. Вспомогательные средства проектирования. CASE-технологии
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 10.03.01: Информационная безопасность
- ВО - Специалитет
- 10.05.01: Компьютерная безопасность
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Майкл Ховард, Дэвид Лебланк, Джон Виега Уязвимости в программном коде и борьба с ними
MICHAEL HOWARD DAVID LEBLANC JOHN VIEGA McGrawHill/Osborne New York Chicago San Francisco Lisbon London Madrid Mexico City Milan New Delhi San Juan Seoul Singapore Sydney Toronto 19 Deadly Sins of Software Security. Programming Flaws and How to Fix Rhem
Уязвимости в программном коде и борьба с ними Москва, 2023 МАЙКЛ ХОВАРД ДЭВИД ЛЕБЛАНК ДЖОН ВИЕГА 2-е издание, электронное
УДК 004.4 ББК 32.973.26-018.2 Х68 Х68 Ховард, Майкл. Уязвимости в программном коде и борьба с ними / М. Ховард, Д. Лебланк, Дж. Виега ; пер. с англ. А. А. Слинкина. — 2-е изд., эл. — 1 файл pdf : 289 с. — Москва : ДМК Пресс, 2023. — Систем. требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 10". — Текст : электронный. ISBN 978-5-89818-460-5 Эта книга необходима всем разработчикам программного обеспечения, независимо от платформы, языка или вида приложений. Рассмотрены уязвимости на языках C/C++, C#, Java, Visual Basic, Visual Basic .NET, Perl, Python в операционных системах Windows, Unix, Linux, Mac OS, Novell Netware. Авторы издания, Майкл Ховард и Дэвид Лебланк, обучают программистов как писать безопасный код в компании Microsoft. На различных примерах продемонстрированы как сами ошибки, так и способы их исправления и защиты от них. Если вы — программист, то вам просто необходимо прочесть эту книгу. УДК 004.4 ББК 32.973.26-018.2 Электронное издание на основе печатного издания: Уязвимости в программном коде и борьба с ними / М. Хо- вард, Д. Лебланк, Дж. Виега ; пер. с англ. А. А. Слинкина. — Москва : ДМК Пресс, 2011. — 288 с. — ISBN 978-5- 94074-240-1. — Текст : непосредственный. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации. ISBN 978-5-89818-460-5 © Перевод на русский язык, оформление, издание, ДМК Пресс, 2011
Моей потрясающей семье. Ничто не может сравниться с ощущением, которое испытываешь, когда приходишь домой и в ответ на вопрос «Кто дома, ребятки?» слышишь, как два голоска хором кричат: «Папа!» – Майкл Моему отцу, который объяснил мне, почему надо постоянно учиться и принимать новые вызовы. – Дэвид Маме. Она привила мне интеллектуальное любопытство и всегда была со мной рядом. – Джон
Содержание Об авторах .................................................................................... 18 О научных редакторах .................................................................. 19 Предисловие ................................................................................ 20 Благодарности ............................................................................. 22 Введение....................................................................................... 23 Структура книги.......................................................................... 24 Кому предназначена эта книга ................................................... 25 Какие главы следует прочитать .................................................. 25 Грех 1. Переполнение буфера ................................................ 26 В чем состоит грех ..................................................................... 26 Подверженные греху языки ........................................................ 27 Как происходит грехопадение .................................................... 27 Греховность C/C++................................................................. 31 Родственные грехи................................................................. 33 Где искать ошибку ...................................................................... 33 Выявление ошибки на этапе анализа кода ................................. 33 Тестирование ............................................................................. 34 Примеры из реальной жизни ...................................................... 35 CVE19990042 ....................................................................... 35 CVE20000389 – CVE20000392 ........................................... 35 CVE20020842, CVE20030095, CAN20030096 ................... 35 CAN20030352....................................................................... 36 Искупление греха ....................................................................... 37 Замена опасных функций работы со строками....................... 37 Следите за выделениями памяти ........................................... 37 Проверьте циклы и доступ к массивам ................................... 37 Пользуйтесь строками в стиле C++, а не C ............................. 37 Пользуйтесь STLконтейнерами вместо статических массивов ................................................................................ 38
Содержание Содержание Содержание Содержание Содержание Пользуйтесь инструментами анализа .................................... 38 Дополнительные защитные меры............................................... 38 Защита стека.......................................................................... 39 Запрет исполнения в стеке и куче .......................................... 39 Другие ресурсы .......................................................................... 39 Резюме....................................................................................... 40 Грех 2. Ошибки, связанные с форматной строкой ............ 42 В чем состоит грех ..................................................................... 42 Подверженные греху языки ........................................................ 42 Как происходит грехопадение .................................................... 43 Греховность C/C++................................................................. 45 Родственные грехи................................................................. 45 Где искать ошибку ...................................................................... 46 Выявление ошибки на этапе анализа кода ................................. 46 Тестирование ............................................................................. 46 Примеры из реальной жизни ...................................................... 47 CVE20000573 ....................................................................... 47 CVE20000844 ....................................................................... 47 Искупление греха ....................................................................... 47 Искупление греха в C/C++ ...................................................... 48 Дополнительные защитные меры............................................... 48 Другие ресурсы .......................................................................... 48 Резюме....................................................................................... 48 Грех 3. Переполнение целых чисел ....................................... 49 В чем состоит грех ..................................................................... 49 Подверженные греху языки ........................................................ 49 Как происходит грехопадение .................................................... 49 Греховность C и C++ .............................................................. 50 Поразрядные операции ......................................................... 55 Греховность C# ...................................................................... 55 Греховность Visual Basic и Visual Basic .NET ........................... 56 Греховность Java.................................................................... 57 Греховность Perl..................................................................... 58 Где искать ошибку ...................................................................... 59 Выявление ошибки на этапе анализа кода ................................. 59 C/C++ ..................................................................................... 59 C# .......................................................................................... 61 Java ........................................................................................ 62 Visual Basic и Visual Basic .NET ................................................ 62
Содержание Содержание Содержание Содержание Содержание Perl ......................................................................................... 62 Тестирование ............................................................................. 62 Примеры из реальной жизни ...................................................... 62 Ошибка в интерпретаторе Windows Script позволяет выполнить произвольный код ................................................ 63 Переполнение целого в конструкторе объекта SOAPParameter....................................................................... 63 Переполнение кучи в HTRдокументе, передаваемом поблочно, может скомпрометировать Webсервер ................ 63 Искупление греха ....................................................................... 64 Дополнительные защитные меры............................................... 66 Другие ресурсы .......................................................................... 66 Резюме....................................................................................... 66 Не рекомендуется .................................................................. 66 Грех 4. Внедрение SQLкоманд .............................................. 67 В чем состоит грех ..................................................................... 67 Подверженные греху языки ........................................................ 67 Как происходит грехопадение .................................................... 68 Греховность C# ...................................................................... 68 Греховность PHP .................................................................... 69 Греховность Perl/CGI.............................................................. 69 Греховность Java.................................................................... 70 Греховность SQL .................................................................... 71 Родственные грехи................................................................. 72 Где искать ошибку ...................................................................... 72 Выявление ошибки на этапе анализа кода ................................. 72 Тестирование ............................................................................. 73 Примеры из реальной жизни ...................................................... 75 CAN20040348....................................................................... 75 CAN20020554....................................................................... 75 Искупление греха ....................................................................... 75 Проверяйте все входные данные ........................................... 76 Никогда не применяйте конкатенацию для построения SQLпредложений .................................................................. 76 Дополнительные защитные меры............................................... 79 Другие ресурсы .......................................................................... 79 Резюме....................................................................................... 80 Грех 5. Внедрение команд....................................................... 82 В чем состоит грех ..................................................................... 82
Содержание Содержание Содержание Содержание Содержание Подверженные греху языки ........................................................ 82 Как происходит грехопадение .................................................... 82 Родственные грехи................................................................. 84 Где искать ошибку ...................................................................... 84 Выявление ошибки на этапе анализа кода ................................. 84 Тестирование ............................................................................. 86 Примеры из реальной жизни ...................................................... 86 CAN20011187....................................................................... 86 CAN20020652....................................................................... 87 Искупление греха ....................................................................... 87 Контроль данных .................................................................... 87 Если проверка не проходит .................................................... 90 Дополнительные защитные меры............................................... 90 Другие ресурсы .......................................................................... 91 Резюме....................................................................................... 91 Грех 6. Пренебрежение обработкой ошибок....................... 92 В чем состоит грех ..................................................................... 92 Подверженные греху языки ........................................................ 92 Как происходит грехопадение .................................................... 92 Раскрытие излишней информации ........................................ 92 Игнорирование ошибок ......................................................... 93 Неправильная интерпретация ошибок ................................... 93 Бесполезные возвращаемые значения .................................. 94 Обработка не тех исключений, что нужно ............................... 94 Обработка всех исключений .................................................. 94 Греховность C/C++................................................................. 94 Греховность C/C++ в Windows ................................................ 95 Греховность C++ .................................................................... 96 Греховность C#, VB.NET и Java .............................................. 96 Родственные грехи................................................................. 97 Где искать ошибку ...................................................................... 97 Выявление ошибки на этапе анализа кода ................................. 97 Тестирование ............................................................................. 97 Примеры из реальной жизни ...................................................... 98 CAN20040077 do_mremap в ядре Linux................................. 98 Искупление греха ....................................................................... 98 Искупление греха в C/C++ ...................................................... 98 Искупление греха в C#, VB.NET и Java.................................... 99 Другие ресурсы .......................................................................... 99 Резюме..................................................................................... 100
10 10 10 10 Содержание Содержание Содержание Содержание Содержание Грех 7. Кросссайтовые сценарии....................................... 101 В чем состоит грех ................................................................... 101 Подверженные греху языки ...................................................... 101 Как происходит грехопадение .................................................. 101 Греховное ISAPIрасширение или фильтр на C/C++ ............. 102 Греховность ASP .................................................................. 103 Греховность форм ASP.NET .................................................. 103 Греховность JSP................................................................... 103 Греховность PHP .................................................................. 103 Греховность Perlмодуля CGI.pm.......................................... 103 Греховность modperl........................................................... 104 Где искать ошибку .................................................................... 104 Выявление ошибки на этапе анализа кода ............................... 104 Тестирование ........................................................................... 105 Примеры из реальной жизни .................................................... 106 Уязвимость IBM Lotus Domino для атаки с кросссайтовым сценарием и внедрением HTML .............. 106 Ошибка при контроле входных данных в сценарии isqlplus, входящем в состав Oracle HTTP Server, позволяет удаленному пользователю провести атаку с кросссайтовым сценарием .............................................. 106 CVE20020840 ..................................................................... 107 Искупление греха ..................................................................... 107 Искупление греха в ISAPIрасширениях и фильтрах на C/C++ .............................................................................. 107 Искупление греха в ASP ....................................................... 108 Искупление греха в ASP.NET ................................................. 108 Искупление греха в JSP ........................................................ 108 Искупление греха в PHP ....................................................... 110 Искупление греха в Perl/CGI ................................................. 110 Искупление греха в modperl ................................................ 111 Замечание по поводу HTMLкодирования ............................ 111 Дополнительные защитные меры............................................. 112 Другие ресурсы ........................................................................ 112 Резюме..................................................................................... 113 Грех 8. Пренебрежение защитой сетевого трафика ....... 114 В чем состоит грех ................................................................... 114 Подверженные греху языки ...................................................... 114 Как происходит грехопадение .................................................. 115 Родственные грехи............................................................... 117
11 11 11 11 Содержание Содержание Содержание Содержание Содержание Где искать ошибку .................................................................... 117 Выявление ошибки на этапе анализа кода ............................... 118 Тестирование ........................................................................... 121 Примеры из реальной жизни .................................................... 121 TCP/IP .................................................................................. 121 Протоколы электронной почты............................................. 122 Протокол E*Trade ................................................................. 122 Искупление греха ..................................................................... 122 Рекомендации низкого уровня ............................................. 123 Дополнительные защитные меры............................................. 126 Другие ресурсы ........................................................................ 126 Резюме..................................................................................... 126 Грех 9. Применение загадочных URL и скрытых полей форм ............................................................................... 128 В чем состоит грех ................................................................... 128 Подверженные греху языки ...................................................... 128 Как происходит грехопадение .................................................. 128 Загадочные URL ................................................................... 128 Скрытые поля формы ........................................................... 129 Родственные грехи............................................................... 129 Где искать ошибку .................................................................... 130 Выявление ошибки на этапе анализа кода ............................... 130 Тестирование ........................................................................... 131 Примеры из реальной жизни .................................................... 131 CAN20001001..................................................................... 132 Модификация скрытого поля формы в программе MaxWebPortal ....................................................................... 132 Искупление греха ..................................................................... 132 Противник просматривает данные ....................................... 132 Противник воспроизводит данные ....................................... 133 Противник предсказывает данные ....................................... 135 Противник изменяет данные ................................................ 136 Дополнительные защитные меры............................................. 137 Другие ресурсы ........................................................................ 137 Резюме..................................................................................... 137 Грех 10. Неправильное применение SSL и TLS ................. 138 В чем состоит грех ................................................................... 138 Подверженные греху языки ...................................................... 138 Как происходит грехопадение .................................................. 139
12 12 12 12 Содержание Содержание Содержание Содержание Содержание Родственные грехи............................................................... 142 Где искать ошибку .................................................................... 142 Выявление ошибки на этапе анализа кода ............................... 143 Тестирование ........................................................................... 144 Примеры из реальной жизни .................................................... 145 Почтовые клиенты ................................................................ 145 Webбраузер Safari ............................................................... 146 SSLпрокси Stunnel .............................................................. 146 Искупление греха ..................................................................... 147 Выбор версии протокола ..................................................... 147 Выбор семейства шифров ................................................... 148 Проверка сертификата......................................................... 149 Проверка имени хоста.......................................................... 150 Проверка отзыва сертификата ............................................. 151 Дополнительные защитные меры............................................. 153 Другие ресурсы ........................................................................ 153 Резюме..................................................................................... 154 Грех 11. Использование слабых систем на основе паролей ................................................................... 155 В чем состоит грех ................................................................... 155 Подверженные греху языки ...................................................... 155 Как происходит грехопадение .................................................. 155 Родственные грехи............................................................... 158 Где искать ошибку .................................................................... 158 Выявление ошибки на этапе анализа кода ............................... 158 Политика управления сложностью пароля ........................... 158 Смена и переустановка пароля ............................................ 159 Протоколы проверки паролей .............................................. 159 Ввод и хранение паролей ..................................................... 160 Тестирование ........................................................................... 160 Примеры из реальной жизни .................................................... 161 CVE20051505 ..................................................................... 161 CVE20050432 ..................................................................... 162 Ошибка в TENEX ................................................................... 162 Кража у Пэрис Хилтон .......................................................... 163 Искупление греха ..................................................................... 163 Многофакторная аутентификация ....................................... 163 Хранение и проверка паролей.............................................. 164 Рекомендации по выбору протокола .................................... 167 Рекомендации по переустановке паролей ........................... 168
13 13 13 13 Содержание Содержание Содержание Содержание Содержание Рекомендации по выбору пароля ......................................... 169 Прочие рекомендации ......................................................... 170 Дополнительные защитные меры............................................. 170 Другие ресурсы ........................................................................ 170 Резюме..................................................................................... 170 Не рекомендуется ................................................................ 171 Стоит подумать .................................................................... 171 Грех 12. Пренебрежение безопасным хранением и защитой данных.................................................................... 172 В чем состоит грех ................................................................... 172 Подверженные греху языки ...................................................... 172 Как происходит грехопадение .................................................. 172 Слабый контроль доступа к секретным данным ................... 172 Греховность элементов управления доступом ..................... 174 Встраивание секретных данных в код .................................. 176 Родственные грехи............................................................... 177 Где искать ошибку .................................................................... 177 Выявление ошибки на этапе анализа кода ............................... 178 Тестирование ........................................................................... 178 Примеры из реальной жизни .................................................... 181 CVE20000100 ..................................................................... 181 CAN20021590..................................................................... 181 CVE19990886 ..................................................................... 181 CAN20040311..................................................................... 182 CAN20040391..................................................................... 182 Искупление греха ..................................................................... 182 Использование технологий защиты, предоставляемых операционной системой ...................................................... 183 Искупление греха в C/C++ для Windows 2000 и последующих версий......................................................... 183 Искупление греха в ASP.NET версии 1.1 и старше ................ 185 Искупление греха в C# на платформе .NET Framework 2.0 ... 185 Искупление греха в C/C++ для Mac OS X версии v10.2 и старше............................................................................... 186 Искупление греха без помощи операционной системы (или «храните секреты от греха подальше») ......................... 186 Замечание по поводу Java и Java KeyStore ........................... 188 Дополнительные защитные меры............................................. 189 Другие ресурсы ........................................................................ 190 Резюме..................................................................................... 191
14 14 14 14 Содержание Содержание Содержание Содержание Содержание Грех 13. Утечка информации ................................................ 192 В чем состоит грех ................................................................... 192 Подверженные греху языки ...................................................... 192 Как происходит грехопадение .................................................. 193 Побочные каналы ................................................................. 193 Слишком много информации! .............................................. 194 Модель безопасности информационного потока ................. 196 Греховность C# (и других языков)........................................ 198 Родственные грехи............................................................... 198 Где искать ошибку .................................................................... 199 Выявление ошибки на этапе анализа кода ............................... 199 Тестирование ........................................................................... 200 Имитация кражи ноутбука .................................................... 200 Примеры из реальной жизни .................................................... 200 Атака с хронометражем Дэна Бернстайна на шифр AES ...... 201 CAN20051411..................................................................... 201 CAN20051133..................................................................... 201 Искупление греха ..................................................................... 202 Искупление греха в C# (и других языках) ............................. 203 Учет локальности.................................................................. 203 Дополнительные защитные меры............................................. 203 Другие ресурсы ........................................................................ 204 Резюме..................................................................................... 204 Грех 14. Некорректный доступ к файлам........................... 206 В чем состоит грех ................................................................... 206 Подверженные греху языки ...................................................... 206 Как происходит грехопадение .................................................. 207 Греховность C/C++ в Windows .............................................. 207 Греховность C/C++............................................................... 208 Греховность Perl................................................................... 208 Греховность Python .............................................................. 208 Родственные грехи............................................................... 209 Где искать ошибку .................................................................... 209 Выявление ошибки на этапе анализа кода ............................... 209 Тестирование ........................................................................... 210 Примеры из реальной жизни .................................................... 210 CAN20050004..................................................................... 210 CAN20050799..................................................................... 211 CAN20040452 и CAN20040448 ......................................... 211 CVE20040115 Microsoft Virtual PC для Macintosh ................ 211
15 15 15 15 Содержание Содержание Содержание Содержание Содержание Искупление греха ..................................................................... 211 Искупление греха в Perl ........................................................ 212 Искупление греха в C/C++ для Unix ...................................... 212 Искупление греха в C/C++ для Windows ............................... 213 Получение места нахождения временного каталога пользователя ....................................................................... 213 Искупление греха в .NET ...................................................... 213 Дополнительные защитные меры............................................. 214 Другие ресурсы ........................................................................ 214 Резюме..................................................................................... 214 Грех 15. Излишнее доверие к системе разрешения сетевых имен ............................................................................ 215 В чем состоит грех ................................................................... 215 Подверженные греху языки ...................................................... 215 Как происходит грехопадение .................................................. 215 Греховные приложения ........................................................ 218 Родственные грехи............................................................... 218 Где искать ошибку .................................................................... 219 Выявление ошибки на этапе анализа кода ............................... 219 Тестирование ........................................................................... 220 Примеры из реальной жизни .................................................... 220 CVE20020676 ..................................................................... 220 CVE19990024 ..................................................................... 221 Искупление греха ..................................................................... 221 Другие ресурсы ........................................................................ 222 Резюме..................................................................................... 223 Грех 16. Гонки........................................................................... 224 В чем состоит грех ................................................................... 224 Подверженные греху языки ...................................................... 224 Как происходит грехопадение .................................................. 224 Греховность кода ................................................................. 226 Родственные грехи............................................................... 227 Где искать ошибку .................................................................... 227 Выявление ошибки на этапе анализа кода ............................... 228 Тестирование ........................................................................... 229 Примеры из реальной жизни .................................................... 229 CVE20011349 ..................................................................... 229 CAN20031073..................................................................... 230 CVE20040849 ..................................................................... 230
16 16 16 16 Содержание Содержание Содержание Содержание Содержание Искупление греха ..................................................................... 230 Дополнительные защитные меры............................................. 232 Другие ресурсы ........................................................................ 232 Резюме..................................................................................... 233 Грех 17. Неаутентифицированный обмен ключами ........ 234 В чем состоит грех ................................................................... 234 Подверженные греху языки ...................................................... 234 Как происходит грехопадение .................................................. 234 Родственные грехи............................................................... 236 Где искать ошибку .................................................................... 236 Выявление ошибки на этапе анализа кода ............................... 236 Тестирование ........................................................................... 237 Примеры из реальной жизни .................................................... 237 Атака с «человеком посередине» на Novell Netware .............. 237 CAN20040155..................................................................... 238 Искупление греха ..................................................................... 238 Дополнительные защитные меры............................................. 239 Другие ресурсы ........................................................................ 239 Резюме..................................................................................... 239 Грех 18. Случайные числа криптографического качества ..................................................................................... 240 В чем состоит грех ................................................................... 240 Подверженные греху языки ...................................................... 240 Как происходит грехопадение .................................................. 240 Греховность некриптографических генераторов ................. 241 Греховность криптографических генераторов ..................... 242 Греховность генераторов истинно случайных чисел ............ 242 Родственные грехи............................................................... 243 Где искать ошибку .................................................................... 243 Выявление ошибки на этапе анализа кода ............................... 244 Когда следует использовать случайные числа ..................... 244 Выявление мест, где применяются PRNGгенераторы ........ 244 Правильно ли затравлен CRNGгенератор ........................... 245 Тестирование ........................................................................... 245 Примеры из реальной жизни .................................................... 246 Браузер Netscape ................................................................. 246 Проблемы в OpenSSL ........................................................... 246 Искупление греха ..................................................................... 247
17 17 17 17 Содержание Содержание Содержание Содержание Содержание Windows ................................................................................ 247 Код для .NET......................................................................... 248 Unix ...................................................................................... 248 Java ...................................................................................... 249 Повторное воспроизведение потока случайных чисел ......... 250 Дополнительные защитные меры............................................. 250 Другие ресурсы ........................................................................ 250 Резюме..................................................................................... 251 Стоит подумать .................................................................... 251 Грех 19. Неудобный интерфейс ........................................... 252 В чем состоит грех ................................................................... 252 Подверженные греху языки ...................................................... 252 Как происходит грехопадение .................................................. 252 Каков круг ваших пользователей? ........................................ 253 Минное поле: показ пользователям информации о безопасности .................................................................... 254 Родственные грехи............................................................... 254 Где искать ошибку .................................................................... 255 Выявление ошибки на этапе анализа кода ............................... 255 Тестирование ........................................................................... 255 Примеры из реальной жизни .................................................... 256 Аутентификация сертификата в протоколе SSL/TLS ............ 256 Установка корневого сертификата в Internet Explorer 4.0 ..... 257 Искупление греха ..................................................................... 257 Делайте интерфейс пользователя простым и понятным ...... 258 Принимайте за пользователей решения, касающиеся безопасности................................................... 258 Упрощайте избирательное ослабление политики безопасности ....................................................................... 259 Ясно описывайте последствия ............................................. 260 Помогайте пользователю предпринять действия................. 262 Предусматривайте централизованное управление.............. 263 Другие ресурсы ........................................................................ 263 Резюме..................................................................................... 264 Приложение A. Соответствие между 19 смертными грехами и «10 ошибками» OWASP ........................................ 265 Приложение B. Сводка рекомендаций ............................... 266 Предметный указатель .......................................................... 276
Об авторах Майкл Ховард работает старшим менеджером по безопасности программного обеспечения в группе по обеспечению безопасности в Microsoft Corp. Является соавтором удостоенной различных наград книги «Writing Secure Code» (Разработка безопасного кода). Он также совместно с коллегами ведет колонку «Basic Training» в журнале «IEEE Security & Privacy Magazine» и является одним из авторов документа «Processes to Produce Secure Software» («Процессы в производстве безопасного программного обеспечения»), выпущенного организацией National Cyber Security Partnership для Министерства национальной безопасности (Department of Homeland Security). Будучи архитектором «Жизненного цикла разработки безопасного программного обеспечения» в Microsoft, Майкл посвящает большую часть времени выработке и внедрению передового опыта создания безопасных программ, которыми в конечном итоге будут пользоваться обычные люди. Дэвид Лебланк, доктор философии, в настоящее время работает главным архитектором программ в компании Webroot Software. До этого он занимал должность архитектора подсистемы безопасности в подразделении Microsoft, занимающемся разработкой Microsoft Office, стоял у истоков инициативы Trustworthy Computing и работал «белым хакером» в группе безопасности сетей в Microsoft. Дэвид является соавтором книг «Writing Secure Code» и «Assessing Network Security» («Оценка безопасности сети»), а также многочисленных статей. В погожие дни он любит конные прогулки вместе со своей женой Дженнифер. Джон Виега первым дал описание 19 серьезных просчетов при написании программ. Этот труд привлек внимание средств массовой информации и лег в основу настоящей книги. Джон является основателем и техническим директором компании Secure Software (www.securesoftware.com). Он один из авторов первой книги по безопасности программного обеспечения «Building Secure Software» («Создание безопасного программного обеспечения»), а также книг «Network Security and Cryptography with OpenSSL» («Безопасность и криптографические методы в сетях. Подход на основе библиотеки OpenSSL») и «Secure Programming Cookbook» («Рецепты для написания безопасных программ»). Он является основным автором процесса CLASP, призванного включить элементы безопасности в цикл разработки программ. Джон написал и сопровождает несколько относящихся к безопасности программ с открытыми исходными текстами. Раньше Джон занимал должности адъюнктпрофессора в техническом колледже штата Вирджиния и старшего научного сотрудника в Институте стратегии кибепространства (Cyberspace Policy Institute). Джон хорошо известен своими работами в области безопасности программ и криптографии, а в настоящее время он трудится над стандартами безопасности для сетей и программ.
О научных редакторах Алан Крассовски работает главным инженером по безопасности программного обеспечения в компании Symantec Corporation. Он возглавляет группу по безопасности продуктов, в задачу которой входит оказание помощи другим группам разработчиков в плане внедрения безопасных технологий, которые сокращают риски и способствуют завоеванию доверия со стороны клиентов. За последние 20 лет Алан работал над многими коммерческими программными проектами. До присоединения к Symantec он руководил разработками, был инженеромпрограммистом и оказывал консультативные услуги многим компаниям, занимающим лидирующее положение в отрасли, в частности Microsoft, IBM, Tektronix, Step Technologies. Screenplay Systems, Quark и Continental Insurance. Он получил научную степень бакалавра в области вычислительной техники в Рочестерском технологическом институте, штат НьюЙорк. Дэвид А. Уилер много лет занимается совершествованием практических методов разработки программ для систем с повышенным риском, в том числе особо крупных и нуждающихся в высокой степени безопасности. Он соавтор и соредактор книги «Software Inspection: An Industry Best Practice» («Инспекция программ: передовой опыт»), а также книг «Ada95: The Lovelace Tutorial» и «Secure Programming for Linux and UNIX HOWTO» («Рецепты безопасного программирования для Linux и UNIX»). Проживает в Северной Вирджинии.
Предисловие Предисловие Предисловие Предисловие Предисловие Предисловие В основе теории компьютеров лежит предположение о детерминированном поведении машин. Обычно мы ожидаем, что компьютер будет вести себя так, как мы его запрограммировали. На самом деле это лишь приближенное допущение. Современные компьютеры общего назначения и их программное обеспечение стали настолько сложными, что между щелчком по кнопке мыши и видимым результатом лежит множество программных слоев. И мы вынуждены полагаться на то, что все они работают правильно. Любой слой программного обеспечения может содержать ошибки, изза которых оно работает не так, как хотел автор, или, по крайней мере, не соответствует ожиданиям пользователя. Эти ошибки вносят в систему неопределенность, что может приводить к серьезным последствиям с точки зрения безопасности. Проявляться они могут поразному: от простого краха системы, и тогда ошибку можно использовать, чтобы вызвать отказ от обслуживания, до переполнения буфера, позволяющего противнику выполнить в системе произвольный код. Коль скоро поведение программных систем недетерминировано изза ошибок, то самые лучшие идеи по их защите – не более чем гипотезы. Мы можем воздвигать межсетевые экраны, реализовывать технологии защиты от переполнения буфера на уровне ОС, применять самые разнообразные методики, но все это никоим образом не изменит фундаментальную парадигму безопасности. И лишь за счет радикального улучшения качества программ и сокращения числа ошибок мы можем надеяться на успешность попыток обеспечить безопасность программного обеспечения. Устранение всех рисков, относящихся к безопасности, – нереальная задача при современном уровне развития систем разработки. У этой проблемы так много аспектов, что, даже для того чтобы просто оставаться в курсе дел, нужно посвящать этому все свое время. Что уж говорить о владении предметом в совершенстве! Если мы хотим добиться прогресса в битве против ошибок, связанных с безопасностью, то должны облегчить процесс их идентификации и устранения организациям, занимающимся разработкой, и при этом учесть реальные ограничения. О безопасности программного обеспечения написано немало отличных книг, в том числе и авторами настоящего издания. Но я полагаю необходимым не углубляться в разного рода сложности, а предложить разработчикам небольшой набор критически важных советов, следуя которым они смогут повысить качество своих программ с минимальными усилиями. Идея в том, чтобы осветить наиболее типичные проблемы, которые нетрудно устранить, а не ставить нереалистичную задачу достижения полной безопасности.
21 21 21 21 В бытность начальником отдела в Министерстве национальной безопасности я попросил Джона Виегу составить перечень 19 «грехов» программиста. Первоначальный список был призван поставить корпоративный мир в известность о тех ошибках, которые чаще всего угрожают безопасности, но он не был составлен в форме рецептов. А эта книга именно такова. В ней приводится список проблем, от которых организацииразработчики должны защищаться в первую очередь, и даются рекомендации, как не допустить самого возникновения этих проблем. В книге также показано, как выявить подобные ошибки: посредством анализа кода или тестирования. Описание приемов и методик краткое и точное, авторы четко формулируют, что надо, а чего никогда не надо делать. Авторы проделали огромную работу, чтобы представить вашему вниманию список наиболее распространенных дефектов, от которых страдает безопасность современных программ. Надеюсь, что сообщество разработчиков оценит эту книгу и воспользуется ей для устранения недетерминизма и рисков, с которыми мы постоянно сталкиваемся. Амит Йоран, бывший начальник отдела национальной кибербезопасности Министерства национальной безопасности Грейт Фоллс, Вирджиния, 21 мая 2005 г. Предисловие Предисловие Предисловие Предисловие Предисловие
Благодарности Эта книга – косвенный результат дальновидности Амита Йорана. Мы благодарны ему за то, что во время работы в Министерстве национальной безопасности (и позже) он делал все возможное, чтобы привлечь внимание к проблемам безопасности программного обеспечения. Мы также выражаем признательность следующим специалистам в области безопасности за усердие, с которым они рецензировали черновики отдельных глав, за их мудрость и за откровенные комментарии: Дэвиду Рафаэлю (David Raphael), Марку Кэрфи (Mark Curphy), Рудольфу Араю (Rudolph Arauj), Алану Крассовски (Alan Krassowski), Дэвиду Уилеру (David Wheeler) и Биллу Хильфу (Bill Hilf). Эта книга не состоялась бы без настойчивости сотрудников издательства McGrawHill. Большое спасибо трем «Дж»: Джейн Браунлоу (Jane Brownlow), Дженнифер Хауш (Jennifer Housh) и Джоди Маккензи (Jody McKenzie).
Доступ онлайн
В корзину