Propiedades

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)

Analisis

Static Analysis

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.

Dynamic Analysis

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

Low level software security

buffer overflow

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.

Injections and Web vulnerabilities


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 :

  • 1. App sends form to user.
  • 2. Attacker submits form with SQL exploit data.
  • 3. Application builds string with exploit data.
  • 4. Application sends SQL query to DB.
  • 5. DB executes query, including exploit, sends data back to application.
  • 6. Application returns data to user.

  • O por ejemplo meter en el input de la clave '' 1=1 -- para que al realizar select count(*) from users where username = ‘user’ and password = ‘’ or 1=1 -- siempre de true y deje entrar. para ver si una app es vulnerable puedes probar a mete rdos input y mirar si hay error o no.
    La forma de arreglar esto es añadir una blacklists con todos los terminos sql que pueden generar este tipo de problemas. o un Whitelist que solo acepta lo que se adecua a lo que te interesa.
    cross-site scripting: Scripting de sitios cruzados (denominado XSS) es un tipo de web Ataques de solicitud donde el script de cliente-malicioso es Inyectado en aplicación y posteriormente ejecutado por el navegador del usuario. Juego para entenderlo mejor

    Flow Analysis

    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.

    Fuzzing

    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.