RFC 7430
Analysis of Residual Threats and Possible Fixes for Multipath TCP (MPTCP)
Internet Engineering Task Force (IETF) ๐
RFC: 7430 โจ Title: Analysis of Residual Threats and Possible Fixes for Multipath TCP (MPTCP) Authors: M. Bagnulo (UC3M), C. Paasch (UCLouvain), F. Gont (SI6 Networks / UTN-FRH), O. Bonaventure (UCLouvain), C. Raiciu (UPB) Category: Informational ISSN: 2070-1721 Date: July 2015 Obsoletes / Updates: This document's header doesn't list anything it obsoletes or updates. ๐ธ
Abstract ๐ฅ
okay so this doc takes a long, hard look at the leftover threats for Multipath TCP (MPTCP) and brainstorms some ways to fix them ๐
Status of This Memo ๐ง
bestie, this one is not an Internet Standards Track spec. It's published for information only ๐ซถ
It's a product of the Internet Engineering Task Force (IETF) and it reflects the consensus of the IETF community. It went through public review and got the green light from the Internet Engineering Steering Group (IESG). Not every doc the IESG approves is a candidate for any level of Internet Standard, so check Section 2 of RFC 5741 for the details ๐
If you want the latest status, any errata, or a way to send feedback, head to http://www.rfc-editor.org/info/rfc7430 โจ
Copyright Notice ๐
Copyright (c) 2015 IETF Trust and the persons identified as the document authors. All rights reserved.
This doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they stand on the publication date. Please read these carefully, because they spell out your rights and restrictions for this document. Any Code Components pulled out of this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in the Simplified BSD License ๐
Table of Contents ๐ฆ
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. ADD_ADDR Attack . . . . . . . . . . . . . . . . . . . . . . . 4
2.1. Possible Security Enhancements to Prevent This Attack . . 10
3. DoS Attack on MP_JOIN . . . . . . . . . . . . . . . . . . . . 11
3.1. Possible Security Enhancements to Prevent This Attack . . 12
4. SYN Flooding Amplification . . . . . . . . . . . . . . . . . 12
4.1. Possible Security Enhancements to Prevent This Attack . . 13
5. Eavesdropper in the Initial Handshake . . . . . . . . . . . . 13
5.1. Possible Security Enhancements to Prevent This Attack . . 14
6. SYN/JOIN Attack . . . . . . . . . . . . . . . . . . . . . . . 14
6.1. Possible Security Enhancements to Prevent This Attack . . 14
7. Recommendations . . . . . . . . . . . . . . . . . . . . . . . 15
7.1. MPTCP Security Improvements for a Standards Track
Specification . . . . . . . . . . . . . . . . . . . . . . 15
7.2. Security Enhancements for MPTCP . . . . . . . . . . . . . 16
8. Security Considerations . . . . . . . . . . . . . . . . . . . 16
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 16
9.1. Normative References . . . . . . . . . . . . . . . . . . 16
9.2. Informative References . . . . . . . . . . . . . . . . . 17
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 18
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 19
1. Introduction โจ
okay so this doc is a sidekick to the threat analysis for Multipath TCP (MPTCP) [RFC6824], which lives in RFC 6181 [RFC6181] ๐ง RFC 6181 looked at the whole solution space for extending TCP to use multiple IP addresses per connection. The big goal was to learn from earlier multi-address protocols, especially Shim6 [RFC5533], the Stream Control Transmission Protocol (SCTP) [RFC4960], and Mobile IPv6 (MIP6) [RFC6275], so MPTCP could be designed with that wisdom. That means RFC 6181 came out before the real MPTCP spec (RFC 6824) was finished, and it wrote down some recommendations that the spec authors considered along the way ๐
This doc adds to RFC 6181 by running a vulnerability analysis on the mechanisms in RFC 6824. The point is to find possible security issues with MPTCP as it's currently specified, and then suggest security enhancements to fix them ๐ฅ
The security goal of RFC 6824 was to make MPTCP no worse than single-path TCP that's already out there. We still think that goal makes sense, so we analyze on the same terms. This doc covers all the threats specific to MPTCP (as defined in RFC 6824) that aren't possible with single-path TCP. So threats that TCP and MPTCP share are not covered here ๐ฆ
For each attack, we say what type of attacker it is. Attackers can be sorted by location like this:
- Off-path attacker. This attacker doesn't need to sit on any of the paths of the MPTCP session at any point during its lifetime. So an off-path attacker cannot eavesdrop on any of the packets of the MPTCP session ๐
- Partial-time on-path attacker. This attacker needs to be on at least one of the paths for part of the MPTCP session's lifetime, though not the whole thing. The attacker can be in the forward and/or backward directions for the initial subflow and/or other subflows. The exact needs get spelled out in each attack description ๐ธ
- On-path attacker. This attacker needs to be on at least one of the paths for the entire duration of the MPTCP session. The attacker can be in the forward and/or backward directions for the initial subflow and/or other subflows. The exact needs get spelled out in each attack description ๐
Attackers can also be sorted by what they actually do:
- Eavesdropper. This attacker can capture some of the packets of the MPTCP session to pull off the attack, but it can't change, discard, or delay any packet of the MPTCP session. It can be in the forward and/or backward directions for the initial subflow and/or other subflows. The exact needs get spelled out in each attack description ๐
- Active attacker. This attacker can change, discard, or delay some of the packets of the MPTCP session. It can be in the forward and/or backward directions for the initial subflow and/or other subflows. The exact needs get spelled out in each attack description ๐
This doc considers these combos of attackers:
- an on-path eavesdropper
- an on-path active attacker
- an off-path active attacker
- a partial-time on-path eavesdropper
- a partial-time on-path active attacker
For the rest of the doc, we describe the different attacks that work against the MPTCP protocol in RFC 6824 and suggest security enhancements for each one โจ
2. ADD_ADDR Attack ๐
Summary of the Attack ๐ซถ
- Type of attack: MPTCP session hijack enabling a man-in-the-middle (MitM) attack
- Type of attacker: off-path active attacker
Description ๐ง
this one is giving hijack energy ๐ญ The attacker uses the ADD_ADDR option defined in RFC 6824 to take over an ongoing MPTCP session, and then sets itself up to run a man-in-the-middle attack on that session ๐ฅ
Here's the setup. Host A, with address IPA, has one MPTCP session with Host B, with address IPB. The MPTCP subflow between IPA and IPB uses port PA on Host A and port PB on Host B. The tokens for the MPTCP session are TA and TB for Host A and Host B, respectively. Host C is the attacker, and it owns address IPC. Here's how the attack plays out:
- Host C sends a forged packet with source address IPA, destination address IPB, source port PA, and destination port PB. The packet has the ACK flag set. The TCP sequence number for the segment is i, and the ACK sequence number is j. We'll assume all of these are valid for now, and we'll get to what the attacker needs in order to figure them out later. The packet contains the
ADD_ADDRoption, which announces IPC as an alternative address for the connection. It also carries an 8-bit address identifier that doesn't give any real security benefit ๐ - Host B receives the
ADD_ADDRmessage and replies by sending a TCP SYN packet.
Note: The MPTCP specification [RFC6824] states that the host receiving the ADD_ADDR option may initiate a new subflow. If the host is configured so that it does not initiate a new subflow, the attack will not succeed. For example, on the current Linux implementation, the server does not create subflows. Only the client does so. ๐
The source address for this packet is IPB, and the destination address is IPC. The source port is PB', and the destination port is PA' (it is not required that PA=PA' nor that PB=PB'). The sequence number for this packet is the new initial sequence number for this subflow. The ACK sequence number isn't relevant because the ACK flag isn't set. The packet carries an MP_JOIN option and the token TA. It also carries a random nonce generated by Host B, called RB ๐ฆ
- Host C receives the
SYN+MP_JOINpacket from Host B and alters it. It changes the source address to IPC and the destination address to IPA. Then it sends the modified packet to Host A, impersonating Host B ๐ - Host A receives the
SYN+MP_JOINmessage and replies with aSYN/ACK+MP_JOINmessage. The packet has source address IPA and destination address IPC, along with all the other needed parameters. In particular, Host A computes a valid Hashed Message Authentication Code (HMAC) and places it in theMP_JOINoption ๐ - Host C receives the
SYN/ACK+MP_JOINmessage and changes the source address to IPC and the destination address to IPB. It sends the modified packet to IPB, impersonating Host A ๐ญ - Host B receives the
SYN/ACK+MP_JOINmessage. Host B verifies the HMAC of theMP_JOINoption and confirms that it's valid. It replies with anACK+MP_JOINpacket. The packet has source address IPB and destination address IPC, along with all the other needed parameters. The returnedMP_JOINoption contains a valid HMAC computed by Host B โ - Host C receives the
ACK+MP_JOINmessage from Host B and alters it. It changes the source address to IPC and the destination address to IPA. It sends the modified packet to Host A, impersonating Host B ๐ - Host A receives the ACK+MP_JOIN message and creates the new subflow. Bestie, at this point the attacker has managed to place itself as a MitM for one subflow of the existing MPTCP session ๐ณ๐ท๏ธ. It should be noted that the subflow between addresses IPA and IPB that does not flow through the attacker still exists, so the attacker has not completely intercepted all the packets in the communication (yet) ๐. If the attacker wishes to completely intercept the MPTCP session, it can do the following additional step.
- Host C sends two TCP RST messages. One TCP RST packet is sent to Host B, with source address IPA, destination address IPB, and source and destination ports PA and PB, respectively. The other TCP RST message is sent to Host A, with source address IPB, destination address IPA, and source and destination ports PB and PA, respectively. Both RST messages must contain a valid sequence number ๐ฏ. Note that figuring the sequence numbers to be used here for subflow A is the same difficulty as being able to send the initial ADD_ADDR option with valid sequence number and ACK value. If there are more subflows, then the attacker needs to find the sequence number and ACK for each subflow. At this point, the attacker has managed to fully hijack the MPTCP session ๐๐ซฃ.
Information required by the attacker to perform the described attack:
In order to perform this attack the attacker needs to guess or know the following pieces of information. The attacker needs this information for one of the subflows belonging to the MPTCP session โจ.
- the four-tuple {Client-side IP Address, Client-side Port, Server-side Address, Server-side Port} that identifies the target TCP connection
- a valid sequence number for the subflow
- a valid ACK sequence number for the subflow
- a valid address identifier for IPC
TCP connections are uniquely identified by the four-tuple {Source Address, Source Port, Destination Address, Destination Port}. Thus, in order to attack a TCP connection, an attacker needs to know or be able to guess each of the values in that four-tuple. Assuming the two peers of the target TCP connection are known, the Source Address and the Destination Address can be assumed to be known ๐ง .
Note: In order to be able to successfully perform this attack, the attacker needs to be able to send packets with a forged source address. This means that the attacker cannot be located in a network where techniques like ingress filtering [RFC2827] or source address validation [RFC7039] are deployed. However, ingress filtering is not as widely implemented as one would expect and hence cannot be relied upon as a mitigation for this kind of attack. ๐
Assuming the attacker knows the application protocol for which the TCP connection is being employed, the server-side port can also be assumed to be known. Finally, the client-side port will generally not be known and will need to be guessed by the attacker. The chances of an attacker guessing the client-side port will depend on the ephemeral port range employed by the client and whether or not the client implements port randomization [RFC6056] ๐ฒ.
Assuming TCP sequence number randomization is in place (see e.g., [RFC6528]), an attacker would have to blindly guess a valid TCP sequence number. That is,
RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND or RCV.NXT =<
SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND
As a result, the chances of an attacker succeeding will depend on the TCP receive window size at the target TCP peer ๐ช.
Note: Automatic TCP buffer tuning mechanisms have become common for popular TCP implementations; hence, very large TCP window sizes of values up to 2 MB could end up being employed by such TCP implementations. ๐
According to [RFC793], the acknowledgement number is considered valid as long as it does not acknowledge the receipt of data that has not yet been sent. That is, the following expression must be true:
SEG.ACK <= SND.NXT
However, for implementations that support [RFC5961], the following (stricter) validation check is enforced:
SND.UNA - MAX.SND.WND <= SEG.ACK <= SND.NXT
Finally, in order for the address identifier to be valid, the only requirement is that it needs to be different from the ones already being used by Host A in that MPTCP session, so a random identifier is likely to work ๐.
Given that a large number of factors affect the chances of an attacker successfully performing the aforementioned off-path attacks, we provide two general expressions for the expected number of packets the attacker needs to send to succeed in the attack: one for MPTCP implementations that support [RFC5961] and another for MPTCP implementations that do not ๐งฎ.
Implementations that do not support RFC 5961:
Packets = (2^32/(RCV_WND)) * 2 * EPH_PORT_SIZE/2 * 1/MSS
Where the new parameters are:
- Packets: Maximum number of packets required to successfully perform an off-path (blind) attack.
- RCV_WND: TCP receive window size (RCV.WND) at the target node.
- EPH_PORT_SIZE: Number of ports comprising the ephemeral port range at the "client" system.
- MSS: Maximum Segment Size, assuming the attacker will send full segments to maximize the chances of getting a hit.
Notes:
- The value "2^32" represents the size of the TCP sequence number space.
- The value "2" accounts for two different ACK numbers (separated by 2^31) that should be employed to make sure the ACK number is valid.
The following table contains some sample results for the number of required packets, based on different values of RCV_WND and EPH_PORT_SIZE for an MSS of 1500 bytes ๐.
+-------------+---------+---------+--------+---------+
| Ports \ Win | 16 KB | 128 KB | 256 KB | 2048 KB |
+-------------+---------+---------+--------+---------+
| 4000 | 699050 | 87381 | 43690 | 5461 |
+-------------+---------+---------+--------+---------+
| 10000 | 1747626 | 218453 | 109226 | 13653 |
+-------------+---------+---------+--------+---------+
| 50000 | 8738133 | 1092266 | 546133 | 68266 |
+-------------+---------+---------+--------+---------+
Table 1: Maximum Number of Packets for Successful Attack
Implementations that do support RFC 5961:
Packets = (2^32/(RCV_WND)) * (2^32/(2 * SND_MAX_WND)) *
EPH_PORT_SIZE/2 * 1/MSS
Where:
- Packets: Maximum number of packets required to successfully perform an off-path (blind) attack.
- RCV_WND: TCP receive window size (RCV.WND) at the target MPTCP endpoint.
- SND_MAX_WND: Maximum TCP send window size ever employed by the target MPTCP endpoint (MAX.SND.WND).
- EPH_PORT_SIZE: Number of ports comprising the ephemeral port range at the "client" system.
Notes:
- The value "2^32" represents the size of the TCP sequence number space.
- The parameter "MAX.SND.WND" is specified in [RFC5961].
- The value "2 * SND_MAX_WND" results from the expression "SND.NXT - SND.UNA - MAX.SND.WND", assuming that, for connections that perform bulk data transfers, "SND.NXT - SND.UNA == MAX.SND.WND". If an attacker targets a TCP endpoint that is not actively transferring data, "2 * SND_MAX_WND" would become "SND_MAX_WND" (and hence a successful attack would typically require more packets).
The following table contains some sample results for the number of required packets, based on different values of RCV_WND, SND_MAX_WND, and EPH_PORT_SIZE. For these implementations, only a limited number of sample results are provided (as an indication of how [RFC5961] increases the difficulty of performing these attacks) ๐ก๏ธ.
+-------------+-------------+-----------+-----------+---------+
| Ports \ Win | 16 KB | 128 KB | 256 KB | 2048 KB |
+-------------+-------------+-----------+-----------+---------+
| 4000 | 45812984490 | 715827882 | 178956970 | 2796202 |
+-------------+-------------+-----------+-----------+---------+
Table 2: Maximum Number of Packets for Successful Attack
Note:
In the aforementioned table, all values are computed with RCV_WND equal to SND_MAX_WND.
2.1. Possible Security Enhancements to Prevent This Attack
- To include the token of the connection in the ADD_ADDR option. This would make it harder for the attacker to launch the attack, since the attacker needs to either eavesdrop the token (so this can no longer be a blind attack) or to guess it, but a random 32-bit number is not easy to guess ๐. However, this would imply that any eavesdropper that is able to see the token would be able to launch this attack. This solution then increases the vulnerability window against eavesdroppers from the initial 3-way handshake for the MPTCP session to any exchange of the ADD_ADDR messages ๐ฌ.
- To include the HMAC of the address contained in the ADD_ADDR option. The key used for the HMAC is the concatenation of the key of the receiver and the key of the sender (in the same way they are used for generating the HMAC of the MP_JOIN message). This makes it much more secure, since it requires the attacker to have both keys (either by eavesdropping it in the first exchange or by guessing it). Because this solution relies on the key used in the MPTCP session, the protection of this solution would increase if new key generation methods are defined for MPTCP (e.g., using Secure Socket Layer (SSL) keys as has been proposed) ๐ฆ.
- To include the destination address of the SYN packet in the HMAC of the MP_JOIN message. As the attacker requires changing the destination address to perform the described attack, protecting it would prevent the attack. It wouldn't allow hosts behind NATs to be reached by an address in the ADD_ADDR option, even with static NAT bindings (like a web server at home) ๐ .
Of the options described above, option 2 is recommended as it achieves a higher security level while preserving the required functionality (i.e., NAT compatibility) ๐๐
3. DoS Attack on MP_JOIN โจ
- Type of attack: MPTCP denial-of-service attack, preventing the hosts from creating new subflows ๐
- Type of attacker: off-path active attacker ๐
okay so this one is about the initial SYN+MP_JOIN message in the 3-way handshake for extra subflows ๐ซถ Right now, when that SYN+MP_JOIN shows up, the receiving host has to create state for it. That's because the SYN+MP_JOIN carries the 32-bit token (which tells the receiver which MPTCP session this is) and the 32-bit random nonce used in the HMAC calculation. The third ACK of the handshake doesn't resend any of that info, so the host has to store state as soon as the SYN+MP_JOIN lands. Lowkey a big deal ๐ญ
Say Host A and Host B have an MPTCP session going, with tokens TA and TB. An attacker sends a SYN+MP_JOIN to Host B using the valid token TB, and boom, Host B creates state. Each MPTCP session can only hold a certain number of these half-open connections, and that limit depends on the implementation ๐ธ The attacker just keeps sending SYN+MP_JOINs with different 5-tuples until the limit is full. The source address on the attack packets is probably forged, and it'll usually be an address that isn't in use. If it were a real address, the SYN/ACK from Host B would get a RST back from that node, which would clear the state at Host B, so the attacker wants a ghost address ๐ป For more on classic SYN flooding and the usual fixes, check out [RFC4987].
Once that limit is hit, Host A can't send any more SYN+MP_JOINs to Host B. Main character villain arc ๐
To pull this off, the attacker needs the token TB. A partial-time on-path eavesdropper can grab it by watching the 3-way handshake when an extra subflow is set up between Host A and Host B ๐ If the attacker is never on-path, they have to guess the 32-bit token instead ๐ฒ
3.1. Possible Security Enhancements to Prevent This Attack
Here's the glow-up idea ๐ฆ The third packet of the 3-way handshake could also carry the 32-bit token and the random nonce from the SYN+MP_JOIN. On top of that, Host B would generate its own random nonce in a reproducible way, like a hash of the 5-tuple + initial sequence number + local secret โจ That means Host B can reply to a SYN+MP_JOIN without creating any state. Then, when the third ACK arrives, Host B checks the HMAC and only then creates the state. Stateless until it's verified, bestie, it's giving security ๐
4. SYN Flooding Amplification ๐
- Type of attack: The attacker uses SYN+
MP_JOINmessages to amplify the SYN flooding attack. - Type of attacker: off-path active attacker
okay the vibe here is "amplifying a SYN flood" ๐ SYN flooding attacks [RFC4987] use SYN messages to drain the server's resources and stop new TCP connections from getting in. A popular defense is SYN cookies [RFC4987], which let the server handle the initial SYN without storing state.
With MPTCP, the initial SYN can also be handled statelessly with those SYN cookies ๐ But, as we just covered in the last section, SYN+MP_JOIN messages currently aren't handled statelessly. That opens a whole new attack vector ๐ฑ The attacker opens an MPTCP session with a regular SYN, which creates state, and then fires off as many SYN+MP_JOINs as the server will accept, each with a different combo of source address and source port. The server's resources get eaten up, but the attacker never has to create state on their end ๐ซ This is an amplification attack: the attacker only pays for the state of the initial SYN, while the server pays for the initial SYN plus the state for every single SYN+MP_JOIN that follows. Unfair, I know ๐
4.1. Possible Security Enhancements to Prevent This Attack
- The solution from the previous DoS attack on
MP_JOINwould also stop this one ๐ - Limiting the number of half-open subflows to a low number (e.g., three subflows) would also limit how much damage this attack can do ๐งฑ
5. Eavesdropper in the Initial Handshake ๐
- Type of attack: An eavesdropper present in the initial handshake, where the keys are exchanged, can hijack the MPTCP session at any time in the future.
- Type of attacker: partial-time on-path eavesdropper
so this is the sneaky one ๐ต๏ธโโ๏ธ The attacker is on the path while the initial 3-way handshake happens, which means they can learn the keys used in the MPTCP session. Then they can walk away from the path and still hijack the session later on. Iconic villain move, not gonna lie ๐ This weakness was spotted while designing the MPTCP security solution [RFC6181], and the threat was considered acceptable ๐คทโโ๏ธ
5.1. Possible Security Enhancements to Prevent This Attack
There are a bunch of techniques that could stop this attack, and each one comes with its own trade-offs โ๏ธ For now, we'll just list them and point you to some useful resources ๐
- Use of hash chains. Hash chains for MPTCP have been explored in [HASH-CHAINS].
- Use of SSL keys for MPTCP security, as described in [MPTCP-SSL].
- Use of Cryptographically Generated Addresses (CGAs) for MPTCP security. CGAs [RFC3972] have been used before to secure multi-addressed protocols like Shim6 [RFC5533] ๐ฆ
- Use of tcpcrypt [TCPCRYPT].
- Use of DNSSEC. DNSSEC has been proposed to secure the Mobile IP protocol [DNSSEC] ๐
6. SYN/JOIN Attack ๐
- Type of attack: An attacker that can intercept the SYN/JOIN message can alter the source address being added.
- Type of attacker: partial-time on-path eavesdropper
okay bestie, the attacker is on the path when the SYN/JOIN exchange happens ๐ That lets them add any new address they want, just by swapping out the source address on the SYN/JOIN packet for one they pick. This weakness was also spotted while designing the MPTCP security solution [RFC6181], and the threat was considered acceptable ๐ซค
6.1. Possible Security Enhancements to Prevent This Attack
Here's the tea ๐ต This vulnerability is baked in because of the NAT support requirement. MPTCP has to work through NATs if it's going to be deployable on today's Internet. The thing is, NAT behavior looks exactly the same as this attack, so they're basically indistinguishable ๐ตโ๐ซ That makes it impossible to secure the source address, since locking it down would stop MPTCP from working through NATs. So the solution can't rely on securing the address. A more promising route is to protect the payload being exchanged, which limits how much damage the attack can do to the communication. Think tcpcrypt [TCPCRYPT] or something similar ๐
7. Recommendations ๐
The current MPTCP specification [RFC6824] is Experimental, and there's an ongoing effort to move it to Standards Track ๐ We think the MPTCP security work should follow two threads:
- The work on improving MPTCP security so that the MPTCP specification [RFC6824] can become a Standards Track document.
- The work on analyzing possible additional security enhancements to provide a more secure version of MPTCP.
We'll break these down in the subsections below ๐
7.1. MPTCP Security Improvements for a Standards Track Specification
We believe that for MPTCP to move to Standards Track, the ADD_ADDR attack must be addressed ๐ ๏ธ The fix we think should be adopted is adding an HMAC to the ADD_ADDR message, with the address being added used as input to the HMAC as well as the key. That would make ADD_ADDR as secure as the JOIN message ๐ Also, if we come up with a more secure way to create the key used in the MPTCP connection, then both MP_JOIN and ADD_ADDR get more secure automatically, since both use the same key in the HMAC. Two for one, periodt โจ
We think that's enough for MPTCP to progress as a Standards Track document, because its security level is similar to single-path TCP based on our earlier analysis ๐ It would also be exactly the same security level as other Standards Track documents. Specifically, it would match SCTP with dynamic addresses, as defined in [RFC5061]. The Security Considerations section of RFC 5061 (which is a Standards Track document) says:
The addition and or deletion of an IP address to an existing
association does provide an additional mechanism by which existing
associations can be hijacked. Therefore, this document requires
the use of the authentication mechanism defined in [RFC4895] to
limit the ability of an attacker to hijack an association.
Hijacking an association by using the addition and deletion of an
IP address is only possible for an attacker who is able to
intercept the initial two packets of the association setup when
the SCTP-AUTH extension is used without pre-shared keys. If such
a threat is considered a possibility, then the [RFC4895] extension
MUST be used with a preconfigured shared endpoint pair key to
mitigate this threat.
So this is the same security level MPTCP would reach with the ADD_ADDR security measure recommended in this document ๐ฏ
7.2. Security Enhancements for MPTCP
We also think it's worth exploring other ways to secure MPTCP ๐ธ As we said earlier, securing JOIN messages is fundamentally incompatible with NAT support, so a real fix probably involves protecting the data itself. Integrating MPTCP with approaches like tcpcrypt [TCPCRYPT], and integrating with SSL, both look promising ๐ง
8. Security Considerations ๐
This whole document is about security considerations for MPTCP. Literally the whole thing ๐ญ๐
9. References ๐
9.1. Normative References ๐
Okay bestie, these are the docs the spec needs you to have read, no skipping ๐ง
- [RFC793] Postel, J., "Transmission Control Protocol", STD 7, RFC 793, DOI 10.17487/RFC0793, September 1981,
http://www.rfc-editor.org/info/rfc793. - [RFC3972] Aura, T., "Cryptographically Generated Addresses (CGA)", RFC 3972, DOI 10.17487/RFC3972, March 2005,
http://www.rfc-editor.org/info/rfc3972. - [RFC4895] Tuexen, M., Stewart, R., Lei, P., and E. Rescorla, "Authenticated Chunks for the Stream Control Transmission Protocol (SCTP)", RFC 4895, DOI 10.17487/RFC4895, August 2007,
http://www.rfc-editor.org/info/rfc4895. - [RFC5061] Stewart, R., Xie, Q., Tuexen, M., Maruyama, S., and M. Kozuka, "Stream Control Transmission Protocol (SCTP) Dynamic Address Reconfiguration", RFC 5061, DOI 10.17487/RFC5061, September 2007,
http://www.rfc-editor.org/info/rfc5061. - [RFC5961] Ramaiah, A., Stewart, R., and M. Dalal, "Improving TCP's Robustness to Blind In-Window Attacks", RFC 5961, DOI 10.17487/RFC5961, August 2010,
http://www.rfc-editor.org/info/rfc5961. - [RFC6056] Larsen, M. and F. Gont, "Recommendations for Transport-Protocol Port Randomization", BCP 156, RFC 6056, DOI 10.17487/RFC6056, January 2011,
http://www.rfc-editor.org/info/rfc6056. - [RFC6528] Gont, F. and S. Bellovin, "Defending against Sequence Number Attacks", RFC 6528, DOI 10.17487/RFC6528, February 2012,
http://www.rfc-editor.org/info/rfc6528. - [RFC6824] Ford, A., Raiciu, C., Handley, M., and O. Bonaventure, "TCP Extensions for Multipath Operation with Multiple Addresses", RFC 6824, DOI 10.17487/RFC6824, January 2013,
http://www.rfc-editor.org/info/rfc6824.
9.2. Informative References ๐
These ones are the extra reading for when you want to go down the rabbit hole, no pressure ๐
- [DNSSEC] Kukec, A., Bagnulo, M., Ayaz, S., Bauer, C., and W. Eddy, "ROAM-DNSSEC: Route Optimization for Aeronautical Mobility using DNSSEC", 4th ACM International Workshop on Mobility in the Evolving Internet Architecture (MobiArch), 2009.
- [HASH-CHAINS] Diez, J., Bagnulo, M., Valera, F., and I. Vidal, "Security for multipath TCP: a constructive approach", International Journal of Internet Protocol Technology, Vol. 6, No. 3, 2011.
- [MPTCP-SSL] Paasch, C. and O. Bonaventure, "Securing the MultiPath TCP handshake with external keys", Work in Progress, draft-paasch-mptcp-ssl-00, October 2012.
- [RFC2827] Ferguson, P. and D. Senie, "Network Ingress Filtering: Defeating Denial of Service Attacks which employ IP Source Address Spoofing", BCP 38, RFC 2827, DOI 10.17487/RFC2827, May 2000,
http://www.rfc-editor.org/info/rfc2827. - [RFC4960] Stewart, R., Ed., "Stream Control Transmission Protocol", RFC 4960, DOI 10.17487/RFC4960, September 2007,
http://www.rfc-editor.org/info/rfc4960. - [RFC4987] Eddy, W., "TCP SYN Flooding Attacks and Common Mitigations", RFC 4987, DOI 10.17487/RFC4987, August 2007,
http://www.rfc-editor.org/info/rfc4987. - [RFC5533] Nordmark, E. and M. Bagnulo, "Shim6: Level 3 Multihoming Shim Protocol for IPv6", RFC 5533, DOI 10.17487/RFC5533, June 2009,
http://www.rfc-editor.org/info/rfc5533. - [RFC6181] Bagnulo, M., "Threat Analysis for TCP Extensions for Multipath Operation with Multiple Addresses", RFC 6181, DOI 10.17487/RFC6181, March 2011,
http://www.rfc-editor.org/info/rfc6181. - [RFC6275] Perkins, C., Ed., Johnson, D., and J. Arkko, "Mobility Support in IPv6", RFC 6275, DOI 10.17487/RFC6275, July 2011,
http://www.rfc-editor.org/info/rfc6275. - [RFC7039] Wu, J., Bi, J., Bagnulo, M., Baker, F., and C. Vogt, Ed., "Source Address Validation Improvement (SAVI) Framework", RFC 7039, DOI 10.17487/RFC7039, October 2013,
http://www.rfc-editor.org/info/rfc7039. - [TCPCRYPT] Bittau, A., Boneh, D., Hamburg, M., Handley, M., Mazieres, D., and Q. Slack, "Cryptographic protection of TCP Streams (tcpcrypt)", Work in Progress, draft-bittau-tcp-crypt-04, February 2014.
Acknowledgements ๐ซถ
Huge thank you to Mark Handley ๐ธ for his comments on the attacks and countermeasures in this doc, he's literally the GOAT for this one. Big thanks also to Alissa Cooper, Phil Eardley, Yoshifumi Nishida, Barry Leiba, Stephen Farrell, and Stefan Winter for their comments and reviews. You all made this so much better ๐
Marcelo Bagnulo, Christoph Paasch, Oliver Bonaventure, and Costin Raiciu are partially funded by the EU Trilogy 2 project โจ
Authors' Addresses ๐
The squad behind this doc, with their contact info, so you can slide into their inbox ๐ฆ
Marcelo Bagnulo
Universidad Carlos III de Madrid
Av. Universidad 30
Leganes, Madrid 28911
Spain
Phone: 34 91 6249500
Email: marcelo@it.uc3m.es
URI: http://www.it.uc3m.es
Christoph Paasch
UCLouvain
Email: christoph.paasch@gmail.com
Fernando Gont
SI6 Networks / UTN-FRH
Evaristo Carriego 2644
Haedo, Provincia de Buenos Aires 1706
Argentina
Phone: +54 11 4650 8472
Email: fgont@si6networks.com
URI: http://www.si6networks.com
Olivier Bonaventure
UCLouvain
Place Sainte Barbe, 2
Louvain-la-Neuve, 1348
Belgium
Email: olivier.bonaventure@uclouvain.be
Costin Raiciu
Universitatea Politehnica Bucuresti
Splaiul Independentei 313a
Bucuresti
Romania
Email: costin.raiciu@cs.pub.ro
๐ฆ where this page comes from
- ietf: rfc7430 2015-07
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms