SlideShare una empresa de Scribd logo
1 de 42
Razonando
Vulnerabilidades con
    SMT Solvers


      Pablo G. Solé
SMT Solvers en una línea


 Satisfiability Modulo Theory Solver


 ¿Existe una asignación de variables para
 una fórmula dada que la evalúe como
 verdadera?
          x   : x  5  x  10
 Genera un modelo que pruebe la existencia.

                                               2
Teoría



SMT y SAT Solver
                   3
SMT Solvers

 Construcción por encima del problema de
  satisfactibilidad booleana (SAT).

 SMT Solver:
   T-Solver
   SAT Solver
   Instanciador de cuantificadores (undecidable)




                                                    4
SMT Solvers

 Construcción por encima del problema de
 satisfactibilidad booleana (SAT).

 SMT Solver:
   T-Solver (Theory Solver)
   •   Igualdades
   •   BitVector
   •   Arreglos
   •   Reales
   •   Enteros
   •   Funciones no interpretadas

                                            5
SMT Solvers

 SMT Solver:
   T-Solver (Theory Solver)
    • Igualdades
      • Define los simbolos: =, !=
    • BitVector
      • Arreglos de bits de un ancho determinado.
      • Sistema de numeración de complemento a 2.
      • Equivalente a un registro del procesador o un entero de C.
    • Arreglos
      • Define las operaciones de almacenamiento y carga.
      • Equivalente a un array en C o el I/O a un archivo.
    • Reales
    • Enteros
    • Funciones no interpretadas
      • Define la lógica general de funciones más allá del cuerpo de la función.

                                                                                   6
SMT Solvers

 SMT Solver:
   SAT Solver (Satisfactibilidad sobre lógica proposicional)
    • Lógica proposicional
      • ,, , 


   T-Solver generalmente codifica la teoría como un
    problema SAT.




                                                                7
Sumando BitVectors

 Un número entero en el rango [0…24) puede
 expresarse como una sucesión de 4 bits.
           x  ( x3 x2 x1 x0 )
           y  ( y3 y2 y1 y0 )

 La suma de estos dos números puede expresarse
 utilizando únicamente símbolos de lógica
 proposicional.


                                                  8
Sumador Completo 1-Bit




  S  A  B  Cin
  Cout  ( A  B)  Cin  A  B

                                  9
Sumando BitVectors

 Le preguntamos a un SAT solver el valor de cada
 bit de X.
               x5 8
               ( x3 x2 x1 x0 )  x
                0101  5
               x3  FALSE
               x2  FALSE
               x1  TRUE
               x0  TRUE
                                                    10
Características del problema

 Un SMT/SAT Solver es un procedimiento de toma
 de decisiones (decision procedure):
   Completo
    • Para toda fórmula está garantizada su finalización.
   Sound
    • Para toda fórmula está garantizado que el resultado sea correcto.
   NP-Completo
    • No puede resolverse en tiempo polinómico.
    • Peor caso: exponencial.
 Una teoría es decidible (decidable) si existe por lo
 menos un decision procedure para dicha teoría.
                                                                          11
Relaciones de satisfactibilidad

 F es SAT si:
   Existe por lo menos una solución al sistema.
 F es VALID si:
   Toda asignación verifica el sistema (tautología).
 F es UNSAT si:
   ¬F = VALID (no existe una asignación posible)
 F es INVALID
   ¬F = SAT (existe un contraejemplo)




                                                        12
En la práctica



  Analizando código C
                        13
¿Qué está mal?




                 14
¿Qué está mal?




                 15
¿Qué está mal?

        Problemas                        Soluciones

 Uso de enteros con signo        Usar unsigned int.
  para conceptos que no lo
  requieren.
 Resultado de la                 Verificar que el resultado
  multiplicación sin checkear.     de la multiplicación no
                                   exceda el tipo de la
                                   variable.
 Resultado de malloc sin         Verificar que malloc
  checkear.                        devuelva un puntero
                                   válido.
                                                                16
