Hi,

Am 14.03.2012 00:11, schrieb Marc Petit-Huguenin:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

On 03/13/2012 02:02 PM, André Becker wrote:
Hi,

there's an ambiguity in the current draft concerning the ConfigUpdate
mechanism. It remains unclear which node is responsible for checking the
configuration_sequence number (and, additionally, to generate the
appropriate error and the ConfigUpdateReq). Section 5.5.4 states:

The ConfigUpdate method is used to push updated configuration data across
the overlay.  Whenever a node detects that another node has old
configuration data, it MUST generate a ConfigUpdate request.

A ConfigUpdate request must be generated if an old configuration_sequence
number is detected, but when does a node check it? In section 5.3.2.1 it
says:

When a destination node receives a request, it MUST check that the
configuration_sequence field is equal to its own configuration sequence
number.  If they do not match, it MUST generate an error, either
Error_Config_Too_Old or Error_Config_Too_New. In addition, if the
configuration file in the request is too old, it MUST generate a
ConfigUpdate message to update the requesting node.

The critical term now is "destination node". If you search the document,
you'll find this term also in section 5.3.4. Here it is used for the node
that reassembles the fragments and checks the signature, meaning the last
node on the message's route. There are several reasons why this node cannot
or should not be meant by section 5.3.2.1. I'm pretty sure that the
configuration_sequence number must be checked by EACH peer, including
intermediate nodes. If only the last node checked the
configuration_sequence number, it would take significantly longer time for
new configuration data to spread in the overlay. Additionally, security
problems would arise, which is even more important. So my suggestion would
be to change the text of section 5.3.2.1 cited above to something
equivalent to the following:

Whenever a destination node or intermediate node receives a message, it
MUST check that the configuration_sequence field is equal to its own
configuration sequence number. If they do not match, it MUST generate an
error, either Error_Config_Too_Old or Error_Config_Too_New. In addition, if
the configuration file in the request is too old, it MUST generate a
ConfigUpdate message to update the last node that forwarded the message.

There was a similar discussion last year:

https://www.ietf.org/mail-archive/web/p2psip/current/msg06040.html
Thanks for the pointer. However, the discussion back then did not include the security aspects. I outlined a possible attack on RELOAD using the current ConfigUpdate mechanism in my bachelor thesis which is, unfortunately, written in german. But here a short summary of the attack:

An adversary who is part of the overlay can store an old message of a node he wants to attack (called the target node). He now changes the configuration_sequence number (which is not included in the signature) to an old value and sends this message to an arbitrary destination node in the overlay. What does this node do? It first generates an Error_Config_Too_Old which is sent to the adversary (by reversing the via list). The ConfigUpdateReq, however, cannot be sent by reversing the via list, it is a totally new request with new transaction_id. This request is sent to the creator of the message, which is not the adversary, but the the target node.

This means the adversary can cause an arbitrary node to send a message of big size, probably RELOADs biggest message to a target node he wants to attack. This node MUST check the message's signature, which is the potentially most expensive operation in RELOAD. Now the adversary can send it's, let's say "forged messages" (old messages with altered configuration_sequence) to a huge number of nodes over routes of different lengths (arranged with appropriate destination lists). These nodes that generate the ConfigUpdateReqs also have different distances to the target node. This means:

If correctly timed, the adversary can cause a huge number of messages of big size to arrive at the target node at approximately the same time, which definitely could result in a denial of service. The adversary needs only one single node to form the attack AND he cannot be detected by the attacked peer.

I hope this revives the discussion.

Regards,
  André
_______________________________________________
P2PSIP mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/p2psip

Reply via email to