Es una mala idea en sí misma
Es una mala idea discriminar en la imagen del proceso y esperar obtener algún tipo de seguridad si no protege estos procesos.
Lista blanca de imágenes ejecutables
Por ejemplo, supongamos que solo permite wget y curl y bloquea todos los demás accesos de red. Podría pensar que esta configuración de seguridad permite solicitudes HTTP / s, FTP, etc. arbitrarias, pero no envía datos arbitrarios a través de TCP, o inicia sockets de servidores TCP arbitrarios, o utiliza UDP. Pero como wget y curl son programas ordinarios no vinculados dinámicamente que no forman parte de algo, pueden ser:
- comenzó con
LD_LIBRARY_PATH
arbitrario, comenzó con un cargador dinámico modificado, todos los trucos que hace ltrace
- rastreado, como
strace
hace
- modificado en tiempo de ejecución con
ptrace
(2)
Como lo hacen strace
/ ltrace
, puedes manipular cualquier proceso a menos que se ejecute con un usuario o ID de grupo diferente, o con capacidades que no tienes.
Si desea asociar cualquiera derechos específicos a imágenes específicas (por ejemplo, /usr/bin/wget
), debe proteger los procesos iniciados contra la interferencia con la misma fuerza con la que están protegidos los procesos establecidos. A menos que esto se haga correctamente, la mayoría de las veces tiene seguridad en el teatro y protección contra amenazas no adaptativas (que es quizás todo lo que necesita, pero debe decirlo explícitamente).
Por supuesto, solo puede proteger un proceso si está diseñado para ser protegido de su usuario, y la mayoría de los programas no lo están. En particular, la mayoría de los navegadores permiten la instalación de extensiones arbitrarias a las que se permite acceder a la red, todo desde el proceso del navegador, con los derechos del proceso, a veces sin ninguna restricción de seguridad específica, por lo que también debería evitar la instalación de extensiones en programas de la lista blanca. .
Lista negra de imágenes ejecutables
OTOH, puede usar el firewall para evitar que demonios específicos accedan a la red o abrir cualquier conexión inesperada.
Para hacer cumplir estas restricciones, necesita al menos:
- evitar que los procesos restringidos inicien procesos no restringidos
- evita que los procesos restringidos interfieran (como anteriormente) con procesos no restringidos
El inicio de imágenes ejecutables arbitrarias se realiza con exec
, y el kernel debería evitar que los procesos restringidos inicien imágenes no restringidas, o etiquetar el nuevo proceso para que esté restringido como sus padres.
Pero una imagen ejecutable también se puede hacer indirectamente agregando cron
/ anacron
/ at
/ batch
trabajos, por lo que se debe evitar que el proceso restringido edite las listas de trabajos, posiblemente asegurándose de que no lo hagan. posee los archivos de las listas de trabajos y no tiene acceso de escritura a ellos. Cualquier usuario también puede procmailrc y ejecutar comandos arbitrarios siempre que se reciba correo, etc.
Estas restricciones deben integrarse en todo el sistema operativo, no solo en todo el kernel. Esto va en contra de la tradición de Unix donde se espera que cualquier proceso con un ID de usuario inicie cualquier proceso con su ID de usuario, y los programas / programas DAEMON / cron
/ at
/ maildrop han integrado esta suposición. Debe buscar cualquier demonio que inicie los programas en nombre del usuario y agregar a la lista negra estas características.
¿Ves el patrón? La aplicación de una lista negra de procesos específicos que impiden llamadas específicas al sistema (acceso a la red) lleva a más backlists no solo en otras llamadas al sistema ( exec
family) sino también en otros componentes del sistema operativo. Cualquier seguro, Unix- razonable (es decir, cuyo comportamiento es completamente esperado en un sistema Unix tradicional) DAEMON puede introducir un vacío de seguridad.
Conclusión
El "kernel" del kernel (la parte de micro-kernel de un kernel monolítico) debe conocer los derechos de proceso, no solo un subsistema específico (subsistema de red, sistema de archivos, etc.). El "derecho a la red" es una propiedad esencial de un proceso, al igual que los ID de usuario o el conjunto de capacidades.
O puede decir que todo lo que necesita es una protección contra amenazas no adaptativas: tiene miedo de gusanos / virus estándar, no de ataques dirigidos.
Este es un problema general en cualquier función de seguridad modificada.
Conclusión personal
Es por esto que creo que las capacidades son fundamentalmente una idea terriblemente rota. Unix se basa en el ID de usuario: si desea un aislamiento de seguridad, use un UID diferente. Este recurso es barato.