¿HTTPS es suficiente para evitar ataques de repetición?

10

Estoy exponiendo algunos métodos REST en un servidor para una aplicación móvil.

Me gustaría evitar que los usuarios puedan oler cómo se construyen los métodos HTTP (desde la aplicación móvil) y luego enviarlos nuevamente al servidor. Ejemplo:

  • La aplicación móvil envía una solicitud.
  • El usuario usa un proxy y puede verificar lo que sucede en la red
  • El usuario ve y guarda la solicitud que el móvil acaba de enviar
  • => Ahora no quiero que el usuario pueda enviar manualmente esa solicitud

¿Es suficiente asegurar el servidor a través de HTTPS?

MartinMoizard
fuente

Respuestas:

7

HTTPS puede ser suficiente para proteger el servidor de ataques de reproducción (el mismo mensaje se envía dos veces) si el servidor está configurado para permitir solo el protocolo TLS según rfc2246 sección F.2.

Los datos salientes están protegidos con un MAC antes de la transmisión. Para evitar ataques de reproducción o modificación de mensajes, el MAC se calcula a partir del secreto MAC, el número de secuencia [...]

Emirikol
fuente
1
Esto ya no es cierto con (borrador) TLS 1.3 si los tickets 0-RTT están habilitados. Además, aunque no está estrictamente dentro del alcance de la pregunta, se puede montar un ataque de repetición incluso con las versiones actuales de TLS si se usa un navegador web .
Alex Shpilkin
9

HTTPS simplemente significa que los datos que se transportan están encriptados para que solo el cliente y el servidor puedan desencriptarlos (en un mundo ideal, sin hablar de ataques MITM, etc.).

Como tal, nada en el protocolo detendrá los ataques de repetición.

Deberá incorporar algún tipo de mecanismo para evitar ataques de repetición (algo así como tokens que caduquen o tokens que invaliden una vez que el proceso haya finalizado) para asegurarse de que su aplicación no sea vulnerable a los ataques de repetición. Este mecanismo se puede usar con HTTP normal.

Oded
fuente
8
Esta respuesta parece sugerir lo contrario: stackoverflow.com/questions/2769992 /... ¿Alguna idea de por qué la diferencia?
Brian Armstrong
1
@BrianArmstrong Creo que el problema es que HTTPS tiene diferentes implementaciones como se menciona en la respuesta de Emirikol. Algunos protocolos evitan los ataques de repetición, mientras que otros no. (Ocurre cuando se realiza el intercambio de claves, el intercambio de claves RSA lo impide, pero el intercambio de claves anónimas no. Ref: tools.ietf.org/html/draft-ietf-tls-ssl-version3-00#appendix-F ) Entonces es por eso que los tokens ( como csrf) son importantes (el escenario de referencia está aquí: stackoverflow.com/a/2770135/4206925 )
MewX