Integer Overflows

 Un Integer Overflow sucede cuando el resultado
  de una operación entre enteros sobrepasa
  (overflow) el valor máximo que puede tomar una
  variable de ese tipo.
 unsigned int a = 4294967294;
                        (0xfffffffe)
  unsigned int b = 2;
  if (a + b == 0)
       FAIL();


                                                   17
Integer Overflows

 Las operaciones en C (al igual que en el
 procesador) se realizan utilizando aritmética de
 complemento a 2.


 (0xfffffffe + 0x2) mod 0x100000000


 Si lo analizamos como “enteros con signo”:
 0xfffffffe = -2
 -2 + 2 = 0

                                                    18
Integer Overflows

int totalSize = numElements * elementSize;

 Para contener una multiplicación de 2 enteros de
  32 bits se necesitan 64 bits.
 El resultado de una multiplicación en C siempre es
  del tamaño del mayor de los operandos.
 long long totalSize = numElements * elementSize;

            ESTO ESTA MAL


                                                     19
Integer Overflows


long long totalSize = (long long) numElements *
(long long) elementSize;

        ESTO ESTA (CASI) BIEN




                                                  20
Integer Overflows


unsigned long long totalSize = (unsigned long long)
numElements * elementSize;

              ESTO ESTA BIEN




                                                      21
Integer Overflows

 ¿Qué sucede si alloco menos memoria de la que
 luego leo o escribo?
 numElements = 0x2000002;
 elementSize = 0x80;
 totalSize = 0x2000002 * 0x80;          //0x100000100
 dst = malloc(totalSize);

 for (x=0; x < numElements; x++);
     memcpy(dst[x], src[x], elementSize);
dst:       0           1           2           …
       0        0x80       0x100       0x180

                                                    22
Modelando verificaciones

 elementSize = BitVector(32)
 numElements = BitVector(32)
 totalSize = BitVector(32)




                                23
Modelando verificaciones

 elementSize = BitVector(32)
  numElements = BitVector(32)
  totalSize = BitVector(32)
 totalSize = elementSize * numElements




                                          24
Modelando verificaciones

 elementSize = BitVector(32)
  numElements = BitVector(32)
  totalSize = BitVector(32)
 totalSize = elementSize * numElements


 Propiedad deseable:
  totalSize64 = elementSize64 * numElements64
   totalSize64 < 232

  totalSize / elementSize = numElements




                                                 25
Modelando verificaciones


              EQ            BV


     totalSize  elementSiz e * numElement s
LO           BV            EQ


     totalSize / elementSiz e  numElement s



                                               26
Verificaciones en Z3Py

s=Solver()
elementSize = BitVec(“e_size”,32)
numElements = BitVec(“n_elem”,32)
totalSize = BitVec(“total_size”,32)
s.add(totalSize == elementSize * numElements)
s.add(elementSize == BitVecVal(0x80, 32))

intOverflow = Bool(“intOverflow”)
s.add(intOverflow ==
  Not(totalSize / elementSize == numElements))

s.check(intOverflow)
print s.model()

                                                 27
Verificaciones en Z3Py

s=Solver()
numElements = BitVec(“n_elem”,32)
totalSize = numElements * 0x80

s.add(Not(totalSize / 0x80 == numElements))

s.check()
s.model().evaluate(totalSize).as_long()




                                              28
Otras
Vulnerabilidades




                   29
Ejecución Simbólica

 Emula una sucesión de instrucciones utilizando
  variables simbólicas (BitVectors, Bools y Arrays
  generalmente).
 Permite razonar sobre el funcionamiento de un
  programa.
 Ejemplos:
   KLEE para C.
   BitBlaze/S2E para binarios.




                                                     30
Ejecución Simbólica


       Simbolizar




                      31
Problemas

 Inferencia o descripción de invariantes de bucles.
 Decisión frente a saltos o llamadas indirectas.
 Calculo de funciones duras (hashes, etc).


 ¿Cómo evitar concretizar las variables?




                                                       32
