2019/05/19

OWASP Latam Tour 2019


Me perdí el comienzo y el final por logística laboral y familiar, pero pude asistir a tres charlas aparte de dar la mía.

Soy un tanto reacio a estar contando lo que los mismos autores pueden contar, así que sólo cuento lo mínimo y alguna opinión de haberla. 
Muchas gracias a  Andrés, Martín y la nueva organización por confiarme ese rato.

La primera charla fue la de Miguel Summer Elias (http://www.informaticalegal.com.ar/) que suele dar explicaciones claras y amenas y esta vez no fue la excepción. Tuvo la innovación de usar una tela touch, con la cual podía controlar con la mano y el audio la presentación ;-)

Luego la mía, "Forzando brutalmente MD5...", que originalmente eran cuatro de cinco charlas, tratándose de calcular MD5 con CPU, SIMD, multicore, supercomputadora y GPGPU.
La última, de un modo radicalmente distinto y que es la que realmente me interesa, la tengo elaborada, me falta implementar el código y trata de hacer lo mismo con FPGA.
Había presentado CPU y SIMD en H4CK3D 2018 pero ahora se le ha hecho largo en nombre, "Forzando brutalmente MD5 con CPU, SIMD, threads, forks, supercomputadora y GPU". Dos días antes caí en cuenta que debió llamarse "Forzando brutalmente MD5 con computadoras" y la última "Forzando brutalmente MD5 sin computadoras".

Primero hice un breve resumen de hashing, para que sirve, la implementación de MD5, optimizaciones como las que menciono más abajo como "mías", la descripción de cada caso, caminos fallidos y teniendo 40 minutos medio que algunas cosas quedaron muy superficiales, otras se cayeron y alguna me la olvidé.

Lo que me han dado ganas de hacer y lo intentaré, es un análisis cuantitivo en tres dimensiones:

  • pasar de CPU a SIMD que son dos casos
  • optimización de compilador que son dos casos
  • optimizaciones mías, como padding fijo, hardcodeo de constantes y loop unroll

Esto último podría ser considerando las ocho combinaciones o quizas cinco asi:

  • padding fijo
  • padding fijo + constantes
  • padding fijo + loop unroll
  • padding fijo + constantes + loop unroll 

Me quedarian entonces 32 o 16 combinaciones, tedioso pero factible.

Para el año pasado cuando estaba por mostrar en el trabajo la parte de GPGPU,  Andrés me había ofrecido acceso a su minador pero se fué de vacaciones y no llegó a configurarme el acceso, lo cual fué una suerte para mí, pues no mucho después, mientras él monitoreaba remotamente el consumo halló 0 Watts. Fué a fijarse y los aislantes de los cables de alimentación se habían fundido, si hubiera ocurrido mientras yo la usaba... Más suerte para Andrés que no tuvo un incendio.


Luego Leandro Mantovani nos contó como utilizar unos logs de certificados TLS como alerta temprana para detectar sitios vulnerables, muy ingenioso

Finalmente, nuevamente suerte en relación a Andrés, su charla la dió en el slot previo, si no me la hubiese perdido. Fue una muy buen ensayo para... BlackHat! ¡qué capo!



La agenda y los links, ...


https://www.owasp.org/index.php/LatamTour2019#tab=ARGENTINA_-_Buenos_Aires


...la presentación, ...


https://www.owasp.org/images/d/d5/Forzando_Brutalmente_MD5_con_computadoras_-_OWASP_2019_-_Carlos_Pantelides.pdf


...las cifras a medio cocinar, ...


https://www.owasp.org/images/5/53/Forzando_Brutalmente_MD5_con_computadoras_-_Cifras_-_OWASP_2019_-_Carlos_Pantelides.pdf


...las entradas en este blog y ...


https://seguridad-agile.blogspot.com/p/indice.html#md5


...el código.

https://github.com/cpantel/Forzando-Brutalmente-MD5

 

Forzando Brutalmente MD5 - parte 5 - GPGPU

Forzando Brutalmente MD5 - parte 5 - GPGPU


¿Venís de leer la intro, la parte 1, la parte 2, la parte 3 y la parte 4?



El tema


Finalemente, dentro del terreno de usar computadoras para calcular MD5, llegamos si no a lo último en términos tecnológicos a lo más potente.

En la misma linea de la supercomputadora, se usan CPUs sencillas, casi ni califican, optimizadas para cálculo. Y son muchas, centenares o miles.

Código

  • https://github.com/cpantel/Forzando-Brutalmente-MD5/tree/master/v7_cuda
Seguí con la parte 6, uno de estos días

Forzando Brutalmente MD5 - parte 4 - supercomputadora

Forzando Brutalmente MD5 - parte 4 - supercomputadora


¿Venís de leer la intro, la parte 1, la parte 2 y la parte 3?


El tema


Lo que veníamos viendo es como aprovechar mejor una CPU cada vez más compleja y luego varias pero con la ilusión de usar una sola.

Existe un enfoque que consiste en usar muchas CPUs genéricas simples y nosotros debemos administrar su uso.

La que uso es la parallella, que es una mini supercomputadora. Mini en términos de que tiene muy pocas CPUs, por ende, bajo rendimiento. Super en la arquitectura, son CPUs simples con un bus de interconexión que no he usado.



Código

  • https://github.com/cpantel/Forzando-Brutalmente-MD5/tree/master/v6_ebsp
Seguí con la parte 5

Forzando Brutalmente MD5 - parte 3 - threads, forks


Forzando Brutalmente MD5 - parte 3 - multicore


¿Venís de leer la intro,  la parte 1 y la parte 2?

El tema


Hace años, tantos que ni es argumento de venta, tenemos computadoras multicore, esto es, que tienen varias CPUs.

Dos maneras de ejecutar simultáneamente tareas es por medio de disparar programas a la vez (forks) o a un programa pedirle que ejecute una función en un hilo (thread) distinto.

Algunas diferencias son que los forks se comunican mediante llamadas interprocesos, red, memoria compartida, archivos y los threads, como son parte de un mismo programa, por variables compartidas.

En este caso, como no hay comunicación, da lo mismo y de hecho la performance es la misma.

Se puede combinar con AVX2 y aumentar mucho el rendimiento.


Código

  • https://github.com/cpantel/Forzando-Brutalmente-MD5/tree/master/v4_threads
  • https://github.com/cpantel/Forzando-Brutalmente-MD5/tree/master/v4_threads_32cores
  • https://github.com/cpantel/Forzando-Brutalmente-MD5/tree/master/v4_threads_avx2
  • https://github.com/cpantel/Forzando-Brutalmente-MD5/tree/master/v5_fork
Seguí con la parte 4