Creo que esta pregunta se aborda mejor en el capítulo 4 de El arte de la evaluación de seguridad del software , un libro de Mark Dowd, Justin Schuh y John McDonald.
Sin que sea una referencia, puedo decirle con seguridad que el mejor método es usar los datos de tiempo de ejecución junto con el código fuente mientras se determinan los "aciertos" (o rastros, también conocido como cobertura) mediante pruebas de caja negra, pero solo después de un El modelo de amenazas y la arquitectura general del sistema son bien conocidos.
Parece que a los autores también les gusta el análisis de código estático seguro cuando se combinan con estrategias de puntos candidatos, aunque opino que pueden variar enormemente en cuanto a su valor, suponiendo que lo siguiente no sea cierto:
- El idioma y sus bibliotecas de clase base deben ser compatibles con la herramienta de análisis estático seguro
- Por lo general, todo el sistema debe estar disponible. Es decir. debe incluir código fuente compilable que incluya todos los componentes de terceros / contrib y bibliotecas externas, posiblemente incluso para incluir el compilador del sistema, la máquina virtual u otros artefactos del sistema original.
- Todos los componentes / bibliotecas externos que no forman parte de las bibliotecas de clase base deben tener fuentes y sumideros definidos en la base de datos source-sink-passthru de la herramienta de análisis estático seguro. Las complejidades de algunos passthrus (es decir, filtros) pueden variar según la implementación o el implementador, y, por lo tanto, casi siempre requieren una configuración personalizada
- El uso adicional de ciertos patrones o elementos de código arquitectónico podría causar otras variaciones, lo que podría requerir una personalización que no es posible con la mayoría de las herramientas modernas de análisis estático seguro
Por las razones anteriores, así como por las razones expuestas en los estudios NIST SATE (realizados por NIST SAMATE), me resulta difícil recomendar muchas herramientas de análisis estático seguro para usar en el análisis de caja blanca. Casi siempre es simplemente mejor utilizar estrategias de comprensión de código que probablemente impliquen leer el código fuente de arriba a abajo, lo que es realmente muy importante si está buscando rootkits de código administrado y similares.
En lugar de probar y auditar / evaluar aplicaciones, adoptaría un enfoque diferente que es en gran medida muy agnóstico a la tecnología. Mi sugerencia sería implementar un portal de administración de riesgos de seguridad de la aplicación que incluya un inventario de la aplicación junto con los controles de seguridad de la aplicación actualmente implementados de cada aplicación. Después de una línea de base inicial, los controles de seguridad de la aplicación deben evaluarse según los estándares de la industria, como MITRE CWE, SAFEcode y OWASP ASVS. Un análisis de brechas (tenga en cuenta que este es un término estándar de administración de riesgos y funciona mejor cuando se implementa en un programa de administración de seguridad de la información basado en ISO 27001 o similar) se puede usar para determinar los controles óptimos de seguridad de la aplicación, así como una ruta para obtener desde los controles actualmente implementados hasta los requeridos.
Debe implementar este portal de administración de riesgos antes de realizar una actividad de evaluación de riesgos, como pruebas de caja blanca o caja negra para obtener mejores resultados y medir el éxito de su programa.