Cómo proteger la aplicación IPA de los ataques si es posible la ingeniería inversa

Recientemente desarrollamos y publicamos una aplicación de banca móvil en la tienda de aplicaciones para una gran organización bancaria. El banco contrató a una empresa de seguridad para que realice una piratería ética sobre la aplicación para ver si de alguna manera compromete la información confidencial.

Recientemente recibimos el informe de pirateo de la empresa, que a pesar de indicar que no existen problemas de seguridad graves, contiene una lista de todos los archivos de clase, nombres de métodos y el código de ensamblaje del proyecto.

Ahora el cliente insiste en que solucionemos estos agujeros en el bucle de seguridad y vuelva a publicar la aplicación. Sin embargo, no tenemos idea de cómo lograron obtener todos estos detalles del IPA de la aplicación. Busqué esto por SO y encontré una publicación en particular que menciona este enlace, que dice que no puedes guardar tu aplicación para que no sea pirateada.

Por favor, ayúdenme a solucionar estas vulnerabilidades de seguridad, o si no es posible, cómo convencer al cliente.

Editar: Recientemente encontré esta página. Parece que EnsureIT de Arxan puede evitar que las IPA de la aplicación se realicen en ingeniería inversa. Alguien experimentado con esto?

Siempre hay un riesgo involucrado. Incluso si no introduce vulnerabilidades usted mismo, la plataforma puede permitir exploits que, al final, pueden ofrecer un punto de entrada para un atacante malintencionado.

En cuanto a su pregunta: No es seguro suponer que una URL codificada, incluso si se ofusca más allá de lo que se cree, no se puede descartar de su producto. Siempre diseñe sus aplicaciones de modo que la seguridad de los datos del usuario esté garantizada (en la medida de lo posible) incluso si los recursos integrados se ven comprometidos. Si solo el conocimiento de esa URL representa una amenaza para la seguridad, entonces su enfoque completo y la API de sus clientes son intrínsecamente inseguros. Recuerde que tal información podría ser capturada por un ataque de hombre en el medio (y otros modos de ataque) también.

Evite la seguridad por oscuridad. Almacene datos confidenciales solo en el disco si es necesario. Como regla general, no permite el almacenamiento de PIN / TAN.

Algunos pensamientos que pueden (o no) convencer a su cliente de que su aplicación es tan segura como puede ser:

  • Siempre que la aplicación se ejecute en un dispositivo sin jailbreak, es poco probable que un atacante, incluso con conocimiento de sus aplicaciones internas, pueda acceder a los datos de cualquier usuario, ya que el iPhone normalmente no ofrece oportunidades para interferir con su aplicación.
  • Si el atacante puede acceder a los datos de tus usuarios, y siempre que hayas protegido esos datos con todos los medios disponibles en iOS (-> llavero -> chip criptográfico -> …), entonces no es tu culpa. Significa que el dispositivo está jailbroken o existen vulnerabilidades del sistema que han sido explotadas, simplemente no se puede hacer nada con respecto a ninguna posibilidad.
  • Es imposible evitar la ingeniería inversa de su aplicación. Incluso si hubiera puesto más esfuerzo en la ofuscación, un atacante con una fuerte motivación aún podría obtener lo que quiere. Su cliente necesita acostumbrarse a esto ya que es un hecho.
  • Otras plataformas tienen vulnerabilidades similares, pero en el iPhone, al menos, tiene un entorno algo cerrado y un riesgo reducido de ser atacado con troyanos y similares.
  • Los gobiernos y las empresas de seguridad son atacadas regularmente, aunque ahora deberían protegerse. Esto significa que la vida es intrínsecamente insegura, afrontarla.

Recientemente investigué sobre esto y encontré útil este artículo, especialmente la parte citada:

El código para una aplicación nativa se almacena en forma de un archivo ejecutable binario, que se cifra aún más; su descifrado se realiza solo cuando el archivo ejecutable es cargado por el procesador en la memoria de acceso aleatorio y todo el proceso de descifrado ocurre en el nivel de hardware. Es por eso que es muy difícil crear herramientas de descifrado sin conexión. La única forma de descifrar datos binarios encriptados es en un dispositivo liberado con algunas herramientas especiales instaladas.

Seguridad en iOS: protección del contenido del archivo .ipa por Stoyan Stoyanov