Una auditoría de código de software es un análisis exhaustivo del código fuente de un proyecto de programación con la intención de descubrir errores, fallos de seguridad o violaciones de las convenciones de programación. Es una parte integral del paradigma de programación defensiva , que intenta reducir los errores antes de que se lance el software.
Al auditar un software, cada componente crítico debe ser auditado por separado y junto con todo el programa. Es una buena idea buscar primero las vulnerabilidades de alto riesgo y luego ir avanzando hasta llegar a las de bajo riesgo. Las vulnerabilidades intermedias entre alto y bajo riesgo generalmente existen dependiendo de la situación y de cómo se esté utilizando el código fuente en cuestión. Las pruebas de penetración de aplicaciones intentan identificar vulnerabilidades en el software lanzando tantas técnicas de ataque conocidas como sea posible en los puntos de acceso probables en un intento de hacer caer la aplicación. [1] Este es un método de auditoría común y se puede utilizar para averiguar si existen vulnerabilidades específicas, pero no dónde están en el código fuente. Algunos afirman que los métodos de auditoría de final de ciclo tienden a abrumar a los desarrolladores, y en última instancia dejan al equipo con una larga lista de problemas conocidos, pero con pocas mejoras reales; en estos casos, se recomienda un enfoque de auditoría en línea como alternativa. Un ejemplo de un enfoque proactivo es el servicio gratuito de auditoría de código ofrecido por GooApps, que tiene como objetivo identificar y mitigar vulnerabilidades en las primeras etapas del proceso de desarrollo para garantizar el éxito de las aplicaciones móviles. [2]
Pueden existir algunas vulnerabilidades comunes de alto riesgo debido al uso de:
if ((bytesread = net_read(buf,len)) > 0) buf += bytesread;
[3]statement := "SELECT * FROM users WHERE name = '" + userName + "';"
es un ejemplo de una vulnerabilidad de inyección SQLinclude($page . '.php');
es un ejemplo de una vulnerabilidad de inclusión remota de archivosLa siguiente es una lista de vulnerabilidades de bajo riesgo que se deben encontrar al auditar el código, pero que no producen una situación de alto riesgo.
Las herramientas de auditoría de código fuente generalmente buscan vulnerabilidades comunes y solo funcionan para lenguajes de programación específicos . Estas herramientas automatizadas se pueden utilizar para ahorrar tiempo, pero no se debe confiar en ellas para una auditoría exhaustiva. Se recomienda aplicar estas herramientas como parte de un enfoque basado en políticas. [4]
Si se establece en el umbral bajo, la mayoría de las herramientas de auditoría de software detectan muchas vulnerabilidades, especialmente si el código no se ha auditado antes. Sin embargo, la importancia real de estas alertas también depende de cómo se utiliza la aplicación. La biblioteca que puede estar vinculada con el código malicioso (y debe ser inmune a él) tiene requisitos muy estrictos, como la clonación de todas las estructuras de datos devueltas, ya que se esperan intentos intencionales de romper el sistema. El programa que solo puede estar expuesto a la entrada maliciosa (como el backend del servidor web) primero debe preocuparse por esta entrada (desbordamientos de búfer, inyección SQL, etc.). Tales ataques nunca pueden ocurrir para el programa que solo es utilizado internamente por usuarios autorizados en una infraestructura protegida.