iOS UIPasteboard

Support HackTricks

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

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

  • Portapapeles personalizados / nombrados: 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.

Consideraciones de seguridad juegan un papel significativo al utilizar portapapeles. Por ejemplo:

  • No hay un mecanismo para que los usuarios gestionen los permisos de las aplicaciones para acceder al portapapeles.

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

  • Se desaconseja el uso de portapapeles nombrados persistentes en 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.

Asegurarse de que la información sensible no se almacene inadvertidamente en el portapapeles global es crucial. Además, las aplicaciones deben diseñarse para prevenir el uso indebido de los datos del portapapeles global para acciones no intencionadas, y se alienta a los desarrolladores a implementar medidas para evitar la copia de información sensible al portapapeles.

Análisis Estático

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

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

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

Análisis Dinámico

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

  • Monitorear generalPasteboard para el uso general.

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

  • Observar llamadas al método en desuso setPersistent: para verificar configuraciones de persistencia.

Detalles clave a monitorear incluyen:

  • Nombres de portapapeles y contenidos (por ejemplo, verificar 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 del uso de herramientas 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í hay un ejemplo simple de script en JavaScript, inspirado en el enfoque de objection, para leer y registrar cambios del 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

Apoya a HackTricks

Last updated