19 смертных грехов, угрожающих безопасности программ

19 смертных грехов, угрожающих безопасности программ
Автор книги:     Оценка: 0.0     Голосов: 0     Отзывов: 0 199 руб.     (2,51$) Читать книгу Купить и скачать книгу Купить бумажную версию Электронная книга Жанр: Программирование Правообладатель и/или издательство: "ДМК пресс. Электронные книги" Дата добавления в каталог КнигаЛит: ISBN: 5-9706-0027-X Скачать фрагмент в формате   fb2   fb2.zip Возрастное ограничение: 0+ Оглавление Отрывок из книги

Описание книги

Эта книга необходима всем разработчикам программного обеспечения, независимо от платформы, языка или вида приложений. В ней рассмотрены 19 грехов, угрожающих безопасности программ, и показано, как от них избавиться. Рассмотрены уязвимости на языках C/C++, C#, Java, Visual Basic, Visual Basic.NET, Perl, Python в операционных системах Windows, Unix, Linux, Mac OS, Novell Netware. Авторы издания, Майкл Ховард и Дэвид Лебланк, обучают программистов, как писать безопасный код в компании Microsoft. На различных примерах продемонстрированы как сами ошибки, так и способы их исправления и защиты от них. Если вы программист, то вам просто необходимо прочесть эту книгу.

Оглавление

Группа авторов. 19 смертных грехов, угрожающих безопасности программ

Об авторах

О научных редакторах

Предисловие

Благодарности

Введение

Структура книги

Кому предназначена эта книга

Какие главы следует прочитать

Грех 1. Переполнение буфера

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Греховность C/C++

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Тестирование

Примеры из реальной жизни

CVE–1999–0042

CVE–2000–0389 – CVE–2000–0392

CVE–2002–0842, CVE–2003–0095, CAN–2003–0096

CAN–2003–0352

Искупление греха

Замена опасных функций работы со строками

Следите за выделениями памяти

Проверьте циклы и доступ к массивам

Пользуйтесь строками в стиле С++, а не С

Пользуйтесь STL–контейнерами вместо статических массивов

Пользуйтесь инструментами анализа

Дополнительные защитные меры

Защита стека

Запрет исполнения в стеке и куче

Другие ресурсы

Резюме

Грех 2. Ошибки, связанные с форматной строкой

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Греховность C/C++

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Тестирование

Примеры из реальной жизни

CVE–2000–0573

CVE–2000–0844

Искупление греха

Искупление греха в C/C++

Дополнительные защитные меры

Другие ресурсы

Резюме

Грех 3. Переполнение целых чисел

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Греховность С и С++

Операции приведения

Преобразования при вызове операторов

Арифметические операции

Операции сравнения

Поразрядные операции

Греховность С#

Ключевые слова checked и unchecked

Греховность Visual Basic и Visual Basic .NET

Греховность Java

Греховность Perl

Где искать ошибку

Выявление ошибки на этапе анализа кода

C/C++

С#

Java

Visual Basic и Visual Basic .NET

Perl

Тестирование

Примеры из реальной жизни

Ошибка в интерпретаторе Windows Script позволяет выполнить произвольный код

Переполнение целого в конструкторе объекта SOAPParameter

Переполнение кучи в HTR–документе, передаваемом поблочно, может скомпрометировать Web–сервер

Искупление греха

Дополнительные защитные меры

Другие ресурсы

Резюме

Грех 4. Внедрение SQL–команд

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Греховность С#

Греховность PHP

Греховность Perl/CGI

Греховность Java

Греховность SQL

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Тестирование

Примеры из реальной жизни

CAN–2004–0348

CAN–2002–0554

Искупление греха

Проверяйте все входные данные

Никогда не применяйте конкатенацию для построения SQL–предложений

Искупление греха в С#

Искупление греха в PHP 5.0 и MySQL версии 4.1 и старше

Искупление греха в Perl/CGI

Искупление греха в Java с использованием JDBC

Искупление греха в ColdFusion

Искупление греха в SQL

Дополнительные защитные меры

Другие ресурсы

Резюме

Грех 5. Внедрение команд

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Тестирование

Примеры из реальной жизни

CAN–2001–1187

CAN–2002–0652

Искупление греха

Контроль данных

Если проверка не проходит

Дополнительные защитные меры

Другие ресурсы

Резюме

Грех 6. Пренебрежение обработкой ошибок

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Раскрытие излишней информации

Игнорирование ошибок

Неправильная интерпретация ошибок

Бесполезные возвращаемые значения

Обработка не тех исключений, что нужно

Обработка всех исключений

Греховность C/C++

Греховность C/C++ в Windows

Греховность С++

