4.9 KiB
macOS Dirty NIB
Aprende hacking en AWS desde cero hasta experto con htARTE (Experto en Red Team de HackTricks en AWS)!
Otras formas de apoyar a HackTricks:
- Si quieres ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén el swag oficial de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección de NFTs exclusivos
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud.
Para más detalles sobre la técnica, consulta la publicación original en: https://blog.xpnsec.com/dirtynib/**. Aquí tienes un resumen:
Los archivos NIB, parte del ecosistema de desarrollo de Apple, están destinados a definir elementos de interfaz de usuario y sus interacciones en aplicaciones. Incluyen objetos serializados como ventanas y botones, y se cargan en tiempo de ejecución. A pesar de su uso continuo, Apple ahora aboga por los Storyboards para una visualización más completa del flujo de la interfaz de usuario.
Preocupaciones de seguridad con los archivos NIB
Es crítico tener en cuenta que los archivos NIB pueden ser un riesgo de seguridad. Tienen el potencial de ejecutar comandos arbitrarios, y las alteraciones a los archivos NIB dentro de una aplicación no impiden que Gatekeeper ejecute la aplicación, lo que representa una amenaza significativa.
Proceso de Inyección de Dirty NIB
Creación y Configuración de un Archivo NIB
- Configuración inicial:
- Crea un nuevo archivo NIB usando XCode.
- Agrega un objeto a la interfaz, configurando su clase como
NSAppleScript
. - Configura la propiedad inicial
source
a través de Atributos de Tiempo de Ejecución Definidos por el Usuario.
- Gadget de Ejecución de Código:
- La configuración facilita la ejecución de AppleScript a pedido.
- Integra un botón para activar el objeto
Apple Script
, activando específicamente el selectorexecuteAndReturnError:
.
- Pruebas:
- Un simple Apple Script para propósitos de prueba:
set theDialogText to "PWND"
display dialog theDialogText
- Prueba ejecutándolo en el depurador de XCode y haciendo clic en el botón.
Apuntando a una Aplicación (Ejemplo: Pages)
- Preparación:
- Copia la aplicación objetivo (por ejemplo, Pages) en un directorio separado (por ejemplo,
/tmp/
). - Inicia la aplicación para evitar problemas con Gatekeeper y cachéala.
- Sobrescribiendo el Archivo NIB:
- Reemplaza un archivo NIB existente (por ejemplo, Panel Acerca de NIB) con el archivo DirtyNIB creado.
- Ejecución:
- Desencadena la ejecución interactuando con la aplicación (por ejemplo, seleccionando el elemento de menú
Acerca de
).
Prueba de Concepto: Accediendo a Datos de Usuario
- Modifica el AppleScript para acceder y extraer datos de usuario, como fotos, sin el consentimiento del usuario.
Ejemplo de Código: Archivo .xib Malicioso
- Accede y revisa un ejemplo de un archivo .xib malicioso que demuestra la ejecución de código arbitrario.
Abordando Restricciones de Inicio
- Las Restricciones de Inicio impiden la ejecución de aplicaciones desde ubicaciones inesperadas (por ejemplo,
/tmp
). - Es posible identificar aplicaciones no protegidas por Restricciones de Inicio y apuntarlas para la inyección de archivos NIB.
Protecciones Adicionales de macOS
Desde macOS Sonoma en adelante, las modificaciones dentro de los paquetes de aplicaciones están restringidas. Sin embargo, los métodos anteriores involucraban:
- Copiar la aplicación a una ubicación diferente (por ejemplo,
/tmp
). - Renombrar directorios dentro del paquete de la aplicación para evitar las protecciones iniciales.
- Después de ejecutar la aplicación para registrarse con Gatekeeper, modificar el paquete de la aplicación (por ejemplo, reemplazando MainMenu.nib con Dirty.nib).
- Renombrar los directorios nuevamente y volver a ejecutar la aplicación para ejecutar el archivo NIB inyectado.
Nota: Las actualizaciones recientes de macOS han mitigado este exploit al evitar modificaciones de archivos dentro de los paquetes de aplicaciones después de la caché de Gatekeeper, volviendo el exploit ineficaz.