Уязвимости в программном коде и борьба с ними
Покупка
Тематика:
Защита информации. Компьютерная безопасность / Проектирование, отладка и тестирование ПО. Вспомогательные средства проектирования. 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-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