Confidencialidad

Para tratar de conseguir confidencialidad podemos usar la cryptografia , ¿Como?
Imaginemos 2 personas conectadas que tratan de comunicarse entre ellas de forma segura, para conseguirlo han usado una Key y cifrado, el que envia el mensaje lo encripta y el receptor lo decripta. En este caso la confidencialidad depende de la Key.
Para continuar tenemos que entender 2 conceptos importantes, la clave publica y la clave privada.
Public Key "Clave publica": emisor y receptor intercambian dos claves, receptor tiene la clave que sera secreta y la otra es publica, todos pueden verla. Requiere ser generada.
Private Key "Clave privada": se comparte entre emisor y receptor una clave que solo tienen que conocer ellos. tiene que ser random y el intercambio debe ser seguro.


Encriptar : E(KEY , Mensaje) -> cifrado
Decryption : D(KEY, cifrado) -> Mensaje/Error
Con estos dos ultimos conceptos es con los que mas se juega en criptografia, imagina que por ejemplo con E(Key1 , Texto1) consegumos un cifrado que fuse igual que E(Key, Texto2), significaria que podriamos llegar a ver como afecta la key al resultado. Entonces para definir seguridad tendriamos que decir que seguridad consiste en que sea imposible obtener cualquier informacion del cifrado. Solo consideramos que es seguro si el atacante al ver el texto cifrado no tiene mas informacion.
Para el intercambio de claves , hay que tener en cuenta que si las claves son muy pequeñas estadisticamente seria posible obtener la clave con cierta probabilidad alta, y si esta es demasiado grande receptor y emisor no podrian usarla. Para solucionar este problema usamos aritmetica modular tal que :


El problema que tenemos aqui es que si con g contenido en (Zp)*, y un h random de (Zp)*, se encuentra ga = h se podria romper puesto que se podria sacar las claves, entonces el sistema tiene que ser amplio con un N alto.
Pero sigue sin ser lo suficientemente seguro, debemos usar para ello Decisional Diffie-Hellman (DDH). Si se selecciona una g y una p dificiles el sistema tendria que ser resistente.
TLS/SSL: Para realizar el intercambio el protocolo que permite esto es TLS que sopora DH y ECDH (elliptic curves Diffie Hellman - mismo principio pero distinta aritmetica).

Asegurar Seguridad


One Time Pad : K son bits randoms se aplica una operacion de XOR entre la clave y el mensaje. Con esto conseguimos seguridad mientras K solo se utilice una vez. Si se utliza dos veces podria usarse esa segunda para obtener el mensaje. c = K+m, c1 = K + m2 -> c+c1 = m+m1.
Tras el concepto inicial y comprobar que tiene que cumplir que para una misma key puedan usar un mismo algoritmo, tenemos el concepto de "Indistinguishability against chosen-plaintext attacks"- IND-CPA . Segun este un plan es seguro si no hay algún adversario que con un tiempo limitado consigue una probabilidad cerca de 1/2.

Determinista e indeterminista


Determinista : para todo m tal que m, E(K,m) es siempre el mismo valor resultante
Indeterminista: para todo m tal que m, E(K,m) es resultante un valor random. Los IND-CPA tienen que ser indeterministas para ser seguros.

Public key encryption (PKE) Vs Private Key


Private Key requiere llaves compartidas. El intercambio de claves resuelve esto pero necesita un protocolo. Receptor tiene que cambiar las diferentes claves con sus receptores. Con la encriptación clave pública, receptor genera un par de llaves publicas, las publica y se desconecta (sin Intercambio de claves). Puede recibir mensajes de muchos remitentes.
La clave privada es mas rapida , la publica necesita asumir mas problemas matematicos y por ende tenerlo mas en cuenta. La clave publica suele necesitar ser certificada para asegurarno de su autenticidad.
El Gamal PKE: ver mas

RSA

La clave de encriptación es pública y es diferente de la clave de desencriptación que se mantiene en secreto (privado). En rsa, esta asimetría se basa en la dificultad práctica de la factorización del producto de dos grandes números primos.
receptor seleccionan un p y un q primos, N = pxq , luego un e,d talque axd = 1 mod gam(N), sk (secreta)= (p,q,d) y pk (publica)= (N,e).
Se encrypt talque Enc(m,pk) = m^e mod N = c.
Se decrypt talque Dec(c,sk) = c^d mod N = m.
El problema sera por tanto cuando dado un c y (e,N), calcula m tal que m^e = c mod N. Ademas RSA es determinista puesto que es posible identificar que hay distintos m , por tanto es necesario hacerlo random.

Firma digital