Греховность C#, VB.NET и Java

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Тестирование

Примеры из реальной жизни

CAN–2004–0077 do_mremap в ядре Linux

Искупление греха

Искупление греха в C/C++

Искупление греха в C#, VB.NET и Java

Другие ресурсы

Резюме

Грех 7. Кросс–сайтовые сценарии

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Греховное ISAPI–расширение или фильтр на C/C++

Греховность ASP

Греховность форм ASP. NET

Греховность JSP

Греховность PHP

Греховность Perl–модуля CGI.pm

Греховность mod–perl

Где искать ошибку

Выявление ошибки на этапе анализа кода

Тестирование

Примеры из реальной жизни

Уязвимость IBM Lotus Domino для атаки с кросс–сайтовым сценарием и внедрением HTML

Ошибка при контроле входных данных в сценарии isqlplus, входящем в состав Oracle HTTP Server, позволяет удаленному пользователю провести атаку с кросс–сайтовым сценарием

CVE–2002–0840

Искупление греха

Искупление греха в ISAPI–расширениях и фильтрах на C/C++

Искупление греха в ASP

Искупление греха в ASP. NET

Искупление греха в JSP

Искупление греха в PHP

Искупление греха в Perl/CGI

Искупление греха в mod–perl

Замечание по поводу HTML–кодирования

Дополнительные защитные меры

Другие ресурсы

Резюме

Грех 8. Пренебрежение защитой сетевого трафика

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Тестирование

Примеры из реальной жизни

TCP/IP

Протоколы электронной почты

Протокол E*Trade

Искупление греха

Рекомендации низкого уровня

Дополнительные защитные меры

Другие ресурсы

Резюме

Грех 9. Применение загадочных URL и скрытых полей форм

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Загадочные URL

Скрытые поля формы

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Тестирование

Примеры из реальной жизни

CAN–2000–1001

Модификация скрытого поля формы в программе MaxWebPortal

Искупление греха

Противник просматривает данные

Противник воспроизводит данные

Противник предсказывает данные

Противник изменяет данные

Дополнительные защитные меры

Другие ресурсы

Резюме

Грех 10. Неправильное применение SSL и TLS

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Тестирование

Примеры из реальной жизни

Почтовые клиенты

Web–браузер Safari

SSL–прокси Stunnel

Искупление греха

Выбор версии протокола

Выбор семейства шифров

Проверка сертификата

Проверка имени хоста

Проверка отзыва сертификата

Дополнительные защитные меры

Другие ресурсы

Резюме

Грех 11. Использование слабых систем на основе паролей

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Политика управления сложностью пароля

Смена и переустановка пароля

Протоколы проверки паролей

Ввод и хранение паролей

Тестирование

Примеры из реальной жизни

CVE–2005–1505

CVE–2005–0432

Ошибка в TENEX

Кража у Пэрис Хилтон

Искупление греха

Многофакторная аутентификация

Хранение и проверка паролей

Рекомендации по выбору протокола

Рекомендации по переустановке паролей

Рекомендации по выбору пароля

Прочие рекомендации

Дополнительные защитные меры

Другие ресурсы

Резюме

Грех 12. Пренебрежение безопасным хранением и защитой данных

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Слабый контроль доступа к секретным данным

ACL и ограничение прав

Греховность элементов управления доступом

Встраивание секретных данных в код

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Тестирование

Примеры из реальной жизни

CVE–2000–0100

CAN–2002–1590

CVE–1999–0886

CAN–2004–0311

CAN–2004–0391

Искупление греха

Использование технологий защиты, предоставляемых операционной системой

Искупление греха в C/C++для Windows 2000 и последующих версий

Искупление греха bASP.NET версии 1.1 и старше

Искупление греха в С# на платформе . NET Framework 2.0

Искупление греха в C/C++ для Mac OS X версии v10.2 и старше

Искупление греха без помощи операционной системы (или «храните секреты от греха подальше»)

Чтение из файловой системы из PHP–сценария в Linux

