УЯЗВИМОСТИ

Компания Fortify обнаружила астрономическое число ошибок в программном коде

Год назад на организованной корпорацией Sun Microsystems конференции JavaOne основатель и главный исследователь (Chief Scientist) компании Fortify Software Брайан Чесс выступил с докладом на тему "12 пробелов в системе безопасности технологии Java и как их избежать".

Прошел год. Насколько же отрасль продвинулась вперед в борьбе с этими внутренне присущими Java уязвимостями? Среди них были названы запуск сценария на веб-клиенте (cross-site scripting, XSS), ввод команд SQL вместо данных (SQL injection), собственные методы Java, позволяющие импортировать код на языках C или C++, и другие уязвимости. Не так уж мало, и ситуация ухудшается. Как заявил Чесс в интервью еженедельнику eWeek: "У меня есть доказательства этого". Fortify разрабатывает технологию анализа исходного кода и имеет обширную базу данных наиболее распространенных ошибок и уязвимостей в программах на Java, которые были выявлены клиентами компании после года работы над проектом Java Open Review.

В рамках данного проекта Fortify использует FindBugs - инструмент статистического анализа, обнаруживающий ошибки в коде Java. Он применяется для проверки кода при создании открытого ПО, такого как Apache, Azureus и Tomcat. Fortify проанализировала все проверенные ею фрагменты кода, оповестила через Интернет о количестве обнаруженных проблем, а затем сообщила разработчикам подробные сведения о выявленных уязвимостях.

"В результате Fortify пришла к выводу, что открытое ПО содержит астрономическое число дефектов", - заявил Чесс. Он особо выделил проект Net Trust, который Fortify исследовала на протяжении года. На 1000 строк кода в нем содержится 12 215 ошибок. "Это огромное количество для проекта, в названии которого присутствует слово "доверие"", - считает Чесс.

Ирония заключается в том, что Net Trust представляет собой проект Google по созданию механизма безопасности для простой однократной регистрации и аутентификации. "Но его разрабатывали студенты, не умеющие писать правильный код", - сказал Чесс.

Net Trust - это один из многих примеров, демонстрирующих, что ошибки в системе безопасности Java, хотя они уже давно известны, представляют собой ловушки, в которые по мере роста популярности этого языка неизменно попадает все больше программистов. Ведь обучение написанию безопасного кода носит по крайней мере случайный характер.

12 смертоносных и трудноустранимых ошибок

Проблемы в области безопасности, связанные с разработками на языке Java, которые делают веб-приложения уязвимыми:

- возможность внедрения кода, например, команд SQL;

- уязвимости XSS;

- недостатки управления идентификациями;

- неверная процедура поиска ошибок;

- использованный для тестирования программный код попадает в окончательную версию;

- наличие методов, позволяющих разработчикам вызывать из Java-программ код на C или C++, что привносит проблемы в области безопасности, характерные для C или C++;

- ошибки совместимости и синхронизации;

- отсутствие контроля за доступом к серверам;

- недостатки управления сессиями;

- использование непроверенных cookies и заголовков пакетов HTTP;

- занесение в журналы конфиденциальных сведений без обеспечения их безопасности;

- конфигурация предоставляет неограниченный доступ без использования мониторинга и аудита.

Источник: Fortify Software.

Чтобы проиллюстрировать отсутствие у программистов навыков создания безопасного кода, Чесс рассказал о своем недавнем наблюдении, касающемся самой Sun. Конкретно речь идет о следующем: в выпущенном Sun руководстве по программированию сервлетов - простого метода, используемого в Sun для подключения Java к Интернету, - содержатся уязвимости межсайтового скриптинга (XSS). Если уж такое происходит с Sun, то кому вообще можно доверять? "Вопросы безопасности не упоминаются в учебнике по программированию вообще, - сказал Чесс. - С учетом этого обстоятельства не удивительно, что он содержит уязвимости типа cross-site scripting".

"Проблема заключается в том, что Java и другие ориентированные на Интернет языки программирования позволяют очень легко допустить ошибку типа XSS, - считает он. - Задумайтесь, как создается простейшая веб-страница. При написании приложения на Java для Интернета вы первым делом сообщаете ему, как вас зовут, а оно отвечает "Привет, Брайан!" после того, как я ввел свое имя. Заложенные в Java функции, необходимые, чтобы просто вывести тестовое сообщение "Привет, мир!", открывают возможность для XSS".

Эксперт по Java Уильям Пью, профессор компьютерных наук в университете шт. Мэриленд, согласен, что проблема безопасности Java приобретает все более острый характер. "XSS превращается в очень серьезную угрозу, - сказал Пью. - Инструменты наподобие тех, которыми пользуется компания Fortify, позволяют обнаруживать связанные с XSS проблемы. Но очистить программный код от всех вызванных XSS уязвимостей очень не просто. Доступные нам статистические данные показывают, что это превращается в серьезнейшую уязвимость [написанных на Java приложений, если не в главный объект интернет-атак]".

Сегодня обязанность отслеживать наиболее распространенные ошибки в системе безопасности Java лежит на разработчике. Такое положение можно изменить, но это будет непросто. Одной из мер должна стать модификация браузеров с целью затруднить использование XSS. Это потребует изменения принятого в Интернете стандарта и участия всех крупнейших производителей браузеров - Microsoft, Mozilla и Apple. Даже если кто-нибудь сможет убедить их следовать этому плану, необходимо будет разослать новый браузер миллионам пользователей. "Для решения такой задачи потребуются в лучшем случае годы, - считает Чесс. - Чтобы изменить основы сред разработки или языков программирования, нужно очень много времени".