Первый стабильный релиз NTPsec, защищённого форка NTPD

10.10.2017 06:53

Эрик Реймонд (Eric S. Raymond), один из основателей организации OSI (Open Source Initiative), представил первый стабильный выпуск NTPsec 1.0, форка эталонной реализации протокола NTPv4 (NTP Classic 4.3.34), сфокусированного на переработке кодовой базы с целью повышения безопасности. В развитии NTPsec участвуют некоторые разработчики оригинального NTP Classic, инженеры из компаний Hewlett Packard и Akamai Technologies, а также участники проектов GPSD и RTEMS. Исходные тексты NTPsec размещены в репозитории на GitLab.

NTPsec 1.0 подвёл итог двух с половиной лет работы над проектом и позиционируется как первый выпуск, пригодный для промышленного внедрения. В ходе работы кодовая база была сокращена на 76% от состояния в момент форка - число строк кода уменьшилось со 178 тысяч до 55 тысяч, в основном за счёт чистки устаревших возможностей, неактуальных платформ и необязательных инструментов. Уменьшение кодовой базы позволило избавиться от кода, связанного с 75% из уязвимостей, выявленных в классическом NTPD. При этом проект остался полностью совместим с классическим пакетом NTP и использует те же алгоритмы.

Кроме чистки также проведена переработка внутренностей с внедрением передовых техник предотвращения проведения атак. Совместно с организацией IETF ведётся работа по разработке нового стандарта NTS (Network Time Security) для безопасной синхронизации времени. Из улучшений отмечается работа по увеличению точности учёта времени , расширение средств мониторинга и статистики, модернизация синтаксиса файла конфигурации, сокращение времени запуска.

В выпуске NTPsec 1.0 представлен режим автономной работы, при котором используются только локальные источники времени без обращения к внешним серверам и GPS. Новый режим позволяет создавать самодостаточные сервера для окружений повышенной защищённости, которые никак не контактируют в внешним миром и исключают вектор атаки в момент синхронизации с другими NTP-серверами.

Среди других особенностей проекта:

  • Все функции работы с памятью и строками заменены на защищённые аналоги, не допускающие переполнения буфера.
  • Поставляемые в комплекте экземпляры libevent2 заменены на внешние зависимости.
  • Удалены неиспользуемые компоненты библиотек ISC.
  • Осуществлён переход к манипуляции наносекундными отрезками времени вместо микросекунд.
  • Исправлены ошибки, выявленные при использовании статических анализаторов.
  • C целью унификации их имён изменены названия утилит: sntp переименован в ntpdig, ntp-keygen в ntpkeygen, ntp-wait в ntpwait, update-leap в ntpleapfetch;
  • Из состава исключён демон ntpsnmpd, который не соответствует RFC 5907;
  • Удалены утилиты ntpdc, вместо которых следует использовать ntpq;
  • Прекращена поддержка устаревших типов эталонных часов;
  • Добавлена новая утилита ntpfrob, предоставляющая средства для диагностики и тонкой настройки локального хронометра.
  • Вместо программы ntpdate предложена shell-обвязка над утилитой ntpdig.
  • Вывод часов приведён в соответствие с форматом ISO8601.