Чтение из файловой системы с помощью ASP.NET (С#)

Чтение из файловой системы с помощью ASP (VBScript)

Чтение из реестра с помощью ASP.NET (VB.NET)

Замечание по поводу Java и Java KeyStore

Дополнительные защитные меры

Другие ресурсы

Резюме

Грех 13. Утечка информации

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Побочные каналы

Слишком много информации!

Правильно ли имя пользователя

Детальная информация о версии

Информация о сетевом хосте

Информация о приложении

Информация о пути

Информация о структуре стека

Модель безопасности информационного потока

Греховность С# (и других языков)

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Тестирование

Имитация кражи ноутбука

Примеры из реальной жизни

Атака с хронометражем Дэна Бернстайна на шифр АЕS

CAN–2005–1411

CAN–2005–1133

Искупление греха

Искупление греха в С# (и других языках)

Учет локальности

Дополнительные защитные меры

Другие ресурсы

Резюме

Грех 14. Некорректный доступ к файлам

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Греховность C/C++ в Windows

Греховность C/C++

Греховность Perl

Греховность Python

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Тестирование

Примеры из реальной жизни

CAN–2005–0004

CAN–2005–0799

CAN–2004–0452 и CAN–2004–0448

CVE–2004–0115 Microsoft Virtual PC для Macintosh

Искупление греха

Искупление греха в Perl

Искупление греха в C/C++для Unix

Искупление греха в C/C++для Windows

Получение места нахождения временного каталога пользователя

Искупление греха в .NET

С#

VB.NET

Managed С++

Дополнительные защитные меры

Другие ресурсы

Резюме

Грех 15. Излишнее доверие к системе разрешения сетевых имен

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Греховные приложения

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Тестирование

Примеры из реальной жизни

CVE–2002–0676

CVE–1999–0024

Искупление греха

Другие ресурсы

Резюме

Грех 16. Гонки

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Греховность кода

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Тестирование

Примеры из реальной жизни

CVE–2001–1349

CAN–2003–1073

CVE–2004–0849

Искупление греха

Дополнительные защитные меры

Другие ресурсы

Резюме

Грех 17. Неаутентифицированный обмен ключами

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Тестирование

Примеры из реальной жизни

Атака с «человеком посередине» на Novell Netware

CAN–2004–0155

Искупление греха

Дополнительные защитные меры

Другие ресурсы

Резюме

Грех 18. Случайные числа криптографического качества

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Греховность некриптографических генераторов

Греховность криптографических генераторов

Греховность генераторов истинно случайных чисел

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Когда следует использовать случайные числа

Выявление мест, где применяются PRNG–генераторы

Правильно ли затравлен CRNG–генератор

Тестирование

Примеры из реальной жизни

Браузер Netscape

Проблемы в OpenSSL

Искупление греха

Windows

Код для .NET

Unix

Java

Повторное воспроизведение потока случайных чисел

Дополнительные защитные меры

Другие ресурсы

Резюме

Грех 19. Неудобный интерфейс

В чем состоит грех

Подверженные греху языки

Как происходит грехопадение

Каков круг ваших пользователей?

Минное поле: показ пользователям информации о безопасности

Родственные грехи

Где искать ошибку

Выявление ошибки на этапе анализа кода

Тестирование

Примеры из реальной жизни

Аутентификация сертификата в протоколе SSL/TLS

Установка корневого сертификата в Internet Explorer 4.0

Искупление греха

Делайте интерфейс пользователя простым и понятным

Принимайте за пользователей решения, касающиеся безопасности

Упрощайте избирательное ослабление политики безопасности

Ясно описывайте последствия

Помогайте пользователю предпринять действия

Предусматривайте централизованное управление

Другие ресурсы

Резюме

Приложения

Приложение А. Соответствие между 19 смертными грехами и «10 ошибками» OWASP

Приложение В. Сводка рекомендаций

Грех 1. Переполнение буфера

Грех 2. Ошибки, связанные с форматной строкой

Грех 3. Переполнение целых чисел

Грех 4. Внедрение SQL–команд

Грех 5. Внедрение команд

Грех 6. Пренебрежение обработкой ошибок

Грех 7. Кросс–сайтовые сценарии

Грех 8. Пренебрежение защитой сетевого трафика

Грех 9. Применение загадочных URL и скрытых полей форм

Грех 10. Неправильное применение SSL и TLS

Грех 11. Использование слабых систем на основе паролей

Грех 12. Пренебрежение безопасным хранением и защитой данных

Грех 13. Утечка информации

Грех 14. Некорректный доступ к файлам

Грех 15. Излишнее доверие к системе разрешения сетевых имен

Грех 16. Гонки

Грех 17. Неаутентифицированный обмен ключами

Грех 18. Случайные числа криптографического качества

Грех 19. Неудобный интерфейс

Отрывок из книги

Алан Крассовски работает главным инженером по безопасности программного обеспечения в компании 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»). Проживает в Северной Вирджинии.

.....

Эти ошибки в реализации системы Kerberos производства МТИ документированы в бюллетене CERT СА–2000–06 по адресу www.cert.org/advisories/CA–2000–06.html. Хотя исходные тексты открыты уже несколько лет и проблема коренится в использовании опасных функций работы со строками (strcat), отчет о ней появился только в 2000 году.

Из CVE–2002–0842:

.....

Подняться наверх