РЕЦЕНЗИИ
Ховард М., Лебланк Д. Защищенный код/Пер. с англ. - М.: ИТД "Русская Редакция", 2003. - 704 с.
Одна из ключевых проблем современных информационных систем - безопасность. Причины тому очевидны: растет сложность систем одновременно с повышением их критичности для обеспечения основной деятельности человека. До недавнего времени вопросы защиты в вычислительных системах трактовались достаточно узко, применительно лишь к данным, упрощенно говоря - к файловой системе, СУБД и т. д. Однако последние десять лет мы видим, что акценты сместились в область программных приложений, чему во многом способствовали переход к распределенным системам и широкое применение Интернета. При этом тут можно выделить нанесение ущерба, с одной стороны, путем несанкционированного доступа к данным через приложение, а с другой - изменение функциональности самой программы.
Здесь нужно отметить спорность определения "защищенное ПО", сформулированного в руководящих документах Microsoft как "программа, которая обеспечивает конфиденциальность, целостность и доступность информации клиента". Для полноты надо было бы сказать и о защищенности функционала приложения. Более того, безопасность системы всегда имеет внешнюю и внутреннюю стороны. Когда мы говорим о защите, то, как правило, подразумеваем предотвращение вредоносных воздействий извне. Но ведь опасность для клиента представляют и внутренние огрехи программного кода, в результате которых нарушение работоспособности приложения может произойти без каких-то внешних атак. При этом очевидно, что четко разделить подобные проблемы на внешние и внутренние очень сложно, а потому вопросы защищенности и надежности желательно рассматривать в комплексе.
Из всего букета проблем безопасности в рецензируемой книге разбираются именно вопросы разработки защищенного от внешних угроз ПО на всех этапах его создания - от проектирования до тестирования для выявления брешей в готовой программе и составления документации. Книга состоит из 24 глав и пяти приложений, объединенных в пять разделов.
В четырех главах первого раздела обсуждаются общие вопросы безопасности приложений. Сначала объясняется необходимость защиты системы и обосновывается тезис о том, что этот вопрос должен выделяться отдельным пунктом в списке задач, решаемых в ходе разработки. Далее описываются активные подходы к безопасности на различных этапах создания приложений, говорится о ключевых принципах реализации систем и возможных вариантах моделирования опасностей.
В десяти главах второй части книги речь идет об основных методах безопасного кодирования, проблемах, связанных с переполнением буфера, о выборе механизма управления доступом, принципе минимальных привилегий, о вопросах криптографии, защиты секретных и контроля входных данных, недостатках канонического представления имен, взаимодействии с базами данных, проблемах ввода информации в Web-среде, а также о поддержке различных национальных языков.
Следующие четыре главы посвящены дополнительным методам создания защищенного кода, связанным с обеспечением безопасности сокетов, защитой автономных компонентов (RPC, элементы управления ActiveX, объекты COM/ DCOM), противодействием атакам типа "отказ в обслуживании". Отдельно обсуждаются вопросы безопасного кода в архитектуре .NET.
Четвертая часть "Особые вопросы" состоит из шести глав. Тут рассматриваются темы, затрагиваемые не очень часто: тестирование, анализ исходного кода на предмет безопасности, конфиденциальности и безопасной установки ПО, а также подготовка документации с учетом обеспечения безопасности. Здесь же в отдельной главе собраны общие рекомендации, которым не нашлось места в других разделах книги ("Влезьте в шкуру пользователя!", "Никаких внутрикорпоративных имен в приложении!", "Не включайте ничего лишнего!" и т. д.).
В пятой части собраны приложения. Наверное, чтение книги лучше всего начать с приложения Б, где приводятся "смехотворные оправдания" тех разработчиков, кто не желает заниматься проблемой защиты программ: "Нас никогда никто не атаковал. Мы в безопасности, так как применяем криптографию, списки ACL, брандмауэр. Но мы же выбьемся из графика! Эх, были бы у нас инструментальные средства получше!" и т. д. Еще одно приложение содержит описание наиболее опасных API-функций, три других - контрольные списки по безопасности для архитекторов, программистов и тестировщиков (описание тем и номера глав, где они рассматриваются). Завершает книгу представительный библиографический список с аннотациями.
Хотя в качестве примера авторы используют в основном технологии Microsoft, но методические подходы, описанные ими, носят вполне универсальный характер. Поэтому рекомендацию Билла Гейтса: "Мы считаем, что каждый сотрудник Microsoft должен прочесть эту книгу" - вполне можно распространить на более широкий круг разработчиков, использующих самые разнообразные инструменты и платформы.
Более того, она будет полезна всем специалистам, вовлеченным в процесс создания ПО: менеджерам, архитекторам, программистам, тестировщикам и техническим писателям, причем как опытным, там и новичкам. В этой связи нужно привести важную мысль авторов: "Давно уже прошли те дни, когда защита была искусством избранных, теперь это удел каждого, кто на своем месте отвечает за создание безопасного ПО".
Майклу Ховарду и Дэвиду Лебланку удалось изложить сложные технические проблемы хорошим, живым языком в стиле доверительной беседы с читателем, с использованием простых, но выразительных примеров, в том числе и аналогий из повседневной жизни. Эта книга из тех, читать которые не просто полезно, но и интересно.
В заключение хотелось бы отметить оперативность "Русской Редакции": в конце октября на конференции Microsoft PDC’2003 английское оригинальное издание как новинка книжного рынка было выдано каждому участнику мероприятия, и почти в это же время его перевод появился в Москве.