Internet DRAFT - draft-lawrence-maxforward-problems
draft-lawrence-maxforward-problems
SIPPING WG S. Lawrence
Internet-Draft Pingtel Corp.
Expires: April 19, 2006 A. Hawrylyshen
Ditech Communications Corp.
R. Sparks
Estacado Systems
October 16, 2005
Problems with Max-Forwards Processing (and Potential Solutions)
draft-lawrence-maxforward-problems-00
Status of this Memo
By submitting this Internet-Draft, each author represents that any
applicable patent or other IPR claims of which he or she is aware
have been or will be disclosed, and any of which he or she becomes
aware will be disclosed, in accordance with Section 6 of BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
This Internet-Draft will expire on April 19, 2006.
Copyright Notice
Copyright (C) The Internet Society (2005).
Abstract
This document describes an attack against SIP networks where a small
number of legitimate, even authorized, SIP requests can stimulate
massive amounts of proxy-to-proxy traffic. The document analysis
ways to limit the impact of this kind of attack, and proposes changes
to the SIP protocol to help mitigate the risk. The document also
Lawrence, et al. Expires April 19, 2006 [Page 1]
Internet-Draft Max-Forwards Problems October 2005
proposes ways to improve diagnosis of failures caused by the hop
limit being reached.
The purpose of this document is to stimulate discussion of the
identified problem and proposed solutions. Much of the proposed
solution language appears normative, but implementors should not
treat the current document as such.
Comments are solicited, and should be directed to the SIPPING working
group list at 'sipping@ietf.org'.
Table of Contents
1. Conventions and Definitions . . . . . . . . . . . . . . . . . 3
2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Leveraging Forking to Flood A Network . . . . . . . . . . . . 3
4. The Attack in Practice - Observations from the SIPIT . . . . . 5
5. Mitigating the Risk . . . . . . . . . . . . . . . . . . . . . 6
6. Limiting Total Hops When Forking . . . . . . . . . . . . . . . 7
6.1. Restoring the Meaning of Max-Forwards . . . . . . . . . . 7
6.2. Max-Forward Split Weight Selection . . . . . . . . . . . . 9
6.3. Limitations and Issues with Splitting Max-Forwards . . . . 9
6.4. Parallel and Sequential Forking . . . . . . . . . . . . . 10
7. Diagnosing Hop Limit Exceeded Failures . . . . . . . . . . . . 10
7.1. Limitations of the 483 Error Response . . . . . . . . . . 11
7.2. Returning Useful Diagnostic Information in 483
Responses . . . . . . . . . . . . . . . . . . . . . . . . 12
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15
9. Security Considerations . . . . . . . . . . . . . . . . . . . 16
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 16
11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 16
11.1. Normative References . . . . . . . . . . . . . . . . . . . 16
11.2. Informative References . . . . . . . . . . . . . . . . . . 16
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 17
Intellectual Property and Copyright Statements . . . . . . . . . . 18
Lawrence, et al. Expires April 19, 2006 [Page 2]
Internet-Draft Max-Forwards Problems October 2005
1. Conventions and Definitions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC-2119 [RFC2119].
2. Introduction
This document demonstrates how to leverage parallel forking to cause
a small number (less than 10) of valid SIP requests to generate
extremely large (order 2^70) number of proxy-to-proxy messages.
The document proceeds to analyze possible ways to mitigate this
potential attack. It also proposes mechanisms for better diagnoses
of failures due to Max-Forwards being reached.
The purpose of this document is to stimulate discussion of this
problem. It is expected that additional potential solutions will be
brought forth and that the community will move quickly to amend
protocol and implementation behavior before the type of attack
discussed here becomes regularly exploited.
3. Leveraging Forking to Flood A Network
This section describes setting up the attack with a simplifying
assumption, that two accounts on each of two different proxy/
registrar servers that do not perform loop-detection are available to
the attacker. This assumption is not necessary for the attack, but
makes representing (and hopefully understanding) the scenario
simpler. The section will close with a discussion of how the attack
might be realized with a single account on a single service.
Consider two proxy/registrar services, P1 and P2, and four Addresses
of Record, a@P1, b@P1, a@P2, and b@P2. Using normal REGISTER
requests, establish bindings to these AoRs as follows (non-essential
details elided):
Lawrence, et al. Expires April 19, 2006 [Page 3]
Internet-Draft Max-Forwards Problems October 2005
REGISTER sip:P1 SIP/2.0
To: <sip:a@P1>
Contact: <sip:a@P2>, <sip:b@P2>
REGISTER sip:P1 SIP/2.0
To: <sip:b@P1>
Contact: <sip:a@P2>, <sip:b@P2>
REGISTER sip:P2 SIP/2.0
To: <sip:a@P2>
Contact: <sip:a@P1>, <sip:b@P1>
REGISTER sip:P2 SIP/2.0
To: <sip:b@P2>
Contact: <sip:a@P1>, <sip:b@P1>
With these bindings in place, introduce an INVITE to any of the four
AoRs, say a@P1. This request will fork to two requests handled by
P2, which will fork to four requests handled by P1, which will fork
to eight messages handled by P2, and so on:
|
a@P1
/ \
/ \
/ \
/ \
a@P2 b@P2
/ \ / \
/ \ / \
/ \ / \
a@P1 b@P1 a@P1 b@P1
/ \ / \ / \ / \
a@P2 b@P2 a@P2 b@P2 a@P2 b@P2 a@P2 b@P2
/\ /\ /\ /\ /\ /\ /\ /\
.
.
.
Figure 2
Requests will continue to propagate down this tree until Max-Forwards
reaches zero. If the endpoint and two proxies involved follow RFC
3261 recommendations, the tree will be 70 rows deep, representing
2^70 requests. The actual number of messages may be much larger if
the time to process the entire tree worth of requests is longer than
Timer C at either proxy. In this case, a storm of 408s, and/or a
storm of CANCELs will also be propagating through the tree along with
Lawrence, et al. Expires April 19, 2006 [Page 4]
Internet-Draft Max-Forwards Problems October 2005
the INVITEs. Remember that there are only two proxies involved in
this scenario - each having to hold the state for all the
transactions it sees (at least 2^69 simultaneously active
transactions near the end of the scenario).
The attack can be simplified to one account at one server if the
service can be convinced that contacts with varying attributes
(parameters, schemes, embedded headers) are sufficiently distinct,
and these parameters are not used as part of AOR comparisons when
forwarding a new request. Perhaps:
REGISTER sip:P1 SIP/2.0
To: <sip:a@P1>
Contact: <sip:a@P1;unknown-param=whack>,<sip:a@P1;unknown-param=thud>
4. The Attack in Practice - Observations from the SIPIT
Several participants at SIPIT 17 performed a variation of this
scenario during one of the multi-party test sessions. We began with
six proxies, each branching to the other 6. Two fell out within
minutes. Of the remaining four, two were processing the tree as
expected. The other two would occasionally exit and restart.
Interestingly, the nature of the message flow through the tree took
advantage of these restarting systems whenever they became available.
(Please Note: details about specific implementations are not
discussed outside the SIPIT - don't ask which proxy was which - the
point of this description is to show the fairly wide variation in the
implementation base on how proxies react to this scenario).
All of the proxies involved put a cap on Max-Forwards of 20. If they
receive a request with no Max-Forwards or a Max-Forwards greater than
20, any forwarded request will have a Max-Forwards of 20. It is
interesting that the implementation community landed on this value
with no apparent specification. The effect of folklore on the
implementation base is non-trivial.
We allowed the test to run for several hours. Extrapolating from
that time, we estimated that the scenario would complete in just
under 10 days. Admittedly, these proxies were heavily instrumented
for test, so performance may not have been representative of deployed
systems. But a system operating 10 times as fast would have taken a
full day to process a scenario with a depth of only 2**20. It's
almost within reason that these systems might survive the processing
and memory requirements of such a scenario. However, if the systems
involved use the recommendations in 3261, (and assuming they perform
linearly as the state they hold increases), it would take 3 trillion
Lawrence, et al. Expires April 19, 2006 [Page 5]
Internet-Draft Max-Forwards Problems October 2005
years to play out the results of a single INVITE.
5. Mitigating the Risk
Sue the offender : Past discussions of this kind of abuse have been
short-circuited with the argument that systems with accounts have
logs, and abusers can be punished. For this particular attack,
it's not clear this defense is credible. Systems that don't
recognize the situation and take corrective/preventative action
are likely to fail so badly that records of the setup may be lost.
(In the simple scenario, the registrations can occur in a
radically different timeframe than the invite. The invite itself
may have come from an innocent). It's even possible that the
scenario may be set up unintentionally. Furthermore, for some
existing deployments, the cost and auditability of an account is
simply an email address. Finding someone to punish may be
impossible. Finally, there are individuals who will not respond
to any threat of punishment, and the effect of even a single
instance of this kind of attack will be devastating to a service-
provider.
Put a smaller cap on Max-Forwards : The effect of the attack is
exponential with the entering Max-Forwards value. Turning this
value down limits the effect of the attack. This comes at the
expense of severely limiting the reach of requests in the network,
possibly to the point that existing architectures will begin to
fail. For this reason, this path towards mitigation is not
recommended.
Control the number of requests, not the depth of requests : This is
the essence of the proposal in Section 6. The idea is try to
bound the total number of requests an initial request can spawn in
the network instead of the maximum depth the request could be
forwarded to. The tradeoffs of this different design choice are
discussed in Section 6.
Return to loop-detection : The complexity of loop detection is
bounded by the square of the depth of the graph, which is
appealing when faced with an exponential alternative. If a
proposal like what is in Section 6 is unacceptable, reverting loop
detection as specified pre-3261 may be desirable. To avoid the
n^2 computational penalty in simple (what we hope are normal)
cases, this loop detection behavior might not be initiated until
the Via count exceeds a certain threshold.
Disallow registration to arbitrary contacts : The way registration
currently work is a key part of the success of the kind of attack
documented here. The ability to bind to an arbitrary destination
may not be a good thing. Instead, we may wish to limit
registration bindings to allow only binding to the network element
performing the registration, perhaps to the extreme of ignoring
Lawrence, et al. Expires April 19, 2006 [Page 6]
Internet-Draft Max-Forwards Problems October 2005
bits provided in the Contact in favor of transport artifacts
observed in the registration request. The ideas being explored in
the sip-outbound draft [outbound] are similar.
Deprecate forking : (No, Dean did not put us up to this). This
attack does not exist in a system that relies entirely on
redirection and initiation of new requests by the original
endpoint. Note, however, that per RFC 3261 section 8.3 [RFC3261]
it is the responsibility of such an endpoint to detect forwarding
loops between redirect servers. Doing so is not as
computationally complex for the system as a whole as loop
detection at proxies.
6. Limiting Total Hops When Forking
 In the face of the scenario described in Section 3, there
