Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Do-it-Yourself Spy Program: Abusing Apple’s Call Relay Protocol

68 views

Published on

Apple presentó un nuevo conjunto de características de iOS 8 y Yosemite bajo el nombre de "Continuity". Estas características permiten a los iPhones trabajar con otros Macs y iDevices: tales como Macs y iPads de nuevas formas. Instant hotspot y Airdrop son algunos de los nuevos servicios que ofrece Continuity. Entre estos nuevos servicios es uno llamado "Call Relay". En esencia, permite hacer y recibir llamadas telefónicas a través de iDevices y encaminarlos a través del iPhone. Esto no es tu típico servicio de VoIP, sino una conexión P2P basado en un protocolo propietario. El paper de seguridad de Apple es breve y vago en este topic en particular. Sólo cuatro fotografias están dedicadass a explicar cómo funciona Call Relay y la unica información relevante es la siguiente: "El audio se transmite a la perfección de su iPhone a través de una conexión segura de igual a igual entre los dos dispositivos." Hice la ingeniería inversa del protocolo para entender cómo funciona. El objetivo era ver si el diseño de Apple era seguro y encontrar vulnerabilidades enfocandome en formas de escuchar a escondidas las llamadas telefónicas.

En esta presentación, voy a empezar explicando todos los detalles del protocolo y el proceso de ingeniería inversa del mismo. Una vez comprendido por el público el protocolo, se comentarán los diferentes vectores de ataque posibles. Me centraré en lo que funcionó y demostrare con demostraciones en vivo. Veremos cómo es posible trollear víctimas dropeando o previniendo que tomen las llamadas. Voy a explicar y demostrar un ataque en el que, al atacar el protocolo, es posible espiar a las víctimas. También voy a discutir y demostrar cómo un atacante puede abusar de multiconferencia para hacerse pasar por otras personas que llaman. Una vez que entendamos las vulnerabilidades, vamos a discutir cómo puede ser weaponizado para construir un (inserte 3 letras aqui) programa amateur

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Do-it-Yourself Spy Program: Abusing Apple’s Call Relay Protocol

  1. 1. Do-it-Yourself Spy Program: Abusing Apple's Call Relay Protocol Martin Vigo Ekoparty 2016
  2. 2. Martin Vigo Product Security Engineer salesforce.com Fundador Triskel Security Gallego @martin_vigo martinvigo.com triskelsecurity.com
  3. 3. Gallegos VS Españoles Curso para argentinos
  4. 4. Mapa
  5. 5. Playas Playa de Islas Cíes Playa de Barcelona
  6. 6. Gastronomia Mariscos y pescados Tapas, tortilla, paella
  7. 7. Alcohol Licor café Sangría
  8. 8. WWDC 2014
  9. 9. Todos en la misma Wi-Fi
  10. 10. Preguntas • Ya esta hackeado? • Como funciona? • Como se comunica el iPhone con los demás dispositivos? • Es seguro y esta cifrado el protocolo? • Puedo Escuchar/Inyectar/ Modificar/DoS las llamadas?
  11. 11. Motivación
  12. 12. Seguridad basada en secretismo
  13. 13. Nivel de motivación 100%
  14. 14. Entendiendo como funciona Call Relay
  15. 15. Llamada entrante
  16. 16. Llamada saliente
  17. 17. APNS GSM Internet Local Network TCP:5223TCP UDP
  18. 18. Posible objectivo • Protocolo estándar • Interceptar trafico GSM • Antena GSM falsa • Muy ilegal GSM
  19. 19. Posible objetivo • Interceptar tráfico APNS • Conexión persistente • Canal cifrado • Cert pinning • Romper TLS
  20. 20. Posible objetivo • UDP no esta cifrado • UDP es “connectionless” • Multiples vectores de ataque • DNS spoofing • ARP Spoofing • etc. • Protocolo propietario?
  21. 21. Objectivo de ataque
  22. 22. Reverseando un protocolo de red
  23. 23. Objetivos • Como se comunican dos maquinas? • Descubre la estructura del lenguaje • Aprende a hablar el lenguaje • Rómpelo!
  24. 24. Como se comunican dos máquinas
  25. 25. Metodología • Genera tráfico valido • Captura el trafico generado por una llamada • Filtra el ruido • Observa solo el tráfico entre ambas máquinas • Aprende…
  26. 26. Como se comunican dos máquinas
  27. 27. Como se comunica el iPhone con los demás dispositivos • A través de LAN • Usando UDP • Puertos aleatorios con rango 48000 - 64000 • Protocolo propietario • Facetime y Facetime audio usan SIP/RTP • SMS se manda a través de Push Notifications
  28. 28. Descubre la estructura del lenguaje
  29. 29. Metodología • Observa como dos maquinas interactúan • Mira que datos intercambian • Identifica campos básicos • Headers, checksums, counters • Identifica estructuras básicas • Header + counter + data • Busca patrones • Recoge varias muestras de tráfico generado por la misma acción para comparar • Haz varias llamadas telefónicas • Repite los pasos anteriores y compara
  30. 30. Recolecta y compara • Identifica que ha cambiado entre llamadas bajo las mismas condiciones • Compara con llamadas hechas con un AppleID diferente • Haz pruebas en versiones antiguas para encontrar cambios realizados
  31. 31. Primer paquete mandado en 4 diferentes llamadas • Inicio del payload, estático • Posiblemente un header • Dinámico, longitud poco común (12 bytes) • Algún tipo de identificador? Dispositivo, usuario, llamada… • Estático, separa dos campos dinámicos, longitud típica (4 bytes) • Separador? • Dinamico, 16 bits, cerca del final del payload • Checksum? • Estático, todo ceros, al final del payload • Marcador de final de paquete
  32. 32. Produce casos inesperados • Que sucede si… • Añado delays? • Dropeo paquetes específicos? • Bloqueo cierto tráfico?
  33. 33. Bloqueo del primer paquete mandado • Reintenta 10 veces cada medio segundo • Solo cambian dos bytes • Parece incremental pero no por una diferencia constante 0f:00:01:00:08:21:12:a4:42:ce:33:d7:51:28:f2:fe:08:5a:0d:9b:50:80:05:00:04:1b:bb:00:00 0f:00:01:00:08:21:12:a4:42:ce:33:d7:51:28:f2:fe:08:5a:0d:9b:50:80:05:00:04:1e:07:00:00 0f:00:01:00:08:21:12:a4:42:ce:33:d7:51:28:f2:fe:08:5a:0d:9b:50:80:05:00:04:20:3b:00:00 0f:00:01:00:08:21:12:a4:42:ce:33:d7:51:28:f2:fe:08:5a:0d:9b:50:80:05:00:04:22:3b:00:00 0f:00:01:00:08:21:12:a4:42:ce:33:d7:51:28:f2:fe:08:5a:0d:9b:50:80:05:00:04:24:84:00:00 0f:00:01:00:08:21:12:a4:42:ce:33:d7:51:28:f2:fe:08:5a:0d:9b:50:80:05:00:04:26:c6:00:00 0f:00:01:00:08:21:12:a4:42:ce:33:d7:51:28:f2:fe:08:5a:0d:9b:50:80:05:00:04:29:08:00:00 0f:00:01:00:08:21:12:a4:42:ce:33:d7:51:28:f2:fe:08:5a:0d:9b:50:80:05:00:04:2b:1b:00:00
  34. 34. • Huele a timestamp! • 1.125111000 - 0.574930000 = 0.550181 milisegundos • 0x203b - 0x1e07 = 0x0234 = 564 …milisegundos??? • 564 ~ 550 si tenemos en cuenta cierto margen de error • Necesitamos confirmar nuestra teoría 0f:00:01:00:08:21:12:a4:42:ce:33:d7:51:28:f2:fe:08:5a:0d:9b:50:80:05:00:04:1b:bb:00:00 0f:00:01:00:08:21:12:a4:42:ce:33:d7:51:28:f2:fe:08:5a:0d:9b:50:80:05:00:04:1e:07:00:00 0f:00:01:00:08:21:12:a4:42:ce:33:d7:51:28:f2:fe:08:5a:0d:9b:50:80:05:00:04:20:3b:00:00 0f:00:01:00:08:21:12:a4:42:ce:33:d7:51:28:f2:fe:08:5a:0d:9b:50:80:05:00:04:22:3b:00:00 0f:00:01:00:08:21:12:a4:42:ce:33:d7:51:28:f2:fe:08:5a:0d:9b:50:80:05:00:04:24:84:00:00 0f:00:01:00:08:21:12:a4:42:ce:33:d7:51:28:f2:fe:08:5a:0d:9b:50:80:05:00:04:26:c6:00:00 0f:00:01:00:08:21:12:a4:42:ce:33:d7:51:28:f2:fe:08:5a:0d:9b:50:80:05:00:04:29:08:00:00 0f:00:01:00:08:21:12:a4:42:ce:33:d7:51:28:f2:fe:08:5a:0d:9b:50:80:05:00:04:2b:1b:00:00
  35. 35. 3 llamadas consecutivas bloqueadas • 106.715 - 93.003 = 13712ms | 0x4e10 - 0x1736 = 14042ms • Mismo margen de error las otras dos llamadas • Hemos confirmado a timestamp de 2 bytes
  36. 36. Primer paquete mandado en 4 diferentes llamadas • Dinamico, 16 bits, cerca del final del payload • Checksum? TIMESTAMP representando cuando se ha mandado el paquete. • Solo 2 bytes -> 65535 milisegundos • Se resetea cada ~65 segundos
  37. 37. Encontrando patrones manualmente
  38. 38. Tiene que haber un modo mejor de hacerlo
  39. 39. Netzob • Ayuda a reversear protocolos • Aplica modelos matemáticos para encontrar: • Patrones • Relaciones entre bytes • Formatos • Y mucho mas!
  40. 40. Parte de una llamada 3 headers diferentes
  41. 41. Los dos primeros paquetes de 5 llamadas diferentes Netzob encuentra más patrones cuando opera sobre datos similares
  42. 42. • Mac -> Iphone / iPhone -> Mac • Identificamos que solo cambia un byte • Mac -> iPhone manda 0 • iPhone -> Mac manda 1 • Campo 5 es estático en la misma llamada pero cambia entre llamadas
  43. 43. Hemos encontrado el “Discovery phase” 4. You there? 5. Yep Local Network
  44. 44. Siguientes 2 paquetes de 5 llamadas distintas • Campo 1: Cambio de 0 ->1 • Campo 5: Cambio de 38 -> 10 • Campo 7: Mismos bytes que en el primer paquete • Campo 9: Solo se manda de Mac a iPhone. Los bytes tienen una propiedad…
  45. 45. Campo 9: Los bytes son “printables” • Probablemente un identificador de llamada seguido de un ACK • Tenemos la primera prueba de texto no cifrado!
  46. 46. 4. You there? 5. Yep Local Network Identification ACK Encontramos la “Identification phase”
  47. 47. Todos los paquetes con header 20040004 Demasiados datos. Centrémonos en lo interesante
  48. 48. • Lo típico: Header, campos estáticos, separadores, etc. • Primer y segundo paquete (Mac -> iPhone | iPhone -> Mac) • Campo 1: 4 bytes aleatorios | Campo 2: 4 null-bytes • Simula el sequence number del protocolo TCP? • Tercer paquete (Mac -> iPhone) • Campo 1: Mismos 4 bytes mandados en el primer paquete | Campo 2: Los 4 bytes mandados en el campo 1 por el iPhone +1 • Campo 3: Cambia el segundo byte de 0 -> 1
  49. 49. 4. You there? 5. Yep Local Network Identification ACK Negotiate call Encontramos el “Call negotiation phase”
  50. 50. Todos los paquetes con header e000 • 2 valores diferentes que incrementan en 1 (decimal) de manera constante • Cada dispositivo tiene su propio contador para sincronización • Contador de 2 bytes. Se resetea cada ~20 minutos en una llamada. Importante si se usa para cifrado! • Valor estático. Diferente en cada dispositivo. Cambia cada llamada • Audio Encodeado / Comprimido / Cifrado • Confirmado mediante “bit flipping”
  51. 51. 4. You there? 5. Yep Local Network Identification ACK Negotiate call Sound transmission Ya tenemos todas las fases del protocolo
  52. 52. Ven a hablar conmigo si estas interesado y quieres mas detalles! Muchos mas detalles que no hay tiempo para explicar :(
  53. 53. APNS 1. Incoming call 2. Mr. X is calling! 3. Mr. X call iPhone’s internal IP:Port 4. You there? 5. Yep 6. Negotiate call 7. Sound transmission GSM Local Network Internet 4. Identification 5. ACK
  54. 54. Aprende a hablar el lenguaje
  55. 55. Metodología • Implementa el lenguaje en base a lo que has aprendido • Reemplaza una de las máquinas • Comunícate con la otra en su propio lenguaje. Prueba, falla, corrige y repite
  56. 56. Visita mi repositorio github https://www.github.com/martinvigo • Usé scapy para implementar el protocolo • Reemplace correctamente el iPhone y el Mac • Aun no funciona 100% • Me faltan algunos detalles del protocolo • El timing es importante para testear y lo complica mucho
  57. 57. Rómpelo!
  58. 58. Metodología • Define tus objetivos • Puedo escuchar llamadas de otros? • Puedo hacer llamadas como si fuera la víctima? • Puedo espiar a gente? • etc. • Smart fuzzing • Fuzzea campos dinámicos • Respeta las reglas y estructuras del protocolo • Headers, counters, campos estáticos, etc. • Genera casos inesperados
  59. 59. #Fails • Escuchar llamadas ajenas • Decodear/Descomprimir/Descifrar audio • Replay attacks • Redirigir/Duplicar audio en dispositivo atacante • Hacer llamadas como si fuera la víctima • Inyectar audio
  60. 60. #Wins • DoS a llamadas • Espiar víctimas dejándoles el micrófono abierto • Hacerme pasar por un interlocutor en llamadas multiparty
  61. 61. DoS a llamadas • Que sucede si mando un paquete del “Call negotiation phase” durante una llamada? • Necesito poder crear un paquete válido • Queremos un paquete “joker” que funcione siempre sin tener que adivinar/bruteforcear ningún byte • Sin necesidad de MiTM • Use scapy para fuzear el protocolo poniendo a null todos los bytes posibles Magic DoS call packet payload 20040004000000000000000000b002000000000000000000000000000000000000000000000000000000000000 Scapy script: https://github.com/martinvigo
  62. 62. Espiando a víctimas • No puedo escuchar llamadas ajenas • No puedo inyectar audio • No puedo hacer replay attacks de audio • No puedo redirigir/duplicar audio en otro dispositivo • Uso de cifrado
  63. 63. State of Surveillance Vice News documentary
  64. 64. Nosey Smurf NSA tool to enable microphones on mobile devices
  65. 65. Adi Shamir at RSA Conference “In the future, cryptography won’t be broken, it will be bypassed”
  66. 66. Que sucede cuando se cuelga el teléfono? • Absolutamente nada… • Los paquetes de audio simplemente paran • No hay diferencias en el audio payload • Hay algo que se me esta escapando…
  67. 67. El problema…
  68. 68. A veces hay que alzar la vista
  69. 69. Incluyendo tráfico APNS Tráfico hacia APNS justo cuando cuelgo…
  70. 70. Colgando en dispositivos El mensaje “Cuelga” se manda a través de Push Notification
  71. 71. Malas prácticas de seguridad • M8: Decisiones de seguridad en base a inputs no confiados • Apple no sigue sus propias recomendaciones de seguridad • “Push notifications are not guaranteed to be delivered” • “Do not rely on Push Notifications for sensitive actions”
  72. 72. Como funciona el ataque • No permitas que el mensaje “Cuelga” llegue al iPhone 1. ARP spoofing para MiTM 2. Llama a la víctima 3. Bloquea el tráfico saliente hacia 17.0.0.0/8 (APNS)
  73. 73. Demo Espiando a víctimas
  74. 74. Reemplazando interlocutores • Call Relay permite multiparty • Que sucede cuando cambio entre interlocutores? • Lo mismo! El mensaje “Cambia de llamada” se manda a través de APNS • Podemos evitar que se cambie de llamada mientras la interfaz muestra que sucedió
  75. 75. Combinando ambas vulnerabilidades • Podemos evitar que se cuelgue el teléfono • Podemos evitar que se cambie de llamada • Combinemos los dos! 1. El atacante llama a la víctima mientras esta hablando con otra persona 2. La víctima pone la llamada en espera y habla con el atacante 3. El atacante deja que la víctima cuelgue el teléfono 4. Bloquea ambos mensajes “Colgar” y “Cambiar de llamada” • La interfaz muestra que solo hablas con la llamada legítima cuando en realidad estas hablando con el atacante
  76. 76. Demo Reemplazando a interlocutores
  77. 77. Do-it-Yourself Spy Program
  78. 78. Construyendo un Spy Program a lo barato 1. Encuentra vulnerabilidades 2. Weaponizalas 3. Distribúyelas de manera masiva 4. Exploit
  79. 79. Encuentra vulnerabilidades y weaponizalas • Podemos interrumpir llamadas • Podemos reemplazar a interlocutores • Podemos obtener metadatos de las llamadas • Podemos abrir micrófonos remotamente
  80. 80. Distribuye masivamente • Objetivos • Routers y dispositivos IoT • Problemas • Poco o nada de almacenamiento • Múltiples combinaciones de hardware y software • Pocas y limitadas herramientas preinstaladas
  81. 81. Hackeando routers y IoT • Easier than it seems • Find them with Shodan • Default credentials • Off-the-shelf exploits • Can be easily automated
  82. 82. Identificando dispositivos Apple en redes comprometidas • Los 3 primeros bytes de la MAC indican el vendor • IEEE Registration authority tiene todas las asignaciones registradas • Mira la tabla ARP en el router y busca en la Base de Datos arp -a | awk '{print $4}' | while read mac; do echo $mac | grep -io [0-9A-F][0-9A-F]:[0-9A-F] [0-9A-F]:[0-9A-F][0-9A-F] | head -n 1; done | while read splitmac ; do echo $splitmac | tr -d : ; done
  83. 83. Exploit • Requerimientos • MiTM • Dropea paquetes APNS • Llamar a las víctimas
  84. 84. Bloquea tráfico APNS • “APNs uses a persistent IP connection for implementing remote notifications” • Las reglas Firewall ignoran “ESTABLISHED connections” • DNS poison APNS y rerouta el tráfico • Simula el final de una conexión • FIN-ACK-RST • Resetea la conexión persistente al estado “NEW” para que apliquen las reglas del Firewall
  85. 85. Reseteando una conexión persistente • Objectivo: Resetear una conexión externa hacia APNS manteniendo activo el tráfico interno • Routers tiene 2 interfaces de red • Interna -> LAN • Externa -> Internet • Desactiva la interfaz de red externa temporalmente bridge eth0 ifconfig eth0 down && sleep 2 && ifconfig eth0 up
  86. 86. Obteniendo números de teléfono • War dialing • Obtén el BSSID de los routers • Usa wigle.net para obtener la localización física del router • War dialing en base al “area code” • Detecta llamadas entrantes haciendo “fingerprinting” • Correlaciona números de teléfonos con routers detectando llamadas entrantes
  87. 87. Conclusiones
  88. 88. Timeline iOS 8 Yosemite iOS 9 El Capitan Found vulnerabilities iOS 9.3.2 El Capitan 10.11.5 iOS 9.3.3 El Capitan 10.11.6 Spy vulnerability fixed iOS 9.3.5 Sierra beta 8 Found Regression iOS 10 Sierra 10.12 DoS vulnerability fixed CVE-2016-4722CVE-2016-4635 iOS 10.1 Sierra 10.12.1 All issues fixed
  89. 89. Oportunidades de investigación • Reversear FaceTime y daemons • Criptoanálisis del protocolo • Dar soporte en otros sistemas al protocolo Call Relay • Inferir información del tráfico cifrado • http://www.cs.unc.edu/~fabian/papers/tissec2010.pdf • https://www.cs.jhu.edu/~cwright/voip-vbr.pdf
  90. 90. Q & A Muchas gracias!

×