<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc2119 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY rfc2616 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2616.xml">
<!ENTITY rfc2818 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2818.xml">
<!ENTITY rfc3205 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3205.xml">
<!ENTITY rfc3492 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3492.xml">
<!ENTITY rfc5070 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5070.xml">
<!ENTITY rfc5246 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5246.xml">
<!ENTITY draftRid PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.moriarty-post-inch-rid.xml'>
<!ENTITY draftServerCheck PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.saintandre-tls-server-id-check.xml'>


] >
<rfc ipr="trust200902" category="info" docName="draft-moriarty-post-inch-rid-transport-03.txt">
<?rfc compact="yes"?>
<?rfc subcompact="yes"?>
<?rfc toc="no"?>
<?rfc symrefs="yes"?>

<front>
  <title abbrev="RID Transport">
    Transport of Real-time Inter-network Defense (RID) Messages
  </title>
  <author initials="K." surname="Moriarty" fullname="Kathleen M. Moriarty">
    <organization abbrev="RSA">
      RSA, The Security Division of EMC
    </organization>
    <address>
      <postal>
        <street>174 Middlesex Turnpike</street>
        <city>Bedford MA</city>
        <code>01730</code>
        <country>United States</country>
      </postal>
      <email>Moriarty_Kathleen@EMC.com</email>
    </address>
  </author>
  <author initials="B." surname="Trammell" fullname="Brian H. Trammell">
    <organization abbrev="ETH Zurich">
      Swiss Federal Institute of Technology Zurich
    </organization>
    <address>
      <postal>
        <street>Gloriastrasse 35</street>
        <city>8092 Zurich</city>
        <country>Switzerland</country>
      </postal>
      <phone>+41 44 632 70 13</phone>
      <email>trammell@tik.ee.ethz.ch</email>
    </address>
  </author>
  <date month="June" day="30" year="2010"></date>
  <area>Security</area>
  <workgroup>INCH Working Group</workgroup>
  <abstract> 

    <t>The Incident Object Description Exchange Format (IODEF) defines a
    common XML format for document exchange, and Realtime Internetwork 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.</t>

  </abstract>
</front>

<middle>

  <section title="Introduction" anchor="intro-sec">

  <t>The <xref target="RFC5070">Incident Object Description Exchange Format
  (IODEF)</xref> 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 which can be easily parsed.</t>

  <t>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, <xref
  target="I-D.moriarty-post-inch-rid">Real-time Inter-network Defense
  (RID)</xref> do 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 <xref target="RFC2616">HTTP</xref>
  Request and Response messages transported over <xref
  target="RFC5246">TLS</xref> (herein, HTTP/TLS). Note that any IODEF
  message may also be transported using this mechanism, by sending it as a RID
  Report message.</t>

  </section>
 
  <section title="Terminology" anchor="terminology-sec">

    <t>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 <xref
    target="RFC2119"/>.</t>

  </section>

  <section title="Transmission of RID Messages over HTTP/TLS"
  anchor="rid-https-sec">

    <t>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).</t>

    <t><xref target="RFC3205">BCP 56</xref> 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.</t>

    <t>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 [IANA NOTE: assigned port goes here]. Every RID system participating
    in a consortium MUST listen for HTTP/TLS connections on the assigned
    port.</t>

    <t>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.</t>

    <t><xref target="ridpairs_tab"/> 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.</t>

    <t>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 connect to the requesting RID
    system and sending the RID reply in an HTTP Request at a later time. 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.</t>

    <t>While a RID system SHOULD return the reply in an HTTP Response if it is
    available immediately or within a generally accepted HTTP client time out
    (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.</t>

    <t>RID systems accepting a callback message in an HTTP Request MUST
    return 202 Accepted.</t>

    <t><xref target="ridpairs_tab"/> lists the allowable request/response pairs for
    RID.</t>

      <texttable anchor="ridpairs_tab"> 
        <ttcol align="left">Request RID type</ttcol>
        <ttcol align="center">Callback</ttcol>
        <ttcol align="left">Result</ttcol>
        <ttcol align="left">Response RID type</ttcol> 
        <c>TraceRequest</c><c></c><c>200</c><c>RequestAuthorization</c>
        <c>TraceRequest</c><c></c><c>200</c><c>Result</c>
        <c>TraceRequest</c><c></c><c>202</c><c>[empty]</c>
        <c>RequestAuthorization</c><c>X</c><c>202</c><c>[empty]</c>
        <c>Result</c><c>X</c><c>202</c><c>[empty]</c>
        <c>Investigation</c><c></c><c>200</c><c>Result</c>
        <c>Investigation</c><c></c><c>202</c><c>[empty]</c>
        <c>Report</c><c>X</c><c>202</c><c>[empty]</c>
        <c>IncidentQuery</c><c></c><c>200</c><c>Report</c>
        <c>IncidentQuery</c><c></c><c>202</c><c>[empty]</c>
      </texttable>
    
    <t>For security purposes, RID systems SHOULD NOT return 3xx Redirect
    response codes, and MUST NOT follow any 3xx Redirect. When a RID System's
    address changes, contact point information within the consortium must be
    updated out of band.</t>

    <t>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.</t>

    <t>Note that HTTP provides no mechanism for signaling to a server that a
    response body is not a valid RID message. If an RID system receives and
    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.</t>

    <t>RID systems MUST support and SHOULD use HTTP/1.1 persistent connections
    as described in <xref target="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.</t>

    <t>RID systems MUST use TLS for confidentiality, identification, and
    strong mutual authentication as in <xref target="RFC2818"/>; see <xref
    target="security-sec"/> below for details.</t>

  </section>

  <section title="Security Considerations" anchor="security-sec">

    <t>All security considerations of related documents MUST be considered,
    especially the <xref target="RFC5070">Incident Object Description Exchange
    Format (IODEF)</xref> and <xref
    target="I-D.moriarty-post-inch-rid">Real-time Inter-network Defense
    (RID)</xref>. The transport described herein is built on the foundation of
    these documents; the security considerations contained therein are
    incorporated by reference.</t>

    <t>For transport confidentiality, identification, and authentication, TLS
    with mutual authentication MUST be used to secure the HTTP connection as
    in <xref target="RFC2818"/>. The session MUST use non-NULL cypher suites
    for authentication, integrity, and confidentiality; sessions MAY be
    renegotiated within these constraints. Although TLS implementations
    typically support the older 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 <xref target="RFC5246"/> for more.</t>
    
     <t>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") to 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 directly.</t>

    <t>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 <xref
    target="I-D.saintandre-tls-server-id-check"/>.</t>

  </section>

  <section title="IANA Considerations" anchor="iana-sec">

    <t>Consistent with <xref target="RFC3205">BCP 56</xref>, 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 [IANA NOTE: assign port number
    here]/tcp to RID with service name [IANA NOTE: assign service name here;
    request 'rid'] over HTTP/TLS.</t>

  </section>

<!--
  <section title="Examples" anchor="example-sec">
  
  <t>[TODO: determine whether we actually need examples here, since there is no content change]</t>

  </section>
-->

</middle>

<back>

<references title="Normative References">
  &rfc2119;
  &rfc2616;
  &rfc2818;
  &rfc5070;     
  &rfc5246;
  &draftRid;
</references> 

<references title="Informative References">
  &rfc3205;
  &draftServerCheck;     
</references> 

</back>
</rfc>