Una auditoría de código de software es un análisis integral del código fuente en un proyecto de programación con la intención de descubrir errores, violaciones 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. El código fuente C y C++ es el código más común que se audita, ya que muchos lenguajes de nivel superior, como Python, tienen menos funciones potencialmente vulnerables (por ejemplo, funciones que no verifican los límites) [ cita necesaria ] .
Al auditar software, cada componente crítico debe auditarse por separado y junto con todo el programa. Es una buena idea buscar primero las vulnerabilidades de alto riesgo y trabajar hasta las vulnerabilidades de bajo riesgo. Las vulnerabilidades entre alto y bajo riesgo generalmente existen dependiendo de la situación y de cómo se utiliza 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 posibles puntos de acceso en un intento de desactivar la aplicación. [1] Este es un método de auditoría común y se puede utilizar para descubrir si existen vulnerabilidades específicas, pero no dónde se encuentran en el código fuente. Algunos afirman que los métodos de auditoría de fin de ciclo tienden a abrumar a los desarrolladores y, en última instancia, dejan al equipo con una larga lista de problemas conocidos, pero pocas mejoras reales; en estos casos, se recomienda como alternativa un enfoque de auditoría en línea.
Pueden existir algunas vulnerabilidades comunes de alto riesgo debido al uso de:
if ((bytesread = net_read(buf,len)) > 0) buf += bytesread;
[2]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 podrían utilizarse para ahorrar tiempo, pero no deberían utilizarse para realizar una auditoría en profundidad. Se recomienda aplicar dichas herramientas como parte de un enfoque basado en políticas. [3]
Si se establece en un umbral bajo, la mayoría de las herramientas de auditoría de software detectan muchas vulnerabilidades, especialmente si el código no ha sido 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 dañar el sistema. El programa que solo puede estar expuesto a entradas maliciosas (como el servidor web) primero debe preocuparse por esta entrada (desbordamientos de búfer, inyección de SQL, etc.). Es posible que tales ataques nunca ocurran para el programa que solo es utilizado internamente por usuarios autorizados en una infraestructura protegida.