Las descargas en sitios web a veces tienen una suma de comprobación MD5, lo que permite a las personas confirmar la integridad del archivo. He oído que esto es para permitir que no solo los archivos corruptos se identifiquen instantáneamente antes de que causen un problema, sino también para que cualquier cambio malicioso se detecte fácilmente.
Sigo la lógica en lo que respecta a la corrupción de archivos, pero si alguien deliberadamente desea cargar un archivo malicioso , podría generar una suma de verificación MD5 correspondiente y publicarla en el sitio de descarga junto con el archivo alterado. Esto engañaría a cualquiera que descargue el archivo y piense que no ha sido modificado.
¿Cómo pueden las sumas de verificación MD5 proporcionar protección contra archivos alterados deliberadamente si no hay forma de saber si la suma de verificación en sí misma ha sido comprometida?
Respuestas:
Bueno, entonces escuchaste mal. Las sumas de verificación MD5 (o SHA o lo que sea) se proporcionan ( junto a los enlaces de descargas, específicamente ) solo para verificar una descarga correcta. Lo único que pretenden garantizar es que tenga el mismo archivo que el servidor. Nada más y nada menos. Si el servidor está comprometido, eres SOL. Es realmente tan simple como eso.
fuente
La solución utilizada por algunos sistemas de administración de paquetes como dpkg es firmar el hash : use el hash como entrada para uno de los algoritmos de firma de clave pública. Ver http://www.pgpi.org/doc/pgpintro/#p12
Si tiene la clave pública del firmante, puede verificar la firma, lo que demuestra que el hash no se ha modificado. Esto solo te deja con el problema de obtener la clave pública correcta por adelantado, aunque si alguien alguna vez manipula la distribución de la clave, también tiene que manipular todo lo que puedas verificar con ella; de lo contrario, verás que algo extraño está sucediendo.
fuente
Su suposición es correcta. Sin embargo, hay una excepción. Si el servidor que proporciona el archivo y la página donde se encuentra el hash no son administrados por la misma entidad. En ese caso, el desarrollador de software puede querer decir "oye, la gente descarga esto desde ese lugar pero solo cree si hash = xxxx". (Esto podría ser útil para CDN como ejemplo). Supongo que esta fue la razón por la que alguien lo hizo en primer lugar. Que otros solo siguieron pensando lo genial que sería mostrar el hash. Sin siquiera pensar en lo útil que es, ni siquiera el archivo y el hash están en la misma ubicación.
Dicho esto, esto vale lo que es. No asumas demasiado sobre seguridad como otros ya han dicho. Si y solo si puede confiar absolutamente en el hash original, entonces el archivo es bueno. De lo contrario, un atacante con suficiente motivación y conocimiento puede alterar tanto el archivo como el hash, incluso si están en diferentes servidores y administrados por diferentes entidades.
fuente
A veces, las sumas de verificación se proporcionan de forma segura, pero la descarga no. Dado que MD5 está roto , las sumas de verificación de seguridad de MD5 son más débiles que las sumas de verificación más seguras, pero antes de que MD5 se rompiera, un MD5 proporcionado de forma segura (por ejemplo, uno que fue firmado con PGP o GPG o Gatekeeper, o obtenido a través de HTTPS) que coincidía con el MD5 de la descarga fue una fuerte evidencia de que la descarga recibida fue la que el servidor estaba poniendo a disposición.
He estado escribiendo sobre la lamentable falta de sumas de verificación seguras durante años, aquí .
Los usuarios no deben descargar ejecutables no confiables a través de redes no confiables y ejecutarlos, debido al riesgo de ataques MITM. Ver, por ejemplo, "Inseguridades dentro de los sistemas de actualización automática" por P. Ruissen, R. Vloothuis.
Anexo 2014: No, NO está mal "que las sumas de verificación publicadas en las páginas web se usen para detectar modificaciones maliciosas", porque ESTE es un rol que pueden desempeñar. Ayudan a proteger contra la corrupción accidental, y si se sirve a través de HTTPS o con una firma verificada (o mejor aún, ambas) ayudan a proteger contra la corrupción maliciosa. Obtuve sumas de verificación sobre HTTPS y verifiqué que coincidían con las descargas HTTP muchas veces.
Hoy en día, los archivos binarios a menudo se distribuyen con hashes firmados y verificados automáticamente, aunque incluso esto no es perfectamente seguro .
Extracto del enlace anterior: "La aplicación KeRanger se firmó con un certificado de desarrollo de aplicación Mac válido; por lo tanto, pudo evitar la protección Gatekeeper de Apple". ... "Apple ha revocado el certificado abusado y actualizado la firma del antivirus XProtect, y Transmission Project ha eliminado los instaladores maliciosos de su sitio web. Palo Alto Networks también ha actualizado el filtrado de URL y la prevención de amenazas para evitar que KeRanger afecte los sistemas. Análisis técnico
Los dos instaladores de transmisión infectados por KeRanger fueron firmados con un certificado legítimo emitido por Apple. El desarrollador que enumeró este certificado es una empresa turca con la identificación Z7276PX673, que era diferente de la identificación del desarrollador utilizada para firmar versiones anteriores del instalador de la transmisión. En la información de firma de código, encontramos que estos instaladores fueron generados y firmados en la mañana del 4 de marzo ".
Addenda 2016:
@Cornstalks: Re. tu comentario a continuación: Incorrecto. Como se señaló actualmente en el artículo de Wikipedia sobre ataque de colisión al que se vincula, "En 2007, se encontró un ataque de colisión con prefijo elegido contra MD5" y "el atacante puede elegir dos documentos arbitrariamente diferentes y luego agregar diferentes valores calculados que resultan en el conjunto documentos que tienen un valor hash igual ". Por lo tanto, incluso si el MD5 se proporciona de forma segura y un atacante no puede modificarlo, un atacante PUEDE usar un ataque de colisión de prefijo elegido con un prefijo elegido que contenga malware, lo que significa que MD5 NO es seguro para fines de cifrado. Esta es en gran parte la razón por la cual US-CERT dijo que MD5 "debe considerarse criptográficamente roto y no apto para su uso posterior".
Un par de cosas más: CRC32 es una suma de verificación. MD5, SHA, etc. son más que sumas de verificación; están destinados a ser hashes seguros. Eso significa que se supone que son muy resistentes a los ataques de colisión. A diferencia de una suma de comprobación, un hash seguro comunicado de forma segura protege contra un ataque de hombre en el medio (MITM) donde el MITM está entre el servidor y el usuario. No protege contra un ataque donde el servidor en sí está comprometido. Para protegerse contra eso, las personas generalmente confían en algo como PGP, GPG, Gatekeeper, etc.
fuente
Esta es la razón precisa por la que las sumas de verificación publicadas a menudo llevan un descargo de responsabilidad que dice "Esto no puede proteger contra la modificación maliciosa del archivo". Entonces, la respuesta corta es "no pueden proporcionar ninguna protección contra un archivo alterado deliberadamente" (aunque, si la página se entrega a través de HTTPS, HTTPS protege contra modificaciones; si el archivo no se entrega a través de HTTPS pero la suma de verificación es decir, eso podría ayudar a algunos, pero no es un caso común). Quien le dijo que las sumas de verificación publicadas en las páginas web se utilizan para detectar modificaciones maliciosas estaba equivocado, porque este no es un rol que puedan realizar; todo lo que hacen es ayudar a protegerse contra la corrupción accidental y la corrupción maliciosa perezosa (si alguien no se molesta en interceptar la página que le da la suma de verificación).
Si desea protegerse contra la modificación deliberada, debe evitar que las personas jueguen con la suma de verificación o hacer que sea imposible para cualquier otra persona generar una suma de verificación válida. El primero puede implicar entregarlo en persona o similar (por lo que la suma de verificación en sí misma es confiable); este último va a los algoritmos de firma digital (donde necesita obtener de forma segura su clave pública para el descargador; en TLS, esto se hace confiando en última instancia en las autoridades de certificación directamente y haciendo que verifiquen a todos los demás; también se puede hacer a través de una red de confianza , pero el punto es que algo debe transferirse de forma segura en algún momento, y simplemente publicar algo en su sitio no es suficiente).
fuente
Esto es realmente un problema. Mostrar sumas de comprobación en el mismo sitio que el archivo a descargar no es seguro. Una persona que puede cambiar el archivo también puede cambiar la suma de verificación. La suma de verificación debe mostrarse a través de un sistema separado completo, pero esto no es factible, porque cómo decirle al usuario de manera segura dónde se puede encontrar la suma de verificación.
Una posible solución es el uso de archivos firmados.
(Por cierto: MD5 no es seguro en ningún lugar y ya no debería usarse).
fuente
Estás completamente en lo correcto. El objetivo, entonces, sería equivocarse "si": si sabemos que un hash criptográfico seguro de un archivo no está comprometido, entonces sabemos que el archivo tampoco está comprometido.
Por ejemplo, si publica un hash de un archivo en su sitio web y luego se vincula a una copia del archivo en un servidor espejo de terceros, una práctica común en la distribución de software libre anticuada, sus usuarios pueden estar protegidos contra algunos tipos de los ataques Si el servidor espejo es malicioso o está comprometido, pero su sitio web está bien, el espejo no podrá subvertir su archivo.
Si su sitio web usa HTTPS, o si firma el hash
gpg
, su archivo también puede estar (en su mayoría) protegido de los atacantes de la red, como puntos de acceso Wi-Fi maliciosos, nodos de salida de Tor corruptos o NSA.fuente
No puede modificar la suma de comprobación MD5 sin modificar también el archivo. Si descarga el archivo, luego descargue el hash, y luego su cálculo de los has del archivo no coincide con lo que se proporciona, ya sea el hash o el archivo es incorrecto o está incompleto.
Si desea "vincular" el archivo a algo externo, como autor, máquina, etc., debe estar firmado , utilizando un proceso de tipo PKI con certificados. El autor del archivo, etc., puede firmar el archivo con su clave privada, y usted puede verificar las firmas con la clave pública, que debe estar disponible públicamente, firmada por una CA en la que usted y el autor confían, y descargable, preferiblemente desde múltiples localizaciones.
Si modifica el archivo, la firma no será válida, por lo que también se puede usar para verificar la integridad del archivo.
fuente
Los hashes indican si su versión del archivo (la "descarga") difiere de la versión del servidor. No ofrecen ninguna garantía de autenticidad del archivo.
Las firmas digitales (cifrado asimétrico + función hash) se pueden usar para verificar que el archivo no haya sido modificado por nadie que no tenga la clave privada correspondiente.
El creador del archivo procesa el archivo y encripta el hash usando su clave privada (secreta). De esa manera, cualquier persona con la clave pública correspondiente (no secreta) puede verificar que el hash coincida con el archivo, pero si bien el contenido del archivo puede modificarse, nadie puede reemplazar el hash correspondiente con uno que coincida con el archivo (después de que el hash se descifre usando la clave pública), a menos que logren forzar la clave privada por fuerza bruta u obtener acceso a ella de alguna manera.
¿Qué impide que el Sr. "A.Hacker" simplemente modifique el archivo y luego lo firme con su propia clave privada?
Para validar el archivo, debe comparar su hash con el que obtuvo descifrando la firma digital asociada. Si crees que el archivo es de "IMAwesome", entonces descifras el hash usando su clave y el hash no coincide con el archivo, ya que el hash fue encriptado usando la clave de A.Hacker.
Las firmas digitales permiten detectar cambios accidentales y maliciosos.
Pero, ¿cómo obtenemos la clave pública de IMAwesome en primer lugar? ¿Cómo podemos asegurarnos de que cuando obtuvimos su clave, en realidad no fue la clave de A. Hacker servida por un servidor comprometido o un ataque man-in-the-middle? Aquí es donde entran las cadenas de certificados y los certificados raíz de confianza, ninguno de los cuales son soluciones perfectamente seguras [1] para el problema, y ambos probablemente deberían explicarse bien en Wikipedia y en otras preguntas sobre SO.
[1] Tras la inspección, los certificados raíz que se enviaron con el sistema operativo Microsoft en mi PC de trabajo incluyen un certificado del Gobierno de los EE. UU. Cualquier persona con acceso a la clave privada correspondiente tos NSA tos , por tanto, puede servir contenido a mi navegador web que pasa por el "¿hay un candado en la barra de direcciones" cheque. ¿Cuántas personas realmente se molestarán en hacer clic en el candado y ver quién está usando el par de llaves para "asegurar" la conexión?
fuente
Esta es una muy buena pregunta. En general, su evaluación de la manipulación de MD5 es acertada. Pero creo que el valor de las sumas de verificación MD5 en las descargas es superficial en el mejor de los casos. Quizás después de descargar un archivo puede verificar el MD5 que tiene en un sitio web, pero tiendo a ver el almacenamiento MD5 en paralelo como un "recibo" o algo que es bueno tener pero no confiable. Como tal, en general nunca me han importado las sumas de verificación MD5 de los archivos descargados, pero puedo hablar desde mi experiencia creando procesos MD5 ad-hoc basados en servidor.
Básicamente, lo que he hecho cuando un cliente quiere barrer un sistema de archivos para sumas de verificación MD5 es que se generen en archivos CSV que mapeen el nombre del archivo, la ruta, el MD5 y otra información diversa en un formato de datos estructurados que luego he ingerido en una base de datos para comparación y almacenamiento.
Entonces, usando su ejemplo, mientras que una suma de verificación MD5 podría estar junto a un archivo en su propio archivo de texto, la suma de verificación MD5 del registro de autoridad se almacenaría en un sistema de base de datos no conectado. Entonces, si alguien piratea de alguna manera un recurso compartido de archivos para manipular datos, ese intruso no tendría acceso a los registros de autoridad MD5 o al historial conectado.
Recientemente descubrí una buena pieza de software de archivo de biblioteca llamada ACE Audit Manager, que básicamente es una aplicación Java diseñada para sentarse y mirar un sistema de archivos en busca de cambios. Registra los cambios a través de los cambios MD5. Y opera con una filosofía similar a mi proceso ad-hoc: almacenar las sumas de verificación en una base de datos, pero va un paso más allá, pero crea una suma de verificación MD5 de sumas de verificación MD5 que se conoce como árbol hash o árbol Merkle .
Entonces, digamos que tiene 5 archivos en una colección. Esos 5 archivos en el Administrador de Auditoría ACE obtendrían luego otra, llamémosla “padre”, suma de comprobación que es un hash generado a partir de las 5 sumas de verificación MD5 de cada archivo. Entonces, si alguien manipulara solo un archivo, el hash para el archivo cambiaría y también el hash para toda la colección "padre".
En general, la forma en que necesita ver las sumas de verificación MD5 y los hashes de integridad relacionados es a menos que no estén conectados a algún almacenamiento no directo para los hash MD5, pueden estar dañados. Y su valor como herramienta de integridad de datos a largo plazo es equivalente a una cerradura barata que viene "gratis" en una nueva pieza de equipaje; Si se toma en serio el bloqueo de su equipaje, recibirá un candado que no se puede abrir en 5 segundos con un clip.
fuente
velocidad
A menudo, las personas encuentran que es mucho más rápido (a) descargar un archivo grande de alguna red de entrega de contenido (CDN) "cercana" no confiable, sitio espejo, pares de torrents, etc. y también descargar el archivo de suma de verificación corto correspondiente (a menudo SHA256; software antiguo a menudo se usa MD5) de algunas fuentes confiables. Les resulta insoportablemente lento (b) descargar todo el archivo grande directamente de una fuente confiable.
validación
A menudo, esa persona descubre que todo se valida: las fuentes (confiables y no confiables) acuerdan la misma suma de verificación y ejecutan shasum (o md5sum) con cualquiera de esos archivos cortos de suma de verificación (no importa cuál, cuando son todos idénticos ) indica que el archivo grande tiene una suma de comprobación coincidente.
modificación
Tiene razón en que cuando Mallory altera maliciosamente un archivo grande que se encuentra en algún sitio de descarga, sería fácil para Mallory también malintencionadamente la suma de comprobación de ese archivo en el mismo sitio de descarga para que se ejecute shasum (o md5sum) en ese archivo de suma de verificación maliciosa parece validar el archivo grande. Pero ese archivo de suma de comprobación no es el (único) que el descargador debe usar para la validación.
Cuando el descargador compara ese archivo de suma de verificación malicioso con los archivos de suma de verificación descargados de fuentes confiables, si la suma de verificación original se desliza incluso una vez, entonces el descargador verá que no todo se valida y sabrá que algo salió mal.
Como ha dicho antes cpast, si una buena suma de verificación criptográfica se transmite a través de una conexión confiable, puede proporcionar seguridad (que se deriva de la conexión confiable).
Como ha dicho supercat antes, los archivos de suma de verificación de un sitio no ayudan a las personas que descargan archivos grandes del mismo sitio y de la misma manera que descargan los archivos de suma de verificación: ayudan a las personas que desean descargar archivos de otro sitio.
Las sumas de verificación criptográficas son una parte importante de las firmas prácticas de clave pública (como se implementa en GnuPG y otro software compatible con OpenPGP). Las firmas de clave pública tienen algunas ventajas sobre las sumas de verificación solo.
fuente
Bueno, no has escuchado totalmente mal . La firma digital es en realidad lo que se usa para detectar cambios maliciosos. Por algunas razones importantes, el hash es una parte fundamental de la firma digital, ya que solo el hash está firmado , no todo el archivo original.
Dicho esto, si la fuente no proporciona la firma del hash y una forma confiable de verificarlo , entonces tiene razón, no se brinda protección contra archivos alterados deliberadamente , pero el hash sigue siendo útil como suma de comprobación contra accidental la corrupción .
Aquí hay un ejemplo del mundo real que puede aclarar todo. El siguiente pasaje es particularmente significativo sobre el tema:
fuente