Code Security Check: Verificación de seguridad en aplicaciones
Antonio Froufe Gutierrez Colaboraciones 22/06/2018
En el presente artículo vamos a tratar el estándar de verificación de seguridad en aplicaciones (ASVS de sus siglas en inglés) creado por OWASP. Este estándar reúne unos controles de seguridad funcionales necesarios para diseñar, desarrollar y testear aplicaciones WEB.
ASVS tiene como objetivo ayudar a los desarrolladores a crear aplicaciones más seguras y a su mantenimiento y crear un consenso entre proveedores de productos de seguridad y consumidores.
Define tres niveles de verificación de seguridad:
-Nivel 1 dirigido a todo tipo de software.
-Nivel 2 para aplicaciones que manejan datos sensibles.
-Nivel 3 a utilizar en aplicaciones críticas como las que manejan datos médicos o transacciones bancarias.
Dependiendo de la industria o el sector al que se vaya a dedicar la aplicación se debe de aplicar un nivel u otro como por ejemplo, una WEB de venta al por menor contiene una amenaza específica puesto que tiene información de pagos ya que realizaría transacciones financieras por lo tanto habría que aplicar el nivel 1 puesto que es aplicable a todas las aplicaciones, nivel 2 reservado a aplicaciones con cantidades pequeñas o moderadas de funcionalidad de datos y nivel 3 por contener sistema de pagos de punto de venta.
Los controles que tendríamos que realizar a nuestras aplicaciones serían:
1. Arquitectura y diseño:
-
Comprobar que todos los componentes de la aplicación se definen en función de las funciones de negocio.
-
Comprobar que todos los controles de seguridad tienen una implementación centralizada.
-
Comprobar que los componentes están separados unos de otros mediante controles de seguridad.
-
Comprobar que todos los componentes de la aplicación están libres de vulnerabilidades conocidas.
2. Verificación de autenticación:
-
Comprobar que todas las páginas y recursos requieren autenticación menos las que deban de estar públicas.
-
Comprobar que los campos de credenciales no reflejen las contraseñas de usuario.
-
Comprobar que los campos de contraseña fomentan utilizar frases como autenticación.
-
Comprobar que la funcionalidad de cambio de contraseña requiere de la contraseña anterior y contiene un campo de confirmación.
-
Comprobar que las contraseñas almacenadas se a utilizado un mecanismo de hashing esto es que no están almacenadas en texto plano.
-
Comprobar que las credenciales viajan cifradas.
-
Comprobar que no se utilizan contraseñas por defectos en la aplicación.
-
Comprobar que existen medidas para bloquear el uso de contraseñas débiles.
-
Comprobar que se utiliza doble factor de autenticación.
-
Comprobar que las interfaces de administración no son accesibles a cualquier usuario.
3. Verificación de gestión de sesiones:
-
Comprobar que las sesiones se invalidan cuando el usuario cierra la sesión.
-
Comprobar que se invalidan las sesiones después de un periodo de inactividad.
-
Comprobar que el identificador de sesión no se muestra en la URL.
-
Comprobar que la aplicación limita el número de sesiones concurrentes.
4. Verificación del control de acceso:
-
Comprobar que existe el principio de mínimo privilegio.
-
Comprobar que el acceso a registros sensibles está protegido.
-
Comprobar que los atributos de usuario no pueden ser manipulados por usuarios finales.
-
Comprobar que las acciones de control de acceso son registradas.
5. Verificación para manejo de entrada de datos maliciosa:
-
Comprobar que el entorno de ejecución no es susceptible a desbordamiento de buffer.
-
Comprobar que se aplican rutinas de entradas del lado del servidor.
-
Comprobar que todas as consultas a bases de datos están parametrizadas y no son susceptibles de SQL injection.
-
Comprobar que la aplicación no es susceptible de inyección LDAP.
-
Comprobar que la aplicación contenga defensas contra ataques de contaminación de parámetros HTTP.
6. Verificación para la criptografía en el almacenamiento:
-
Comprobar que el generador de números aleatorios es fiable.
-
Comprobar que los módulos criptográficos operen según políticas de seguridad publicadas.
-
Comprobar que existe una política explícita para el manejo de claves criptográficas.
7. Verificación de gestión y registro de errores.
-
Comprobar que no se registra información confidencial si no es necesaria.
-
Comprobar que toda la información registrada se gestiona de forma segura.
-
Comprobar que los registros de bitácoras poseen un ciclo de vida útil lo más corta posible.
-
Comprobar que los registros de seguridad no puedan ser manipulados con acceso no autorizado.
8. Verificación de protección de datos:
-
Comprobar que los formularios de datos sensibles tengan desactivada la función de autocompletar.
-
Comprobar que en la aplicación existe un mecanismo de borrado de datos sensibles transcurrido el tiempo definido por la política de retención.
-
Comprobar que los datos almacenados en el cliente no contengan información personal identificable.
9. Verificación de seguridad en las comunicaciones:
-
Comprobar que puede construirse la cadena de confianza desde una Autoridad de Certificación para un certificado TLS del servidor.
-
Comprobar que se utiliza TLS para todas las comunicaciones.
-
Comprobar que existe una única implementación estándar de TLS.
-
Comprobar que se utilizan únicamente algoritmos y protocolos de seguridad en comunicaciones fuertes.
-
Comprobar que la configuración de TLS está en línea con las mejores prácticas actuales.
10. Verificación de configuración de seguridad HTTP:
-
Comprobar que el servidor de aplicaciones está convenientemente endurecido en la configuración preestablecida.
-
Comprobar que en toda respuesta HTTP contiene un conjunto de caracteres seguros.
-
Comprobar que la aplicación tan solo acepta métodos de solicitud HTTP necesarios como GET y POST.
11. Verificación para la lógica de negocio:
-
Comprobar que el flujo de la lógica de negocio es secuencial y en orden.
-
Comprobar que la lógica de negocio incluye límites para detectar y evitar ataques automatizados.
Conclusión.
No solo se hace necesario a la hora de crear nuestras aplicaciones tener especial cuidado hablando desde el punto de vista de la seguridad de la misma, en sus fases de diseño y codificación, sino que también es muy importante tener un método de testeo de la misma metódico y fuerte, para minimizar en la manera de lo posible una vulnerabilidad que pueda ser utilizada por un cibercriminal, ya que la seguridad total no existe, al menos debemos de testear nuestra aplicaciones con el fin de que se produzcan el menor número de fallos desde el punto de vista de la seguridad.
Piensa mal y acertarás codificando de una manera más segura, aunque la seguridad completa no existe.
Referencia.
Estándar de Verificación de Seguridad en aplicaciones 3.0.1
Versión Abril de 2017