are cases where the Max-Forwards header does a very poor job of
limiting the number of messages on the transport network that are the
direct result of the original request. If we consider that a single
request is processed by a sequence of proxies, each of which
decrement the value in the Max-Forwards header while forwarding the
request to exactly one element, we see that Max-Forwards accurately
bounds the number of forwards (and hence the number of messages) that
are generated as a result of the original request.
In cases where there are proxies forking requests en-route to the
target UAS, following the suggestions in [RFC3261] for processing the
Max-Forwards header result not in an upper bound on total messages or
hops, but on network breadth or span. This means that for a typical
Max-Forwards value of 70, the number of messages in the network is
not seventy, but 2^70, which, absent pathological failures and
network load, results in an enormous number of messages being
generated from a single original request. This is for the simple
case illustrated in Figure 2 where requests fork to two target AoRs
for each hop, more fork targets at each hop increase the size of the
exponentiated base and result in scenarios that grow much more
rapidly. In this environment Max-Forwards is really bounding not the
number of forwards, but the depth of a tree containing an arbitrarily
large number of forwards.
6.1. Restoring the Meaning of Max-Forwards
To ensure that Max-Forwards is directly related to the number of
requests that can result from processing a request, the proxy can
elect to distribute the value of Max-Forwards between the resulting
forked branches.
Lawrence, et al. Expires April 19, 2006 [Page 7]
Internet-Draft Max-Forwards Problems October 2005
Example of Splitting Max-Forwards Between Two Branches
UA 1 Proxy 1 Proxy 2
F1 | INVITE (70) | |
|------------->| |
F2 | | INVITE (35) |
| |------------->|
F3 | | INVITE (35) |
| |------------->|
F1: Message from UA 1 to Proxy 1
INVITE sip:alice@example.com
...
Max-Forwards: 70
...
F2: Message from Proxy 1 to Proxy 2
INVITE sip:alice@example.com SIP/2.0
Via: SIP/2.0/TCP 10.1.1.20:59449;
branch=z9hG4bK-56ec69968c31f498c9a5573a00c8fc04.0
...
Max-Forwards: 35
...
F3: Message from Proxy 1 to Proxy 2
INVITE sip:alice@example.com SIP/2.0
Via: SIP/2.0/TCP 10.1.1.20:59449;
branch=z9hG4bK-56ec69968c31f498c9a5573a00c8fc04.1
...
Max-Forwards: 35
...
Figure 4: Splitting Max-Forwards
In general, the proxy would forward a request with original Max-
Forwards of M to the N targets, setting the Max-Forwards in the
outbound requests to:
M
--- - 1 if M > N and N > 1
N
When 2N >= M >= N, all outbound requests can be set to 1.
Lawrence, et al. Expires April 19, 2006 [Page 8]
Internet-Draft Max-Forwards Problems October 2005
When N is 1, outbound requests can have Max-Forwards set to M-1.
In no case should the sum of all N outgoing Max-Forwards (M_n) exceed
the value in the original request (M):
j
---
\
/ M_i <= M
---
i=1
Bounding the sum in this fashion ensures that the Max-Forwards number
has a direct impact on the number of requests and not just the span
of the network that eventually processes the request.
In the case where M < N, M/N-1 will be zero. This condition arises
when the number of branches the proxy intends to create exceeds Max-
Forwards. In this case, the implementation may choose to forward to
all branches, setting Max-Forwards to 1.
6.2. Max-Forward Split Weight Selection
There are a variety of mechanisms that a proxy might employ to select
the weighting of each fork branch, and thus the value to put in the
Max-Forwards header on that request. Similarly if a proxy/registrar
has full knowledge about the depth of the path to a particular URI
(to its own voice-mail servers for example), it might choose to only
apportion that much of the remaining hops to that branch. This is a
choice that would benefit from discussion in the community. The
naive M/N suggestion above may prove adequate, but it is merely a
sample mechanism for illustrating a potential solution.
6.3. Limitations and Issues with Splitting Max-Forwards
Splitting the value of Max-Forwards using the suggestions in
Section 6.1 results in limiting the depth that a request can reach
into a network. The resulting maximum depth is now approximately:
log ( M ) (or log base q of M) for q>1
q
M for q=1
Where q is the mean number of fork branches created at each proxy.
This could have implications in networks that rely on a large number
Lawrence, et al. Expires April 19, 2006 [Page 9]
Internet-Draft Max-Forwards Problems October 2005
of proxies or forwarded requests. If the initial default for Max-
Forwards is 70, and a typical branching factor is 2, this bounds the
depth of any search to 6. A branching factor of 3 results in a
maximum depth of 3. Fortunately, most existing architectures which
several proxies in a typical flow only branch at one or two of those
proxies. The rest forward to a single location. In this kind of
network, the simplistic calculation for apportioning Max-Forwards
values yields more useful depths: 17 for a branching factor of 2, 7
for a branching factor of three.
6.4. Parallel and Sequential Forking
An modification to the proposed solution would allow a service that
branches to one set of contacts in parallel, followed by a separate
parallel branch if the first fails to garner a 2xx or 6xx class
response to apportion the available hops to each of the two parallel
branches independently instead of dividing it among them. This
weakens the control over the maximum number of messages generated,
but improves the depth that can be reached with each of the parallel
searches. This resonates with the typical use case of the first
search trying to reach someone for live communication, and the second
to reach a messaging system. This weakening might be mitigated by
reducing Max-Forwards by one as the proxy proceeds to each new
parallel search for a particular request.
7. Diagnosing Hop Limit Exceeded Failures
When a request returns a 483 Hop Limit Exceeded response, it can be
difficult to determine where the problem lies. In the authors
experience, the problem is rarely that the target of the response was
actually further away than the Max-Forwards limit allows. The
problem is usually incorrect routing; often into a loop.
The change suggested in Section 6 will, in effect, often reduce the
maximum number of hops a request can traverse; if a request is forked
between two alternatives, the "range" of each is (possibly) reduced
by half. As this change is deployed, this may cause a temporary
increase in the incidence of 483 responses.
Lawrence, et al. Expires April 19, 2006 [Page 10]
Internet-Draft Max-Forwards Problems October 2005
7.1. Limitations of the 483 Error Response
In section 20.22 of RFC 3261 [RFC3261], it says:
The Max-Forwards header field must be used with any SIP method to
limit the number of proxies or gateways that can forward the request
to the next downstream server. This can also be useful when the
client is attempting to trace a request chain that appears to be
failing or looping in mid-chain.
In practice, there is too little information returned for this to be
of much use as a diagnostic. When a request has traversed a series
of proxies, the response follows the Vias back to the requester; in
the case of a typical 483 response it can be difficult to determine
even what server the response came from. Even when the rejecting
server does identify itself, it can be difficult to figure out why
the request got there.
Take a simple example request (all domain names have been changed):
INVITE sip:9999@example.com SIP/2.0
Via: SIP/2.0/TCP 10.1.1.20:59449
;branch=z9hG4bK-56ec69968c31f498c9a5573a00c8fc04
To: sip:9999@example.com
From: Sip Send <sip:sipsend@10.1.1.20>;tag=08e2f515
Call-ID: 159213b1aa5a67bc6eca6c4c2bad9f94@10.1.1.20
Cseq: 1 INVITE
Max-Forwards: 1
User-Agent: sipsend/0.02
Date: Wed, 12 Oct 2005 20:09:29 GMT
Content-Length: 0
this request was sent with the Max-Forwards value set to only 1 to
force the error response: it should traverse only the first outbound
proxy, and then be rejected by the next system that it encounters.
Lawrence, et al. Expires April 19, 2006 [Page 11]
Internet-Draft Max-Forwards Problems October 2005
The response received in this case was:
SIP/2.0 483 Too Many Hops
Via: SIP/2.0/TCP 10.1.1.20:59449
;branch=z9hG4bK-56ec69968c31f498c9a5573a00c8fc04
To: sip:9999@example.com;tag=-1574266585
From: Sip Send <sip:sipsend@10.1.1.20>;tag=08e2f515
Call-ID: 159213b1aa5a67bc6eca6c4c2bad9f94@10.1.1.20
Cseq: 1 INVITE
Content-Length: 0
There is no indication in the response of what server returned the
error. Even with the error only one hop beyond the first proxy,
there is no way to determine if that first proxy has routed the
request incorrectly.
7.2. Returning Useful Diagnostic Information in 483 Responses
In some ways, the Max-Forwards mechanism is analogous to the Time To
Live (TTL) field in an IP datagram. The TTL field was originally
[RFC0791] intended to be the maximum number of seconds that a
datagram should remain in the network. In practice, it has evolved
into a hop count, since each system forwarding a datagram was (is)
required to decrement the TTL by (at least) one. As an aid to
diagnosing problems, the Internet Control Message Protocol [RFC0792]
defines a "Time Exceeded Message" to be sent by any system that
discards an IP datagram because it was received with a TTL value of
zero. The Time Exceeded Message is sent to the source address of the
discarded datagram, and includes a field that carries the "Internet
Header + 64 bits of Original Data Datagram". This allows the sender
to see the datagram as it appeared where it was discarded. The
'traceroute' tool determines the route followed between a given pair
of IP addresses by sending a series of IP packets from the source to
the destination with gradually increasing TTL values. As each packet
reaches its limit, an ICMP Time Exceeded Message is returned by the
router that is discarding it, some checks on the route can be made
examining how the original packet arrived at each hop.
As an aid to diagnosing problems that result in 483 responses, it
would be useful to know how the failed request arrived at the
rejecting system; both what path it followed to get there, and what
the request looked like when it ran out of hops. One way to
accomplish this is to return the SIP header of the rejected message
to the sender. RFC 3261 (section 7.4) says: "All responses MAY
include a body.". RFC 3420 [RFC3420] defines the Content-Type
"message/sipfrag" to "allow SIP entities to make assertions about a
subset of a SIP message".
Lawrence, et al. Expires April 19, 2006 [Page 12]
Internet-Draft Max-Forwards Problems October 2005
When sending a 483 response, the response SHOULD be constructed with
a message body of type message/sipfrag containing as much as possible
of the SIP header from the rejected request.
Some systems may not want to expose as much information as is
available in a full set of SIP request headers. It is suggested in
this case that at least all of the Route and Via headers from the
request be returned in the message/sipfrag body. In our example,
this would at least enable the end user to determine which proxies
were in the routing loop and how the request arrived there.
One open source implementation has been generating 483 responses as
recommended above for over a year, and have explicitly tested both at
SIPit and in production use for any interoperability problems it
might cause. Other than implementations that cannot reassemble
fragmented UDP packets, none have been observed.
We will use this proposed change to diagnose an example routing
problem.
Here is a request sent to a proxy that implements the suggested
content in a 483 response.
INVITE sip:9999@interop.pingtel.com SIP/2.0
Via: SIP/2.0/TCP 10.1.1.20:40221
;branch=z9hG4bK-931ea14405e9da8c95cf4ed60a71f59f
To: sip:9999@interop.pingtel.com
From: Sip Send <sip:sipsend@10.1.1.20>;tag=612f37e7
Call-ID: 7a26fdad2cb40d48e81e10d6fce39825@10.1.1.20
Cseq: 1 INVITE
Max-Forwards: 9
User-Agent: sipsend/0.02
Date: Fri, 14 Oct 2005 15:35:53 GMT
Content-Length: 0
The target user '9999' is one that has been deliberately configured
to go into a forwarding loop alternating between two addresses
(neither of them the original target); a situation that is currently
difficult to diagnose. A relatively low Max-Forwards value of 9 was
chosen to improve readability.
Lawrence, et al. Expires April 19, 2006 [Page 13]
Internet-Draft Max-Forwards Problems October 2005
The response received was:
SIP/2.0 483 Too many hops
From: Sip Send <sip:sipsend@10.1.1.20>;tag=612f37e7
To: sip:9999@interop.pingtel.com
Call-Id: 7a26fdad2cb40d48e81e10d6fce39825@10.1.1.20
Cseq: 1 INVITE
Via: SIP/2.0/TCP 10.1.1.20:40221
;branch=z9hG4bK-931ea14405e9da8c95cf4ed60a71f59f
Content-Type: message/sipfrag
Content-Length: 1014
Date: Fri, 14 Oct 2005 15:27:47 GMT
INVITE sip:InfiniteLoop@interop.pingtel.com SIP/2.0
Record-Route: <sip:65.220.123.162:5080
;lr;a;t=612f37e7;s=96e09e8e8c93a8c60bf460029847f4b1>
Via: SIP/2.0/TCP 65.220.123.162
;branch=z9hG4bK-42e47bba67559bd9a3da1934a70bbc37
Via: SIP/2.0/TCP 65.220.123.162:5080
;branch=z9hG4bK-50d909f1209f7a820de85c7831846330
Via: SIP/2.0/TCP 65.220.123.162
;branch=z9hG4bK-994f162bc179fb75093166fabbfd13c7
Via: SIP/2.0/TCP 65.220.123.162:5080
;branch=z9hG4bK-708842ad6ea22f8fa6e39c503d3d803e
Via: SIP/2.0/TCP 65.220.123.162
;branch=z9hG4bK-50b581a06ca023ebcddbc82c5221149c
Via: SIP/2.0/TCP 65.220.123.14:1084
;branch=z9hG4bK994220327571023745d7996c13560a11.0
Via: SIP/2.0/TCP 65.220.123.14:40221
;branch=z9hG4bK-931ea14405e9da8c95cf4ed60a71f59f
To: sip:9999@interop.pingtel.com
From: Sip Send <sip:sipsend@10.1.1.20>;tag=612f37e7
Call-Id: 7a26fdad2cb40d48e81e10d6fce39825@10.1.1.20
Cseq: 1 INVITE
Max-Forwards: 0
User-Agent: sipsend/0.02
Date: Fri, 14 Oct 2005 15:35:53 GMT
Content-Length: 0
This response shows what server returned the error; its' address -
65.220.123.162 - is in the topmost Via of the returned request. It
also shows that the target URI has been changed to the user
'InfiniteLoop'.
Lawrence, et al. Expires April 19, 2006 [Page 14]
Internet-Draft Max-Forwards Problems October 2005
Resending the request with a hop limit one less than before (8),
shows that at that hop the request URI is to user 'LoopForever':
INVITE sip:LoopForever@interop.pingtel.com SIP/2.0
Record-Route: <sip:65.220.123.162:5080
;lr;a;t=4f18a30b;s=a9711e1704ccd5273955589c5fe94745>
Via: SIP/2.0/TCP 65.220.123.162
;branch=z9hG4bK-9b7f69455266f7cccd4ae8a285c0417c
Via: SIP/2.0/TCP 65.220.123.162:5080
;branch=z9hG4bK-b9d3e2aff65e68497849a2609bf8c373
Via: SIP/2.0/TCP 65.220.123.162
;branch=z9hG4bK-a178f4c5a3b8bbf35f979bc6c6d33022
Via: SIP/2.0/TCP 65.220.123.162:5080
;branch=z9hG4bK-3c098b8d58e4b6ce98fca3495263e795
Via: SIP/2.0/TCP 65.220.123.162
;branch=z9hG4bK-e7ceb06ed917d59024c905b3ee60e4cc
Via: SIP/2.0/TCP 65.220.123.14:1085
;branch=z9hG4bK8d685f52450e87da45d7996c13560a11.0
Via: SIP/2.0/TCP 65.220.123.14:56114
;branch=z9hG4bK-4ae5a563b0cbc76aef7be17115836dea
To: sip:9999@interop.pingtel.com
From: Sip Send <sip:sipsend@10.1.1.20>;tag=4f18a30b
Call-Id: 39106d45526cb5e78bf8dac378e05817@10.1.1.20
Cseq: 1 INVITE
Max-Forwards: 0
User-Agent: sipsend/0.02
Date: Fri, 14 Oct 2005 15:42:21 GMT
Content-Length: 0
Route: <sip:65.220.123.162:5070;transport=tcp;lr>
Reducing the limit one at a time (or starting from 1 and working
forward), the sender can determine that the InfiniteLoop/LoopForever
forwarding loop exists (in reality, of course, the user names would
rarely be such good hints), and where in the forwarding sequence the
original '9999' was changed to enter the loop.
Without the returned request headers, the 483 response does not help
the request originator (or any proxy administrator on the path)
diagnose why the error has occurred. With it, in this case a
diagnostic application running as a User Agent is able to at least
identify what the problem is and in which proxy.
8. IANA Considerations
None.
Lawrence, et al. Expires April 19, 2006 [Page 15]
Internet-Draft Max-Forwards Problems October 2005
9. Security Considerations
In that this draft describes a potential denial of service attack on
SIP proxies and user agents, and the networks they are on, along with
a proposed solution, it is all about security.
10. Acknowledgments
Thanks go to the implementors that subjected their code to this
scenario and helped analyze the results at SIPIT 17.
The discussion around limiting what kind of contact-binding
registration can create is motivated by a discussion with Cullen
Jennings.
11. References
11.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston,
A., Peterson, J., Sparks, R., Handley, M., and E.
Schooler, "SIP: Session Initiation Protocol", RFC 3261,
June 2002.
[RFC3420] Sparks, R., "Internet Media Type message/sipfrag",
RFC 3420, November 2002.
11.2. Informative References
[RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791,
September 1981.
[RFC0792] Postel, J., "Internet Control Message Protocol", STD 5,
RFC 792, September 1981.
[outbound]
Jennings, C., Ed. and R. Mahy, Ed., "Managing Client
Initiated Connections in the Session Initiation Protocol
(SIP)", July 2005.
Lawrence, et al. Expires April 19, 2006 [Page 16]
Internet-Draft Max-Forwards Problems October 2005
Authors' Addresses
Scott Lawrence
Pingtel Corp.
400 West Cummings Park
Suite 2200
Woburn, MA 01801
USA
Phone: +1 781 938 5306
Email: slawrence@pingtel.com
Alan Hawrylyshen
Ditech Communications Corp.
602 - 11 Ave SW
Suite 310
Calgary, Alberta T2R 1J8
Canada
Phone: +1 403 561 7313
Email: ahawrylyshen@ditechcom.com
Robert Sparks
Estacado Systems
17210 Campbell Road
Suite 250
Dallas, Texas 75254-4203
USA
Email: RjS@nostrum.com
Lawrence, et al. Expires April 19, 2006 [Page 17]
Internet-Draft Max-Forwards Problems October 2005
Intellectual Property Statement
The IETF takes no position regarding the validity or scope of any
Intellectual Property Rights or other rights that might be claimed to
pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights
might or might not be available; nor does it represent that it has
made any independent effort to identify any such rights. Information
on the procedures with respect to rights in RFC documents can be
found in BCP 78 and BCP 79.
Copies of IPR disclosures made to the IETF Secretariat and any
assurances of licenses to be made available, or the result of an
attempt made to obtain a general license or permission for the use of
such proprietary rights by implementers or users of this
specification can be obtained from the IETF on-line IPR repository at
http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights that may cover technology that may be required to implement
this standard. Please address the information to the IETF at
ietf-ipr@ietf.org.
Disclaimer of Validity
This document and the information contained herein are provided on an
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Copyright Statement
Copyright (C) The Internet Society (2005). This document is subject
to the rights, licenses and restrictions contained in BCP 78, and
except as set forth therein, the authors retain all their rights.
Acknowledgment
Funding for the RFC Editor function is currently provided by the
Internet Society.
Lawrence, et al. Expires April 19, 2006 [Page 18]