En programación y seguridad informática , la separación de privilegios es una técnica en la que 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 hacer que un programa de computadora se bifurque en dos procesos . El programa principal elimina los privilegios y el programa más pequeño conserva los privilegios para realizar una determinada tarea. Las dos mitades se comunican a través de un par de conectores . Por lo tanto, 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 / ID de grupo real del ID de usuario / ID de grupo efectivo , utilizando setuid (2) / setgid (2) y las llamadas al sistema relacionadas , que fueron especificadas por POSIX . Si se colocan incorrectamente, las brechas pueden permitir una penetración generalizada de 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 conocido . Las utilidades administrativas también pueden requerir privilegios particulares en tiempo de ejecución . Dicho 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 root en sistemas operativos similares a Unix . La parte sin privilegios generalmente se ejecuta bajo el usuario " nadie " o una cuenta de usuario separada equivalente.
La separación de privilegios también se puede hacer dividiendo la funcionalidad de un solo programa en varios programas más pequeños y luego asignando los privilegios extendidos a partes particulares utilizando los 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 un bloqueo en la parte menos privilegiada no se puede explotar para obtener privilegios, simplemente para causar una denegación de servicio). ataque ).
La separación de privilegios es una de las principales características de seguridad de OpenBSD . La implementación de Postfix se centró en implementar una separación de privilegios integral. Solaris implementa un conjunto separado de funciones para el horquillado de privilegios .
Ver también
- Principio de privilegio mínimo
- Seguridad basada en capacidades
- Problema de diputado confundido
- Escalada de privilegios
- Revocación de privilegios (informática)
- Programación defensiva
- Sandbox (seguridad informática)
enlaces externos
- Theo de Raadt : Técnicas de mitigación de exploits en diapositivas de OpenBSD
- Niels Provos , Markus Friedl , Peter Honeyman : informe sobre la prevención de la escalada de privilegios
- Niels Provos : proyecto OpenSSH separado por privilegios
- Trusted Solaris Developer's Guide: Bracketing Effective Privileges