Каждый день приносит новые известия об угрозах, вызванных ошибкой Heartbleed. Однако обнаружение этой ошибки напомнило также о проблеме, с которой сообщество разработчиков открытого кода сталкивается на протяжении уже ряда лет. И заключается она в том, что крупные компании не вносят ровным счетом никакого вклада в разработку, тестирование и валидацию свободного ПО, от которого и сами зависят. Они просто берут его, и всё.
Подавляющее большинство тех, кто пользуется преимуществами бесплатного ПО с открытым исходным кодом вроде OpenSSL не вносит никакого вклада в его создание. И это проблема.
Наиболее очевидным образом проблема проявилась в истории с доктором Робином Сеггельманном, разработчиком из Германии, на котором в первую очередь лежит ответственность за ошибку Heartbleed. Оказывается, свои предновогодние каникулы он провел, исправляя ошибки в первой версии криптографического ПО OpenSSL, являющегося стандартом для использования в Интернете. Параллельно Сеггельманн разработал способ формирования функции heartbeat, который позволял сохранить шифруемую сессию открытой и не допустить ее автоматического закрытия по истечении определенного интервала времени. Идея в данном случае заключалась в том, чтобы подтвердить участвующему в сессии удаленному компьютеру, что соединение активно, и таким образом уменьшить число прерываний сессии с последующим ее возобновлением для передачи дополнительного объема данных. Фактически Сеггельманн придумал способ, позволяющий существенно уменьшить задержки в такого рода соединениях за счет сокращения временных затрат на выполнение служебных процедур установления соединения. Это была очень хорошая идея.
Однако, как это часто случается в ходе разработки, Сеггельманн допустил ошибку. Он забыл указать конечную переменную, вследствие чего могло возникнуть переполнение буфера, что в свою очередь открывало возможность доступа к 64 кб данных в памяти удаленного сервера. Эта ошибка не была обнаружена вовремя, и со временем она попала в рабочую версию продукта.
Вопрос в том, почему ошибка не была обнаружена. На сей счет в блогосфере распространено множество разных домыслов. Одни предположили, что это происки Национального агентства безопасности. Другие свалили все на некомпетентность разработчика. Но на самом деле и те, и другие были не правы. Это была самая обыкновенная ошибка кодирования. И не обнаружили ее только потому, что во всем мире разработкой OpenSSL занимались всего несколько человек, причем бесплатно. Идея открытой свободной среды разработки для совместного создания сообществом программистов программного продукта, который нужен каждому, породила проблему, которая проявилась в данном случае.
Сама идея изначально предполагает участие в работе большого коллектива программистов, каждый из которых в ходе выполнения проекта проверяет код на наличие ошибок. Но в реальности СПО-продукты разрабатываются и выпускаются в свет не протестированными должным образом, поскольку в каждом конкретном продукте из всего сообщества разбирается всего несколько человек, и полноценное тестирование по этой причине растянулось бы на годы.
Именно эта история произошла с OpenSSL, и именно в этом причина ошибки Heartbleed.
Логично задать вопрос – почему столь критичному для безопасности Интернета решению, как OpenSSL, было уделено так мало внимания? Ответ вполне очевиден – все дело в деньгах. Большие компании, использующие OpenSSL в своем бизнесе, ничего не сделали для его разработки. Те несколько тысяч долларов, которые проект получил в прошлом году, поступили от индивидуальных лиц, обеспокоенных проблемой шпионажа в Сети.
Хуже всего то, что эта проблема с открытым кодом не является секретом, поскольку была подробно описана колумнистом USA Today и Yahoo Tech Робом Пегораро в его блоге. Тем не менее все априори предполагают, что открытый код каким-то волшебным образом проверен, и все с ним должно быть нормально. К сожалению, иногда это не так. Открытые проекты, выполняемые сообществами разработчиков, уже по своей природе таковы, что иногда допущенные в них серьезные ошибки могут быть пропущены, объяснил Крейг Тимберг в The Washington Post.
Однако вместо того, чтобы обвинять открытое ПО в ненадежности, воспользовавшись случаем с ошибкой Heartbleed, было бы правильно отнестись к ней как к тревожному звонку. Все те компании (от Yahoo до Dropbox), которые пользовались OpenSSL, не сделав ничего для разработки и улучшения этого продукта, теперь расплачиваются за свою небрежность. Потратив миллионы на устранение возникшей проблемы, возможно, они смогут найти еще несколько тысяч, чтобы помочь в разработке такой критически важной с точки зрения обеспечения безопасности библиотеки.
В конечном счете в рамках проектов, реализуемых сообществами разработчиков открытого кода, выпускаются отличные продукты, но, чтобы они стали превосходными, проектам необходимо больше ресурсов, чем они реально имеют. Людям, которые посвящают свое свободное время и свой талант созданию критически важных продуктов вроде OpenSSL, приходится платить за жилье, покупать еду, обеспечивать свои семьи. Вероятно, они заинтересованы в том, чтобы создавать отличное ПО, но для этого им нужна помощь. И нет никаких причин, объясняющих, почему Yahoo, Google и другие компании не могут такую помощь оказать. Безусловно, код может быть бесплатным, но это не значит, что его стоимость равна нулю. Компании, которые до сих пор использовали код бесплатно и извлекали из этого выгоду для себя, теперь открывают для себя реальную стоимость бесплатного ПО с открытым исходным кодом.
Но платить за бесплатное программное обеспечение можно по-разному. Можно поддержать разработку до ее завершения, чтобы впоследствии быть уверенным в том, что все сделано, как следует, а выпущенная версия тщательно протестирована и стабильна. Или же можно выложить кучу денег позже, когда выяснится, что ваши расчеты на то, что все будет сделано само собой, не оправдались. Теперь, когда компании убедились в том, что позже – это значит значительно дороже, возможно, они захотят сократить свои будущие расходы, выделив небольшую сумму на поддержку значимых для них проектов на предварительной стадии.