Puedes probar la existencia de algo, pero no puedes probar su ausencia. Si no existe, no puede encontrar ninguna evidencia de ello, según la definición de "no existe".
Para estar seguro, una aplicación de software no debe tener ninguna vulnerabilidad. Para probar que es seguro, debe probar que no existen vulnerabilidades en la aplicación. Como arriba, esto no se puede hacer. Tenemos que tener un objetivo diferente.
Podemos tomar el objetivo, "no tenemos vulnerabilidades conocidas inaceptables". Este es el objetivo elegido por la mayoría de las aplicaciones que realizan pruebas de seguridad. Para este objetivo, podemos usar herramientas como modelado de amenazas, análisis de código estático, análisis binario estático y análisis dinámico.
Podemos alcanzar el objetivo: los controles de seguridad de nuestra aplicación deben funcionar como se espera en todas las condiciones previsibles. Esto significa probar los controles de seguridad de la aplicación, al igual que las pruebas de control de calidad, el rendimiento y otras características de la aplicación.
Podemos tomar el objetivo ', nuestra aplicación debe construirse bajo un proceso que minimice la probabilidad de introducción de vulnerabilidades. En este caso, utilizamos un ciclo de vida de desarrollo de software seguro que incluye capacitación, hojas de trucos, listas de verificación de desarrolladores, listas de verificación de control de calidad, uso de herramientas automatizadas, uso de evaluadores expertos (pruebas de penetración), modelos de amenazas y otros procesos diseñados para minimizar el riesgo de nuevas vulnerabilidades.
Si bien todos ellos están construyendo la aplicación, sin usarla, pueden extenderse a la perspectiva del usuario. Puede intentar identificar las vulnerabilidades en la aplicación usted mismo, más fácil si tiene el código fuente. Puede intentar verificar la corrección de los controles de seguridad con sus propias pruebas de estilo de control de calidad, si puede descomponer correctamente el producto y determinar los propósitos de los controles. Puede ver el ciclo de vida de desarrollo seguro del OEM y ver cómo se compara con los demás (consulte BSIMM). También puede consultar el registro público histórico de un producto (ver NVD) e intentar extraer inferencias: por ejemplo, cuando el OEM tiene una vulnerabilidad de un tipo en un producto, ¿alguna vez volverá a tener esa vulnerabilidad en ese producto? ¿Arreglar arquitectónicamente o ayudar a la banda a resolver el problema?