На недавней конференции «Платформа 2004», проведенной московским представительством корпорации Microsoft, Дэвид Лебланк представил перевод своей книги «Защищенный код», подготовленный на основе второго издания популярной в США работы Writing Secure Code.
Как утверждают авторы, книга предназначена «для тех, кто проектирует приложения или пишет код, тестирует продукт или создает на них документацию. А также для тех, кто разрабатывает Web- или Win32-приложения и изучает или создает приложения на базе Microsoft.NET Framework». Более того, они считают, что даже те, кто пишут коды не для систем от Microsoft, найдут в книге полезное для себя. Особую пикантность работе придают, с одной стороны, «указание» Билла Гейтса («обязательное чтение для сотрудников Microsoft»), а с другой, — напряженное положение, сложившееся в организациях, эксплуатирующих информационные системы на базе продуктов корпорации, в связи с участившимися кибератаками на многие из них. В связи с этим, в Microsoft был выпущен меморандум «Доверительные вычисления», где изложена стратегия создания систем с повышенной безопасностью, и одновременно запущена инициатива Windows Security Push по обучению сотрудников корпорации передовым методам создания безопасного кода. В данной книге под безопасным кодом понимается «код, который способен противостоять злонамеренным атакам». А как констатируют авторы: «Безопасный код — это еще и надежный код».
Обстоятельность изложения проблем безопасности кода в книге объемом почти в семьсот страниц видна невооруженным взглядом. Авторы начинают «от печки» — с рассмотрения «безопасности приложений сегодня», с объяснения необходимости защиты систем, активного подхода к информационной безопасности при разработке приложений и следования необходимым принципам безопасности. Важно, что авторы уже с первых страниц обращают внимание на необходимость моделирования опасностей, рассматривая его, как средство проектирования защищенных приложений.
Вторая и третья части книги посвящены методам безопасного кодирования и соответствующим рекомендациям. Прежде всего, необходимо бороться с переполнением буфера. С должным вниманием выбирать механизм управления доступом и придерживаться принципа, что в целях безопасности задачи всегда следует исполнять с минимально возможным набором привилегий. Следует позаботиться и о преодолении «подводных камней криптографии» в виде «слабых» случайных чисел или проблем, связанных с ключами. Разумеется, в защищенном коде должны быть отдельно защищены секретные данные, а вот всем входным данным следует уделять повышенное внимание. Канонические представления нередко создают проблемы безопасности кода приложений, поэтому полезно следовать рекомендациям, предлагаемым авторами в качестве «лекарства от болезни приведения в канонический вид», например, в Web. Методам обеспечения информационной безопасности приложений посвящена отдельная глава книги.
Не оставлены авторами без внимания и вопросы безопасности при вводе данных в Web-среде и при организации программной поддержки других языков, когда, например, проблемы возникают при преобразовании символов.
Дополнительные методы создания защищенного кода касаются кодов серверных приложений, обработки удаленных вызовов, элементов ActiveX и объектов DCOM. Кроме того, указано несколько рекомендаций по противостоянию атакам типа «отказ в обслуживании» (denial of service, DoS). Завершает методические рекомендации глава о создании безопасного кода в .NET.
В четвертой части книги (она называется «Особые вопросы») рассматриваются проблемы тестирования защиты, анализа безопасности кода, обеспечения конфиденциальности и общие методы обеспечения безопасности, а также особенности отображения проблематики информационной безопасности в документации и, в частности, в сообщениях об ошибках.
Последняя часть, «Приложения», содержит весьма полезные рассуждения об «опасных API» и о «смехотворных оправданиях» — а также объясняет, почему... можно не обращать внимания на проблемы безопасности.
Неспешный читатель будет благодарен авторам и за аннотированный библиографический список.
В целом книга, полагаю, будет с удовлетворением встречена широким кругом желающих создавать защищенные коды. Конечно, она не лишена недостатков; в частности, был бы полезен системный взгляд на безопасный код как на текст, удовлетворяющий определенным системным требованиям. Но так уж повелось, что из-под пера авторов из Microsoft выходят обычно тексты на языках программирования, а формула необходимой защиты нередко описывается на естественном языке. Но все же, как отмечено в книге: «Ничто не заменит приложение с безопасными параметрами по умолчанию».
Майкл Ховард, Дэвид Лебланк. Защищенный код. М.: «Русская редакция», 2003. — 704 с.