Otras Vulnerabilidades

 Heap Overflow
   Reemplazar alloc/free por versiones que devuelvan un
    Array simbólico como puntero a buffer.
   Agregar los limites de cada buffer al sistema de
    ecuaciones.
   Simbolizar todas las operaciones de lecto-escritura a
    memoria utilizando la teoría de Arrays.




                                                            33
Otras Vulnerabilidades




  Demo en Z3Py



                         34
Otros usos




             35
Un ejemplo más complejo

 CRC32: Código de redundancia cíclica
    (ampliamente utilizado).
   Genera un resumen de 32 bits de una cantidad
    arbitraria de información.
   Sirve para verificar la correcta recepción de la
    información a la que se lo aplica.
   No es un algoritmo de hashing criptográficamente
    seguro.
   No contiene ninguna defensa frente a un ataque
    activo.
                                                       36
Un ejemplo más complejo

 Supongamos que quiero modificar un archivo con
  un formato que aplica CRC32 sobre alguno de sus
  miembros.
 El checksum no puede ser modificado.
 El texto modificado solo puede contener
  números, letras y espacios.




                                                   37
Un ejemplo más complejo


CRC32(“PREFIJO<4 bytes>SUFIJO”)=CRC predef.

 Ataque estándar:
 <4 bytes> son irrestrictos.

 Ataque con un SMT Solver:
 <4 bytes> pertenecen al charset [a-zA-Z0-9 ].


                                                 38
Un ejemplo más complejo



          Demo en Z3Py

crc32(“CRC32(YleRqi) == 0xCAFECAFE”) =
               0xcafecafe



                                         39
