¿Es un sistema de comprobación de hash de archivos 100% seguro y no se puede pasar por alto / inhabilitar?

2

Estoy creando un código abierto distribuido (y parcialmente replicado sin conexión, ya que se supone que la red será inestable) CMS y uno de los "trabajos" del sistema central será agrupar todos los archivos y generar un hash único desde ellos.

Este hash especial se comparará con un hash genuino para ver si coinciden, para garantizar que nadie modifique maliciosamente la fuente.

Si ambas coincidencias hash podemos continuar con el proceso de manera segura y, en particular, la replicación, si no se encuentra ninguna coincidencia, obtenemos la ip / proxy / tor-node y bloqueamos los intentos de unión posteriores.

Ok, vamos a agregar algo de contexto ...

Supongamos que tenemos una carpeta llamada 'cmsfiles' y dentro tenemos los archivos: app.py, dbconn.py, users.py, reputación.py, node_list.py, blacklist.py etc ..

Está John, el fundador de un portal llamado "Breaking old News". Tiene un hash genuino ("hash original") y se encuentra en la "lista de nodos", por lo que es un punto de referencia en el que se debe verificar.

Ahora, viene Dan, quien está interesado en el portal quiere unirse a él por su participación (ya sea discusiones o cualquier otra cosa) ... así que descarga e instala (deja que sea Python + Sharded Sqlite DB) el software sugerido por el portal de solo lectura.

Ahora, cuando vuelve a visitar el portal, se muestra un mensaje que dice algo como "Verificamos la integridad antes de alinear ambas máquinas, mantengámonos firmes y esperemos" ... lo que sucede en segundo plano es que se contactan las máquinas de John (de la lista de direcciones de lista de nodos) que luego procede a agrupar todos los archivos de la máquina de Dan en 'cmsfiles' a un solo hash y coteja con el genuino. La base de datos se descarga / actualiza y así sigue el "tren" de John.

Pasan 2 días desde que Dan se unió ...

Otro tipo llamado "Jack" aparece, pero con intenciones maliciosas, ya que modificó el archivo "reputación.py" para superar la limitación de 120 puntos para votar.

Él ve lo mismo que Dan, pero en el fondo sucede algo diferente ...

Cuando la máquina de John o Dan comprueba el hash, descubren que no coincide con el solicitante, por lo que la máquina de John o la de Dan proceden a expulsarlo de la red al ponerlo en la lista "lista negra.py".

nota: si Jack cambiara las direcciones en la lista manualmente para intentar validar su máquina, estaría solo y habría creado su propio portal sin ningún daño a los otros portales que ya existen

De lo que no estoy seguro es de si esto puede considerarse un sistema seguro y de que nadie puede falsificar / evitar el hash de alguna manera. ¿O tal vez si lo hago mal y debería hacerse de otra manera?

p.s. En parte se inspiró en el trabajo interno de Bitcoin y Osiris sps.

    
pregunta gw0 13.03.2014 - 19:16
fuente

3 respuestas

4

Si te entiendo bien, estás preguntando si el proceso que has descrito coloca la carga de seguridad en el algoritmo hash, de ahí la pregunta sobre qué tan buenos son los algoritmos hash. Los algoritmos bien analizados (como SHA1 a 3 ) deben ser muy buenos, ya que crear una colisión debería ser extremadamente difícil.

Sin embargo, después de leer tu proceso, creo que el punto débil está en otra parte.

  1. ¿Qué impide que el usuario malintencionado mienta sobre el resultado de su hash?
  2. Para evitar el # 1, es posible que necesite que los archivos de los usuarios se carguen y guarden en el servidor (creando su propio conjunto de problemas). Si es así, ¿cómo evita que el usuario malintencionado envíe los archivos que espera ver mientras ejecuta archivos modificados?

Herramientas como MITMproxy hacen que este engaño sea mucho más accesible de lo que solía ser. Probablemente encontrará que Stackoverflow también es muy bueno para detectar problemas generales de proceso / flujo de trabajo como este.

    
respondido por el scuzzy-delta 13.03.2014 - 20:50
fuente
1

Estás pasando por alto un componente enorme aquí. La conexión entre puntos. Puede oprimir el botón SHA512 y no haría ninguna diferencia si el cable es visible entre los puntos.

YourServer --> world
World --> Yourserver

Lo que significa

Dan --> connects to --> YourServer

¿Cómo se realiza esta conexión en el lado de la red de la ecuación? SSL, VPN, etc?

Tampoco estás teniendo en cuenta las intrusiones basadas en host. Por ejemplo, imagine que Dan es un estudiante universitario y estamos en el mismo dormitorio. Dependiendo de la arquitectura de red de Dan (de la que no tendrá control), ¿qué me impide oler la red, tomar su token y volver a usted como él? (Interpretación). Puedo asegurarle que, desde una perspectiva de NAT, verá solo una dirección IP.

Ahora, ¿qué hay de la intrusión basada en host donde, por ejemplo, logré PONER EN SU máquina y estoy pasando los datos a través de su máquina? (Similar a lo que hacen los escritores de malware para robar datos / rastrear / registro de pulsaciones). Hay muchas cosas que considerar

    
respondido por el munkeyoto 13.03.2014 - 21:23
fuente
0

El talón de Aquiles en este caso es que el cálculo de hashsum requiere la cooperación de la máquina atacante. El atacante podría tener dos versiones de la aplicación: una original y otra modificada. No hay forma de evitar que presente la copia original para verificar la integridad, pero luego use la versión modificada para conectarse realmente a la red e interactuar con ella.

Cuando desarrolla un sistema distribuido, no puede confiar en que los sistemas de terceros hagan cualquier cosa correctamente. Debe desarrollar su código de red basado en el supuesto de que cada participante ha pirateado su nodo más allá del reconocimiento y que no hay nada que pueda hacer en contra de él. La seguridad del sistema debe estar incorporada en el protocolo. Cualquier limitación, como requerir la reputación de 120 para votar, debe ser impuesta por otros nodos, no por el propio nodo.

    
respondido por el Philipp 14.03.2014 - 16:06
fuente

Lea otras preguntas en las etiquetas