Los sistemas Mac OS X, u OS X, como se denominan ya, están basados en sistemas operativos UNIX, que generalmente han utilizado un sistema de seguridad en el sistema de ficheros basado en los tradicionales permisos sobre user, group y others. El funcionamiento básico de esos permisos, hoy en día conocido por todo el mundo, y se puede resumir en cada fichero o directorio, tiene un usuario dueño UID y un grupo de usuarios dueño GID, que pueden consultarse con un simple ls -l - la opción a es para ver los archivos ocultos -.
Cada vez que un usuario quiere realizar una acción con este objeto se le aplicarán, dependiendo de quién sea, los permisos del usuario dueño, los del grupo dueño o los del restro de los usuarios del sistema - others -, que están definidos por la mascara de caracteres impresa al principio, donde el primer carácter indica si es un directorio (d) o un fichero (-) y luego si el usuario, el grupo o el resto, tienen permiso de lectura (r), escritura (w) y/o ejecución (x).
Sobre estos permisos, se añaden los permisos de set-uid-on-execution y set-gid-on-execution (s), el sticky bit (t) y el permiso de ejecución especial (X). Todos estos permisos tienen un valor especial en la seguridad del sistema de ficheros y del sistema operativo en general, y por ello les dedicaremos un artículo más adelante explicando cómo se usan tradicionalmente en ataques.
Además, como ya hemos visto, conocer y configurar correctamente estos permisos sobre los directorios de las aplicaciones o sobre los directorios propios puede ser un verdadero problema para la seguridad de un entorno multi-usuario, ya que los permisos por defecto en la creación de usuarios son inseguros, el cifrado de FileVault no protege contra ello y otros usuarios podrían ver nuestros documentos y la instalación de muchas aplicaciones es insegura por defecto y permite elevación de privilegios.
A pesar de llevar funcionando muchos años, la granularidad de los permisos que se pueden configurar con ellos es muy pequeña, ya que solo permite, al final, tres tipos de listas de permisos por objetos, lo que en entornos complejos multi-usuario es bastante deficitario. Por ello, todos los sistemas evolucionados de UNIX, y entre ellos por supuesto Mac OS X, han implementado sistemas de Listas de Control de Acceso (ACLs) que matizan los permisos generales otorgados a ugo.
Consulta de ACLs
Dependiendo del sistema UNIX/Linux que estés utilizando, la implementación es distinta, y en Mac OS X ha ido cambiando a lo largo del tiempo, configurándose de forma diferente en las diferentes versiones del sistema operativo OS X. En este caso nos centramos en cómo se configuran en OS X 10.8 Moutain Lion.
Una de las formas más sencillas de acceder a la información extendida de las ACL de los
ficheros de un directorio es con el comando ls -lea. El uso del modificador e hace que el sistema muestra las ACL de los ficheros. Como veremos, para poder utilizar el modificador e también hace falta tener un permiso especial.
Figura 2: Listado con ls -lea que muestra las ACL de objetos |
Estas ACL se pueden consultar también desde el propio Finder, haciendo uso de la opción de Obtener información sobre un fichero o directorio, En la parte inferior aparecerán las ACLS.
Permisos extendidos sobre ficheros
En OS X Mountain Lion las ACLs se configuran con el comando chmod, y existen tres grupos de permisos para configurar la seguridad en los elementos del sistema de ficheros, que serán aplicables a todos, aplicables sólo a objetos de tipo directorio o aplicables solo a ficheros del sistema. Estos permisos son los siguientes:
Permisos aplicables a todos los objetos del sistema de ficheros:
- delete: Permite borrar el objeto.
- readAttr: Permite leer los atributos del objeto.
- writeAttr: Permite escribir los atributos del objeto.
- readAttrExt: Permite leer los atributos extendidos que se leen con xattr, como el de la URL de descarga.
- writeAttrExt: Permite escribir los atributos extendidos de un objeto.
- readSecurity: Permite leer la información de las ACL (con el modificador e de ls)
- writeSecurity: Permite escribir la información de una ACL.
- chown: Permite cambiar el dueño de un objeto.
Permisos aplicables sólo a directorios:
- list: Permite listar el contenido de un fichero.
- search: Permite buscar un fichero por nombre en un directorio.
- add_file: Permite añadir fichero en un directorio.
- add_subdirectory: Permite añadir subdirectorios a un fichero.
- delete_child: Permite eliminar un objeto contenido en el directorio.
Permisos aplicables sólo a ficheros:
- read: Permite ver el contenido de un fichero.ACE: Access Control Entry
- write: Permite escribir en un fichero.
- append: Permite añadir contenido a un fichero.
- execute: Permite ejecutar el fichero como un programa o script.
Para configurar una ACL hay que generar una lista de ACE, es decir, una configuración individual de premisos para un usuario. Cada ACE estará compuesta por el usuario, la opción de permitir Allow o denegar Deny y la lista de permisos extendidos sobre el objeto. Los siguientes son ejemplos de ACE que podrán ser aplicadas a un objeto:
- "usuario1 deny readsecurity,writesecurity"
- "usuario2 allow readsecurity"
- "usuario3 allow readsecurity, writesecurity"
Al final, la ACL de un objeto estará compuesta por una lista de ACE en un orden establecido que se asignarán, modificarán o eliminarán con el comando chmod, como vamos a ver.
Configuración de una ACL a un objeto
La configuración de una ACL se puede realizar o bien mediante las opciones gráficas en Finder o bien mediante el comando chmod y el modificador a acompañado de una ACE (Access Control Entry). De nuevo aquí nos encontramos diferencias, ya que en Finder los permisos de las ACE están agrupados en permisos generales, no permitiendo una granularidad completa a nivel de permisos concretos.
Figura 4: Configuración de ACEs en Finder |
Desde la consola, y utilizando el comando chmod y el operador a se pueden configurar permiso a permiso. La lista de posibilidades para configurar las ACE de un objeto son:
+a: Añade una ACE a la ACL en la cabeza de la lista.
-a: Elimina una ACE de la ACL.
-a# p: Añade una ACE en la posición p de la lista.
=a# p: Re-escribe la ACE de la posición p a esta ACE.
De esta manera es posible ajustar mucho más la granularidad de los permisos de una determinada entrada del sistema de ficheros.
Figura 5: Configurando ACE de la ACL de un objeto con chmod |
Como establecer la lista ACL de un objeto manualmente puede ser tedioso, el operador chmod -E permite leer la lisa de ACE desde la entrada estándar, como una lista de líneas con las ACE. Esta puede ser sustituida por la entrada desde un fichero. Por último, para borrar la ACL y todas sus ACE de un fichero, es posible utilizar el comando chmod -N y la lista será destrozada.
Figura 6: Borrando una ACL de un objeto co chmod -N |
Con estas opciones es posible configurar la ACL de un determinado objeto, pero aún es posible hacer muchas más cosas con ellas en OS X Mountain Lion teniendo en cuenta las Opciones de herencia en listas de control de accesos ACL en OX Mountain Lion.
No hay comentarios:
Publicar un comentario