Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Уязвимости в программном коде и борьба с ними

Покупка
Артикул: 606531.03.99
Доступ онлайн
249 ₽
В корзину
Эта книга необходима всем разработчикам программного обеспечения, независимо от платформы, языка или вида приложений. Рассмотрены уязвимости на языках C/C++, C#, Java, Visual Basic, Visual Basic .NET, Perl, Python в операционных системах Windows, Unix, Linux, Mac OS, Novell Netware. Авторы издания, Майкл Ховард и Дэвид Лебланк, обучают программистов как писать безопасный код в компании Microsoft. На различных примерах продемонстрированы как сами ошибки, так и способы их исправления и защиты от них. Если вы — программист, то вам просто необходимо прочесть эту книгу.
Ховард, М. Уязвимости в программном коде и борьба с ними : практическое руководство / М. Ховард, Д. Лебланк, Дж. Виега ; пер. с англ. А. А. Слинкина. - 2-е изд. - Москва : ДМК Пресс, 2023. - 289 с. - ISBN 978-5-89818-460-5. - Текст : электронный. - URL: https://znanium.com/catalog/product/2106229 (дата обращения: 28.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Майкл Ховард, Дэвид Лебланк, Джон Виега

Уязвимости в программном коде

и борьба с ними

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-594074-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

Доступ онлайн
249 ₽
В корзину