La idea es poder asegurar que el emisor del mensaje es el verdadero autor del mensaje.

  • Key generation (landa) -> pk,sk
  • firma (m,sk) -> o
  • Verificacion (m,o,pk) -> 0 o 1 (aceptado)

  • por tanto nadie puede firmar sin sk , y nadie podria modificar sin conocer sk. Pero un atacante podria mirar varios mensajes firmados con la misma sk y podria llegar a utilizar esa informacion. Un atacante gana si puede crear una firma válida sk para un nuevo mensaje M*, que es diferente de cualquier mensaje que ha preguntado antes.
    Usando RSA por ejemplo en un princicipio se encontro que (m1,o1) y (m2,o2) , el atacante puede obtener un m* = m1 x m2 con usar o* = o1 x o2. La solucion fue usar un hash para el mensaje y luego decrypt.
    Se puede usar los algoritmos de el Gamal y DSA.
    Todo esto necesita por tanto que al que le llega el mensaje se fie de la autenticidad de pk, para ellos hay entidades que trabajan en certificar (CA)

    Tecnicas aplicadas a la practica

    Block ciphers "Cifrado en bloque"

    Block cipher es un algoritmo determinista que opera en grupos de bits de longitud fija, llamado bloques, con una transformación invariable especificada por una clave simétrica. Los cifrados de bloque funcionan como elementos importantes en el diseño de muchos protocolos criptográficos, y son ampliamente utilizados para aplicar la codificación de los datos de granel.

  • DES (64bits):
  • AES (128bits):
  • Message Authentication Codes (MACs)


    Toma una llave y un mensaje (plaintext) y productos una etiqueta Mac (k, m) → t.
    Toma una llave, un mensaje y una etiqueta y productos aceptados (1) o Rechazo (0).
    un atacante podria usar un tag visto anteriormente por tanto es necesario usar un HASH:

  • Hash-and-MAC : MAC(K, H(m))
  • MAC-then-Encrypt (used in SSL)
  • Encrypt-then-MAC (used in IPsec)
  • Encrypt-and-MAC (used in SSH)
  • HASH


    Entra un input con un tamaño variable y sale un mensaje con un tamaño fijo
    Decimos que es seguro cuando ese mensaje solo se puede obtener con la clave y el mensaje original. Es decir H(x) = c , no existe otro H(x1) = c, cuando c=c2 decimos que hay colisiones. Ejemplos son MD5,SHA-1,SHA-2,SHA-3.
    By the birthday paradox, a brute-force attack succeeds with probability 2^-L/2 ⇒ output length is critical

    Propiedades

    Buscaremos: Confidentiality, Integrity (Communication not modified), Authentication (Communication between intended parties), Availability (Communication happens in reasonable time).
    La mayoria de los ataques en esta parte consisten en la intercepcion de paquetes, es necesario entender de protocolos de red para entender ciertos ataques y problemas.
    El primer protocolo que veremos es HTTPS = HTTP over SSL/TLS, siendo TLS = Transport Layer Security y SSL = Secure Sockets Layer.

    SSL/TLS


    Confidentiality: utiliza cryptografia para encriptar los datos, cada conexion tiene sus propias keys, se negocian al comienzo de cada sesion.
    Integrity: Cada mensaje tiene un mac para ver la identidad
    Authentication: Se puede identificar a las dos partes con sus claves publicas (normalmente el servidor)
    Cipher Suites: define el intercambio de las claves , el cifrado por bloques y el hash a utilizar. Se puede ver en el apartado de seguridad del navegador.
    SSL Hanshake Protocol: se intercambian las claves, se autentifican , usan la clave publica, certifican esa clave y por tanto al termina la comunicacion esta cifrada y firmada.
    Certificados: Para confirmar las diferentes partes se utilizan certifcados, estos son generado por diferentes entidades que se encargan de su proteccion y reparto. Ademas de la revocacion , hay dos formas de cancelar un certificado - Certificate Revocation Lists (CRL) y Online Certificate Status Protocol (OCSP).

    HTTPS Man in the Middle Attack


    En este ataque el atacante lo que hace es simular que el es el servidor , cuando el usuario se quiere conectar con la pagina el atacante simula ser la pagina.
    Como funciona si hay certificacion y clave publicas ... antes del https habia mucha facilidad para este ataque, con la llegada de los certificados los pasos consisten en que el atacante falsifica el certificado o simplemente usa uno distinto por eso muchas paginas tienen certificados con dominio. La manera de asegurar que es el certificado correcto es en el navegador con el candado ver que efectivamente la entidad que lo suministra es la correcta.
    SNI : permite a un servidor presentar multiples certificados para sus diferentes puertos.
    SSL Strip Attack [Moxie, 2009]: Muchos usuarios olvidan poner https y ponen http sin pensar que puede ser una copia de la web a la que ellos querian llegar.
    No solo eso los propios desarrolladores usan contenido que no es https que hacer que todo el trabajo de certificacion no se seguro. Solution: Strict Transport Security: Usar en todo https

    HTTPS and Web Proxies


    Las compañias suele usar estos metodos para controlar las conexiones de sus empleados: HTTP tunnel y Man in the Middle interception

    Denial of Service DoS

    Consiste en atacar la disponibilidad de un sistema. Se consigue mandando trafico sobre la red.

    Spoofin

    Consiste en la no autenticacion de las dirrecciones IP, el atacante falsifica su origen y pone la del servidor que quiere atacar, entones le llegara una oleada de paquetes (normalmente se busca una llamada que gener mucho trafico). LA solucion para este tipo de ataques es Ingress Filtering, osea filtrado por ip realizado por el ISP (tu distribuidor de internet por asi decirlo).

    SYN Flood

    Consiste en que la vistima no pueda acceptar mas conexiones, se llena el buffer de SYN de la vistima. La unica solucion son las syn cookies : consiste en una seleccion de numeros para realizar la sincronizacion ISN S = SYN Cookie = t mod 32 || m || s

    Backscatter

    El atacante selecciona un destino y este obtiene las respues de las victimas.

    Reflector Attacks

    Send traffic to reflector using Target’s IP as source IP address.Reflector response > Attacker request.

    Distributed Denial of Service (DDoS)

    La idea es crear un grupo de host para realizar los ataques de forma simultanea. Hay paginas que permiten contratar este tipo de servicios. Se puede realizar con Reflector y aumentar el tamaño del ataque.

    DNS DDOS

    Se ataca al DNS y no al servidor (el DNS no pude dar la ip del dominio y es imposible acceder sin conocer la ip del dominio)

    Web Application Firewall (WAF)

    Proxys que interceptan el trafico HTTP e impiden este tipo de ataques. Tambie hay otros como los captchas o DDOos Protection Servicies

    El soluciones del futuro

  • Client Puzzles : El servidor realiza el trabajo del cliente y bloquea en caso de respuesta incorrecta
  • TraceBack: determina el origen de los paquetes , aplica spoofing. (TraceBack Intuition)
  • Pushback Filtering: Filtrado de tráfico dinámico directamente en la red
  • 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.

    Introduccion

    Side channel:Es cualquier ataque basado en la información obtenida de la aplicación de un sistema informático, en lugar de debilidades en el propio algoritmo implementado (por ejemplo, cryptanalisis y fallos de software). La información, el consumo de energía, las filtraciones electromagnéticas o incluso el sonido pueden proporcionar una fuente adicional de información, que puede ser explotada.
    fijarse en cosas como lo que tarda en darte la respuesta incorrecta y asi poder sacar la respuesta correcta testeando caracter a caracter cual va tardando mas y por tanto es cierto.
    Cache-based Side Channel

    Non-interference

    Un programa al finar el pasar y tratar memoria de un punto a otro (prg): Mems -> Mems
    Es necesario formailizar los programas en forma de sintaxis acotando las variables ... σ ∈ Mems = Vars → ℕ. infoflow-basics

    Information Flow control


    Reglas de asignacion : ninguna variable secreta puede ser asignada a una variable publica.
    Reglas de IF: una variable secreta no puede ser determinante para el valor de una clave publica

    Attacker model

    Variables publicas y privadas, el atacante puede ver las publicas , casos Non-interference ( ):
    program f1(xpublic, xsecret) {
    xpublic = xsecret + 1
    }
    Caso malo , decidimos el valor de la variable publica en funcion de una privada que viene de memoria
    --
    program f2(xpublic, xsecret) {
    xsecret = 0
    xpublic = xsecret + 1
    }
    bien
    --
    program f3(xpublic, xsecret) {
    xsecret = xpublic + 1
    }
    bien
    --
    program f4(xpublic, xsecret) {
    xsecret = 1
    }
    bien -> se asgina una variable privada, no afecta en ningun momento la publica
    --
    program f5(xpublic, xsecret) {
    if (xsecret==0)
    xpublic = 1
    else
    xpublic = 0
    }
    mal -> una varibale secreta que viene de memoria no puede incidir sobre una variable publica
    La cuestión es que una variable secreta (no modificada) no puede inferir en variables públicas, ya sea explícitamente (asignación) o implícitamente (si se declara secreta y asignación a público). Ademas la secreta siempre tiene que venir de memoria sino es asi y modifica la publica no seria caso nulo.
    NI permite comprobar de forma statica si es seguro y de forma dinamica.

    Speculative execution attacks and countermeasures

    La principal idea de este ataque es explotar como funciona la memoria cache, la cache aumenta la velocidad considerablemente pero al mismo tiempo al guardar los datos importantes es posible atacarla y sacar informacion importante.
    Si el atacante pone en cache sus datos la cpu puede ejecutarlos por tanto es importante tener en cuenta como funciona y como es vulnerable.

    covert channel: dos procesos pueden construir un canal encubierto basado en las instrucciones de AVX como sigue. Aquí, supongo que el proceso p1 envía información y el proceso p2 lo recibe. Para enviar un poco a procesar p2, el proceso p1 ejecuta una instrucción de AVX (si es b = 1) o no AVX (si b = = 0). Para leer el bit b, el proceso p2 ejecuta una instrucción adicional de AVX para la cual él es la ejecución. Si la instrucción de p2 se llevó 1 ciclo, entonces b es 1. Si la instrucción de p2 tomó 51 ciclos, entonces b = 0.
    Como es habitual, los procesos tienen que ponerse de acuerdo sobre la tasa de transmisión y la programación. Esto también debe tener en cuenta el tiempo suficiente para dejar que AVX se apague después de cada transmisión (por ejemplo, no pueden transmitir más de 1 bit por 200 ciclos).

    Conclusiones: Son parte de las cpu modernas y hay que tenerlos en cuenta, no vale solo con Retrocediendo estado,

    Automated detection of speculative leaks

    Info