
Colisiones de hash y explotaciones
Por Ange Albertini y Marc Stevens.
P: ¿Es posible hacer que un archivo obtenga un MD2/MD4/MD5/MD6/SHA1/SHA2/SHA3 arbitrario, o el mismo hash que otro archivo?
R: No.
P: ¿Se pueden crear 2 archivos diferentes con el mismo hash?
R: Con MD5, en unos segundos en un ordenador estándar. Con SHA1, es posible pero no práctico para usuarios finales (Complejidad: 2^61.2 Precio: $11k).
P: ¿Se puede hacer que 2 archivos diferentes obtengan el mismo hash añadiendo datos?
R: Con MD5, en unas horas en un ordenador estándar. Con SHA1, es posible pero no práctico para usuarios finales (Complejidad: 2^63.4 Precio: $45K)
P: ¿Seguirán siendo válidos los 2 archivos?
R: En general, sí, ya que la mayoría de los formatos de archivo toleran datos añadidos. Por otro lado, las firmas de los archivos probablemente se romperán.
P: ¿Se pueden crear 2 archivos diferentes con contenidos arbitrarios y el mismo hash?
R: Sí, puede ser instantáneo apoyándose en estructuras de archivo especiales:
P: ¿Para qué formatos puedo obtener un par de archivos con colisión MD5 instantánea?
R: JPG, PNG, GIF, GZIP, Portable Executable, MP4, JPEG2000, PDF, DOCX/PPTX/XSLX, EPUB, 3MF, XPS. Basta con ejecutar el script específico.
P: ¿Y para SHA1?
R: Para SHA1, JPG en un PDF está calculado e implementado.
P: ¿Qué hay de los formatos ya soportados para MD5 (JPG, PNG...), pero para SHA1 en su lugar?
R: Lo más probable es que también sean compatibles con SHA1, pero sus colisiones no han sido calculadas.
P: ¿Los cálculos son más rápidos para contenidos similares (pero diferentes)?
R: No. Cualquier pequeña diferencia requiere un cálculo completo.
P: ¿Qué formatos no tienen ese atajo?
R: ELF, Mach-O, Java Class, TAR, ZIP (entre otros...)
P: ¿Siguen siendo posibles las colisiones clásicas (en unas horas) con estos formatos?
R: Sí, siempre que se tolere cualquier cantidad de datos añadidos (es decir, probablemente no ZIP o Class).
P: ¿Proporcionas ejemplos de colisiones?
R: Sí.
El objetivo es explorar en profundidad los ataques existentes - y mostrar de paso lo débil que es MD5 (colisiones instantáneas de cualquier JPG, PNG, PDF, MP4, PE...) - y también explorar en detalle los formatos de archivo comunes para determinar cómo pueden ser explotados con ataques presentes o futuros.
De hecho, el mismo truco de formato de archivo se puede usar en varios hashes (los mismos trucos JPG se usaron para MD5, SHA-1 malicioso y SHA1), siempre que las colisiones sigan los mismos patrones de bytes.
Este documento no trata sobre nuevos ataques (el más reciente fue documentado en 2012), sino sobre nuevas formas de explotación de los ataques existentes.
Estado actual de los ataques conocidos:
conseguir que un archivo obtenga el hash de otro archivo o un hash dado: imposible
obtener dos archivos diferentes con el mismo MD5: instantáneo
hacer que dos archivos arbitrarios obtengan el mismo MD5: unas horas (72 horas.core)
hacer que dos archivos arbitrarios de formatos de archivo específicos (PNG, JPG, PE...) obtengan el mismo MD5: instantáneo
obtener dos archivos diferentes con el mismo SHA1: 6500 años.core
(*) ejemplo con crypt - gracias Sven!```
import crypt crypt.crypt("5dUD&66", "br") 'brokenOz4KxMc' crypt.crypt("O!>',%$", "br") 'brokenOz4KxMc'
# Ataques
MD5 y SHA1 funcionan con bloques de 64 bytes.