Hay muchos motivos por los cuales las empresas de desarrollo de software no dedican el tiempo necesario a la seguridad y esto, en última instancia, deriva en un problema subyacente en el mercado del software.
Además, los desarrolladores superan enormemente en número al personal de seguridad. De media, la proporción de miembros del grupo de seguridad frente a los miembros de desarrollo de software es de 1:75. Por lo tanto, puede ser difícil que las empresas encuentren los recursos necesarios para aplicar seguridad a cualquier fase del desarrollo de software, y aún será más complicado proporcionar una lista de correcciones al equipo de desarrollo que tendrá que lidiar con ajustados tiempos de entrega y presiones por parte de los equipos de planificación y estrategia empresarial.
No todas las empresas de desarrollo tienen la necesidad, o los recursos, de seguir e implementar todas las posibles consideraciones de seguridad, pero todas las empresas deben ser capaces de orientar sus procesos de desarrollo de manera que puedan ir incluyendo seguridad en ellos de manera progresiva. Sin embargo, para grandes compañías con miles de desarrolladores, la necesidad de seguridad en el ciclo de desarrollo es máxima, pero la eficiencia de los procesos puede sufrir un impacto y en consecuencia en los resultados finales.
Vamos a intentar ilustrar este impacto con números:
Supongamos una gran empresa con 2000 desarrolladores. Se decide introducir un cambio en el proceso de desarrollo que implica que cada desarrollador dedique 30 minutos adicionales a la semana a una determinada tarea. Esto supone un total de 1000 horas adicionales cada semana para la empresa en su conjunto. Si la empresa quiere mantener las deadlines previstas, deberá contratar 25 desarrolladores a jornada completa para poder cumplir.
El verdadero desafío es entonces que los cambios que tienen como propósito implementar mecanismos de seguridad resulten eficientes para el ciclo de desarrollo y no impidan que los desarrolladores realicen su trabajo a tiempo.
El análisis de código fuente consiste en evaluar el código de un programa con el propósito de encontrar fallos y que estos sean corregidos antes de vender o distribuir un producto.
La revisión del código seguro es la técnica más efectiva para identificar los errores de seguridad al principio del ciclo de desarrollo. Además, se puede aumentar significativamente el alcance de la revisión añadiendo pruebas de penetración automatizadas y manuales.
Se puede afirmar que, si el código no ha sido revisado en busca de fallos de seguridad, la probabilidad de que la aplicación tenga problemas de seguridad es prácticamente del 100%.
MITRE ha catalogado más de 1000 tipos diferentes de vulnerabilidades de software en el proyecto CWE (Common Weakness Enumeration). Estas vulnerabilidades son diferentes errores que los desarrolladores pueden cometer que en última instancia pueden conducir a un problema de seguridad. Muchas veces estos errores se cometen debido a que a los desarrolladores de software no reciben la formación necesaria sobre estas vulnerabilidades, ni durante su formación académica, ni en su puesto de trabajo.
De hecho, es por esto que hay un sentimiento generalizado con el siguiente argumento: como muchos desarrolladores de código no están al tanto o no son expertos en seguridad, las empresas deberían implementar revisiones de código seguro entre los desarrolladores.
La revisión del código tiene como objetivo identificar fallos de seguridad en un programa relacionadas con sus características y su diseño, junto con las causas de fondo exactas.
Con la creciente complejidad de las aplicaciones y la aparición de nuevas tecnologías, la forma tradicional de buscar fallos de seguridad puede no detectar todos los defectos de seguridad presentes en las aplicaciones. Es necesario entender el código de la aplicación, los componentes externos y las configuraciones para tener una mejor visión sobre el proyecto con el objetivo de encontrar los defectos. Una inmersión tan profunda en el código de la aplicación también ayuda a determinar las técnicas de mitigación exactas que se pueden utilizar para evitar los fallos de seguridad.
Debido a que realizar este proceso a mano puede ser muy tedioso, y además llevaría mucho tiempo, se han creado las herramientas de análisis de código fuente, conocidas como SAST (Source Code Analysis Tools), que están diseñadas para automatizar el proceso de análisis de código fuente con el objetivo de encontrar fallos de seguridad.
El análisis del código fuente automático es básicamente una depuración automática de código, con el objetivo de encontrar errores y fallos que pueden no ser obvios para un programador.
No importa el tamaño de una empresa, la razón para realizar una revisión de código seguro es para encontrar errores y solucionarlos antes de terminar la fase de desarrollo. Es más rápido llevar a cabo una revisión de código seguro y encontrar errores de esa manera, en comparación con encontrar los errores en pruebas o en producción.
Las herramientas de análisis de código fuente tienen numerosas ventajas. Estas herramientas proporcionan una gran escalabilidad debido a que permiten analizar gran cantidad de líneas de código y pueden realizarse análisis de manera continua. Además, resultan útiles para encontrar vulnerabilidades que están más que demostradas que pueden ser encontradas de manera automática, como SQL injections o ataques de buffer overflow. Asimismo, tienen una gran exactitud, debido a que muestran el problema concreto, el archivo donde se ha encontrado y la línea exacta.
Por otro lado, estas herramientas reducen en gran medida el tiempo que se debe dedicar a este tipo de tareas, y de esa manera ayudan a reducir los costes de implementar seguridad en el ciclo de desarrollo. Una herramienta de análisis de código fuente podría escanear 50000 líneas de código en menos de 2 minutos. Igualmente, estas herramientas pueden ayudar al aprendizaje de los desarrolladores para que conozcan sus errores más comunes.
No obstante, muchas vulnerabilidades son difíciles de encontrar de manera automática, como son problemas de autenticación, problemas de control de acceso, uso inseguro de la criptografía, etc. Las herramientas actuales encuentran automáticamente un porcentaje relativamente bajo de fallos de seguridad de este tipo en aplicaciones. Es por ello, que si se busca la seguridad plena se debe abogar por un planteamiento que incluya pruebas de penetración.
Encontrar una herramienta que se ajuste a nuestras necesidades puede resultar complicado, pero para ello existen infinidad de recursos gratuitos, como el proyecto Awesome Static Analysis (https://github.com/mre/awesome-static-analysis) cuyo objetivo es crear una colección de las distintas herramientas de análisis estático y verificadores de calidad de código que existen, tanto herramientas de código libre como herramientas comerciales.
Sin duda, usar herramientas que realicen una revisión de código fuente debería ser algo a tener en cuenta por parte de las empresas de desarrollo, no solo con el objetivo de hacer que sus productos sean más seguros, sino también con el objetivo de conseguir que el mercado del software sea más seguro. Para llevar a cabo este cometido no existe una solución única, sino más bien una variedad de soluciones que se ajustan a cada empresa, y como siempre este camino es más fácil de recorrer de la mano de una empresa que pueda ofrecer servicios de consultoría y soporte.