Transport of Real-time Inter-network Defense (RID) Messages
How Real-time Inter-network Defense messages travel between security teams: plain HTTP POSTs over mutually authenticated TLS.
Moriarty, K. and B. Trammell, "Transport of Real-time Inter-network Defense (RID) Messages", RFC 6046, DOI 10.17487/RFC6046, November 2010, <https://www.rfc-editor.org/info/rfc6046>.
@misc{rfc6046,
series = {Request for Comments},
number = 6046,
howpublished = {RFC 6046},
publisher = {RFC Editor},
doi = {10.17487/RFC6046},
url = {https://www.rfc-editor.org/info/rfc6046},
author = {K. Moriarty and B. Trammell},
title = {{Transport of Real-time Inter-network Defense (RID) Messages}},
pagetotal = 7,
year = 2010,
month = nov,
} RFC text
Contents
Internet Engineering Task Force (IETF) K. Moriarty
Request for Comments: 6046 EMC
Category: Informational B. Trammell
ISSN: 2070-1721 ETH Zurich
November 2010
Transport of Real-time Inter-network Defense (RID) Messages
Abstract
The Incident Object Description Exchange Format (IODEF) defines a
common XML format for document exchange, and Real-time Inter-network
Defense (RID) defines extensions to IODEF intended for the
cooperative handling of security incidents within consortia of
network operators and enterprises. This document specifies a
transport protocol for RID based upon the passing of RID messages
over HTTP/TLS (Transport Layer Security).
Status of This Memo
This document is not an Internet Standards Track specification; it is
published for informational purposes.
This document is a product of the Internet Engineering Task Force
(IETF). It represents the consensus of the IETF community. It has
received public review and has been approved for publication by the
Internet Engineering Steering Group (IESG). Not all documents
approved by the IESG are a candidate for any level of Internet
Standard; see Section 2 of RFC 5741.
Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
http://www.rfc-editor.org/info/rfc6046.
Copyright Notice
Copyright (c) 2010 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
1. Introduction
The Incident Object Description Exchange Format (IODEF) [RFC5070]
describes an XML document format for the purpose of exchanging data
between Computer Security Incident Response Teams (CSIRTs) or those
responsible for security incident handling for network providers
(NPs). The defined document format provides an easy way for CSIRTs
to exchange data in a way that can be easily parsed.
IODEF defines a message format, not a transport protocol, as the
sharing of messages is assumed to be out of scope in order to allow
CSIRTs to exchange and store messages in a way most suited to their
established incident handling processes. However, Real-time
Inter-network Defense (RID) [RFC6045] does require a specification of
a transport protocol to ensure interoperability among members in a
RID consortium. This document specifies the transport of RID
messages within HTTP [RFC2616] Request and Response messages
transported over Transport Layer Security (TLS) [RFC5246] (herein,
HTTP/TLS). Note that any IODEF message may also be transported using
this mechanism, by sending it as a RID Report message.
2. Terminology
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 [RFC2119].
3. Transmission of RID Messages over HTTP/TLS
This section specifies the details of the transport of RID messages
over HTTP/TLS. In this arrangement, each RID server is both an HTTP/
TLS server and an HTTP/TLS client. When a RID message must be sent,
the sending RID system connects to the receiving RID system and sends
the message, optionally receiving a message in reply. All RID
systems MUST be prepared to accept HTTP/TLS connections from any RID
peer with which it communicates, in order to support callback for
delayed replies (see below).
BCP 56 [RFC3205] contains a number of important considerations when
using HTTP for application protocols. These include the size of the
payload for the application, whether the application will use a web
browser, whether the protocol should be defined on a port other than
80, and if the security provided through HTTP/TLS suits the needs of
the new application.
It is acknowledged within the scope of these concerns that HTTP/TLS
is not ideally suited for RID transport, as the former is a client-
server protocol and the latter a message-exchange protocol; however,
the ease of implementation of RID systems over HTTP/TLS outweighs
these concerns. Consistent with BCP 56, RID systems will listen for
TCP connections on port 4590. Every RID system participating in a
consortium MUST listen for HTTP/TLS connections on the assigned port.
All RID messages sent in HTTP Requests MUST be sent using the POST
with a Request-URI of "/"; additional Request-URI paths are reserved
for future use by RID.
Table 1 lists the allowable RID message types in an HTTP Response for
a given RID message type in the Request. A RID system MUST be
prepared to handle an HTTP Response of the given type(s) when sending
the corresponding HTTP Request. A RID system MUST NOT send an HTTP
Response containing any RID message other than the one corresponding
to the one sent in the HTTP Request.
As the queries and replies in a RID message exchange may be
significantly separated in time, the receiving RID system MAY return
202 Accepted, terminate the connection, and at a later time connect
to the requesting RID system and send the RID reply in an HTTP
Request. This mechanism is referred to in this document as "RID
callback". When performing RID callback, a responding system MUST
connect to the network- and transport-layer addresses from which the
original request was sent; there is no mechanism in RID for
redirected callback.
While a RID system SHOULD return the reply in an HTTP Response if it
is available immediately or within a generally accepted HTTP client
timeout (about thirty seconds), this is not mandatory, and as such
RID systems MUST be prepared for a query to be met with a 202
Accepted, an empty Response body, a connection termination, and a
callback. Note that all RID messages require a response from the
receiving RID system, so a sending RID system can expect either an
immediate response or a callback.
RID systems accepting a callback message in an HTTP Request MUST
return 202 Accepted.
Table 1 lists the allowable request/response pairs for RID.
+----------------------+----------+--------+----------------------+
| Request RID type | Callback | Result | Response RID type |
+----------------------+----------+--------+----------------------+
| TraceRequest | | 200 | RequestAuthorization |
| TraceRequest | | 200 | Result |
| TraceRequest | | 202 | [empty] |
| RequestAuthorization | X | 202 | [empty] |
| Result | X | 202 | [empty] |
| Investigation | | 200 | Result |
| Investigation | | 202 | [empty] |
| Report | X | 202 | [empty] |
| IncidentQuery | | 200 | Report |
| IncidentQuery | | 202 | [empty] |
+----------------------+----------+--------+----------------------+
Table 1
For security purposes, RID systems SHOULD NOT return 3xx Redirection
response codes, and MUST NOT follow any 3xx Redirection. When a RID
system's address changes, contact point information within the
consortium must be updated out of band.
If a RID system receives an improper RID message in an HTTP Request,
it MUST return an appropriate 4xx Client Error result code to the
requesting RID system. If a RID system cannot process a RID message
received in an HTTP Request due to an error on its own side, it MUST
return an appropriate 5xx Server Error result code to the requesting
RID system.
Note that HTTP provides no mechanism for signaling to a server that a
response body is not a valid RID message. If a RID system receives
an improper RID message in an HTTP Response, or cannot process a RID
message received in an HTTP Response due to an error on its own side,
it MUST log the error and present it to the RID system administrator
for handling; the error logging format is an implementation detail
and is considered out of scope for this specification.
RID systems MUST support and SHOULD use HTTP/1.1 persistent
connections as described in [RFC2616]. RID systems MUST support
chunked transfer encoding on the HTTP server side to allow the
implementation of clients that do not need to precalculate message
sizes before constructing HTTP headers.
RID systems MUST use TLS for confidentiality, identification, and
strong mutual authentication as in [RFC2818]; see Section 4 below for
details.
4. Security Considerations
All security considerations of related documents MUST be considered,
especially the Incident Object Description Exchange Format (IODEF)
[RFC5070] and Real-time Inter-network Defense (RID) [RFC6045]. The
transport described herein is built on the foundation of these
documents; the security considerations contained therein are
incorporated by reference.
For transport confidentiality, identification, and authentication,
TLS with mutual authentication MUST be used to secure the HTTP
connection as in [RFC2818]. The session MUST use non-NULL
ciphersuites for authentication, integrity, and confidentiality;
sessions MAY be renegotiated within these constraints. Although TLS
implementations typically support the older Secure Socket Layer (SSL)
protocol, a RID peer MUST NOT request, offer, or use SSL 2.0, due to
known security vulnerabilities in this protocol; see Appendix E of
[RFC5246] for more.
Each RID consortium SHOULD use a trusted public key infrastructure
(PKI) to manage identities for RID systems participating in TLS
connections. At minimum, each RID system MUST trust a set of X.509
Issuer identities ("Certificate Authorities") [RFC5280] to directly
authenticate RID system peers with which it is willing to exchange
information, and/or a specific white list of X.509 Subject identities
of RID system peers.
RID systems MUST provide for the verification of the identity of a
RID system peer presenting a valid and trusted certificate, by
verifying the fully qualified domain name or other network-layer
identifier against that stored in the certificate, if available.
More information on best practices in peer identity verification is
available in [TLS-SERVER-ID].
5. IANA Considerations
Consistent with BCP 56 [RFC3205], since RID over HTTP/TLS is a
substantially new service, and should be controlled at the consortium
member network's border differently than HTTP/TLS, it requires a new
port number. IANA has assigned port 4590/tcp to RID with the service
name RID over HTTP/TLS.
6. References
6.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
[RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000.
[RFC5070] Danyliw, R., Meijer, J., and Y. Demchenko, "The Incident
Object Description Exchange Format", RFC 5070,
December 2007.
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
(TLS) Protocol Version 1.2", RFC 5246, August 2008.
[RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S.,
Housley, R., and W. Polk, "Internet X.509 Public Key
Infrastructure Certificate and Certificate Revocation
List (CRL) Profile", RFC 5280, May 2008.
[RFC6045] Moriarty, K., "Real-time Inter-network Defense (RID)",
RFC 6045, November 2010.
6.2. Informative References
[RFC3205] Moore, K., "On the use of HTTP as a Substrate", BCP 56,
RFC 3205, February 2002.
[TLS-SERVER-ID]
Saint-Andre, P. and J. Hodges, "Representation and
Verification of Domain-Based Application Service Identity
within Internet Public Key Infrastructure Using X.509
(PKIX) Certificates in the Context of Transport Layer
Security (TLS)", Work in Progress, October 2010.
Authors' Addresses
Kathleen M. Moriarty
RSA, The Security Division of EMC
174 Middlesex Turnpike
Bedford, MA 01730
US
EMail: Moriarty_Kathleen@EMC.com
Brian H. Trammell
Swiss Federal Institute of Technology Zurich
Gloriastrasse 35
8092 Zurich
Switzerland
Phone: +41 44 632 70 13
EMail: trammell@tik.ee.ethz.ch
AI ELI5
On this page
§1Why RID Needs a Transport
The Incident Object Description Exchange Format (IODEF, RFC 5070) defines an XML document format for sharing incident data between security response teams. It deliberately defines a message format and not a transport protocol, so teams can store and exchange messages in whatever way suits them.
Real-time Inter-network Defense (RID, RFC 6045) is different: it needs a transport specification so that all members of a RID consortium can interoperate. This document supplies one, carrying RID messages in HTTP requests and responses over Transport Layer Security (TLS). The text notes that any IODEF message can also be sent this way, by wrapping it as a RID Report message.
The format for the alert note was already agreed, but nobody had said how to deliver it. This document picks the delivery method.
§2RID over HTTP and TLS
Each RID system plays both roles: it is an HTTP/TLS client when it sends a message and an HTTP/TLS server when it receives one. Every RID system MUST be ready to accept connections from any RID peer it talks to, because delayed replies come back as new connections.
RID systems listen for TCP connections on port 4590, and every participant in a consortium MUST listen there. All RID messages in HTTP requests MUST use POST with a Request-URI of /. Other paths are reserved for future use by RID.
The document admits that HTTP/TLS is not an ideal fit, because HTTP is a client-server protocol while RID is a message-exchange protocol. It concludes that the ease of implementing RID systems over HTTP/TLS outweighs this concern. Systems MUST support HTTP/1.1 persistent connections (and SHOULD use them) and MUST support chunked transfer encoding on the server side.
Every office both sends and receives mail, so every office must keep one particular door open for deliveries. All packages are handed over the same way.
§3Requests, Responses and Callback
A RID system MUST be ready to handle only the response types listed for the request it sent, and MUST NOT answer with any RID message other than the one that corresponds to the request. For example, a TraceRequest may be answered with a RequestAuthorization, a Result, or an empty 202.
Queries and replies can be far apart in time. A receiver MAY therefore answer 202 Accepted with an empty body, close the connection, and later open a new connection to the original sender and send the reply as an HTTP request. This is called RID callback. The callback goes to the network and transport addresses the request came from; there is no mechanism for redirected callback. A system that receives a callback request MUST return 202 Accepted.
If the reply is available immediately or within a generally accepted HTTP client timeout (about thirty seconds), the receiver SHOULD send it in the HTTP response. Senders still MUST be prepared for a 202 and a later callback.
On errors, an improper RID message in a request gets a 4xx result and a message the receiver cannot process because of its own fault gets a 5xx. Because HTTP has no way to signal a bad response body, a bad RID message in a response MUST be logged and shown to the administrator. RID systems SHOULD NOT return 3xx redirections and MUST NOT follow them.
If the answer is ready, the receiver hands it back right away. If not, it says 'got it, I will call you back' and later phones the sender at the same number the question came from.
| Request RID type | Callback | Result | Response RID type |
|---|---|---|---|
| TraceRequest | - | 200 | RequestAuthorization |
| TraceRequest | - | 200 | Result |
| TraceRequest | - | 202 | [empty] |
| RequestAuthorization | X | 202 | [empty] |
| Result | X | 202 | [empty] |
| Investigation | - | 200 | Result |
| Investigation | - | 202 | [empty] |
| Report | X | 202 | [empty] |
| IncidentQuery | - | 200 | Report |
| IncidentQuery | - | 202 | [empty] |
§4TLS Requirements and Trust
RID systems MUST use TLS with mutual authentication, as in RFC 2818, for confidentiality, identification and authentication. Sessions MUST use non-NULL ciphersuites for authentication, integrity and confidentiality, and may be renegotiated within those limits. A RID peer MUST NOT request, offer or use SSL 2.0, because of its known vulnerabilities.
Each consortium SHOULD use a trusted public key infrastructure (PKI) to manage identities. At a minimum, each system MUST trust a set of X.509 certificate authorities, a specific white list of X.509 subject identities, or both, and MUST verify a valid peer's fully qualified domain name or other network-layer identifier against the certificate where available. The security considerations of IODEF and RID are incorporated by reference.
Both sides show ID cards before talking, and the conversation is in a code that outsiders cannot read. An old, broken kind of lock (SSL 2.0) is banned.
§5The Port Assignment
Following BCP 56 (RFC 3205), RID over HTTP/TLS is treated as a substantially new service that should be controlled at a consortium member's network border differently from ordinary HTTP/TLS. It therefore needs its own port number. IANA has assigned port 4590/tcp to RID, with the service name RID over HTTP/TLS.
Because this mail is special, it gets its own door number, 4590, so guards can treat it differently from ordinary web traffic.