iOS UIPasteboard

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

El intercambio de datos dentro y entre aplicaciones en dispositivos iOS es facilitado por el mecanismo UIPasteboard, que se divide en dos categorías principales:

  • Portapapeles general en todo el sistema: Se utiliza para compartir datos con cualquier aplicación y está diseñado para persistir datos a través de reinicios de dispositivo y desinstalaciones de aplicaciones, una característica que ha estado disponible desde iOS 10.

  • Portapapeles personalizado/nombrado: Estos son específicamente para compartir datos dentro de una aplicación o con otra aplicación que comparte el mismo ID de equipo, y no están diseñados para persistir más allá de la vida del proceso de la aplicación que los crea, siguiendo los cambios introducidos en iOS 10.

Las consideraciones de seguridad juegan un papel importante al utilizar los portapapeles. Por ejemplo:

  • No hay un mecanismo para que los usuarios administren los permisos de la aplicación para acceder al portapapeles.

  • Para mitigar el riesgo de monitoreo no autorizado en segundo plano del portapapeles, el acceso está restringido cuando la aplicación está en primer plano (desde iOS 9).

  • Se desaconseja el uso de portapapeles nombrados persistentes a favor de contenedores compartidos debido a preocupaciones de privacidad.

  • La función Portapapeles Universal introducida con iOS 10, que permite compartir contenido entre dispositivos a través del portapapeles general, puede ser gestionada por los desarrolladores para establecer la expiración de datos y deshabilitar la transferencia automática de contenido.

Es crucial asegurarse de que la información sensible no se almacene inadvertidamente en el portapapeles general. Además, las aplicaciones deben estar diseñadas para evitar el uso indebido de los datos del portapapeles general para acciones no deseadas, y se alienta a los desarrolladores a implementar medidas para evitar la copia de información sensible en el portapapeles.

Análisis Estático

Para el análisis estático, busca en el código fuente o binario:

  • generalPasteboard para identificar el uso del portapapeles general en todo el sistema.

  • pasteboardWithName:create: y pasteboardWithUniqueName para crear portapapeles personalizados. Verifica si la persistencia está habilitada, aunque esto está obsoleto.

Análisis Dinámico

El análisis dinámico implica enganchar o rastrear métodos específicos:

  • Monitorea generalPasteboard para el uso en todo el sistema.

  • Rastrea pasteboardWithName:create: y pasteboardWithUniqueName para implementaciones personalizadas.

  • Observa las llamadas de método setPersistent: obsoletas para verificar la configuración de persistencia.

Detalles clave a monitorear incluyen:

  • Nombres y contenidos del portapapeles (por ejemplo, verificación de cadenas, URLs, imágenes).

  • Número de elementos y tipos de datos presentes, aprovechando verificaciones de tipos de datos estándar y personalizados.

  • Opciones de expiración y solo local inspeccionando el método setItems:options:.

Un ejemplo de uso de herramienta de monitoreo es el monitor de portapapeles de objection, que consulta el generalPasteboard cada 5 segundos en busca de cambios y muestra los nuevos datos.

Aquí tienes un ejemplo de script JavaScript simple, inspirado en el enfoque de objection, para leer y registrar cambios en el portapapeles cada 5 segundos:

const UIPasteboard = ObjC.classes.UIPasteboard;
const Pasteboard = UIPasteboard.generalPasteboard();
var items = "";
var count = Pasteboard.changeCount().toString();

setInterval(function () {
const currentCount = Pasteboard.changeCount().toString();
const currentItems = Pasteboard.items().toString();

if (currentCount === count) { return; }

items = currentItems;
count = currentCount;

console.log('[* Pasteboard changed] count: ' + count +
' hasStrings: ' + Pasteboard.hasStrings().toString() +
' hasURLs: ' + Pasteboard.hasURLs().toString() +
' hasImages: ' + Pasteboard.hasImages().toString());
console.log(items);

}, 1000 * 5);

Referencias

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización