Buscaremos: Confidentiality, Integrity (Communication not modified), Authentication (Communication between intended parties), Availability (Communication happens in reasonable time).
Los defectos son partes del software mas implementadas, las vulnerabilidades son un defecto de software pertinente que puede ser explotado para efectuar un Comportamiento no deseado.
Un adversario no es un usuario normal!! Por tanto tenemos que no tener bugs ni flaws (errores de diseño)
Se examina el codigo del programa, piensas distintos posibles comportamientos.
Se selecciona una parte del codigo , para este buscamos lo que se denomina abstract domain, este determina el acierto, el coste en tiempo y espacio. Es importante acotar lo maximo posible el resultado para tener mas precision.
Con la ejecucion del programa, miramos la ejecucion, debemos ver que medir (valores, tiempo de ejecucion, uso de memoria, frecuencia..)y que debe retornar.
Es mas preciso que el static.
Es posible mezclar los dos para conseguir una mayor aproximacion
Utilizan errores de memorias en programas que utilizan lengaujes como C o C++ donde tienes que tener en cuenta la memoria que utilizas.
para este caso es necesario tener en cuenta loos espacios reservados, los saltos entre funciones...
La idea es utilziar esos bloques libres para poder meter nuestro codigo e infectar el sistema.
Para evitar estos errores puedes usar lenguajes que tengan compiladores con pruebas de violacion de memoria. Tambien puedes ir linea a linea mirando que esa memoria no sea corrompible. Detect overflows with canaries: escribe un valor random en memoria y comrpueba si sigue ahi al ejecutar el programa.

Heartbleed El mensaje especifica la longitud de su porción de echo - back, pero el SSL software no comprobó que la longitud fuera exacta.
Dangling Pointers Un error de puntero se produce cuando un puntero es liberado, pero el programa sigue utilizándolo. Un atacante puede arreglar la memoria liberada que sea reasignada y sea de su control.
Control flow integrity: se reliza un grafo con las llamadas entre funciones. Video explicativo
In-line Monitor: Insertar una etiqueta justo antes de la dirección objetivo de una transferencia indirecta. Introduzca código para comprobar la etiqueta del objetivo en cada transferencia indirecta.
Injection: Los ataques de inyección se aplican a una aplicación en incluir Los comandos no deseados en los datos envían a un intérprete. Por ejemplo pasos para SQL injection :
Taint Analysis : no confies en lo que introduce el usuario. En cuanto una var esta afectatada o tainted todas las que interectuan con ella lo estan.
Que es ? El objetivo generar datos de mal generidad, generados automáticamente diseñados, para activar defectos de implementación.
el objetivo es mirar si al meter strings aleatorios vemos algun error.
