In message <001501d0c1ec$52898050$f79c80f0$@rozanak.com>, "Hosnieh Rafiee" 
writes:
> Mark,
> 
> Thanks for your explanation. My comments are inline...
> 
> > -----Original Message-----
> > From: DNSOP [mailto:dnsop-boun...@ietf.org] On Behalf Of Mark Andrews
> 
> 
> > > If the victim node is behind NAT (servers are not behind NAT), and
> > > attacker is not in the same network, IMO, it cannot perform any
> > > amplification or DoS attack on the victim node. unless otherwise, the
> > > attacker is aware of the communication and ports used for the clients
> > > behind the NAT. Therefore, the use of this mechanism is not applicable
> > > in such situation. Therefore, I do not see any use case for nodes behind
> > NAT.
> > 
> > It can DoS the path to the NAT.  All the attacker needs is the public
> address of
> > the NAT.  For the DoS stream to go through the NAT assuming it is a
> stateful
> > NAT then yes the attacker needs more knowledge.
> 
> So, you want such mechanism is implemented in NAT devices to protect all
> clients in that network, right? If not, the implementation of that in a
> single client behind the NAT, doesn't help all the clients inside that NAT
> network because the target is a public address of this device and other
> devices are not seen. This is , of course, according to your argument. 

It helps those clients behind the NAT that implement cookies.
 
> Because if the attacker is using the public address of the NAT device then
> it is the NAT device who is the target of DoS.
> 
> Then, if the mechanism wants to be applicable, then NAT device is the device
> which needs to implement this mechanism and not each client and add this
> option to any packet passes it that targets a recursive DNS server or store
> the state of server cookie.

Having middle boxes modify packets is a *bad* *idea*.
 
> > > If the client has a global IP address, for example if it uses IPv6
> > > that usually the IP address is global, then the attacker has a
> > > possibility to perform the DoS attack even though the client uses this
> > method. because:
> > >
> > > - As far as I understood from the method, It is similar to enclosed
> > > figures (the algorithm is only arbitrary algorithm but this really does
> not
> > matter).
> > > The problem is that still amplification and spoofing or any attacks
> > > explained in the draft is possible The reasons are as follows:
> > >
> > > 1- client doesn't know the random number used by the server to
> > > calculate the servers' cookie response. if it needs to know then it
> > > returns to the barrier of sharing this value between clients and
> > > servers
> > 
> > The client sends queries only with client cookies initially.  These are
> treated
> > like any other unauthenticated query.  They are subject to rate limiting
> of
> > responses and sending back minimal responses (rcode=BADCOOKIE or TC=1).
> 
> If the server doesn't keep the state, then based on the algorithms explained
> in the draft, the server cannot differentiate between different clients and
> each time it might generate a new server_cookie for each requests (I had it
> in my previous message on the  figure attached to the message) because:
> [1] Server_cookie=Pseudo_function(client_cookie + server_secret) 
> 
> Therefore, even though, the client stores state about the server_cookie,
> each time for each query request, server will give it back a new cookie that
> clients cannot compare and calculate it and it is like a completely new
> query.

The client doesn't check the server cookie returned.  It just stores
it.  The client checks the client cookie.  The server checks the
server cookie.

> Furthermore, if we assume that the algorithm is like the following, so that
> the server produces, everytime, the same cookie for the client and if the
> assumption is that the client knows the IP address of the server, then the
> attacker still has the possibility to spoof the source IP of DNS server
> because there is no actual server authentication and no one can proof that
> the message comes from the legitimate DNS server.
> [2] Server_cookie=Pseudo_function(client_cookie) 

Server_cookie=Pseudo_function(client cookie+client address+server secret)

The client checks the client cookie *before* accepting the server cookie.

> So, in [2] the attacker once ask for a query from this DNS server, it can
> get to know how DNS server calculates the cookie and since it is not
> changeable over the time, the attacker can spoof the DNS server.

No.  The attacker doesn't see the reply traffic from the server.
 
> In other word, training phase in not useful in both scenario and keeping
> state on client doesn't also help to mitigate the attack. 

