Компания 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 строк кода в нем содержится 12215 ошибок. «Это огромное количество для проекта, в названии которого присутствует слово «доверие»», — считает Чесс.

Ирония заключается в том, что Net Trust представляет собой проект Google по созданию механизма безопасности для простой однократной регистрации и аутентификации. «Но его разрабатывали студенты, не умеющие писать правильный код», — сказал Чесс.
Net Trust — это один из многих примеров, демонстрирующих, что ошибки в системе безопасности Java, хотя они уже давно известны, представляют собой ловушки, в которые по мере роста популярности этого языка неизменно попадает все больше программистов. Ведь обучение написанию безопасного кода носит по крайней мере случайный характер.

Чтобы проиллюстрировать отсутствие у программистов навыков создания безопасного кода, Чесс рассказал о своем недавнем наблюдении, касающемся самой 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. Даже если кто-нибудь сможет убедить их следовать этому плану, необходимо будет разослать новый браузер миллионам пользователей. «Для решения такой задачи потребуются в лучшем случае годы, — считает Чесс. — Чтобы изменить основы сред разработки или языков программирования, нужно очень много времени».

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

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

возможность внедрения кода, например, команд SQL;
уязвимости XSS;
недостатки управления идентификациями;
неверная процедура поиска ошибок;
использованный для тестирования программный код попадает в окончательную версию;
наличие методов, позволяющих разработчикам вызывать из Java-программ код на C или C++, что привносит проблемы в области безопасности, характерные для C или C++;
ошибки совместимости и синхронизации;
отсутствие контроля за доступом к серверам;
недостатки управления сессиями;
использование непроверенных cookies и заголовков пакетов HTTP;
занесение в журналы конфиденциальных сведений без обеспечения их безопасности;
конфигурация предоставляет неограниченный доступ без использования мониторинга и аудита.

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