Редко-редко, но всё же рождаются на свет такие ошибки в компьютерных программах, что сами по себе представляют Явление. Их в деталях смакует пресса, ими восхищаются, от них плачут. И дело даже не в том, какова ошибка сама по себе, но в тех условиях, где ей довелось родиться и множиться. И сегодня есть возможность рассказать именно про такую ошибку - ошибку с большой буквы.
Открыта она была совершенно случайно: не было крутых хакеров, перерывавших мегабайты кода в поисках "дыры", не было вообще никаких сознательных поисков. Просто один из рядовых юзеров операционной системы Linux Red Hat (согласно официальной легенде - Owen Taylor) ухитрился случайно создать ошибочную картинку формата PNG, скормив которую графическому приложению обвалил его. Сведения об открытии были переданы в Red Hat, где с участием уже работника этой компании (Matthias Clasen) и было выяснено, что проблема кроется не в графическом приложении (а точнее - подозревавшейся в некорректной работе библиотеке libpng, ответственной за работу с PNG-форматом), а в системной библиотечке zlib. Вот тут-то и появился первый повод серьёзно задуматься, приведший позже к тщательному сокрытию информации от публики: CERT, который занялся координацией усилий по уведомлению производителей потенциально подверженных ошибке продуктов, молчал почти месяц, прежде чем опубликовать первый пресс-релиз.
Собственно, на первый взгляд, ничего страшного не произошло: zlib есть открытая, свободная библиотека, реализующая набор функций для компрессии/декомпрессии информации. Наличествуя в дистрибутиве операционной системы, она чаще всего используется сторонними программами в процессе низкоуровневой работы с сетью и работе с графикой. Попросив zlib распаковать некорректный компрессированный блок данных, можно, при определённой его структуре, заставить библиотеку (а вместе с ним и обратившуюся к ней программу) неправильно работать с памятью. Использовать это ценное свойство можно по-разному: для временного вывода из строя атакуемой программы, для кражи информации или даже исполнения постороннего кода. Механизм атаки прост донельзя - нужно лишь знать, какую именно программу атакуешь, после чего передать ей дефектный блок данных так же, как это сделал первооткрыватель ошибки.
Но всё это детали, не дающие ответа на поставленный вопрос. А скрыт ответ в уникальном свойстве ошибки в zlib, замечательно демонстрирующей главный минус open source-подхода к разработке программ. Zlib можно свободно не только использовать, но и модифицировать. Поэтому многие разработчики софта не просто обращаются к этой библиотечке, но включают её код (целиком или частично) в свои продукты. Zlib очень популярна: загляните ради примера на официальную страничку, где приведён список лишь части приложений, её использующих - в нём 500 (!) позиций. А теперь, учтя сказанное выше про свободу применения, представьте как можно быстро пофиксить такую ошибку. Ведь простой замены дефектной версии 1.1.3 на 1.1.4 недостаточно - нужно уведомить всех и каждого (а кто их знает - всех?!) разработчика, заставив вспомнить, как и где использовалась zlib. Это - неизбежная расплата за право быть свободным. Неограниченность и бесконтрольность сделали своё дело: популярная пресса по сей день считает, что ошибке в zlib подвержены лишь пользователи различных версий Linux, BSD, Solaris и прочих *NIX - в которых к ней обращаются системные компоненты (это, кстати, само по себе означает, что через zlib-атаку взломщик может получить права root). Однако, в уже упомянутом списке можно найти и DirectX, и Macromedia Shockwave, и Lotus Notes, и Windows Messenger, и Mozilla, и PGP, и Norton Antivirus. Проникнитесь значимостью момента - под ударом весь многоликий компьютерный мир…
Обсудите материал в форуме