Estoy buscando algo como este documento técnico de seguridad para iOS, excepto OS X o incluso mejor, algún tipo de informe de auditoría de seguridad de un experto independiente. Después de leer documentación como la Guía de programación de servicios de llavero , estoy aún más confundido acerca de lo que es vulnerable a un ataque adverso en una copia de seguridad sin cifrar de un sistema OS X.
La última vez que lo verifiqué, el llavero de inicio de sesión del usuario en OS X era casi tan seguro como la contraseña. Recuerdo un problema que redujo el secreto real de la clave a algo así como 111 bits (memoria borrosa, no dude en corregirme) debido a algún problema con la forma en que la contraseña se convierte en una clave, pero eso fue hace mucho tiempo y con suerte eso ha sido arreglado.
Por otro lado, me han dicho que el llavero del sistema es inherentemente menos seguro porque cualquier administrador puede acceder a él y un intruso tiene muchas opciones para convertirse en administrador además de adivinar la contraseña de un solo usuario.
En particular, me preocupa almacenar las contraseñas utilizadas en los scripts automatizados en el Llavero del sistema, ya que los archivos del sistema se respaldan y almacenan fuera del sitio sin más cifrado. Los documentos y otros datos del usuario se cifran antes de ser llevados fuera del sitio, pero tengo una sospecha persistente de que hay un camino que estoy pasando por alto que recupera esas claves una vez que se compromete el Llavero del sistema (debido a nuestros procedimientos, no necesariamente cualquier falla criptográfica) . Por lo tanto, quiero tener una comprensión profunda de cómo el llavero del sistema está asegurado simultáneamente pero accesible para cualquier administrador.
¿Cómo se diseñan las claves para que cualquier usuario administrativo pueda desbloquear el llavero del sistema?
¿Existen restricciones criptográficas que limitan de alguna manera lo que un usuario administrativo puede hacer con la información en el Llavero del sistema?
Dada una copia de seguridad del sistema sin cifrar sin
/Users
, ¿cómo obtendría acceso a las claves en el llavero del sistema?
Estoy interesado en OS X 10.5 Leopard y versiones posteriores.
fuente
Respuestas:
El llavero del sistema se almacena en
/Library/Keychains/System.keychain
y la clave para desbloquearlo se almacena/var/db/SystemKey
(sus permisos de archivo predeterminados son legibles solo por root). Se hace referencia a la ubicación de estos archivos en el script de seguridad-sistema de verificación (de la fuente security_systemkeychain ). Incluso es posible probar el bloqueo / desbloqueo automático del llavero del sistema utilizandoEl marco de seguridad de llavero permite que los programas sin privilegios realicen solicitudes de información siempre que estén en la ACL almacenada dentro de la entrada del llavero. Obviamente, si un usuario tiene root, puede acceder directamente tanto al archivo que almacena el llavero del sistema como a la clave para desbloquearlo, por lo tanto, no tiene que realizar solicitudes a través del marco de seguridad y no está sujeto a las ACL almacenadas dentro del llavero sí mismo.
(En realidad no respondí las preguntas originales, así que vamos a darle otra oportunidad)
El marco de llavero libsecurity permite que los procesos regulares interactúen con el llavero del sistema de manera autenticada utilizando el marco de comunicación entre procesos XPC (IPC) de Apple.
El programa A envía una solicitud para acceder a la información del llavero del sistema mediante IPC. Se realiza una comprobación de que el usuario solicitante ya está en el grupo de rueda y también conoce la contraseña de un usuario en el grupo de rueda. Una vez que se confirma la autorización, el
kcproxy
demonio privilegiado se puede utilizar para acceder al material/var/db/SystemKey
, desbloquear el llavero del sistema y devolver la información solicitada.No: un usuario administrativo puede acceder / cambiar cualquier cosa en el llavero del sistema. Incluso si no pudieran, podrían copiar los archivos subyacentes a otra máquina en la que tienen control completo y simplemente desbloquear / acceder allí.
Si la copia de seguridad contuviera copias de
/Library/Keychains/System.keychain
y/var/db/SystemKey
luego las copiaría en sus respectivas ubicaciones en un nuevo sistema OS X y las usaríasystemkeychain
para desbloquear la primera y volcar la base de datos de llavero usandosecurity dump-keychain
.fuente
Llavero del sistema
El llavero del sistema tiene algunas capacidades únicas. Estos están documentados en la página del manual systemkeychain . Es probable que las menciones de la contraseña maestra sean su enfoque. El código fuente específico del llavero del sistema es pequeño y está disponible.
El llavero del sistema
/System/Library/Keychains/System.keychain
es un llavero especial para Apple y demonios para usar. En general, debe evitar usarlo para scripts de nivel de usuario.Revisión de Código: Llavero
Apple publicó el código fuente del Keychain y el marco de seguridad para Mac OS X 10.5; Puede revisar este código para descubrir cómo funciona.
Enfoque alternativo: llavero separado
Puede crear un llavero separado para almacenar las credenciales de su script. Recomendamos esta práctica a nuestros clientes. Puede usar la seguridad de la herramienta de línea de comandos para acceder, extraer y administrar sus llaveros sin recurrir a una interfaz gráfica.
Considere almacenar las contraseñas para sus scripts automatizados en un llavero separado, y excluya este llavero de su copia de seguridad fuera del sitio.
Aprecio que eliminar el llavero de su copia de seguridad no sea ideal, pero abordaría sus inquietudes. Al restaurar la Mac, necesitaría recuperar el Llavero de una fuente diferente; puede ser más confiable fuente o canal lateral.
Siempre puede almacenar la contraseña del llavero por separado en el llavero del sistema. Luego puede desbloquear el llavero separado de un script. Si se ataca la copia de seguridad, solo expondría la contraseña al llavero separado y no al llavero en sí, ya que este archivo no está con la copia de seguridad fuera del sitio.
fuente
Apple publicó recientemente un documento que describe sus prácticas de seguridad , puede encontrar algunas respuestas allí. El documento es específico para iOS, pero muchas de las características de seguridad tienen mucho en común con OS X.
fuente
No tengo un conocimiento específico de Keychain *, pero esta es una práctica bastante estandarizada.
Una vez hecho esto, puede cambiar la "contraseña" ingresando la frase de contraseña actual, descifrando la clave simétrica y luego cifrándola con la nueva frase de contraseña. Esto evita largos procesos de descifrado / cifrado en el caso de que "foo" sea muy grande.
Entonces, ¿cómo funciona esto para múltiples usuarios que necesitan acceder al texto sin formato de foo? Bastante fácil, simplemente crea una copia encriptada de la clave simétrica una vez para cada usuario. En otras palabras, realice el paso tres para cada usuario.
En la práctica, todo esto se abstrae de la vista y el usuario final solo necesita lidiar con su propia contraseña.
Con respecto a la parte 3 de sus preguntas, las claves de los usuarios no se almacenan en su hogar. Lo más probable es que estén almacenados en
/private/var
algún lugar. Entonces, incluso sin/Users
alguien que anteriormente tenía acceso, podría desbloquear el sistema.* Es posible que Keychain funcione de manera diferente.
fuente