In message <00f801d0ca37$12d7d0d0$38877270$@rozanak.com>, "Hosnieh Rafiee" writes: > Hi Mark, > Sorry for my late response and thanks for sharing your experiment. I have > been busy so far... > > In your real world scenario, the place of attacker is missing. Your > experiment shows that how client and server uses this mechanism and how they > add the client and server cookie. But what it doesn't show is that how the > server reacts when the attacker is also doing its attack either at the same > time as the client request or at completely different time. > > And the question that I have asked and not answered is that how this > approach can additional protection to Response Rate Limit for the server > side to mitigate DNS amplification attack on client. > > As I understood from the previous discussions and the content of the draft, > there are some strong assumptions in the draft: > 1- Server stores client cookie for a short period of time (say some > seconds) before it returns the cookie error message to client if the client > cannot sends its query immediately after sending initial cookie message. > 2- The attacker is not aware of any previous communication between the > client and server > 3- server and client's cookie might be different for different request. > > Now, to show you why I am not convinced with the server_cookie, I give you a > simple example. Unfortunately, I didn't have time to change your > implementation to play the role of attacker so that in a same way show you > how I can attack your code. > > Scenario 1: according to [2]; Eve, my attacker, doesn't know what is going > on between Alice and server. But Eve knows the IP address of Alice. Eve > sends a DNS request with Alice's source address and includes a cookie > (client_cookie1) that she generated it herself. > Server neither knows Alice nor Eve and cannot identify them. Because this > approach cannot prevent IP spoofing. When server receives a DNS query > request with client_cookie1 from Eve, it generates a server_cookie1 and > submits it to Alice. > Eve repeats this process with new client_cookie_i where i={2,..., n}, and > submits these messages with Alice's source IP address to the server. If the > server still has the client_cookie1 in its memory and waiting for original > Alice to send it message, then since client_cookie_i <> client_cooki1, > server considers Eve's new messages with new cookies as new requests and > starts answering them with server cookie and Alice receives unrelated > message from the server. So, this means DNS amplification is still possible > because there is no way to authenticate Alice. DNS server only knows the > cookie. So, instead of improving the situation, only the draft changed the > attack to different type that is server_cookie amplification attack. ( of > course, since the attack is cookie amplification and cookies are edible... I > think everyone wants to be in place of Alice :-) ... ) > So, Eve is successful in attacking Alice as server_side cookie didn't help. > > Now, this is the same situation if at the same time Alice starts a query > request and Eve also starts its attack. S > > Now, if RRL is implemented in the server, then server_cookie doesn't have > any additional help to the server and only increase the message size and > processing time (although so small) for generating cookies.
The server can respond to with a BADCOOKIE response which adds only a server cookie to the size of the request. These too can be rate limited. This is minimal amplification which is about the equivalent of adding a single unsigned A record (12 bytes vs 16 bytes of the seerver cookie) to a response. Sending queries with fake cookies doesn't result in enough amplification to be worth the effort even without rate limiting. It is effectively a reflection attack, not a amplifying reflection attack and it keeps the followup transactions for Alice on UDP rather than switching them to TCP (which happens without cookies). Once Alice has a server cookie then the the server skips all the rate limiting on future transactions from Alice (but not the attacker) until the server cookie times out / is forgotten. Mark > Best, > Hosnieh > > > -----Original Message----- > > From: DNSOP [mailto:dnsop-boun...@ietf.org] On Behalf Of Mark Andrews > > Sent: Tuesday, July 21, 2015 7:19 AM > > Cc: DNSOP@ietf.org; Hosnieh Rafiee > > Subject: Re: [DNSOP] Review of draft: draft-ietf-dnsop-cookies > > > > > > Hosnieh, below is a real life use of cookies showing how they are used. > > > > Establish a cookie pair. Dig chooses a random value for the client > cookie. The > > server returns the client cookie along with the server cookie. The client > > cookie is checked and as it matched "good" is displayed. > > > > ; <<>> DiG 9.11.0pre-alpha <<>> +qr +header-only +cookie ;; global > options: > > +cmd ;; Sending: > > ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55152 ;; flags: rd ad; > > QUERY: 0, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 > > > > ;; OPT PSEUDOSECTION: > > ; EDNS: version: 0, flags:; udp: 4096 > > ; COOKIE: 9310320f2fa1e6e9 > > ;; QUESTION SECTION: > > > > ;; QUERY SIZE: 35 > > > > ;; Got answer: > > ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55152 ;; flags: qr rd; > > QUERY: 0, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; WARNING: recursion > > requested but not available > > > > ;; OPT PSEUDOSECTION: > > ; EDNS: version: 0, flags:; udp: 4096 > > ; COOKIE: 9310320f2fa1e6e9e0be33ca55adca652422864a7cc8b23b (good) > > ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Jul > 21 > > 14:28:21 EST 2015 ;; MSG SIZE rcvd: 51 > > > > Ask for isc.org using the cookie pair established above. You will not the > that > > client cookie is returned but there is a new server cookie. The client > cookie is > > checked to confirm that it the expected value and "good" > > is printed. > > > > ; <<>> DiG 9.11.0pre-alpha <<>> > > +cookie=9310320f2fa1e6e9e0be33ca55adca652422864a7cc8b23b isc.org > > +nobadcookie ;; global options: +cmd ;; Got answer: > > ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39845 ;; flags: qr rd > ra > > ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 > > > > ;; OPT PSEUDOSECTION: > > ; EDNS: version: 0, flags:; udp: 4096 > > ; COOKIE: 9310320f2fa1e6e90eebb3b455adcabf6153631b35e9055f (good) > > ;; QUESTION SECTION: > > ;isc.org. IN A > > > > ;; ANSWER SECTION: > > isc.org. 59 IN A 149.20.64.69 > > > > ;; Query time: 109 msec > > ;; SERVER: 127.0.0.1#53(127.0.0.1) > > ;; WHEN: Tue Jul 21 14:29:51 EST 2015 > > ;; MSG SIZE rcvd: 80 > > > > Ask for ietf.org using the initial cookie pair established above. Again > we get a > > new server cookie but the client cookie remains unchanged. > > > > ; <<>> DiG 9.11.0pre-alpha <<>> > > +cookie=9310320f2fa1e6e9e0be33ca55adca652422864a7cc8b23b ietf.org > > +nobadcookie ;; global options: +cmd ;; Got answer: > > ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10176 ;; flags: qr rd > ra > > ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 > > > > ;; OPT PSEUDOSECTION: > > ; EDNS: version: 0, flags:; udp: 4096 > > ; COOKIE: 9310320f2fa1e6e9d3a8b98e55adcb18873b8a4389876d3e (good) > > ;; QUESTION SECTION: > > ;ietf.org. IN A > > > > ;; ANSWER SECTION: > > ietf.org. 1562 IN A 4.31.198.44 > > > > ;; Query time: 243 msec > > ;; SERVER: 127.0.0.1#53(127.0.0.1) > > ;; WHEN: Tue Jul 21 14:31:20 EST 2015 > > ;; MSG SIZE rcvd: 81 > > > > Ask for isc.org using the cookie from the ietf.org transaction. > > > > ; <<>> DiG 9.11.0pre-alpha <<>> > > +cookie=9310320f2fa1e6e9e0be33ca55adca652422864a7cc8b23b isc.org > > +nobadcookie ;; global options: +cmd ;; Got answer: > > ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25652 ;; flags: qr rd > ra > > ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 > > > > ;; OPT PSEUDOSECTION: > > ; EDNS: version: 0, flags:; udp: 4096 > > ; COOKIE: 9310320f2fa1e6e9c721e37455adcb65ddaab534d313d697 (good) > > ;; QUESTION SECTION: > > ;isc.org. IN A > > > > ;; ANSWER SECTION: > > isc.org. 46 IN A 149.20.64.69 > > > > ;; Query time: 98 msec > > ;; SERVER: 127.0.0.1#53(127.0.0.1) > > ;; WHEN: Tue Jul 21 14:32:37 EST 2015 > > ;; MSG SIZE rcvd: 80 > > > > Now if I was to wait long enough before retrying the server would return > > BADCOOKIE as the server cookie will have expired. dig could then just > resend > > the query with the server cookie. > > > > Now there server can rate limit the BADCOOKIE responses or accept that it > > can be used as a reflector. Note you are no longer a amplifier. > > > > Now while the client has a valid server cookie it is not subject to rate > limiting > > or response size limiting unless the server has otherwise been configured > to > > do so. > > > > Now if I send a deliberately bad server cookie (7 changed to 8 at > > end) I will get BADCOOKIE returned (currently #ifdef out until we get a > > badcookie code point in the git repository). > > > > ; <<>> DiG 9.11.0pre-alpha <<>> > > +cookie=9310320f2fa1e6e9c721e37455adcb65ddaab534d313d698 > > +nobadcookie isc.org ;; global options: +cmd ;; Got answer: > > ;; ->>HEADER<<- opcode: QUERY, status: BADCOOKIE, id: 59408 ;; flags: qr > aa > > rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 > > > > ;; OPT PSEUDOSECTION: > > ; EDNS: version: 0, flags:; udp: 4096 > > ; COOKIE: 9310320f2fa1e6e9694856ae55add44dfa9fce2ea17b916a (good) ;; > > QUESTION SECTION: > > ;isc.org. IN A > > > > ;; Query time: 0 msec > > ;; SERVER: 127.0.0.1#53(127.0.0.1) > > ;; WHEN: Tue Jul 21 15:10:37 EST 2015 > > ;; MSG SIZE rcvd: 64 > > > > And if I let dig retry on BADCOOKIE showing the queries. > > > > ; <<>> DiG 9.11.0pre-alpha <<>> > > +cookie=9310320f2fa1e6e9c721e37455adcb65ddaab534d313d698 isc.org > > +qr ;; global options: +cmd ;; Sending: > > ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14321 ;; flags: rd ad; > > QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 > > > > ;; OPT PSEUDOSECTION: > > ; EDNS: version: 0, flags:; udp: 4096 > > ; COOKIE: 9310320f2fa1e6e9c721e37455adcb65ddaab534d313d698 > > ;; QUESTION SECTION: > > ;isc.org. IN A > > > > ;; QUERY SIZE: 64 > > > > ;; BADCOOKIE, retrying. > > ;; Sending: > > ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45311 ;; flags: rd ad; > > QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 > > > > ;; OPT PSEUDOSECTION: > > ; EDNS: version: 0, flags:; udp: 4096 > > ; COOKIE: 9310320f2fa1e6e9d2dbffae55add4d6e80616c008c6ab6a > > ;; QUESTION SECTION: > > ;isc.org. IN A > > > > ;; QUERY SIZE: 64 > > > > ;; Got answer: > > ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45311 ;; flags: qr rd > ra > > ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 > > > > ;; OPT PSEUDOSECTION: > > ; EDNS: version: 0, flags:; udp: 4096 > > ; COOKIE: 9310320f2fa1e6e975a21e9055add4d67e2fec58601d0df4 (good) > > ;; QUESTION SECTION: > > ;isc.org. IN A > > > > ;; ANSWER SECTION: > > isc.org. 59 IN A 149.20.64.69 > > > > ;; Query time: 108 msec > > ;; SERVER: 127.0.0.1#53(127.0.0.1) > > ;; WHEN: Tue Jul 21 15:12:54 EST 2015 > > ;; MSG SIZE rcvd: 80 > > > > -- > > Mark Andrews, ISC > > 1 Seymour St., Dundas Valley, NSW 2117, Australia > > PHONE: +61 2 9871 4742 INTERNET: ma...@isc.org > > > > _______________________________________________ > > DNSOP mailing list > > DNSOP@ietf.org > > https://www.ietf.org/mailman/listinfo/dnsop > -- Mark Andrews, ISC 1 Seymour St., Dundas Valley, NSW 2117, Australia PHONE: +61 2 9871 4742 INTERNET: ma...@isc.org _______________________________________________ DNSOP mailing list DNSOP@ietf.org https://www.ietf.org/mailman/listinfo/dnsop