| < draft-wkumari-dhc-capport-06.txt | draft-wkumari-dhc-capport-07.txt > | |||
|---|---|---|---|---|
| Network Working Group W. Kumari | Network Working Group W. Kumari | |||
| Internet-Draft Google | Internet-Draft Google | |||
| Intended status: Informational O. Gudmundsson | Intended status: Informational O. Gudmundsson | |||
| Expires: June 5, 2015 Shinkuro Inc. | Expires: June 25, 2015 Shinkuro Inc. | |||
| P. Ebersman | P. Ebersman | |||
| Comcast | Comcast | |||
| S. Sheng | S. Sheng | |||
| ICANN | ICANN | |||
| December 2, 2014 | December 22, 2014 | |||
| Captive-Portal identification in DHCP / RA | Captive-Portal identification in DHCP / RA | |||
| draft-wkumari-dhc-capport-06 | draft-wkumari-dhc-capport-07 | |||
| Abstract | Abstract | |||
| In many environments (such as hotels, coffee shops and other | In many environments (such as hotels, coffee shops and other | |||
| establishments that offer Internet service to customers), it is | establishments that offer Internet service to customers), it is | |||
| common to start new connections in a captive portal mode, i.e. highly | common to start new connections in a captive portal mode, i.e. highly | |||
| restrict what the customer can do until the customer has accepted | restrict what the customer can do until the customer has accepted | |||
| terms of service, provided payment information and / or | terms of service, provided payment information and / or | |||
| authenticated. | authenticated. | |||
| skipping to change at page 1, line 44 ¶ | skipping to change at page 1, line 44 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on June 5, 2015. | This Internet-Draft will expire on June 25, 2015. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2014 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 30 ¶ | skipping to change at page 2, line 30 ¶ | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 1.1. Requirements notation . . . . . . . . . . . . . . . . . . 3 | 1.1. Requirements notation . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Background . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Background . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2.1. DNS Redirection . . . . . . . . . . . . . . . . . . . . . 4 | 2.1. DNS Redirection . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.2. HTTP Redirection . . . . . . . . . . . . . . . . . . . . 4 | 2.2. HTTP Redirection . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.3. IP Hijacking . . . . . . . . . . . . . . . . . . . . . . 5 | 2.3. IP Hijacking . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3. The Captive-Portal DHCP Option . . . . . . . . . . . . . . . 5 | 3. The Captive-Portal DHCP Option . . . . . . . . . . . . . . . 5 | |||
| 4. The Captive-Portal RA Option . . . . . . . . . . . . . . . . 6 | 4. The Captive-Portal RA Option . . . . . . . . . . . . . . . . 6 | |||
| 5. Use of the Captive-Portal Option . . . . . . . . . . . . . . 6 | 5. Use of the Captive-Portal Option . . . . . . . . . . . . . . 7 | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | |||
| 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 8 | 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 9. Normative References . . . . . . . . . . . . . . . . . . . . 9 | 9. Normative References . . . . . . . . . . . . . . . . . . . . 9 | |||
| Appendix A. Changes / Author Notes. . . . . . . . . . . . . . . 9 | Appendix A. Changes / Author Notes. . . . . . . . . . . . . . . 9 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 10 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 1. Introduction | 1. Introduction | |||
| In many environments, users need to connect to a captive portal | In many environments, users need to connect to a captive portal | |||
| device and agree to an acceptable use policy and / or provide billing | device and agree to an acceptable use policy and / or provide billing | |||
| information before they can access the Internet. | information before they can access the Internet. | |||
| In order to present the user with the captive portal web page, many | In order to present the user with the captive portal web page, many | |||
| devices perform DNS and / or HTTP and / or IP hijacks. In addition | devices perform DNS and / or HTTP and / or IP hijacks. In addition | |||
| to being kludgy hacks, these techniques resemble attacks that DNSSEC | to being kludgy hacks, these techniques resemble attacks that DNSSEC | |||
| and TLS are intended to protect against. In an attempt to discourage | and TLS are intended to protect against. In an attempt to discourage | |||
| the deliberate subversion of basic security tools, this document | the deliberate subversion of basic security tools, this document | |||
| describes a DHCP option (Captive-Portal) and an IPv6 Router | describes a DHCP option (Captive-Portal) and an IPv6 Router | |||
| Advertisement (RA) extension that informs clients that they are | Advertisement (RA) extension that informs clients that they are | |||
| behind a captive portal device, and how to contact it. | behind a captive portal device, and how to contact it. | |||
| document describes a DHCP option (Captive-Portal) and an IPv6 Router | This document neither condones nor condemns the use of captive | |||
| Advertisement (RA) extension that informs clients that they are | portals; instead, it recognises that their apparent necessity, and | |||
| behind a captive portal device, and how to contact it. | attempts to improve the user experience. | |||
| This document neither condones nor condemns the use captive portals; | ||||
| instead, it recognises that their apparent necessity, and attempts to | ||||
| improve the user experience. | ||||
| The technique described in this document mainly improve the user | The technique described in this document mainly improve the user | |||
| experience when first connecting to a network behind a captive | experience when first connecting to a network behind a captive | |||
| portal. It may also help if the captive portal access times out | portal. It may also help if the captive portal access times out | |||
| after connecting, but this is less reliable. | after connecting, but this is less reliable. | |||
| 1.1. Requirements notation | 1.1. Requirements notation | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| skipping to change at page 4, line 37 ¶ | skipping to change at page 4, line 32 ¶ | |||
| all DNS requests listing the address of its web portal. Once the | all DNS requests listing the address of its web portal. Once the | |||
| user has authenticated the CP returns the "correct" addresses. | user has authenticated the CP returns the "correct" addresses. | |||
| This technique has many shortcomings. It fails if the client is | This technique has many shortcomings. It fails if the client is | |||
| performing DNSSEC validation, is running their own resolver, is using | performing DNSSEC validation, is running their own resolver, is using | |||
| a VPN, or already has the DNS information cached. | a VPN, or already has the DNS information cached. | |||
| 2.2. HTTP Redirection | 2.2. HTTP Redirection | |||
| In this implementation, the CP acts like a transparent HTTP proxy; | In this implementation, the CP acts like a transparent HTTP proxy; | |||
| but when it sees an HTTP request from an unauthenticated client, it | but when it sees an HTTP request from an unauthenticated client using | |||
| intercepts the request and responds with an HTTP status code 302 to | HTTP/1.0, it intercepts the request and responds with an HTTP status | |||
| redirect the client to the Captive Portal Login. | code 302 to redirect the client to the Captive Portal Login. If the | |||
| client is using HTTP/1.1, we respond with a status code 303 See | ||||
| Other. | ||||
| This technique has a number of issues, including: | This technique has a number of issues, including: | |||
| o It fails if the user is only using HTTPS. | o It fails if the user is only using HTTPS. | |||
| o It exposes various private user information, such as HTTP Cookies, | o It exposes various private user information, such as HTTP Cookies, | |||
| etc. | etc. | |||
| o It doesn't work if the client has a VPN and / or proxies their web | o It doesn't work if the client has a VPN and / or proxies their web | |||
| traffic to an external web proxy. | traffic to an external web proxy. | |||
| skipping to change at page 5, line 47 ¶ | skipping to change at page 5, line 47 ¶ | |||
| connect to. | connect to. | |||
| The URI MUST NOT contain a DNS name, in order to not require the CP | The URI MUST NOT contain a DNS name, in order to not require the CP | |||
| to access DNS queries from an unauthenticated user. Rather, if IPv4 | to access DNS queries from an unauthenticated user. Rather, if IPv4 | |||
| is supported in the network, one option's URI MUST contain an IPv4 | is supported in the network, one option's URI MUST contain an IPv4 | |||
| address literal, and if IPv6 is supported in the network, one | address literal, and if IPv6 is supported in the network, one | |||
| option's URI MUST contain an IPv6 address literal. Note that this | option's URI MUST contain an IPv6 address literal. Note that this | |||
| implies that a dual stack network would include two such options in | implies that a dual stack network would include two such options in | |||
| its DHCP reply or RA. | its DHCP reply or RA. | |||
| In many cases, a CP would like to collect billing infomation (for | ||||
| example, credit card information), and will want to do this over SSL/ | ||||
| TLS. In order to make this work, the web server on the IP literal | ||||
| can redirect to a URI containing a DNS name. The CP implementor/ | ||||
| operator will need to ensure that the client machine can access this | ||||
| URI and all service needed to make that work (for example, DNS, | ||||
| etc.). In this case, the operator/implementor will potentially need | ||||
| to deal with issues such as DNS tunnelling. | ||||
| Captive Portals are free to serve a HTTP redirect on this address to | ||||
| a DNS name (for example, so they can provide a TLS protected web page | ||||
| for credit card information). This will require that the client be | ||||
| able to perform DNS requests. | ||||
| [ED NOTE: Using an address literal is less than ideal, but better | [ED NOTE: Using an address literal is less than ideal, but better | |||
| than the alternatives. Recommending a DNS name means that the CP | than the alternatives. Recommending a DNS name means that the CP | |||
| would need to allow DNS from unauthenticated clients (as we don't | would need to allow DNS from unauthenticated clients (as we don't | |||
| want to force users to use the CP's provided DNS) and some users | want to force users to use the CP's provided DNS) and some users | |||
| would use this to DNS Tunnel out. This would make the CP admin block | would use this to DNS Tunnel out. This would make the CP admin block | |||
| external recursives).] | external recursives).] | |||
| 4. The Captive-Portal RA Option | 4. The Captive-Portal RA Option | |||
| [Ed: I'm far from an RA expert. I think there are only 8 bits for | [Ed: I'm far from an RA expert. I think there are only 8 bits for | |||
| skipping to change at page 7, line 12 ¶ | skipping to change at page 7, line 27 ¶ | |||
| vendors. This document provides a very high level example of what | vendors. This document provides a very high level example of what | |||
| could be done with this information. | could be done with this information. | |||
| Many operating systems / applications already include a "connectivity | Many operating systems / applications already include a "connectivity | |||
| test" to determine if they are behind a captive portal (for example, | test" to determine if they are behind a captive portal (for example, | |||
| attempting to fetch a specific URL and looking for a specific string | attempting to fetch a specific URL and looking for a specific string | |||
| (such as "Success")). These tests sometimes fail or take a long time | (such as "Success")). These tests sometimes fail or take a long time | |||
| to determine when they are behind a CP, but are usually effective for | to determine when they are behind a CP, but are usually effective for | |||
| determining that the captive portal has been satisfied. These tests | determining that the captive portal has been satisfied. These tests | |||
| will continue to be needed, because there is currently no definitive | will continue to be needed, because there is currently no definitive | |||
| signal from the captive portal that it has been satisfied. The | signal from the captive portal that it has been satisfied. [ Editor | |||
| note: It may be useful to write another document that specifies how a | ||||
| client can determine that it has passed the CP. This document could | ||||
| also contain advice to implmentors on only intercepting actually | ||||
| needed ports, how to advertise that the CP needs to be statisfied | ||||
| *again*, etc. This should not be done in this document though. ] The | ||||
| connectivity test may also need to be used if the captive portal | connectivity test may also need to be used if the captive portal | |||
| times out the user session and needs the user to re-authenticate / | times out the user session and needs the user to re-authenticate / | |||
| pay again. The operating system may still find the information about | pay again. The operating system may still find the information about | |||
| the captive portal URI useful in this case. | the captive portal URI useful in this case. | |||
| When the device is informed that it is behind a captive portal it | When the device is informed that it is behind a captive portal it | |||
| SHOULD: | SHOULD: | |||
| 1. Not initiate new IP connections until the CP has been satisfied | 1. Not initiate new IP connections until the CP has been satisfied | |||
| (other than those to the captive portal page and connectivity | (other than those to the captive portal browser session and | |||
| checks). Existing connections should be quiesced (this will | connectivity checks). Existing connections should be quiesced | |||
| happen more often than some expect -- for example, the user | (this will happen more often than some expect -- for example, the | |||
| purchases 1 hour of Internet at a cafe and stays there for 3 | user purchases 1 hour of Internet at a cafe and stays there for 3 | |||
| hours -- this will "interrupt" the user a few times). | hours -- this will "interrupt" the user a few times). | |||
| 2. Present a dialog box to the user informing them that they are | 2. Present a dialog box to the user informing them that they are | |||
| behind a captive portal and ask if they wish to proceed. | behind a captive portal and ask if they wish to proceed. | |||
| 3. If the user elects to proceed, the device should initiate a | 3. If the user elects to proceed, the device should initiate a | |||
| connection to the captive portal login page using a web browser | connection to the captive portal login page using a web browser | |||
| configured with a separate cookie store, and without a proxy | configured with a separate cookie store, and without a proxy | |||
| server. If there is a VPN in place, this connection should be | server. If there is a VPN in place, this connection should be | |||
| made outside of the VPN and the user should be informed that | made outside of the VPN and the user should be informed that | |||
| skipping to change at page 8, line 12 ¶ | skipping to change at page 8, line 31 ¶ | |||
| continue until the network changes, or a new DHCP message without | continue until the network changes, or a new DHCP message without | |||
| the CP is received. | the CP is received. | |||
| 6. IANA Considerations | 6. IANA Considerations | |||
| This document defines DHCPv4 Captive-Portal option which requires | This document defines DHCPv4 Captive-Portal option which requires | |||
| assignment of DHCPv4 option code TBA1 assigned from "Bootp and DHCP | assignment of DHCPv4 option code TBA1 assigned from "Bootp and DHCP | |||
| options" registry (http://www.iana.org/assignments/ bootp-dhcp- | options" registry (http://www.iana.org/assignments/ bootp-dhcp- | |||
| parameters/bootp-dhcp-parameters.xml), as specified in [RFC2939]. | parameters/bootp-dhcp-parameters.xml), as specified in [RFC2939]. | |||
| The IANA is also requested at assign an IPv6 RA Type code (TBA3) from | IANA is also requested to assign an IPv6 RA Option Type code (TBA3) | |||
| the [TODO] registry. Thanks IANA! | from the "IPv6 Neighbor Discovery Option Formats" registry. Thanks | |||
| IANA! | ||||
| 7. Security Considerations | 7. Security Considerations | |||
| An attacker with the ability to inject DHCP messages could include | An attacker with the ability to inject DHCP messages could include | |||
| this option and so force users to contact an address of his choosing. | this option and so force users to contact an address of his choosing. | |||
| As an attacker with this capability could simply list himself as the | As an attacker with this capability could simply list himself as the | |||
| default gateway (and so intercept all the victim's traffic), this | default gateway (and so intercept all the victim's traffic), this | |||
| does not provide them with significantly more capabilities. Fake | does not provide them with significantly more capabilities. Fake | |||
| DHCP servers / fake RAs are currently a security concern - this | DHCP servers / fake RAs are currently a security concern - this | |||
| doesn't make them any better or worse. | doesn't make them any better or worse. | |||
| skipping to change at page 9, line 5 ¶ | skipping to change at page 9, line 25 ¶ | |||
| The primary author has discussed this idea with a number of folk, and | The primary author has discussed this idea with a number of folk, and | |||
| asked them to assist by becoming co-authors. Unfortunately he has | asked them to assist by becoming co-authors. Unfortunately he has | |||
| forgotten who many of them were; if you were one of them, I | forgotten who many of them were; if you were one of them, I | |||
| apologize. | apologize. | |||
| Thanks to Vint Cerf for the initial idea / asking me to write this. | Thanks to Vint Cerf for the initial idea / asking me to write this. | |||
| Thanks to Wes George for supplying the IPv6 text. Thanks to Lorenzo | Thanks to Wes George for supplying the IPv6 text. Thanks to Lorenzo | |||
| and Erik for the V6 RA kick in the pants. | and Erik for the V6 RA kick in the pants. | |||
| Thanks for Fred Baker for detailed review and comments. Also great | Thanks to Fred Baker and Asbjorn Tonnesen for detailed review and | |||
| thanks to Joel Jaeggli for providing feedback and text. | comments. Also great thanks to Joel Jaeggli for providing feedback | |||
| and text. | ||||
| 9. Normative References | 9. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| Appendix A. Changes / Author Notes. | Appendix A. Changes / Author Notes. | |||
| [RFC Editor: Please remove this section before publication ] | [RFC Editor: Please remove this section before publication ] | |||
| From 06 to 07: | ||||
| o Incoroprated a bunch of comments from Asbjorn Tonnesen | ||||
| o Clarified that this document is only for the DHCP bits, not | ||||
| everything. | ||||
| o CP's *can* do HTTP redirects to DNS banes, as long as they allow | ||||
| access to all needed services. | ||||
| From 05 to 06: | From 05 to 06: | |||
| o Integrated comments from Joel, as below | o Integrated comments from Joel, as below | |||
| o Better introduction text, around the "kludgy hacks" section. | o Better introduction text, around the "kludgy hacks" section. | |||
| o Better "neither condones nor condems" text | o Better "neither condones nor condems" text | |||
| o Fingerprint text. | o Fingerprint text. | |||
| End of changes. 15 change blocks. | ||||
| 26 lines changed or deleted | 55 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||