HTTPS é suficiente para evitar ataques de repetição?

10

Estou expondo alguns métodos REST em um servidor para um aplicativo móvel.

Gostaria de evitar que os usuários possam farejar como os métodos HTTP são criados (a partir do aplicativo móvel) e enviá-los novamente para o servidor. Exemplo:

  • O aplicativo móvel envia uma solicitação
  • O usuário usa um proxy e pode verificar o que está acontecendo na rede
  • O usuário vê e salva a solicitação que o celular acabou de enviar
  • => Agora não quero que o usuário possa enviar manualmente essa solicitação

É suficiente proteger o servidor por HTTPS?

MartinMoizard
fonte

Respostas:

7

HTTPS pode ser suficiente para proteger o servidor contra ataques de repetição (a mesma mensagem sendo enviada duas vezes) se o servidor estiver configurado para permitir apenas o protocolo TLS conforme a seção F.2 da rfc2246.

Os dados enviados são protegidos com um MAC antes da transmissão. Para impedir ataques de reprodução ou modificação de mensagens, o MAC é calculado a partir do segredo do MAC, o número de sequência [...]

Emirikol
fonte
11
Isso não é mais verdade no TLS 1.3 (rascunho) se os tickets 0-RTT estiverem ativados. Além disso, embora não esteja estritamente dentro do escopo da pergunta, um ataque de repetição ainda pode ser montado, mesmo com as versões TLS atuais, se você estiver usando um navegador da web .
21818 Alex Shpilkin
9

HTTPS significa simplesmente que os dados que estão sendo transportados são criptografados para que somente o cliente e o servidor possam descriptografá-los (em um mundo ideal, sem falar em ataques MITM, etc.).

Como tal, nada no protocolo impedirá a ocorrência de ataques de repetição.

Você precisará criar algum tipo de mecanismo de prevenção de ataques de repetição (algo como tokens expirados ou tokens inválidos após a conclusão do processo) para garantir que seu aplicativo não fique vulnerável a ataques de repetição. Este mecanismo pode ser usado com HTTP normal.

Oded
fonte
8
Essas respostas parecem sugerir o oposto: stackoverflow.com/questions/2769992/… Alguma idéia do porquê da diferença?
27630 Brian Armstrong
11
@BrianArmstrong Acho que a questão é que o HTTPS tem implementações diferentes, conforme mencionado pela resposta da Emirikol. Alguns protocolos impedem ataques de repetição, enquanto outros não. (Isso acontece durante a troca de chaves, a troca de chaves RSA impede, mas a troca anônima de chaves não. Ref: tools.ietf.org/html/draft-ietf-tls-ssl-version3-00#appendix-F ) É por isso que os tokens ( como o csrf) são importantes (o cenário de referência está aqui: stackoverflow.com/a/2770135/4206925 )
MewX 26/18