Выпуск NTPsec 0.9.7, защищенного форка NTPD
Представлен новый выпуск проекта NTPsec, в рамках которого развивается форк эталонной реализации протокола NTPv4 (NTP Classic 4.3.34), сфокусированный на переработке кодовой базы с целью повышения безопасности. Исходные тексты NTPsec размещены в репозитории на GitLab. В развитии NTPsec участвуют некоторые разработчики оригинального NTP Classic, инженеры из компаний Hewlett Packard и Akamai Technologies, а также участники проектов GPSD и RTEMS. Одним из инициаторов создания проекта является Эрик Реймонд (Eric S. Raymond), один из основателей организации OSI (Open Source Initiative).
Проект полностью совместим с классическим пакетом NTP и использует те же алгоритмы. Олтичия NTPsec в основном касаются переработки внутренностей с внедрением передовых техник предотвращения проведения атак. Среди особенностей проекта:
- Все функции работы с памятью и строками заменены на защищенные аналоги, не допускающие переполнения буфера.
- Поставляемые в комплекте экземпляры libevent2 заменены на внешние зависимости.
- Удалены неиспользуемые компоненты библиотек ISC.
- Осуществлен переход к манипуляции наносекундными отрезками времени вместо микросекунд.
- Исправлены ошибки, выявленные при использовании статических анализаторов.
- C целью унификации их имен изменены названия утилит: sntp переименован в ntpdig, ntp-keygen в ntpkeygen, ntp-wait в ntpwait, update-leap в ntpleapfetch;
- Из состава исключен демон ntpsnmpd, который не соответствует RFC 5907;
- Удалены утилиты ntpdc, вместо которых следует использовать ntpq;
- Прекращена поддержки устаревших типов эталонных часов;
- Добавлена новая утилита ntpfrob, предоставляющая средства для диагностики и тонкой настройки локального хронометра.
- Вместо программы ntpdate предложена shell-обвязка над утилитой ntpdig.
- Вывод часов приведен в соответствие с форматом ISO8601.
В выпуске NTPsec 0.9.7 отражены результаты аудита кодовой базы, проведенного компанией Cure53.de на средства, предоставленные Mozilla Foundation в рамках инициативы "Secure Open Source". В результате проверки была выявлена серия новых уязвимостей, которые также устранены в свежем обновлении оригинального ntp-4.2.8p10. NTPsec затрагивают 4 из 9 выявленных уязвимостей, две из которых (CVE-2017-6463, CVE-2017-6464) могу использоваться для инициирования отказа в обслуживании, одна (CVE-2017-6458) может привести к переполнению буфера при выполнении ctl_put() и одна (CVE-2017-6451) связана с некорректным применением snprintf() в функции mx4200_send(). В оригинальном NTP устранены: переполнение буфера (CVE-2017-6462) в DPTS Clock, повышение привилегий в коде User Library для Windows (CVE-2017-6455), переполнение стека при обработке параметров командной строки в инсталляторе для Windows (CVE-2017-6452), переполнение буфера в ntpq при выполнении операции reslist (CVE-2017-6460) и некорректное завершение структуры данных в инсталляторе для Windows (CVE-2017-6459)
Дополнительно в NTPsec 0.9.7 продолжена чистка кода - при подготовке нового выпуска кодовая база сокращена приблизительно на 60 тысяч строк, что примерно 26% от размера кодовой базы в момент форка. Ранее поставляемые в секции contrib программы cpu-temp-log, smartctl-temp-log, temper-temp-log и zone-temp-log теперь объединены в одну утилиту ntplogtemp, упрощающую ведение лога изменения показателей системных датчиков температуры. Драйвер эталонных часов SHM (Shared Memory Driver) теперь может работать на системах без часов реального времени (RTC, Real Time Clock).
В состав включен новый скрипт buildprep, выполняющий подготовительные работы для сборки исходных текстов NTPsec, такие как проверка, загрузка и установка необходимых зависимостей. Проведена работа по увеличению точности - увеличено число знаков в выводе различных утилит, например, driftfile теперь отображает 6 знаков после запятой, вместо 3, а в полях файлов со статистикой отображается 9 знаков после запятой, вместо 6. Похожее увеличение точности вывода также релизовано в ntpq и ntpmon, что может нарушить совместимость со скриптами, осуществляющими автоматический разбор вывода.
По мнению Эрика Реймонда (Eric S. Raymond) состояние проекта NTPsec уже вполне готово для начала работы над первым стабильным релизом NTPsec 1.0, рекомендованным для промышленного внедрения. Перед рлизом усилия можно сосредоточить на оттачивании и тестировании имеющейся кодовой базы. Из планов отмечается подготовка пакетов для популярных дистрибутивов и их продвижение в репозитории. Из областей, в которых можно продолжить упрощение кодовой базы упоминается возможность сокращения кода, применяемого для обработки сетевых сокетов - предлагается удалить нестандартный код для перебора имеющихся сетевых интерфейсов и использовать прикрепление обработчика с использованием маски.