Mejores prácticas para la seguridad de las aplicaciones de iOS

Al pensar en la seguridad de las aplicaciones iPhone / iPad, puedo notar que hay:

  • Las herramientas de pirateo ampliamente disponibles permiten el acceso al sistema de archivos
  • Intercepción de red, ataque de hombres en el medio

==> amenaza de robo de datos

y también:

  • Disponibilidad de herramientas de piratería que permiten compartir libremente una aplicación de pago con amigos / comunidad (visto en Cydia)
  • Disponibilidad de herramientas de piratería que permiten obtener compras de aplicaciones sin pagar (visto en Cydia, y se enteró de que no funciona con ninguna aplicación)

==> amenaza de pérdida de ingresos

Así que me pregunto cuál es la mejor práctica para obtener una mejor seguridad en la aplicación iOS. Además, ¿cuál es la mejor manera de reducir la pérdida de ingresos y minimizar la exposición a piratería ?

para el n. ° 1 he visto algunas diapositivas de WWDC sobre seguridad 1 2 3 4 + documentos de Apple

y puedo decir que entre estas mejores prácticas hay:

  • Uso de API que ofrece protección de datos (como NSFileManager con el atributo NSFileProtectionKey)
  • Usando llavero
  • Protección de datos confidenciales con SSL y uso de certificados

para el n. ° 2 creo que al usar un modelo de negocio basado en la aplicación gratuita, entonces en la compra de la aplicación con la verificación de Store Receipts puede ser el modelo con una pérdida mínima de ingresos.

¿Cuáles son sus mejores prácticas para la seguridad y la mejor manera de minimizar las posibilidades de piratería de aplicaciones?

# 1 ¿Cuáles son las mejores prácticas para obtener una mejor seguridad en la aplicación de iOS?

La seguridad adecuada de los datos depende en gran medida de la naturaleza de la información. ¿Es de larga vida o de corta duración? ¿Es una credencial general que se puede usar para abrir otras cosas o una sola pieza de datos? ¿La pérdida potencial es privada, financiera o de seguridad? Determinar las protecciones apropiadas requiere un caso específico y no tiene una respuesta general. Pero pides mejores prácticas y hay varias. Ninguno de ellos es perfecto o irrompible. Pero son la mejor práctica. Aquí hay algunos:

  • Almacene información confidencial en Keychain
  • Establezca la protección de datos a NSFileProtectionComplete siempre que sea posible.
  • No almacene datos confidenciales que realmente no necesite o por más tiempo de lo que necesita.
  • Almacene tokens de autenticación específicos de la aplicación en lugar de contraseñas.
  • Use HTTPS para verificar el servidor al que está contactando. Nunca acepte un certificado no válido o que no sea de confianza.
  • Cuando se conecte a su propio servidor, valide que el servicio presente un certificado que haya firmado, no solo un “certificado de confianza”.

Este es solo un puñado de enfoques, pero establecen el tono básico:

  • Use las API integradas para almacenar cosas. A medida que Apple mejora la seguridad, obtienes los beneficios de forma gratuita.
  • Evite almacenar información confidencial y minimice la sensibilidad de lo que almacena.
  • Verifique los servicios con los que se comunica.

# 2 ¿Cuáles son las mejores formas de reducir la pérdida de ingresos y minimizar la exposición a piratería?

Esto ha sido discutido muchas veces en SO. Esta respuesta incluye enlaces a varias de las otras discusiones:

Asegure la encriptación https para la aplicación iPhone a la página web

La respuesta corta es: preocuparse por sus clientes, no por los que no son clientes. Muchos piratas nunca, nunca, le pagarán dinero, por lo que su tiempo y dinero se gastarán mejor para ayudar a sus clientes reales a que le paguen, y para que sea más fácil para ellos hacerlo. Concéntrate en ganar más dinero en lugar de protegerte del dinero que nunca podrías tener. Nunca, nunca, marque a un cliente que paga en sus esfuerzos por castigar a un cliente que no paga. La venganza es un juego de tontos y una pérdida de recursos.

Hay dos formas excelentes de evitar la piratería:

  • No publicar
  • Publique basura que nadie quiere.

Hay algunas cosas básicas que puede hacer que valen la pena solo, como dicen, para mantener honestas a las personas honestas (algunas se discuten en las diversas discusiones relacionadas). Pero no permanezca despierto por la noche preocupándose por cómo frustrar a los piratas. Descansa despierto preocupándote por cómo sorprender a tus clientes.

Y recuerde siempre: Apple gasta más dinero del que la mayoría de nosotros hemos visto en nuestras vidas tratando de proteger el iPhone. Todavía está jailbroken. Piense en lo que su presupuesto va a lograr.

Cuando el atacante obtiene acceso físico al dispositivo (por ejemplo, robo), puede hacer casi cualquier cosa. Tenga en cuenta que es muy fácil de leer los archivos de la aplicación. El dispositivo robado se puede desbloquear fácilmente y el atacante puede acceder incluso a los archivos protegidos.

Mi consejo para almacenar datos confidenciales en el dispositivo:

  1. no lo hagas si pueden almacenarse en un servidor seguro
  2. use su propio cifrado, descifre cuando el usuario está conectado, borre el archivo descifrado cuando cierren sesión o después de un tiempo la aplicación esté en segundo plano.
  3. cada contraseña y clave de cifrado deben almacenarse en el llavero.

Rob Napier mencionó buenos puntos. Pero para hacerlo más seguro,

1 ¿Cuáles son las mejores prácticas para obtener una mejor seguridad en la aplicación de iOS?

  1. Almacene información confidencial en formato cifrado en Keychain.
    • Al acceder físicamente al dispositivo, los datos de la llave se pueden descargar fácilmente.
  2. Establezca la clase de protección de datos adecuada (preferiblemente NSFileProtectionComplete).
  3. Utilice siempre el cifrado personalizado junto con la API incorporada para almacenar datos.
    • Incluso si los hackers encuentran lagunas en la API incorporada, tu aplicación es segura.
  4. Sobre escribir datos almacenados temporales antes de la eliminación.
    • Las técnicas forenses se pueden usar para recuperar los datos eliminados.
  5. Utilice HTTPS y fijación de certificados. Nunca acepte certificados que no sean de confianza.
  6. Almacene archivos importantes de plist, sqlite, etc … en la carpeta Library / caches.
    • Los archivos almacenados en la carpeta de cachés no están respaldados con iTunes.
  7. Siempre crea la aplicación con el último XCode.
    • Agrega soporte solo para los últimos Cifrados SSL

2 ¿Cuáles son las mejores formas de reducir la pérdida de ingresos y minimizar la exposición a piratería?

Puede que no sea posible detener la piratería, pero podemos hacerlo difícil.

  1. Evite que la aplicación se ejecute en dispositivos Jailbroken (piénselo dos veces, puede perder clientes válidos)
    • Agregar código que detecta la existencia de Jailbreak
  2. Evite que la aplicación se una a los depuradores
    • Las aplicaciones descargadas de AppStore están encriptadas. Los depuradores se utilizan para descifrar y analizar la aplicación. Agregue el código que detecta depuradores.

Varía realmente dependiendo de lo que haces. En cuanto al acceso a una API, todo lo que necesita hacer es almacenar información sobre el hash y / o el sal y guardar la información (si es necesario) en el llavero (puede agregar seguridad adicional encriptando las contraseñas antes de introducirlas en el llavero). Lo mejor es que no use NSUserDefaults ya que los datos ingresados ​​en él se almacenan en un archivo .txt en el sistema de archivos de iPhone, que como dijo, se puede acceder por piratas informáticos.