Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stateless reset oracle defense #1386

Closed
martinthomson opened this issue May 24, 2018 · 3 comments
Closed

Stateless reset oracle defense #1386

martinthomson opened this issue May 24, 2018 · 3 comments
Labels
-transport design An issue that affects the design of the protocol; resolution requires consensus. has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list.

Comments

@martinthomson
Copy link
Member

After a bunch of discussion on this point, I think that the conclusion is that the only effective defense against being used as a stateless reset oracle is to ensure that an attacker can't influence choice of server instance that a packet arrives at.

If you have a cluster, there's a huge advantage in being able to reset a connection if a packet arrives for a connection you don't know about. It is often the case that this is because the instance that handled the connection is gone, or the routing in the cluster has shifted so that the connection ID now points at a different instance. In both cases, not sending a reset means that the connection will hang around being useless until it times out.

The problem is that if you have a cluster arrangement where instances can be directly targetted by an attacker, they can use one instance as a stateless reset oracle. Send that instance packets with the desired connection ID and they get back a token that they can use to kill the legitimate connection.

The best (and perhaps only) defense we have here is to recommend that clusters be arranged so that any group of instances that share a key cannot be individually targetted by an attacker without changing the connection ID.

This also means that the instance ID notion isn't that useful, except perhaps as a means of providing key separation between different clusters. Removing that from the draft will simplify things.

@martinthomson martinthomson added design An issue that affects the design of the protocol; resolution requires consensus. -transport labels May 24, 2018
@mikkelfj
Copy link
Contributor

There is another possible defense which also ties into allowing middleboxes to help prevent DDos attacks:

Including a small checksum in the header which might be successfully compromised every 64 attempt or so, but infrequent enough to support signficant traffic filtering. This checksum could be few bits in the header or the packet number.

The connecting client and the cluster will understand the checksum but without on-path access to an existing packet an attack will fail with signficant probability as it will be filtered similar to other DDoS attacks.

DDoS attacks are extremely common and frequently take down major infrastructure so there is a lot of value in being able to filter out those attack packets before they reach the endpoint.

@martinthomson
Copy link
Member Author

I think that we should consider two fixes here. As @mikkelfj says, we don't have any proof of receipt in a stateless reset, and that makes this problem much worse. The challenge there is that endpoints don't typically remember the last packet they sent.

@martinthomson
Copy link
Member Author

We discussed the secondary defense in Kista and concluded that any defense we might provide would be defeated easily by an attacker because the stateless reset oracle attack already depends on the attacker seeing packets for the connection. The attacker would consequently have the same information (if not more) than an endpoint that just lost state. We'll concentrate on the description of in-cluster routing defenses.

martinthomson added a commit that referenced this issue Jul 12, 2018
This enacts the plan discussed in #1386 and discussed in Kista.

Closes #1386.
martinthomson added a commit that referenced this issue Jul 30, 2018
This enacts the plan discussed in #1386 and discussed in Kista.

Closes #1386.
@mnot mnot added the has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list. label Mar 5, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
-transport design An issue that affects the design of the protocol; resolution requires consensus. has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list.
Projects
None yet
Development

No branches or pull requests

3 participants