zlib-rs
Бібліотека zlib, розроблений Жаном-Лу Галі та Марком Адлером, є важливим компонентом оскільки він використовується в широкому діапазоні застосувань, які є зосереджено на стисненні файлів у таких форматах, як ZIP, gzip і PNG завдяки своїй ефективності та універсальності. Ця бібліотека існує з 1995 року і в результаті його широкого використання він також став мішенню багатьох вразливостей безпеки пам’яті.
Ядром zlib є алгоритм стиснення DEFLATE, який поєднує методи стиснення даних без втрат алгоритму LZ77 із структурою дерева Хаффмана для досягнення вражаючих рівнів стиснення. Ця комбінація методів робить zlib надзвичайно ефективним у стисненні та розпакуванні даних, що робить його особливо корисним у програмах, де простір для зберігання або пропускна здатність обмежені.
Окрім стиснення файлів, zlib Він також використовується для передачі стислих даних у мережах, щоб зменшити навантаження на пропускну здатність, у програмах для зберігання та обробки файлів, а також у мультимедійних програмах для стиснення аудіо- та відеоданих.
Через деякий час, У zlib виявлено деякі вразливості, які було усунено у пізніших версіях zlib, таких як вищезгадані CVE-2005-1849, CVE-2016-9840, CVE-2016-9841 і CVE-2016-9842 (просто згадаю деякі з відомих з zlib), які можна використовувати зловмисниками, щоб спричинити відмову в обслуговуванні (DoS) або навіть виконати довільний код, і що через недоліки безпеки пам’яті, типові для бібліотек стиснення, написаних на C/C++, zlib залишається головною мішенню.
Для вирішення цих проблем, не залишаючи осторонь природу та переваги zlib, ISRG (організація, що стоїть за проектом Let's Encrypt і присвячена покращенню безпеки в Інтернеті) нещодавно оголосила про запуск нового проекту Метою якого є створення аналога zlib на мові програмування Rust.
Ми найняли Tweede Golf у грудні 2023 року для початкового впровадження на основі zlib-ng, зосередившись на підтримці чудової продуктивності та забезпеченні безпеки пам’яті.
Що далі
Наразі ми шукаємо фінансування для завершення роботи, необхідної для підготовки початкового впровадження до виробництва.
Нова альтернатива називається «zlib-rs» і це представлено як рішення zlib, написане мовою Rust з головною метою вирішення проблем безпеки, пов’язаних з помилками пам’яті та вразливими місцями, які зазвичай присутні в бібліотеках стиснення, написаних на C/C++.
Розробка zlib-rs виникає у відповідь до статистичних даних Microsoft і Google, які вказують на те, що приблизно 70% вразливостей пов’язані з ненадійним керуванням пам’яттю. Очікується, що використання Rust як мови програмування значно зменшить ризик виникнення таких вразливостей, як доступ до звільнених областей пам’яті або переповнення буфера.
Проект zlib-rs містить реалізацію Rust формату файлу zlib, який сумісний з API zlib і репозиторій зараз працюють над двома реалізаціями:
- zlib-rs, реалізація Rust на основі zlib із захищеним API Rust (наразі вважається нестабільною, але незабаром очікується стабілізація реалізації).
- libz-rs-sys, C API C API для zlib-rs. API загалом еквівалентний zlib-sys і zlib-ng-sys, але наразі не надає функцій сімейства gz*. З точки зору Rust, цей API не дуже ергономічний, тому поки що рекомендується працювати з flate2.
Щодо роботи в поточній розробці, згадується, що пропонування аналога в Rust може привернути увагу інших, і вони можуть приєднатися до роботи, оскільки пропонування альтернативи, зосередженої на безпеці та запобіганні поширеним помилкам, може за кілька років роботи та розробки забезпечують прозору заміну zlib.
Нарешті, варто згадати, що робота zlib-rs наразі опублікована на GitHub у наступному репозиторії, а код поширюється за ліцензією Zlib. Ви можете дізнатися більше про це en за наступним посиланням.