Buenas prácticas sobre el desarrollo de aplicaciones seguras para móviles

bestpractices Via Forensics ha liberado un extenso artículo con un conjunto de buenas prácticas que deberíamos seguir cuando desarrollamos una aplicación móvil. Aunque el documento está enfocado en Android y iOS, muchas de las prácticas que se describen son comunes a cualquier plataforma.

El documento se titula en su versión original: 42+ Best Practices Secure mobile development for iOS and Android (PDF). En total contiene 49 prácticas a tener en cuenta. Por cada una de ellas nos explica brevemente el por qué de tenerla en cuenta.

Además de la extensa lista, de hecho, antes de empezar con la misma, dan un repaso a los distintos tipos de ataques a los que un dispositivo móvil está expuesto:

  • Ataques basado en el navegador: phishing, framing, clickjacking, etc.
  • Ataques basado en SMS o el teléfono en si: SMSiShing, RF, etc.
  • Ataques a aplicaciones: alamcenamiento de datos sensibles, no cifrado, no certificación de certificados SSL, etc.
  • Ataques al sistema operativo: iOS jailbreaking, Android rooting, software instalado por tu proveedor, etc.
  • Ataques de red: WiFi sin cifrado o cifrado débil, Rogue Access Point, Man in the middle, etc.
  • Ataques servidores web: XSS, XSRF, no validación de entrada de datos, etc.
  • Ataques a base de datos: inyección SQL, inyección comandos de sistema, escalación de privilegios, etc.
Incluso toca temas de cifrado, tipos de aplicaciones (web, nativa, etc).

Aquí va la lista de que nos proporciona dicho documento:

  1. Avoid storing sensitive data on the device
  2. Avoid caching app data on the device
  3. Avoid use of query string for sensitive data
  4. Avoid crash logs
  5. Fully validate SSL/TLS
  6. Institute Local Session Timeout
  7. Disable debug logs
  8. Hide account numbers and use tokens
  9. Use SECURE setting for Cookies
  10. Limit caching of username
  11. Implement code complexity and obfuscations
  12. Use Address Space Layout Randomization
  13. Avoid simple logic
  14. Avoid simple logic variables
  15. Be aware of the keyboard cache
  16. Be aware of copy/paste
  17. Test third-party libraries
  18. Use geolocation carefully
  19. iOS: Avoid cached application snapshots
  20. Android: implement file permissions carefully
  21. Android: implement Intents carefully
  22. Android: Check Activities
  23. Android: implement Broadcasts carefully
  24. Android: implement PendingIntents carefully
  25. Android: validate Services
  26. Android: avoid intent sniffing
  27. Android: implement Content Providers carefully
  28. Android: WebView best practices
  29. Android: avoid storing cached camera images
  30. Android: Avoid GUI objects caching
  31. iOS: Use the Keychain carefully
  32. Implement secure data storage
  33. Limitations of UUID
  34. Tamper checking
  35. Implement enhanced / two-factor authentication
  36. Protect application settings
  37. Securely store sensitive data in RAM
  38. Understand secure deletion of data
  39. Avoid use of MEID as user identifier
  40. Protect against SSLStrip
  41. Certificate Pinning
  42. Validate input from client
  43. Web server: check session settings
  44. Prevent framing and clickjacking
  45. Web server configuration
  46. SSL Configuration
  47. Protect against CSRF with form tokens
  48. Protect and pen test Web services
  49. Protect internal resources
Como véis el documento es bastante completo y es una guía perfecta para tenerla siempre a mano.