Hi William, 

> Hi Valery,
> 
> It seems like a rare scene but I think it needs to be considered.
> Compared with ignoring cookie payload, how about adding N(COOKIE2) in the 9th 
> message? Then when
> Initiator received the 12th message, it'll know which cookie this message 
> matches with.

The problem with this approach is that the responder doesn't know whether 
initiator
is a legacy implementation or an updated one. 
The legacy implementation may treat any IKE_SA_INIT response containing COOKIE
as a request to re-send a request with this COOKIE, even it contains other 
payloads.
So, if the responder includes N(COOKIE) in every IKE_SA_INIT response it will 
cause 
infinite loop of resending request if initiator is legacy implementation.

Regards,
Valery.



> Regards & Thanks!
> Wei Pan
> 
> > -----Original Message-----
> > From: IPsec [mailto:ipsec-boun...@ietf.org] On Behalf Of Valery Smyslov
> > Sent: Tuesday, September 22, 2020 10:47 PM
> > To: IPsecME WG <ipsec@ietf.org>
> > Subject: [IPsec] Cookie logic results in failed authentication
> >
> > Hi,
> >
> > while performing stress tests, we ran into the problem, that is concerned
> > with the way cookies are handled in RFC7296.
> > The problem is that if network conditions are bad (high probability for
> > packets to be delayed, reordered or lost), then some SAs are not established
> > with AUTHENTICATION_FAILED error. Consider the following scenario:
> >
> >     Initiator                                                       
> > Responder
> > 1. HDR, SAi, KEi, Ni  -->
> > 2.                                                          -->     HDR, 
> > SAi, KEi, Ni
> >                                                                     (server 
> > has a large number of
> > half-open SAs, so it responds with cookie,
> >                                                                     that is 
> > generated using cookie
> > secret K1)
> > 2. (message is delayed in the network)      ...     <--      HDR, N(COOKIE1)
> > 3. (client retransmits its original message)
> > HDR, SAi, KEi, Ni  -->
> > 4.                                                          -->     HDR, 
> > SAi, KEi, Ni
> >                                                                     (server 
> > has a large number
> > half-open SAs, so it responds with cookie,
> >                                                                     but the 
> > cookie generation secret
> > has been already changed, and becomes K2,
> >                                                                     that 
> > results in generating a new
> > cookie for the same request, COOKIE2)
> > 5.                                                          <--      HDR, 
> > N(COOKIE2)
> > 6. HDR, N(COOKIE2)   <--
> > 7. (client receives message and retransmits its request with COOKIE2)
> > HDR, N(COOKIE2), SAi, KEi, Ni    -->
> > 8.                                                          -->     HDR, 
> > N(COOKIE2), SAi, KEi, Ni
> >                                                                     (server 
> > verifies COOKIE2, it's OK,
> > since K2 is still the current secret)
> > 9. (message is delayed in the network)      ...     <--     HDR, SAr, KEr, 
> > Nr
> > 10. HDR, N(COOKIE1)   <--
> > 11. (eventually the delayed first message from the server with COOKIE1
> > reaches the client. Since the client doesn't know that COOKIE1 is stall, it
> > decides that it's fresher than COOKIE2, because it receives this message 
> > later,
> > so the client replaces cookie and resends its initial request with COOKIE1)
> > HDR, N(COOKIE1), SAi, KEi, Ni    -->    (this message get lost)
> > 12. HDR, SAr, KEr, Nr   <--
> > (eventually delayed server's response reaches the client. At this point the
> > client thinks that IKE_SA_INIT is completed and starts
> > IKE_AUTH)
> >
> > What is interesting in the above diagram: both the client and the server 
> > have
> > eventually completed IKE_SA_INIT, but they have different opinions on what
> > IKE_SA_INIT message from initiator to responder contains.
> > The client thinks that the server has responded to its most recently sent
> > message HDR, N(COOKIE1), SAi, KEi, Ni, while the server has never received
> > it and in fact has responded to HDR, N(COOKIE2), SAi, KEi, Ni.
> > As a result - while calculating AUTH payload they will have different 
> > inputs to
> > it and authentication will fail.
> >
> > Despite this diagram looking artificial, we did observe a noticeable number
> > of these errors during real stress tests (up to 5% of SAs failed with this 
> > error
> > in bad network conditions).
> >
> > What's particularly unfortunate with this:
> > 1. The bad network conditions may happen as a result of DDoS attack, which
> > also may cause cookie logic to be triggered on the server.
> >      So, the two pre-conditions - bad network and server under attack are
> > coupled.
> > 2. The most disappointing thing for me is that despite bad network
> > conditions, peers did manage to complete initial IKE exchanges,
> >      only to get "authentication failed" result.
> > 3. For customers this looks surprising - they have valid credentials, but 
> > from
> > time to time they receive "authentication failed"
> >      diagnostics without any clue why this happens.
> >
> > The root of the problem is that IKE_SA_INIT request may be retransmitted
> > with different content (different cookies) and the peers have no means to be
> > sure that they have send/receive identical messages. And later these 
> > possibly
> > different messages are used in AUTH payload calculation.
> >
> > I believe that the proper solution would be to exclude cookie from the AUTH
> > payload calculation.
> > It is verified by the responder using cookie generation secret and it is not
> > concerned with a client (the client did not generate it, just echoes it 
> > back).
> > However, this solution is obviously incompatible with RFC7296, so this is 
> > not
> > an option.
> >
> > Any opinions? Should this problem be addressed by the WG or ignored?
> >
> > Regards,
> > Valery.
> >
> >
> > _______________________________________________
> > IPsec mailing list
> > IPsec@ietf.org
> > https://www.ietf.org/mailman/listinfo/ipsec

_______________________________________________
IPsec mailing list
IPsec@ietf.org
https://www.ietf.org/mailman/listinfo/ipsec

Reply via email to