NTP — Network Time Protocol (или SNTP — Simple Network Time Protocol) — один из непетых героев Интернета. Проще говоря, он предоставляет время и данные для серверов и клиентов, чтобы они знали, когда что-то произошло. Теперь у нас есть еще одна проблема безопасности, которую нужно решить в коде Linux NTP.
Проблема была обнаружена группой безопасности Google, которая, похоже, в последнее время несет ответственность за более чем справедливую долю обнаруженных уязвимостей. Некоторые уязвимости присутствуют в более старых версиях кода NTP и были исправлены. Так что пока вы следите за обновлениями, вам не о чем беспокоиться.
В текущем коде были обнаружены три проблемы, и для их устранения вам необходимо выполнить обновление до версии 4.2.8. Две из этих проблем — это классические переполнения буфера, и они должны вызывать ответ «мы никогда не узнаем?» Не до тех пор, пока мы не будем использовать языки, которые не защищают нас от таких вещей, или инструменты, которые проверяют такие вещи.
Три различных процедуры переполнения буфера стека были идентифицированы. Как сказано в сообщении безопасности:
«Удаленный злоумышленник может отправить тщательно созданный пакет, который может переполнить буфер стека и потенциально позволить вредоносному коду выполняться с уровнем привилегий процесса ntpd».
Часто демон NTP запускается с правами root из-за необходимости обновлять системные часы. Обычно в этом нет необходимости, поскольку NTP может работать как пользователь без полномочий root.
Последняя проблема — это отсутствующий оператор возврата, который вызывает продолжение обработки после ошибки. В настоящее время неясно, можно ли каким-либо образом использовать эту проблему — учитывая изобретательность, проявленную в таких вопросах, это, вероятно, возможно.
Протокол NTP в порядке, это просто реализация, требующая некоторого внимания. Точно так же другие реализации, не производные непосредственно от реализации Linux, вероятно, хороши — BSD openntdp не уязвим. Действительно, Тео Де Раадт из BSD делает следующие наблюдения:
«openntpd — это современный фрагмент кода длиной <5000 строк, написанный с использованием лучших известных практик того времени, в то время как кодовая база ntp.org, как сообщается, состоит из 100000 строк неизвестного или в значительной степени неиспользуемого кода, плохо разбитого в прошлом, когда такого рода ошибки программирования не были важное соображение ". В первые дни открытого исходного кода и Linux все было не так критично, поскольку не было так много черных шляп, ожидающих использования уязвимостей в стольких коммерческих целях. Это не оправдание; скорее ностальгическое напоминание о том, что программирование раньше было немного веселее и расслабленнее, чем сегодня. Если вы хотите узнать больше о протоколе NTP и о том, как с ним работать, см .: Класс времени SNTP.