> > > 2- The server has no way to authenticate the client. so, it also
> > > accepts any arbitrary request from the attacker with forged IP
> > > address. Using cookie also doesn't help otherwise
> > > * the client uses the global IP address
> > > * the attacker could not sniff the first communication when the client
> > > sends its cookie
> > > * the server stores the cookie and its mapping to the IP address of
> > > the client (this doesn't make sense for NAT as there are more than one
> > > node behind a single Ip address)
> > 
> > Well the server does not store any state.  All state is stored by the
> client. The
> > server uses a the IP address and the client cookie and the server secret
> to
> > compute a server cookie.  This it adds to the response then discards.
> > 
> > > Furthermore:
> > > 3- the server doesn't know the random number used by client to
> > > calculate client_cookie therefore if the server doesn't store this
> > > mapping (that in public resolvers it does not make sense) the resolver
> > > cannot authenticate the client and it also accepts cookies from the
> > > attacker
> > 
> > Yes it can.  It has all the inputs required to re-compute the server
> > cookie when there is another query.
> 
> Unfortunately it cannot. According to my previous paragraph. I would like to
> think really optimistic but sorry I cannot as I put myself in the shoes of
> an attacker...

Yet, we have code that does this.
 
> > > * training data only temporary solve the problem, only in case the
> > > attacker doesn't sniff the trained data, but for longer period, both
> > > node (client and
> > > server) needs to store state information which is similar to problem
> > > of other security approaches such as DNS data security that needs to
> > > keep state information.
> > 
> > When the client discards the server cookie it has to re-establish it.  It
> is up to
> > the client to determine the resources it needs.
> 
> But this resources doesn't really help when the server uses a server_secret
> as an input to its function. The server cookie is different each time.
> Although, both uses Diffie-Hellman Key exchange algorithm (and of course
> need a phase for key cipher agreement and so on) to be on a same page, but
> it only works for one query and for each query there will be a new value and
> need a new exchange of the cookies.

No.
 
> It also make sense to have an experiment and compare the case where the
> client uses this approach and not using it. Because I think the time to
> calculate the cookie for server is the same, if it is not more, as the
> client try to process the query response from the DNS server and notice that
> it didn't ask it and it was only a DoS attack. 

The server is free to use different algorithms to generate it's key.
DNS COOKIE doesn't specify the exact algorithm to use.

> This is because you are adding another processing time which IMO, not
> necessary as I do not see it can protect the clients according to the
> arguments. 
> 
> > > The algorithm used by client and server to generate cookies doesn't
> > > change the attack circumstances. Because there are no way for the
> > > server to authenticate client. Furthermore, attacker is free to choose
> > > any IP address and generate its cookie. this will be result in higher
> > > chance for DoS attack since the server needs to calculate the cookie
> > > for each request, even though, the time is small but it is bigger than
> > > when the server does not use cookie
> > 
> > Yes, it uses some computing resources on the server.  You have to compare
> > them against looking up the cost of looking up the requested data.
> > 
> > > Unless otherwise, server store every single mapping of clients to
> > > their cookies (as explained earlier) which is not practical in public
> > > DNS resolvers specially for IPv6 address that the address space is
> > > large. what is the database to keep such mapping?? what is the search
> > > method?? this is also useless because the client IP might be temporary
> > > or random and changes or the clinet no longer use an IP address.
> > 
> > Which is why there is no storage on the server.
> > 
> > > So IMO, as a result it cannot provide the protection it explains in
> > > the draft.
> > 
> > It is designed to allow large responses to be returned to the client when
> they
> > are legitimate queries and not have large responses returned to the client
> > when they are forged.  This happens in conjuction with other filtering
> > techniques like response rate limiting and help by leaving the traffic on
> UDP
> > instead of moving it to TCP.
> 
> > > Furthermore, It appears that the assumption of this draft is that the
> > > attacker cannot sniff the client's and server's messages therefore, it
> > > cannot forge this message. IMO, this assumption is not true.
> > > If the attacker cannot sniff the messages between clients and servers,
> > > it doesn't know also to forge which IP address to have an efficient
> attack.
> > > IMO, it is not a true assumption. Attacker starts any attacks by
> > > having a pre-defined phase to know its victims...
> > 
> > The attacker starts out by knowing the IP address of the victim.
> > It then uses DNS servers as amplifiers.  In many cases knowing the IP
> address
> > of the victim also gives you their recursive server as that is well known.
> When
> > this happens you not only have garbage responses being sent to victim of
> the
> > amplification attack but you also have there queries being dropped.
> 
> If the victim is behind the NAT, the attacker only sees the NAT IP address. 
> If the recursive DNS server of the victim has a public address, the attacker
> can apply its attacks on NAT IP and not the single client IP (unless it also
> knows what ports map to xxx client)  So, IMO, the NAT device is target and
> therefore, implementation of this mechanism in client doesn't help as the
> bottleneck is on NAT device. 

It helps the clients that use it. 
 
> Best,
> Hosnieh
> 
-- 
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

Reply via email to