View Issue Details

IDProjectCategoryView StatusLast Update
000902310000-002: SecuritySpecpublic2023-11-14 16:19
ReporterJim Luth Assigned ToPaul Hunkar  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Product Version1.05.03 
Fixed in Version1.05.03 
Summary0009023: Reverse Connect: Denial of Service protection not clear
Description

Part 2 says for Reverse Connect: "... the Client needs to validate that the connection is from an appropriate Server and not a denial of service attack. If the Server does not respond in a timely manner to the open SecureChannel request the Client should close the channel.".

This seems to imply that on every transport connection opened by the Server to the Client, the Client needs to go through the whole initiation sequence in Part 6, 7.1.3 Establishing a connection Figure 17, i.e. Open Connection - Reverse Hello - Hello - Acknowledge - Open Secure Channel Request - Open Secure Channel Response (except for CreateSession maybe).

But, there is also a text "When a SecureChannel is established, the Server shall immediately create a new socket and sends a new ReverseHello to ensure the Client is able to create another SecureChannel if it is needed.".

Why does it say "... if it is needed"?
It seems to me that in order to provide the denial of service attack mitigation described in Part 2, the client immediately has to create another SecureChannel, so that it can verify that the connection is from the appropriate server. It cannot, for example, wait until this second SecureChannelis needed, because that would allow any number of transport connections be opened by an attacker.

TagsNo tags attached.
Attached Files
image.png (6,074 bytes)   
image.png (6,074 bytes)   
Commit Version1.05.03
Fix Due Date2023-09-01

Relationships

related to 0008529 closedRandy Armstrong 10000-006: Mappings Reverse Connect: Denial of Service protection not clear 
related to 0009246 assignedPaul Hunkar Compliance Test Tool (CTT) Unified Architecture Reverse Connect: Denial of Service protection not clear 

Activities

Matthias Damm

2023-06-21 18:19

developer   ~0019611

I think if a client does not need a connection, it would not listen for new connections and server tcp connects would fail. A server need to retry to see if the client needs a connection.

Needs in this context is that the client want to create a conection to the server or want to reconnect to the server or is doing discovery.
If a client has all "expected connections" working, there is no need to listen for tcp connects on the server side.

The client would start to listen as soon as a reconnect, new connect or discovery is needed.

A server would try tcp connects but would only succeed if the client is waiting for a connect.

Jim Luth

2023-06-21 18:19

administrator   ~0019612

Part 6 needs to state there needs to be a finite number of open unused sockets that get recycled. Also the option of a whitelist of ServerURIs can help with DOS,

Jim Luth

2023-06-21 18:19

administrator   ~0019613

May need to clone to Part 2 once the Part 6 update is made.

Zbynek Zahradnik

2023-06-21 18:19

developer   ~0019614

If the Reverse Connect scenario should support multiple connections & SecureChannels between the same Client and Server, AND if the initiative to opening them should come from the Server, then I think we are missing a flag in the "Reverse Hello" message to distinguish whether

1) The server wants to create a new SecureChannel at this moment,
2) The server is opening a "back-up" connection as implied by the sentence "When a SecureChannel is established, the Server shall immediately create a new socket and sends a new ReverseHello to ensure the Client is able to create another SecureChannel if it is needed.

Without the flag, the Client cannot tell what it should do at that moment.
In the first case, it needs to proceed with "Hello" and the full sequence till SecureChannel handshake (and CreateSession etc.)
In the second case, it just needs to check the "Reverse Hello" request, and then sit idle on that connection until "... it is needed".

Matthias Damm

2023-06-21 18:19

developer   ~0019615

I think there is still a basic missunderstanding.

The server has never the initiative to open a secure channel. And the server does not know the client side requirements.

The server only knows that there is a client with a hostname or IP and port that potentially want to create one or more SecureChannels with the server.
The server tries to offer TCP/IP connections to the client, nothing else.
The client decides if he want to create a SecureChannel and a Session. Never the server.

The only difference between normal connect and reverse connect is the step to create the TCP/IP connection

Zbynek Zahradnik

2023-06-21 18:19

developer   ~0019616

This is not misunderstanding. I know what the spec says, and I understand your explanation, which is one way the spec can be read. I have intentionally started my note with "If ..." so that we can clarify whether the condition of the "If..." is intended to be true or not. You have confirmed that the "If..." condition is, in fact, meant to be false, and that's fine with me.

It then confirms my concerns about Denial of Service attacks. And we agreed to clarify the handling of additional Reverse Hello requests and when and how "idle" connections will be dropped.

Randy Armstrong

2023-06-21 18:19

administrator   ~0019617

Clients shall monitor the number of unused sockets per peer IP address. The Client shall immediately close unused sockets if the count exceeds the needs of the Client. An administrator may configure the Client with list of IP addresses which are allowed to establish reverse connections. The Client may build its own list of trusted IP addresses from the IP addresses used by active SecureChannels which have been authenticated.

