En esta charla sobre la separación de privilegios, Theo de Raadt explica que el ntpd de OpenBSD tiene un proceso maestro que llama a settimeofday()
, un proceso de DNS responsable de consultar los servidores de DNS y un proceso de protocolo NTP que es responsable de hablar de UDP a los servidores de NTP. Tiene esto que decir sobre el proceso de DNS:
La otra cosa que tenemos es un proceso de servicio DNS independiente, porque queríamos poder hacer DNS, pero no queríamos que el proceso maestro lo hiciera porque las bibliotecas DNS a veces tienen errores, y no lo hicimos No quiero que el altavoz de Internet lo haga porque ... es ... simplemente no tiene sentido.
Supongamos que el compromiso no existe (este diseño es anterior, como yo lo entiendo). Obviamente, este diseño es bastante inútil por sí solo, ya que si el servicio orientado a la red está comprometido, el atacante tiene una raíz en el sistema. Por lo tanto, el proceso maestro bifurcará ambos subprocesos, lo que inmediatamente quitará los privilegios a nobody
o algo así. De esa manera, si hay un error de seguridad en la biblioteca DNS o en el código NTP, el atacante no tiene acceso de escritura al archivo del sistema, a los directorios principales, etc.
Todo eso tiene sentido para mí. Sin embargo, lo que no entiendo es por qué es útil la separación entre los procesos de DNS y UDP. No importa cuál está comprometido; el atacante se ejecuta como el mismo usuario de cualquier manera. Podría poner el proceso de DNS en, por ejemplo. un usuario nobody2
, pero incluso entonces, nobody2
será tan poco privilegiado como nobody
.
Con el compromiso, el beneficio es obvio ya que, por ejemplo, el proceso de DNS puede prometer que solo realizará consultas de DNS, lo que será bastante inútil para un atacante. Sin embargo, estamos asumiendo que el compromiso no es un factor importante ya que este diseño se introdujo antes del compromiso.
¿Hay algún beneficio de seguridad para el diseño de tres procesos ntpd que me estoy perdiendo? ¿O fue solo una decisión de diseño no relacionada con la seguridad (tal vez considerando la posibilidad de un futuro sistema de compromiso)?