Privacidad de Mac: las aplicaciones de Sandboxed Mac pueden grabar tu pantalla en cualquier momento sin el usuario lo sepa

Privacidad de Mac: las aplicaciones de Sandboxed Mac pueden grabar tu pantalla en cualquier momento sin el usuario lo sepa

Cualquier aplicación Mac, con o menos espacio aislado, puede:

  • Tome capturas de pantalla de su Mac silenciosamente sin que usted lo sepa
  • Acceda a cada píxel, incluso si la aplicación Mac está en segundo plano
  • Usar el software básico de OCR para leer el texto en la pantalla
  • Acceder a todos los monitores conectados

¿Que es lo peor que puede pasar?

  • Leer la contraseña y las claves de los administradores de contraseñas
  • Detecta qué servicios web utilizas (por ejemplo, proveedor de correo electrónico)
  • Lee todos los correos electrónicos y mensajes que abras en tu Mac
  • Cuando se dirige a un desarrollador, esto le permite al atacante acceder potencialmente al código fuente confidencial, claves de API o datos similares
  • Recojer información personal sobre el usuario, como sus datos bancarios, salario, dirección, etc.

mac-take-screenshots

¿Cómo puedo protegerme como usuario?

Por el momento no hay forma de protegerse.

Propuesta de solución

Hay muchos casos de uso válidos para que las aplicaciones de Mac graben la pantalla, 1Password, 2fA soporte o software de grabación de pantalla, sin embargo debe haber algún tipo de control.

El proceso de revisión de la App Store podría verificar las autorizaciones de Sandbox para acceder a la pantalla:

  • Poner al usuario a cuadro con un diálogo de permiso
  • Además, se debe notificar al usuario siempre que una aplicación acceda a la pantalla.

Podeis ver este fallo archivado en Open Radar (rdar://37423927)

¿Como funciona?

Un desarrollador solo necesita usar CGWindowListCreateImage para generar una captura de la pantalla completa en un instante:

CGImageRef screenshot = CGWindowListCreateImage(
  CGRectInfinite, 
  kCGWindowListOptionOnScreenOnly, 
  kCGNullWindowID, 
  kCGWindowImageDefault);

NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithCGImage:screenshot];

La imagen generada se puede pasar por una biblioteca de OCR y se pude obtener todo el texto que se procesó en la máquina del usuario.