Bibliografía

 Decision Procedures. An algorithmic Point of View
  (http://www.decision-procedures.org/)
 SMTLIB (documentación general y lista de solvers)
  (http://www.smtlib.org)
 Papers de Patrice Godefroid
  (http://research.microsoft.com/en-
  us/um/people/pg/pubs-by-theme.html)
 Google “formal verification of software”



                                                      40
¿Preguntas?




              41
Muchas Gracias!



  pablo.sole@gmail.com
                         42

Más contenido relacionado

La actualidad más candente

Numero pseudoaleatorio
Numero pseudoaleatorioNumero pseudoaleatorio
Numero pseudoaleatorio
alan moreno
 
Comunicacion de datos
Comunicacion de datosComunicacion de datos
Comunicacion de datos
1 2d
 
Apuntesmatlab
ApuntesmatlabApuntesmatlab
Apuntesmatlab
ford81
 
Oviedo variaciones
Oviedo variacionesOviedo variaciones
Oviedo variaciones
German Daza
 

La actualidad más candente (20)

Resolución de ecuaciones diferenciales con MATLAB R2015a
Resolución de ecuaciones diferenciales  con  MATLAB  R2015aResolución de ecuaciones diferenciales  con  MATLAB  R2015a
Resolución de ecuaciones diferenciales con MATLAB R2015a
 
Sistemas numericos
Sistemas numericosSistemas numericos
Sistemas numericos
 
Curso java desde cero nivel i - modulo ii
Curso java desde cero   nivel i - modulo iiCurso java desde cero   nivel i - modulo ii
Curso java desde cero nivel i - modulo ii
 
Referencias MATLAB
Referencias MATLABReferencias MATLAB
Referencias MATLAB
 
Suma de imagenes
Suma de imagenesSuma de imagenes
Suma de imagenes
 
Numero pseudoaleatorio
Numero pseudoaleatorioNumero pseudoaleatorio
Numero pseudoaleatorio
 
Robot angular en matlab
Robot angular en matlabRobot angular en matlab
Robot angular en matlab
 
Comunicacion de datos
Comunicacion de datosComunicacion de datos
Comunicacion de datos
 
resumen matlab
resumen matlabresumen matlab
resumen matlab
 
Matlab presentacion enero2012
Matlab presentacion enero2012Matlab presentacion enero2012
Matlab presentacion enero2012
 
resolucion de ecuaciones diferenciales con MATLAB
resolucion de ecuaciones diferenciales con MATLAB resolucion de ecuaciones diferenciales con MATLAB
resolucion de ecuaciones diferenciales con MATLAB
 
Apuntesmatlab
ApuntesmatlabApuntesmatlab
Apuntesmatlab
 
Curso java desde cero nivel i - modulo iii
Curso java desde cero   nivel i - modulo iiiCurso java desde cero   nivel i - modulo iii
Curso java desde cero nivel i - modulo iii
 
Clase 03-matlab
Clase 03-matlabClase 03-matlab
Clase 03-matlab
 
Oviedo variaciones
Oviedo variacionesOviedo variaciones
Oviedo variaciones
 
TIPOS DE DATOS MATLAB
TIPOS DE DATOS MATLABTIPOS DE DATOS MATLAB
TIPOS DE DATOS MATLAB
 
Concepto geométrico de la derivada de una función y su relación con la recta ...
Concepto geométrico de la derivada de una función y su relación con la recta ...Concepto geométrico de la derivada de una función y su relación con la recta ...
Concepto geométrico de la derivada de una función y su relación con la recta ...
 
2.1 recursividad
2.1 recursividad2.1 recursividad
2.1 recursividad
 
Funciones recursivas
Funciones recursivasFunciones recursivas
Funciones recursivas
 
Introduccion a la teoria de interpolacion
Introduccion a la teoria de interpolacionIntroduccion a la teoria de interpolacion
Introduccion a la teoria de interpolacion
 

Similar a Razonando Vulnerabilidades con SMT Solvers

Uso De Las Distribuciones De Probabilidad En La Simulacion De Sistemas Produc...
Uso De Las Distribuciones De Probabilidad En La Simulacion De Sistemas Produc...Uso De Las Distribuciones De Probabilidad En La Simulacion De Sistemas Produc...
Uso De Las Distribuciones De Probabilidad En La Simulacion De Sistemas Produc...
guestb9bf58
 
Uso De Las Distribuciones De Probabilidad En La Simulacion De Sistemas Produc...
Uso De Las Distribuciones De Probabilidad En La Simulacion De Sistemas Produc...Uso De Las Distribuciones De Probabilidad En La Simulacion De Sistemas Produc...
Uso De Las Distribuciones De Probabilidad En La Simulacion De Sistemas Produc...
Instituto Tecnologico De Pachuca
 
Introduccion a Matlab
Introduccion a MatlabIntroduccion a Matlab
Introduccion a Matlab
Omar Yupanqui
 
Matlab basico
Matlab basicoMatlab basico
Matlab basico
ford81
 
Matlab
MatlabMatlab
Matlab
ford81
 
Programación modular estructurada.ppt
Programación modular estructurada.pptProgramación modular estructurada.ppt
Programación modular estructurada.ppt
Leydi Hernandez
 
Guia de estructuras Condicionales
Guia de estructuras CondicionalesGuia de estructuras Condicionales
Guia de estructuras Condicionales
laryenso
 
Fundamentos de computación(ICM) en octave
Fundamentos de computación(ICM) en octaveFundamentos de computación(ICM) en octave
Fundamentos de computación(ICM) en octave
Gabriel Romero
 
Presentacion ip algoritmia_2011_p4
Presentacion ip algoritmia_2011_p4Presentacion ip algoritmia_2011_p4
Presentacion ip algoritmia_2011_p4
ymendal
 

Similar a Razonando Vulnerabilidades con SMT Solvers (20)

1. vers. cap-3_tipos_dedatos
1. vers. cap-3_tipos_dedatos1. vers. cap-3_tipos_dedatos
1. vers. cap-3_tipos_dedatos
 
1. vers. cap-3_tipos_dedatos
1. vers. cap-3_tipos_dedatos1. vers. cap-3_tipos_dedatos
1. vers. cap-3_tipos_dedatos
 
Sistemas numéricos datos y expresiones - tatis
Sistemas numéricos datos y expresiones - tatisSistemas numéricos datos y expresiones - tatis
Sistemas numéricos datos y expresiones - tatis
 
Uso De Las Distribuciones De Probabilidad En La Simulacion De Sistemas Produc...
Uso De Las Distribuciones De Probabilidad En La Simulacion De Sistemas Produc...Uso De Las Distribuciones De Probabilidad En La Simulacion De Sistemas Produc...
Uso De Las Distribuciones De Probabilidad En La Simulacion De Sistemas Produc...
 
Uso De Las Distribuciones De Probabilidad En La Simulacion De Sistemas Produc...
Uso De Las Distribuciones De Probabilidad En La Simulacion De Sistemas Produc...Uso De Las Distribuciones De Probabilidad En La Simulacion De Sistemas Produc...
Uso De Las Distribuciones De Probabilidad En La Simulacion De Sistemas Produc...
 
Matlab
MatlabMatlab
Matlab
 
Matematica computacional
Matematica computacionalMatematica computacional
Matematica computacional
 
Introduccion a Matlab
Introduccion a MatlabIntroduccion a Matlab
Introduccion a Matlab
 
Matlab basico
Matlab basicoMatlab basico
Matlab basico
 
Revista Algoritmos
Revista AlgoritmosRevista Algoritmos
Revista Algoritmos
 
Matlab
MatlabMatlab
Matlab
 
Matlab (1)
Matlab (1)Matlab (1)
Matlab (1)
 
Programación modular estructurada.ppt
Programación modular estructurada.pptProgramación modular estructurada.ppt
Programación modular estructurada.ppt
 
Revista Algoritmos
Revista AlgoritmosRevista Algoritmos
Revista Algoritmos
 
Guia de estructuras Condicionales
Guia de estructuras CondicionalesGuia de estructuras Condicionales
Guia de estructuras Condicionales
 
Fundamentos de computación(ICM) en octave
Fundamentos de computación(ICM) en octaveFundamentos de computación(ICM) en octave
Fundamentos de computación(ICM) en octave
 
Presentacion ip algoritmia_2011_p4
Presentacion ip algoritmia_2011_p4Presentacion ip algoritmia_2011_p4
Presentacion ip algoritmia_2011_p4
 
Intro_Matlab_1.pdf
Intro_Matlab_1.pdfIntro_Matlab_1.pdf
Intro_Matlab_1.pdf
 
Revista Futuro en el Presente.
Revista Futuro en el Presente.Revista Futuro en el Presente.
Revista Futuro en el Presente.
 
2_LenguajeMATLAB
2_LenguajeMATLAB2_LenguajeMATLAB
2_LenguajeMATLAB
 

Último

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Último (11)

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 

Razonando Vulnerabilidades con SMT Solvers

  • 1. Razonando Vulnerabilidades con SMT Solvers Pablo G. Solé
  • 2. SMT Solvers en una línea  Satisfiability Modulo Theory Solver  ¿Existe una asignación de variables para una fórmula dada que la evalúe como verdadera? x   : x  5  x  10  Genera un modelo que pruebe la existencia. 2
  • 3. Teoría SMT y SAT Solver 3
  • 4. SMT Solvers  Construcción por encima del problema de satisfactibilidad booleana (SAT).  SMT Solver:  T-Solver  SAT Solver  Instanciador de cuantificadores (undecidable) 4
  • 5. SMT Solvers  Construcción por encima del problema de satisfactibilidad booleana (SAT).  SMT Solver:  T-Solver (Theory Solver) • Igualdades • BitVector • Arreglos • Reales • Enteros • Funciones no interpretadas 5
  • 6. SMT Solvers  SMT Solver:  T-Solver (Theory Solver) • Igualdades • Define los simbolos: =, != • BitVector • Arreglos de bits de un ancho determinado. • Sistema de numeración de complemento a 2. • Equivalente a un registro del procesador o un entero de C. • Arreglos • Define las operaciones de almacenamiento y carga. • Equivalente a un array en C o el I/O a un archivo. • Reales • Enteros • Funciones no interpretadas • Define la lógica general de funciones más allá del cuerpo de la función. 6
  • 7. SMT Solvers  SMT Solver:  SAT Solver (Satisfactibilidad sobre lógica proposicional) • Lógica proposicional • ,, ,   T-Solver generalmente codifica la teoría como un problema SAT. 7
  • 8. Sumando BitVectors  Un número entero en el rango [0…24) puede expresarse como una sucesión de 4 bits. x  ( x3 x2 x1 x0 ) y  ( y3 y2 y1 y0 )  La suma de estos dos números puede expresarse utilizando únicamente símbolos de lógica proposicional. 8
  • 9. Sumador Completo 1-Bit S  A  B  Cin Cout  ( A  B)  Cin  A  B 9
  • 10. Sumando BitVectors  Le preguntamos a un SAT solver el valor de cada bit de X. x5 8 ( x3 x2 x1 x0 )  x 0101  5 x3  FALSE x2  FALSE x1  TRUE x0  TRUE 10
  • 11. Características del problema  Un SMT/SAT Solver es un procedimiento de toma de decisiones (decision procedure):  Completo • Para toda fórmula está garantizada su finalización.  Sound • Para toda fórmula está garantizado que el resultado sea correcto.  NP-Completo • No puede resolverse en tiempo polinómico. • Peor caso: exponencial.  Una teoría es decidible (decidable) si existe por lo menos un decision procedure para dicha teoría. 11
  • 12. Relaciones de satisfactibilidad  F es SAT si:  Existe por lo menos una solución al sistema.  F es VALID si:  Toda asignación verifica el sistema (tautología).  F es UNSAT si:  ¬F = VALID (no existe una asignación posible)  F es INVALID  ¬F = SAT (existe un contraejemplo) 12
  • 13. En la práctica Analizando código C 13
  • 16. ¿Qué está mal? Problemas Soluciones  Uso de enteros con signo  Usar unsigned int. para conceptos que no lo requieren.  Resultado de la  Verificar que el resultado multiplicación sin checkear. de la multiplicación no exceda el tipo de la variable.  Resultado de malloc sin  Verificar que malloc checkear. devuelva un puntero válido. 16
  • 17. Integer Overflows  Un Integer Overflow sucede cuando el resultado de una operación entre enteros sobrepasa (overflow) el valor máximo que puede tomar una variable de ese tipo.  unsigned int a = 4294967294; (0xfffffffe) unsigned int b = 2; if (a + b == 0) FAIL(); 17
  • 18. Integer Overflows  Las operaciones en C (al igual que en el procesador) se realizan utilizando aritmética de complemento a 2.  (0xfffffffe + 0x2) mod 0x100000000  Si lo analizamos como “enteros con signo”: 0xfffffffe = -2 -2 + 2 = 0 18
  • 19. Integer Overflows int totalSize = numElements * elementSize;  Para contener una multiplicación de 2 enteros de 32 bits se necesitan 64 bits.  El resultado de una multiplicación en C siempre es del tamaño del mayor de los operandos. long long totalSize = numElements * elementSize; ESTO ESTA MAL 19
  • 20. Integer Overflows long long totalSize = (long long) numElements * (long long) elementSize; ESTO ESTA (CASI) BIEN 20
  • 21. Integer Overflows unsigned long long totalSize = (unsigned long long) numElements * elementSize; ESTO ESTA BIEN 21
  • 22. Integer Overflows  ¿Qué sucede si alloco menos memoria de la que luego leo o escribo? numElements = 0x2000002; elementSize = 0x80; totalSize = 0x2000002 * 0x80; //0x100000100 dst = malloc(totalSize); for (x=0; x < numElements; x++); memcpy(dst[x], src[x], elementSize); dst: 0 1 2 … 0 0x80 0x100 0x180 22
  • 23. Modelando verificaciones  elementSize = BitVector(32) numElements = BitVector(32) totalSize = BitVector(32) 23
  • 24. Modelando verificaciones  elementSize = BitVector(32) numElements = BitVector(32) totalSize = BitVector(32)  totalSize = elementSize * numElements 24
  • 25. Modelando verificaciones  elementSize = BitVector(32) numElements = BitVector(32) totalSize = BitVector(32)  totalSize = elementSize * numElements  Propiedad deseable:  totalSize64 = elementSize64 * numElements64 totalSize64 < 232  totalSize / elementSize = numElements 25
  • 26. Modelando verificaciones EQ BV totalSize  elementSiz e * numElement s LO  BV EQ totalSize / elementSiz e  numElement s 26
  • 27. Verificaciones en Z3Py s=Solver() elementSize = BitVec(“e_size”,32) numElements = BitVec(“n_elem”,32) totalSize = BitVec(“total_size”,32) s.add(totalSize == elementSize * numElements) s.add(elementSize == BitVecVal(0x80, 32)) intOverflow = Bool(“intOverflow”) s.add(intOverflow == Not(totalSize / elementSize == numElements)) s.check(intOverflow) print s.model() 27
  • 28. Verificaciones en Z3Py s=Solver() numElements = BitVec(“n_elem”,32) totalSize = numElements * 0x80 s.add(Not(totalSize / 0x80 == numElements)) s.check() s.model().evaluate(totalSize).as_long() 28
  • 30. Ejecución Simbólica  Emula una sucesión de instrucciones utilizando variables simbólicas (BitVectors, Bools y Arrays generalmente).  Permite razonar sobre el funcionamiento de un programa.  Ejemplos:  KLEE para C.  BitBlaze/S2E para binarios. 30
  • 31. Ejecución Simbólica Simbolizar 31
  • 32. Problemas  Inferencia o descripción de invariantes de bucles.  Decisión frente a saltos o llamadas indirectas.  Calculo de funciones duras (hashes, etc).  ¿Cómo evitar concretizar las variables? 32
  • 33. Otras Vulnerabilidades  Heap Overflow  Reemplazar alloc/free por versiones que devuelvan un Array simbólico como puntero a buffer.  Agregar los limites de cada buffer al sistema de ecuaciones.  Simbolizar todas las operaciones de lecto-escritura a memoria utilizando la teoría de Arrays. 33
  • 34. Otras Vulnerabilidades Demo en Z3Py 34
  • 36. Un ejemplo más complejo  CRC32: Código de redundancia cíclica (ampliamente utilizado).  Genera un resumen de 32 bits de una cantidad arbitraria de información.  Sirve para verificar la correcta recepción de la información a la que se lo aplica.  No es un algoritmo de hashing criptográficamente seguro.  No contiene ninguna defensa frente a un ataque activo. 36
  • 37. Un ejemplo más complejo  Supongamos que quiero modificar un archivo con un formato que aplica CRC32 sobre alguno de sus miembros.  El checksum no puede ser modificado.  El texto modificado solo puede contener números, letras y espacios. 37
  • 38. Un ejemplo más complejo CRC32(“PREFIJO<4 bytes>SUFIJO”)=CRC predef.  Ataque estándar: <4 bytes> son irrestrictos.  Ataque con un SMT Solver: <4 bytes> pertenecen al charset [a-zA-Z0-9 ]. 38
  • 39. Un ejemplo más complejo Demo en Z3Py crc32(“CRC32(YleRqi) == 0xCAFECAFE”) = 0xcafecafe 39
  • 40. Bibliografía  Decision Procedures. An algorithmic Point of View (http://www.decision-procedures.org/)  SMTLIB (documentación general y lista de solvers) (http://www.smtlib.org)  Papers de Patrice Godefroid (http://research.microsoft.com/en- us/um/people/pg/pubs-by-theme.html)  Google “formal verification of software” 40
  • 42. Muchas Gracias! pablo.sole@gmail.com 42