Randy Armstrong

2023-06-21 18:19

administrator   ~0019618

Updated text:

Clients shall monitor the number of unused sockets used to send a ReverseHello but do not have an active SecureChannel per peer IP address. The Client shall immediately close unused these extra sockets if the count exceeds the needs of the Client . An administrator may configure the Client with list of IP addresses which are allowed to establish reverse connections. The Client may build its own list of trusted IP addresses from the IP addresses used by active SecureChannels which have completed the authentication process.

Jim Luth

2023-06-21 18:19

administrator   ~0019619

Agreed to reopen in Web meeting to add addtional text.

Randy Armstrong

2023-06-21 18:19

administrator   ~0019620

Added table describing the handshake agreed to in the meeting.

Jim Luth

2023-06-21 18:19

administrator   ~0019621

Agreed to 1.05.03 Draft text, but needs 1.04 Errata to close.

Jim Luth

2023-06-21 18:19

administrator   ~0019622

DoS for Reverse connect needs to be updated in Part 2 to match.

Zbynek Zahradnik

2023-06-22 06:35

developer   ~0019638

What I would like to see clarified in Part 2 is this: "... the Client needs to validate that the connection is from an appropriate Server and not a denial of service attack. If the Server does not respond in a timely manner to the open SecureChannel request the Client should close the channel.".
What does "needs to validate.... is from an appropriate Server..."?

After the changes made to Part 6, technically, I think the client is either allowed to verify just the ApplicationUri in ReverseHello message (which can be easily spoofed), and pause ("save the socket") before it needs the SecureChannel. Or, the client can establish the SecureChannel immediately - only which truly verifies that "the connection is from an appropriate Server".

Does Part 2 allow the client both of these approaches, or does it mandate that the SecureChannel must be created? Can it be made clearer?

Paul Hunkar

2023-11-08 04:54

developer   ~0020314

Updated text to point back to part 6 and that the optional checks should be performed

Jim Luth

2023-11-14 16:19

administrator   ~0020357

Agreed to changes edited in Web Meeting.

Issue History

Date Modified Username Field Change
2023-06-21 18:19 Jim Luth New Issue
2023-06-21 18:19 Jim Luth Status new => assigned
2023-06-21 18:19 Jim Luth Assigned To => Randy Armstrong
2023-06-21 18:19 Jim Luth Issue generated from: 0008529
2023-06-21 18:19 Jim Luth Note Added: 0019611
2023-06-21 18:19 Jim Luth Note Added: 0019612
2023-06-21 18:19 Jim Luth Note Added: 0019613
2023-06-21 18:19 Jim Luth Note Added: 0019614
2023-06-21 18:19 Jim Luth Note Added: 0019615
2023-06-21 18:19 Jim Luth Note Added: 0019616
2023-06-21 18:19 Jim Luth Note Added: 0019617
2023-06-21 18:19 Jim Luth Note Added: 0019618
2023-06-21 18:19 Jim Luth Note Added: 0019619
2023-06-21 18:19 Jim Luth Note Added: 0019620
2023-06-21 18:19 Jim Luth Note Added: 0019621
2023-06-21 18:19 Jim Luth Relationship added related to 0008529
2023-06-21 18:19 Jim Luth Note Added: 0019622
2023-06-21 18:20 Jim Luth Assigned To Randy Armstrong => Paul Hunkar
2023-06-21 18:20 Jim Luth Product Version 1.05.01 => 1.05.03 RC1
2023-06-21 18:20 Jim Luth Project 10000-006: Mappings => 10000-002: Security
2023-06-22 06:35 Zbynek Zahradnik Note Added: 0019638
2023-07-25 15:58 Jim Luth Commit Version => 1.05.04 RC
2023-07-25 15:58 Jim Luth Fix Due Date => 2023-09-01
2023-07-25 16:03 Jim Luth Product Version 1.05.03 RC1 => 1.05.03
2023-07-25 16:03 Jim Luth Commit Version 1.05.04 RC => 1.05.03
2023-11-08 04:47 Paul Hunkar Issue cloned: 0009246
2023-11-08 04:47 Paul Hunkar Relationship added related to 0009246
2023-11-08 04:54 Paul Hunkar Status assigned => resolved
2023-11-08 04:54 Paul Hunkar Resolution open => fixed
2023-11-08 04:54 Paul Hunkar Fixed in Version => 1.05.03 RC1
2023-11-08 04:54 Paul Hunkar Note Added: 0020314
2023-11-14 16:19 Jim Luth Status resolved => closed
2023-11-14 16:19 Jim Luth Fixed in Version 1.05.03 RC1 => 1.05.03
2023-11-14 16:19 Jim Luth Note Added: 0020357