En programación y seguridad informática , la separación de privilegios ( privsep ) es una técnica basada en software para implementar el principio del mínimo privilegio . [1] [2] Con la separación de privilegios, un programa se divide en partes que se limitan a los privilegios específicos que requieren para realizar una tarea específica. Esto se utiliza para mitigar el daño potencial de una vulnerabilidad de seguridad informática.
Un método común para implementar la separación de privilegios es que un programa informático se bifurque en dos procesos . El programa principal elimina los privilegios y el programa más pequeño los conserva para realizar una determinada tarea. Las dos mitades se comunican a través de un par de sockets . De este modo, cualquier ataque exitoso contra el programa más grande obtendrá un acceso mínimo, aunque el par de programas será capaz de realizar operaciones privilegiadas.
La separación de privilegios se logra tradicionalmente distinguiendo un ID de usuario / grupo real del ID de usuario/grupo efectivo , utilizando setuid (2)/ setgid (2) y llamadas de sistema relacionadas , que fueron especificadas por POSIX . Si estos están ubicados incorrectamente, los espacios pueden permitir una penetración generalizada en la red.
Muchos demonios de servicios de red tienen que realizar una operación privilegiada específica, como abrir un socket sin formato o un socket de Internet en el rango de puertos conocidos . Las utilidades administrativas también pueden requerir privilegios particulares en tiempo de ejecución . Este tipo de software tiende a separar los privilegios revocándolos por completo después de que se realiza la sección crítica y cambia el usuario bajo el que se ejecuta a una cuenta sin privilegios después de hacerlo. Esta acción se conoce como eliminar la raíz en sistemas operativos tipo Unix . La parte sin privilegios generalmente se ejecuta con el usuario " nobody " o una cuenta de usuario separada equivalente.
La separación de privilegios también se puede realizar dividiendo la funcionalidad de un solo programa en varios programas más pequeños y luego asignando los privilegios extendidos a partes específicas mediante permisos del sistema de archivos . De esa manera, los diferentes programas tienen que comunicarse entre sí a través del sistema operativo, por lo que el alcance de las vulnerabilidades potenciales es limitado (ya que una falla en la parte menos privilegiada no se puede explotar para obtener privilegios, sino simplemente para provocar un ataque de denegación de servicio ).
Otro software de servidor de correo electrónico diseñado con la separación de privilegios y la seguridad en mente es Dovecot . [3]
La separación de privilegios es una de las principales características de seguridad de OpenBSD . [4] [5]
OpenSSH utiliza separación de privilegios para garantizar que la creación de pseudoterminal ( pty ) ocurra en una parte segura del proceso, lejos de los procesos por conexión con acceso a la red. [6]
La implementación de Postfix se centró en implementar una separación integral de privilegios. [7] [8]
Solaris implementa un conjunto separado de funciones para el horquillado de privilegios . [9]