Книга: Как противостоять хакерским атакам. Уроки экспертов по информационной безопасности
Назад: Информация о Кевине Митнике
Дальше: 7. Профиль: Майкл Ховард

Защита от уязвимостей программного обеспечения

Защита от уязвимостей ПО номер один – это квалифицированные разработчики и более безопасные языки программирования.

Жизненный цикл безопасной разработки

Процесс, преследующий цель уменьшить число уязвимостей программного обеспечения, теперь широко известен как жизненный цикл безопасной разработки. Он сосредоточивается на каждом компоненте в жизненном цикле программы ПО, от ее начального создания к исправлению недавно найденных уязвимостей, чтобы реализовать более безопасное программное обеспечение. Компания Microsoft Corporation, вероятно, лучше всего потрудилась в этой области и опубликовала больше свободно доступной информации и инструментов (https://www.microsoft.com/en-us/securityengineering/sdl/), чем любой другой источник. Человеческий фактор гарантирует, что программный код всегда будет иметь эксплуатируемые ошибки, но, следуя жизненному циклу безопасной разработки, мы можем допускать меньше ошибок на то же количество строк кода.



Примечание. Доктор Даниэль Бернштейн (https://en.wikipedia.org/wiki/Daniel_J._Bernstein) – профессор в колледже, который пишет и продвигает невероятно безопасный код. Он создал несколько бесплатных и широко используемых программ, таких как dbjdns и qmail, в которых крайне мало ошибок. Он даже платит за найденные баги из собственного кармана. Даниэль верит, что разработчикам становится стыдно, когда он публично объявляет об ошибках, прежде чем предоставить разработчикам возможность анализировать и исправлять свои продукты.

Более безопасные языки программирования

Менее опасные программы не могут быть написаны без более безопасного языка программирования. На протяжении многих лет большинство разработчиков языков программирования стремились создать более безопасные версии с целью уменьшить или устранить распространенные причины ошибок. Несмотря на положительный результат, программы, написанные на них, значительно сложнее использовать, чем те, которые разработаны на небезопасных языках.

Анализ кода и программы

После разработки версии программы ее всегда следует анализировать на отсутствие известных и распознаваемых ошибок. Это можно сделать вручную или с помощью программных средств. Анализ вручную, как правило, наименее эффективен, так как обнаруживает наименьшее количество ошибок в час, но он чаще находит эксплуатируемые ошибки, которые нельзя отыскать с помощью программы. Программные средства поиска ошибок часто называют «статическими анализаторами» или инструментами «фаззинг-тестирования». Они проверяют исходный код (или программы) на наличие известных программных ошибок в самом коде. Фаззинг-анализаторы вводят случайные (или неправильные, неожиданные) данные и ищут уязвимости в программе во время выполнения. Многие печально известные специалисты, ищущие уязвимости ПО, включая Чарли Миллера, о котором мы поговорим в главе 36, полагались на фаззинг-тестирование во многих своих открытиях.

Более безопасные операционные системы

Большинство операционных систем не только создаются программистами с учетом жизненного цикла безопасной разработки и более безопасных языков программирования, но и включают встроенные средства защиты от распространенных эксплойтов. Большинство современных популярных ОС включают специально разработанные средства защиты памяти и наиболее важных областей операционной системы. Некоторые из них даже включают встроенные инструменты для предотвращения переполнения буфера, защиты от вредоносных программ, каждый из которых помогает ограничить эксплуатируемые ошибки или уменьшить последующий ущерб.

Сторонние средства защиты и надстройки разработчиков

Существуют тысячи программ, которые могут защищать компьютерную систему от ранее неизвестных уязвимостей ПО, по крайней мере, с некоторым успехом. Определенные из них предлагаются в качестве бесплатных или платных дополнений самим разработчиком, а другие – независимыми третьими сторонами. Программы, которые обещают обнаружить и остановить новые эксплойты, очень распространены и могут значительно снизить риск реализации новых угроз, хотя их нельзя назвать совершенными. Один из моих любимых способов защиты ПО заключается в «контроле приложений» или формировании «белых списков» программ. Такой способ не закроет существующий эксплойт, но может предотвратить или уменьшить потенциальный ущерб от действий хакера или вредоносной программы.

Идеальное программное обеспечение не решит все проблемы

Никакая защита не сравнится с ПО, которое изначально разрабатывается с учетом средств защиты и исключением ошибок. Тем не менее идеальное, безошибочное программное обеспечение не решит все проблемы. К сожалению, его уязвимости не единственная наша проблема. Троянские программы срабатывают только потому, что их запускает сам пользователь. Многие хакеры и вредоносные программы используют типичные, часто легитимные возможности данных, языков программирования и других компонентов, чтобы совершать злодеяния. А социальная инженерия может сделать то, на что не способно программное обеспечение. Тем не менее никто не спорит, что более безопасные программы не могут быть панацеей.

В следующих главах мы поговорим о двух экспертах, посвятивших свою жизнь совершенствованию ПО. Глава 7 посвящена Майклу Ховарду, который популяризировал более безопасные методы разработки, а глава 8 фокусируется на Гари Макгроу, одном из лучших специалистов по поиску уязвимостей в истории.

Назад: Информация о Кевине Митнике
Дальше: 7. Профиль: Майкл Ховард