On Tue, 23 Nov 2010, Tero Kivinen wrote:

: >       EXPECTED_SEND_REQ_MESSAGE_ID payload and should not wait for a
: >       response to message 3 anymore.
: 
: This opens new attacks, because now receiving sync message with
: message ID zero has also other effects than just syncing the max
: message ID for future use, it also causes existing exchanges to be
: destroyed.
: 
: I.e. if host A and B have done sync earlier, meaning attacker has a
: copy of IKE SA Message ID sync message having message ID of zero, then
: attacker can wait for host B to start few exchanges and then reply the
: old sync message. If host A now immediately while processing the
: request destroys old existing exchanges then this allows attackers to
: delete exchanges at will.
: 
: Nonce in the Message ID sync message will not help in this case, but
: the failover counter will help, as in that case the host A will reject
: the replay because of the reused failover counter. 
: 
: > Are the Security Considerations in the draft valid anymore at all?  And 
: > are the nonce and failover count needed?  Yaron wanted to eliminate these, 
: > and I'm all for it.
: 
: I think we still need both. The failover counter protects against the
: attack I explained in this email (i.e. attacker replaying request),
: and nonce protects against the attacks where attacker tries to replay
: response message. 
:
I'd like to return to this failover counter.  It's the single issue in the 
protocol which I don't like.  The reasons are, first, that it makes an 
assumption how clustering and sync has been implemented, that is this 
value has to be synced in the cluster and the protocol cannot work without 
it, and second, that the protocol itself becomes vulnerable to the very 
issues it tries to combat, namely the fact that sync messages can be 
dropped.

Consider for example three node cluster where node 1 fails.  Node 2 
increments the failover counter but fails to sync it to node 3 (the packet 
is dropped or node 2 fails immediately itself).  Node 3 now hasn't the 
updated failover counter and will create a request that is effectively a 
replay.

The draft has the following text:

   In case multiple successive failover events and sync request getting
   lost, the failover count value at peer will not be updated and new
   standby member will become active with incremented failover count
   value.  So, peer can receive valid failover count value which is not
   just incremented by 1 in case of multiple failover.  Accepting
   incremented failover count within a range is allowed and increases
   interoperability.

Which is vague, and I don't even completely understand what it tries to 
tell here.  In case of multiple failovers the failover counter might *not* 
be incremented at all because the sync may have been dropped.

I think the protocol should not have a feature that depends on the sync 
itself working.  That's the very issue it tries to fix in HA, the fact 
that IKE SA message IDs in failover may be in desync.  The failover 
counter may be in desync as well.  And if implementations are expected to 
be lax about the value (due to the issues listed above) then it doesn't 
really provide replay protection either.

I think we should try to find alternative methods to combat the replay of 
requests.  Here's some thoughts:

 o Some kind of expiration timestamp to requests.  Not sure how easy or 
   practical it would be to implement but would not require any sync 
   expectations.

 o Request could always propose message_id + delta, so that if it is 
   replayed it's already too old and can be detected.  This is something
   that Yaron suggested as well, I believe.  It does have some issues,
   some of them already discussed earlier.

Some other way?

        Pekka


_______________________________________________
IPsec mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/ipsec

Reply via email to