draft-ietf-opsec-ip-security-02.txt | draft-ietf-opsec-ip-security-03.txt | |||
---|---|---|---|---|
Operational Security Capabilities F. Gont | Operational Security Capabilities F. Gont | |||
for IP Network Infrastructure UK CPNI | for IP Network Infrastructure UK CPNI | |||
(opsec) February 20, 2010 | (opsec) April 13, 2010 | |||
Internet-Draft | Internet-Draft | |||
Intended status: Informational | Intended status: Informational | |||
Expires: August 24, 2010 | Expires: October 15, 2010 | |||
Security Assessment of the Internet Protocol version 4 | Security Assessment of the Internet Protocol version 4 | |||
draft-ietf-opsec-ip-security-02.txt | draft-ietf-opsec-ip-security-03.txt | |||
Abstract | Abstract | |||
This document contains a security assessment of the IETF | This document contains a security assessment of the IETF | |||
specifications of the Internet Protocol version 4, and of a number of | specifications of the Internet Protocol version 4, and of a number of | |||
mechanisms and policies in use by popular IPv4 implementations. It | mechanisms and policies in use by popular IPv4 implementations. It | |||
is based on the results of a project carried out by the UK's Centre | is based on the results of a project carried out by the UK's Centre | |||
for the Protection of National Infrastructure (CPNI). | for the Protection of National Infrastructure (CPNI). | |||
Status of this Memo | Status of this Memo | |||
This Internet-Draft is submitted to IETF in full conformance with the | This Internet-Draft is submitted to IETF in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF). Note that other groups may also distribute | |||
other groups may also distribute working documents as Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts. | 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." | |||
The list of current Internet-Drafts can be accessed at | This Internet-Draft will expire on October 15, 2010. | |||
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 August 24, 2010. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2010 IETF Trust and the persons identified as the | Copyright (c) 2010 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 | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1. Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
1.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
1.2. Scope of this document . . . . . . . . . . . . . . . . . . 7 | 1.2. Scope of this document . . . . . . . . . . . . . . . . . . 7 | |||
1.3. Organization of this document . . . . . . . . . . . . . . 7 | 1.3. Organization of this document . . . . . . . . . . . . . . 7 | |||
2. The Internet Protocol . . . . . . . . . . . . . . . . . . . . 7 | 2. The Internet Protocol . . . . . . . . . . . . . . . . . . . . 8 | |||
3. Internet Protocol header fields . . . . . . . . . . . . . . . 8 | 3. Internet Protocol Header Fields . . . . . . . . . . . . . . . 8 | |||
3.1. Version . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.1. Version . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
3.2. IHL (Internet Header Length) . . . . . . . . . . . . . . . 9 | 3.2. IHL (Internet Header Length) . . . . . . . . . . . . . . . 10 | |||
3.3. Differentiated Services field . . . . . . . . . . . . . . 10 | 3.3. Type of Service . . . . . . . . . . . . . . . . . . . . . 11 | |||
3.4. Explicit Congestion Notification (ECN) . . . . . . . . . . 11 | 3.3.1. Original Interpretation . . . . . . . . . . . . . . . 11 | |||
3.5. Total Length . . . . . . . . . . . . . . . . . . . . . . . 12 | 3.3.2. Standard Interpretation . . . . . . . . . . . . . . . 12 | |||
3.6. Identification (ID) . . . . . . . . . . . . . . . . . . . 13 | 3.3.2.1. Differentiated Services field . . . . . . . . . . 12 | |||
3.6.1. Some workarounds implemented by the industry . . . . . 14 | 3.3.2.2. Explicit Congestion Notification (ECN) . . . . . 13 | |||
3.6.2. Possible security improvements . . . . . . . . . . . . 14 | 3.4. Total Length . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
3.7. Flags . . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 3.5. Identification (ID) . . . . . . . . . . . . . . . . . . . 15 | |||
3.8. Fragment Offset . . . . . . . . . . . . . . . . . . . . . 18 | 3.5.1. Some Workarounds Implemented by the Industry . . . . . 16 | |||
3.9. Time to Live (TTL) . . . . . . . . . . . . . . . . . . . . 19 | 3.5.2. Possible security improvements . . . . . . . . . . . . 17 | |||
3.9.1. Fingerprinting the operating system in use by the | 3.5.2.1. Connection-Oriented Transport Protocols . . . . . 17 | |||
source host . . . . . . . . . . . . . . . . . . . . . 20 | 3.5.2.2. Connectionless Transport Protocols . . . . . . . 18 | |||
3.9.2. Fingerprinting the physical device from which the | 3.6. Flags . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
packets originate . . . . . . . . . . . . . . . . . . 20 | 3.7. Fragment Offset . . . . . . . . . . . . . . . . . . . . . 21 | |||
3.9.3. Locating the source host in the network topology . . . 20 | 3.8. Time to Live (TTL) . . . . . . . . . . . . . . . . . . . . 22 | |||
3.9.4. Evading Network Intrusion Detection Systems . . . . . 22 | 3.8.1. Fingerprinting the operating system in use by the | |||
3.9.5. Improving the security of applications that make | source host . . . . . . . . . . . . . . . . . . . . . 24 | |||
use of the Internet Protocol (IP) . . . . . . . . . . 22 | 3.8.2. Fingerprinting the physical device from which the | |||
3.10. Protocol . . . . . . . . . . . . . . . . . . . . . . . . . 23 | packets originate . . . . . . . . . . . . . . . . . . 24 | |||
3.11. Header Checksum . . . . . . . . . . . . . . . . . . . . . 24 | 3.8.3. Mapping the Network Topology . . . . . . . . . . . . . 24 | |||
3.12. Source Address . . . . . . . . . . . . . . . . . . . . . . 24 | 3.8.4. Locating the source host in the network topology . . . 25 | |||
3.13. Destination Address . . . . . . . . . . . . . . . . . . . 25 | 3.8.5. Evading Network Intrusion Detection Systems . . . . . 26 | |||
3.14. Options . . . . . . . . . . . . . . . . . . . . . . . . . 25 | 3.8.6. Improving the security of applications that make | |||
3.14.1. General issues with IP options . . . . . . . . . . . . 26 | use of the Internet Protocol (IP) . . . . . . . . . . 27 | |||
3.14.1.1. Processing requirements . . . . . . . . . . . . . 26 | 3.8.7. Limiting spread . . . . . . . . . . . . . . . . . . . 28 | |||
3.14.1.2. Processing of the options by the upper layer | 3.9. Protocol . . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
protocol . . . . . . . . . . . . . . . . . . . . 27 | 3.10. Header Checksum . . . . . . . . . . . . . . . . . . . . . 28 | |||
3.14.1.3. General sanity checks on IP options . . . . . . . 27 | 3.11. Source Address . . . . . . . . . . . . . . . . . . . . . . 28 | |||
3.14.2. Issues with specific options . . . . . . . . . . . . . 29 | 3.12. Destination Address . . . . . . . . . . . . . . . . . . . 29 | |||
3.14.2.1. End of Option List (Type = 0) . . . . . . . . . . 29 | 3.13. Options . . . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
3.14.2.2. No Operation (Type = 1) . . . . . . . . . . . . . 29 | 3.13.1. General issues with IP options . . . . . . . . . . . . 31 | |||
3.14.2.3. Loose Source Record Route (LSRR) (Type = 131) . . 29 | 3.13.1.1. Processing requirements . . . . . . . . . . . . . 31 | |||
3.14.2.4. Strict Source and Record Route (SSRR) (Type = | 3.13.1.2. Processing of the options by the upper layer | |||
137) . . . . . . . . . . . . . . . . . . . . . . 32 | protocol . . . . . . . . . . . . . . . . . . . . 32 | |||
3.14.2.5. Record Route (Type = 7) . . . . . . . . . . . . . 34 | 3.13.1.3. General sanity checks on IP options . . . . . . . 32 | |||
3.14.2.6. Stream Identifier (Type = 136) . . . . . . . . . 36 | ||||
3.14.2.7. Internet Timestamp (Type = 68) . . . . . . . . . 36 | 3.13.2. Issues with specific options . . . . . . . . . . . . . 33 | |||
3.14.2.8. Router Alert (Type = 148) . . . . . . . . . . . . 39 | 3.13.2.1. End of Option List (Type=0) . . . . . . . . . . . 34 | |||
3.14.2.9. Probe MTU (Type =11) . . . . . . . . . . . . . . 40 | 3.13.2.2. No Operation (Type=1) . . . . . . . . . . . . . . 34 | |||
3.14.2.10. Reply MTU (Type = 12) . . . . . . . . . . . . . . 40 | 3.13.2.3. Loose Source and Record Route (LSRR) | |||
3.14.2.11. Traceroute (Type = 82) . . . . . . . . . . . . . 40 | (Type=131) . . . . . . . . . . . . . . . . . . . 34 | |||
3.14.2.12. DoD Basic Security Option (Type = 130) . . . . . 41 | 3.13.2.4. Strict Source and Record Route (SSRR) | |||
3.14.2.13. DoD Extended Security Option (Type = 133) . . . . 42 | (Type=137) . . . . . . . . . . . . . . . . . . . 37 | |||
3.14.2.14. Commercial IP Security Option (CIPSO) (Type = | 3.13.2.5. Record Route (Type=7) . . . . . . . . . . . . . . 39 | |||
134) . . . . . . . . . . . . . . . . . . . . . . 42 | 3.13.2.6. Stream Identifier (Type=136) . . . . . . . . . . 40 | |||
3.14.2.15. Sender Directed Multi-Destination Delivery | 3.13.2.7. Internet Timestamp (Type=68) . . . . . . . . . . 40 | |||
(Type = 149) . . . . . . . . . . . . . . . . . . 43 | 3.13.2.8. Router Alert (Type=148) . . . . . . . . . . . . . 43 | |||
3.15. TOS . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 | 3.13.2.9. Probe MTU (Type=11) (obsolete) . . . . . . . . . 44 | |||
4. Internet Protocol Mechanisms . . . . . . . . . . . . . . . . . 45 | 3.13.2.10. Reply MTU (Type=12) (obsolete) . . . . . . . . . 44 | |||
4.1. Fragment reassembly . . . . . . . . . . . . . . . . . . . 45 | 3.13.2.11. Traceroute (Type=82) . . . . . . . . . . . . . . 44 | |||
4.1.1. Security Implications of Fragment Reassembly . . . . . 46 | 3.13.2.12. DoD Basic Security Option (Type=130) . . . . . . 44 | |||
4.1.1.1. Problems related with memory allocation . . . . . 46 | 3.13.2.13. DoD Extended Security Option (Type=133) . . . . . 46 | |||
3.13.2.14. Commercial IP Security Option (CIPSO) | ||||
(Type=134) . . . . . . . . . . . . . . . . . . . 46 | ||||
3.13.2.15. Sender Directed Multi-Destination Delivery | ||||
(Type=149) . . . . . . . . . . . . . . . . . . . 47 | ||||
4. Internet Protocol Mechanisms . . . . . . . . . . . . . . . . . 47 | ||||
4.1. Fragment reassembly . . . . . . . . . . . . . . . . . . . 47 | ||||
4.1.1. Security Implications of Fragment Reassembly . . . . . 48 | ||||
4.1.1.1. Problems related with memory allocation . . . . . 48 | ||||
4.1.1.2. Problems that arise from the length of the IP | 4.1.1.2. Problems that arise from the length of the IP | |||
Identification field . . . . . . . . . . . . . . 48 | Identification field . . . . . . . . . . . . . . 50 | |||
4.1.1.3. Problems that arise from the complexity of | 4.1.1.3. Problems that arise from the complexity of | |||
the reassembly algorithm . . . . . . . . . . . . 48 | the reassembly algorithm . . . . . . . . . . . . 51 | |||
4.1.1.4. Problems that arise from the ambiguity of the | 4.1.1.4. Problems that arise from the ambiguity of the | |||
reassembly process . . . . . . . . . . . . . . . 49 | reassembly process . . . . . . . . . . . . . . . 51 | |||
4.1.1.5. Problems that arise from the size of the IP | 4.1.1.5. Problems that arise from the size of the IP | |||
fragments . . . . . . . . . . . . . . . . . . . . 50 | fragments . . . . . . . . . . . . . . . . . . . . 53 | |||
4.1.2. Possible security improvements . . . . . . . . . . . . 50 | 4.1.2. Possible security improvements . . . . . . . . . . . . 53 | |||
4.1.2.1. Memory allocation for fragment reassembly . . . . 50 | 4.1.2.1. Memory allocation for fragment reassembly . . . . 53 | |||
4.1.2.2. Flushing the fragment buffer . . . . . . . . . . 51 | 4.1.2.2. Flushing the fragment buffer . . . . . . . . . . 54 | |||
4.1.2.3. A more selective fragment buffer flushing | 4.1.2.3. A more selective fragment buffer flushing | |||
strategy . . . . . . . . . . . . . . . . . . . . 52 | strategy . . . . . . . . . . . . . . . . . . . . 55 | |||
4.1.2.4. Reducing the fragment timeout . . . . . . . . . . 54 | 4.1.2.4. Reducing the fragment timeout . . . . . . . . . . 57 | |||
4.1.2.5. Counter-measure for some IDS evasion | 4.1.2.5. countermeasure for some IDS evasion techniques . 57 | |||
techniques . . . . . . . . . . . . . . . . . . . 55 | 4.1.2.6. countermeasure for firewall-rules bypassing . . . 57 | |||
4.1.2.6. Counter-measure for firewall-rules bypassing . . 55 | 4.2. Forwarding . . . . . . . . . . . . . . . . . . . . . . . . 58 | |||
4.2. Forwarding . . . . . . . . . . . . . . . . . . . . . . . . 55 | 4.2.1. Precedence-ordered queue service . . . . . . . . . . . 58 | |||
4.2.1. Precedence-ordered queue service . . . . . . . . . . . 55 | 4.2.2. Weak Type of Service . . . . . . . . . . . . . . . . . 59 | |||
4.2.2. Weak Type of Service . . . . . . . . . . . . . . . . . 56 | 4.2.3. Impact of Address Resolution on Buffer Management . . 59 | |||
4.2.3. Address Resolution . . . . . . . . . . . . . . . . . . 57 | 4.2.4. Dropping packets . . . . . . . . . . . . . . . . . . . 60 | |||
4.2.4. Dropping packets . . . . . . . . . . . . . . . . . . . 58 | 4.3. Addressing . . . . . . . . . . . . . . . . . . . . . . . . 60 | |||
4.3. Addressing . . . . . . . . . . . . . . . . . . . . . . . . 58 | 4.3.1. Unreachable addresses . . . . . . . . . . . . . . . . 61 | |||
4.3.1. Unreachable addresses . . . . . . . . . . . . . . . . 58 | 4.3.2. Private address space . . . . . . . . . . . . . . . . 61 | |||
4.3.2. Private address space . . . . . . . . . . . . . . . . 58 | 4.3.3. Former Class D Addresses (224/4 Address Block) . . . . 61 | |||
4.3.3. Class D addresses (224/4 address block) . . . . . . . 59 | 4.3.4. Former Class E Addresses (240/4 Address Block) . . . . 62 | |||
4.3.4. Class E addresses (240/4 address block) . . . . . . . 59 | 4.3.5. Broadcast/Multicast addresses, and | |||
4.3.5. Broadcast and multicast addresses, and | Connection-Oriented Protocols . . . . . . . . . . . . 62 | |||
connection-oriented protocols . . . . . . . . . . . . 59 | 4.3.6. Broadcast and network addresses . . . . . . . . . . . 62 | |||
4.3.6. Broadcast and network addresses . . . . . . . . . . . 60 | 4.3.7. Special Internet addresses . . . . . . . . . . . . . . 62 | |||
4.3.7. Special Internet addresses . . . . . . . . . . . . . . 60 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 65 | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 62 | 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 65 | |||
6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 62 | 7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 65 | |||
7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 63 | 7.1. Normative References . . . . . . . . . . . . . . . . . . . 65 | |||
7.1. Normative References . . . . . . . . . . . . . . . . . . . 63 | 7.2. Informative References . . . . . . . . . . . . . . . . . . 67 | |||
7.2. Informative References . . . . . . . . . . . . . . . . . . 64 | Appendix A. Advice and guidance to vendors . . . . . . . . . . . 76 | |||
Appendix A. Advice and guidance to vendors . . . . . . . . . . . 72 | Appendix B. Changes from previous versions of the draft . . . . . 76 | |||
Appendix B. Changes from previous versions of the draft (to | B.1. Changes from draft-ietf-opsec-ip-security-02 . . . . . . . 76 | |||
be removed by the RFC Editor before publishing | B.2. Changes from draft-ietf-opsec-ip-security-01 . . . . . . . 76 | |||
this document as an RFC) . . . . . . . . . . . . . . 73 | B.3. Changes from draft-ietf-opsec-ip-security-00 . . . . . . . 77 | |||
B.1. Changes from draft-ietf-opsec-ip-security-01 . . . . . . . 73 | B.4. Changes from draft-gont-opsec-ip-security-01 . . . . . . . 77 | |||
B.2. Changes from draft-ietf-opsec-ip-security-00 . . . . . . . 73 | B.5. Changes from draft-gont-opsec-ip-security-00 . . . . . . . 77 | |||
B.3. Changes from draft-gont-opsec-ip-security-01 . . . . . . . 73 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 77 | |||
B.4. Changes from draft-gont-opsec-ip-security-00 . . . . . . . 73 | ||||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 73 | ||||
1. Preface | 1. Preface | |||
1.1. Introduction | 1.1. Introduction | |||
The TCP/IP protocols were conceived in an environment that was quite | The TCP/IP protocols were conceived in an environment that was quite | |||
different from the hostile environment they currently operate in. | different from the hostile environment they currently operate in. | |||
However, the effectiveness of the protocols led to their early | However, the effectiveness of the protocols led to their early | |||
adoption in production environments, to the point that, to some | adoption in production environments, to the point that, to some | |||
extent, the current world's economy depends on them. | extent, the current world's economy depends on them. | |||
While many textbooks and articles have created the myth that the | While many textbooks and articles have created the myth that the | |||
Internet protocols were designed for warfare environments, the top | Internet protocols were designed for warfare environments, the top | |||
level goal for the DARPA Internet Program was the sharing of large | level goal for the DARPA Internet Program was the sharing of large | |||
service machines on the ARPANET [Clark1988]. As a result, many | service machines on the ARPANET [Clark1988]. As a result, many | |||
protocol specifications focus only on the operational aspects of the | protocol specifications focus only on the operational aspects of the | |||
protocols they specify, and overlook their security implications. | protocols they specify, and overlook their security implications. | |||
While the Internet technology evolved since it inception, the | While the Internet technology evolved since its inception, the | |||
Internet's building blocks are basically the same core protocols | Internet's building blocks are basically the same core protocols | |||
adopted by the ARPANET more than two decades ago. During the last | adopted by the ARPANET more than two decades ago. During the last | |||
twenty years, many vulnerabilities have been identified in the TCP/IP | twenty years, many vulnerabilities have been identified in the TCP/IP | |||
stacks of a number of systems. Some of them were based in flaws in | stacks of a number of systems. Some of them were based on flaws in | |||
some protocol implementations, affecting only a reduced number of | some protocol implementations, affecting only a reduced number of | |||
systems, while others were based in flaws in the protocols | systems, while others were based on flaws in the protocols | |||
themselves, affecting virtually every existing implementation | themselves, affecting virtually every existing implementation | |||
[Bellovin1989]. Even in the last couple of years, researchers were | [Bellovin1989]. Even in the last couple of years, researchers were | |||
still working on security problems in the core protocols | still working on security problems in the core protocols | |||
[I-D.ietf-tcpm-icmp-attacks] [Watson2004] [NISCC2004] [NISCC2005]. | [I-D.ietf-tcpm-icmp-attacks] [Watson2004] [NISCC2004] [NISCC2005]. | |||
The discovery of vulnerabilities in the TCP/IP protocols led to | The discovery of vulnerabilities in the TCP/IP protocols led to | |||
reports being published by a number of CSIRTs (Computer Security | reports being published by a number of CSIRTs (Computer Security | |||
Incident Response Teams) and vendors, which helped to raise awareness | Incident Response Teams) and vendors, which helped to raise awareness | |||
about the threats and the best mitigations known at the time the | about the threats and the best mitigations known at the time the | |||
reports were published. Unfortunately, this also led to the | reports were published. Unfortunately, this also led to the | |||
skipping to change at page 6, line 18 | skipping to change at page 6, line 18 | |||
Producing a secure TCP/IP implementation nowadays is a very difficult | Producing a secure TCP/IP implementation nowadays is a very difficult | |||
task, in part because of the lack of a single document that serves as | task, in part because of the lack of a single document that serves as | |||
a security roadmap for the protocols. Implementers are faced with | a security roadmap for the protocols. Implementers are faced with | |||
the hard task of identifying relevant documentation and differentiate | the hard task of identifying relevant documentation and differentiate | |||
between that which provides correct advisory, and that which provides | between that which provides correct advisory, and that which provides | |||
misleading advisory based on inaccurate or wrong assumptions. | misleading advisory based on inaccurate or wrong assumptions. | |||
There is a clear need for a companion document to the IETF | There is a clear need for a companion document to the IETF | |||
specifications that discusses the security aspects and implications | specifications that discusses the security aspects and implications | |||
of the protocols, identifies the possible threats, discusses the | of the protocols, identifies the possible threats, discusses the | |||
possible counter-measures, and analyzes their respective | possible countermeasures, and analyzes their respective | |||
effectiveness. | effectiveness. | |||
This document is the result of an assessment the IETF specifications | This document is the result of an assessment of the IETF | |||
of the Internet Protocol (IP), from a security point of view. | specifications of the Internet Protocol (IP), from a security point | |||
Possible threats were identified and, where possible, counter- | of view. Possible threats were identified and, where possible, | |||
measures were proposed. Additionally, many implementation flaws that | countermeasures were proposed. Additionally, many implementation | |||
have led to security vulnerabilities have been referenced in the hope | flaws that have led to security vulnerabilities have been referenced | |||
that future implementations will not incur the same problems. | in the hope that future implementations will not incur the same | |||
Furthermore, this document does not limit itself to performing a | problems. Furthermore, this document does not limit itself to | |||
security assessment of the relevant IETF specifications, but also | performing a security assessment of the relevant IETF specifications, | |||
provides an assessment of common implementation strategies found in | but also provides an assessment of common implementation strategies | |||
the real world. | found in the real world. | |||
This document does not aim to be the final word on the security of | This document does not aim to be the final word on the security of | |||
the Internet Protocol (IP). On the contrary, it aims to raise | the Internet Protocol (IP). On the contrary, it aims to raise | |||
awareness about many security threats based on the IP protocol that | awareness about many security threats based on the IP protocol that | |||
have been faced in the past, those that we are currently facing, and | have been faced in the past, those that we are currently facing, and | |||
those we may still have to deal with in the future. It provides | those we may still have to deal with in the future. It provides | |||
advice for the secure implementation of the Internet Protocol (IP), | advice for the secure implementation of the Internet Protocol (IP), | |||
but also provides insights about the security aspects of the Internet | but also provides insights about the security aspects of the Internet | |||
Protocol that may be of help to the Internet operations community. | Protocol that may be of help to the Internet operations community. | |||
Feedback from the community is more than encouraged to help this | Feedback from the community is more than encouraged to help this | |||
document be as accurate as possible and to keep it updated as new | document be as accurate as possible and to keep it updated as new | |||
threats are discovered. | threats are discovered. | |||
This document is heavily based on the "Security Assessment of the | This document is heavily based on the "Security Assessment of the | |||
Internet Protocol" [CPNI2008] released by the UK Centre for the | Internet Protocol" [CPNI2008] released by the UK Centre for the | |||
Protection of National Infrastructure (CPNI), available at: | Protection of National Infrastructure (CPNI), available at: | |||
http://www.cpni.gov.uk/Products/technicalnotes/3677.aspx . | http://www.cpni.gov.uk/Products/technicalnotes/3677.aspx . | |||
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]. | ||||
1.2. Scope of this document | 1.2. Scope of this document | |||
While there are a number of protocols that affect the way in which IP | While there are a number of protocols that affect the way in which IP | |||
systems operate, this document focuses only on the specifications of | systems operate, this document focuses only on the specifications of | |||
the Internet Protocol (IP). For example, routing and bootstrapping | the Internet Protocol (IP). For example, routing and bootstrapping | |||
protocols are considered out of the scope of this project. | protocols are considered out of the scope of this project. | |||
The following IETF RFCs were selected for assessment as part of this | The following IETF RFCs were selected as the primary sources for the | |||
work: | assessment as part of this work: | |||
o RFC 791, "Internet Protocol. DARPA Internet Program. Protocol | o RFC 791, "Internet Protocol. DARPA Internet Program. Protocol | |||
Specification" (51 pages). | Specification" (51 pages). | |||
o RFC 815, "IP datagram reassembly algorithms" (9 pages). | o RFC 815, "IP datagram reassembly algorithms" (9 pages). | |||
o RFC 919, "BROADCASTING INTERNET DATAGRAMS" (8 pages). | ||||
o RFC 950, "Internet Standard Subnetting Procedure" (18 pages) | ||||
o RFC 1112, "Host Extensions for IP Multicasting" (17 pages) | ||||
o RFC 1122, "Requirements for Internet Hosts -- Communication | o RFC 1122, "Requirements for Internet Hosts -- Communication | |||
Layers" (116 pages). | Layers" (116 pages). | |||
o RFC 1812, "Requirements for IP Version 4 Routers" (175 pages). | o RFC 1812, "Requirements for IP Version 4 Routers" (175 pages). | |||
o RFC 2474, "Definition of the Differentiated Services Field (DS | o RFC 2474, "Definition of the Differentiated Services Field (DS | |||
Field) in the IPv4 and IPv6 Headers" (20 pages). | Field) in the IPv4 and IPv6 Headers" (20 pages). | |||
o RFC 2475, "An Architecture for Differentiated Services" (36 | o RFC 2475, "An Architecture for Differentiated Services" (36 | |||
pages). | pages). | |||
o RFC 3168, "The Addition of Explicit Congestion Notification (ECN) | o RFC 3168, "The Addition of Explicit Congestion Notification (ECN) | |||
to IP" (63 pages). | to IP" (63 pages). | |||
o RFC 4632, "Classless Inter-domain Routing (CIDR): The Internet | ||||
Address Assignment and Aggregation Plan" (27 pages). | ||||
1.3. Organization of this document | 1.3. Organization of this document | |||
This document is basically organized in two parts: "Internet Protocol | This document is basically organized in two parts: "Internet Protocol | |||
header fields" and "Internet Protocol mechanisms". The former | header fields" and "Internet Protocol mechanisms". The former | |||
contains an analysis of each of the fields of the Internet Protocol | contains an analysis of each of the fields of the Internet Protocol | |||
header, identifies their security implications, and discusses the | header, identifies their security implications, and discusses the | |||
possible counter-measures. The latter contains an analysis of the | possible countermeasures. The latter contains an analysis of the | |||
security implications of the mechanisms implemented by the Internet | security implications of the mechanisms implemented by the Internet | |||
Protocol. | Protocol. | |||
2. The Internet Protocol | 2. The Internet Protocol | |||
The Internet Protocol (IP) provides a basic data transfer function, | The Internet Protocol (IP) provides a basic data transfer function | |||
in the form of data blocks called "datagrams", from a source host to | for passing data blocks called "datagrams" from a source host to a | |||
a destination host, across the possible intervening networks. | destination host, across the possible intervening networks. | |||
Additionally, it provides some functions that are useful for the | Additionally, it provides some functions that are useful for the | |||
interconnection of heterogeneous networks, such as fragmentation and | interconnection of heterogeneous networks, such as fragmentation and | |||
reassembly. | reassembly. | |||
The "datagram" has a number of characteristics that makes it | The "datagram" has a number of characteristics that makes it | |||
convenient for interconnecting systems [Clark1988]: | convenient for interconnecting systems [Clark1988]: | |||
o It eliminates the need of connection state within the network, | o It eliminates the need of connection state within the network, | |||
which improves the survivability characteristics of the network. | which improves the survivability characteristics of the network. | |||
o It provides a basic service of data transport that can be used as | o It provides a basic service of data transport that can be used as | |||
a building block for other transport services (reliable data | a building block for other transport services (reliable data | |||
transport services, etc.). | transport services, etc.). | |||
o It represents the minimum network service assumption, which | o It represents the minimum network service assumption, which | |||
enables IP to be run over virtually any network technology. | enables IP to be run over virtually any network technology. | |||
3. Internet Protocol header fields | 3. Internet Protocol Header Fields | |||
The IETF specifications of the Internet Protocol define the syntax of | The IETF specifications of the Internet Protocol define the syntax of | |||
the protocol header, along with the semantics of each of its fields. | the protocol header, along with the semantics of each of its fields. | |||
Figure 1 shows the format of an IP datagram. | Figure 1 shows the format of an IP datagram. | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|Version| IHL |Type of Service| Total Length | | |Version| IHL |Type of Service| Total Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Identification |Flags| Fragment Offset | | | Identification |Flags| Fragment Offset | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Time to Live | Protocol | Header Checksum | | | Time to Live | Protocol | Header Checksum | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Source Address | | | Source Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Destination Address | | | Destination Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Options | Padding | | | [ Options ] | [ Padding ] | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 1: Internet Protocol header format | Figure 1: Internet Protocol header format | |||
Even when the minimum IP header size is 20 bytes, an IP module might | Even though the minimum IP header size is 20 bytes, an IP module | |||
be handed an (illegitimate) "datagram" of less than 20 bytes. | might be handed an (illegitimate) "datagram" of less than 20 bytes. | |||
Therefore, before doing any processing of the IP header fields, the | Therefore, before doing any processing of the IP header fields, the | |||
following check should be performed by the IP module on the packets | following check should be performed by the IP module on the packets | |||
handed by the link layer: | handed by the link layer: | |||
LinkLayer.PayloadSize >= 20 | LinkLayer.PayloadSize >= 20 | |||
where LinkLayer.PayloadSize is the length (in octets) of the datagram | ||||
passed from the link layer to the IP layer. | ||||
If the packet does not pass this check, it should be dropped, and | If the packet does not pass this check, it should be dropped, and | |||
this event should be logged (e.g., a counter could be incremented | this event should be logged (e.g., a counter could be incremented | |||
reflecting the packet drop). | reflecting the packet drop). | |||
The following subsections contain further sanity checks that should | The following subsections contain further sanity checks that should | |||
be performed on IP packets. | be performed on IP packets. | |||
3.1. Version | 3.1. Version | |||
This is a 4-bit field that indicates the version of the Internet | This is a 4-bit field that indicates the version of the Internet | |||
skipping to change at page 9, line 29 | skipping to change at page 10, line 9 | |||
module, it does so based on a "Protocol Type" field in the data-link | module, it does so based on a "Protocol Type" field in the data-link | |||
packet header. | packet header. | |||
In theory, different versions of IP could coexist on a network by | In theory, different versions of IP could coexist on a network by | |||
using the same "Protocol Type" at the Link-layer, but a different | using the same "Protocol Type" at the Link-layer, but a different | |||
value in the Version field of the IP header. Thus, a single IP | value in the Version field of the IP header. Thus, a single IP | |||
module could handle all versions of the Internet Protocol, | module could handle all versions of the Internet Protocol, | |||
differentiating them by means of this field. | differentiating them by means of this field. | |||
However, in practice different versions of IP are identified by a | However, in practice different versions of IP are identified by a | |||
different "Protocol Type" number in the link-layer protocol header. | different "Protocol Type" (EtherType) number in the link-layer | |||
For example, IPv4 datagrams are encapsulated in Ethernet frames using | protocol header. For example, IPv4 datagrams are encapsulated in | |||
a "Protocol Type" field of 0x0800, while IPv6 datagrams are | Ethernet frames using an EtherType of 0x0800, while IPv6 datagrams | |||
encapsulated in Ethernet frames using a "Protocol Type" field of | are encapsulated in Ethernet frames using an EtherType of 0x86DD | |||
0x86DD [IANA2006a]. | [IANA2006a]. | |||
Therefore, if an IPv4 module receives a packet, the Version field | Therefore, if an IPv4 module receives a packet, the Version field | |||
must be checked to be 4. If this check fails, the packet should be | must be checked to be 4. If this check fails, the packet should be | |||
silently dropped, and this event should be logged (e.g., a counter | silently dropped, and this event should be logged (e.g., a counter | |||
could be incremented reflecting the packet drop). | could be incremented reflecting the packet drop). | |||
3.2. IHL (Internet Header Length) | 3.2. IHL (Internet Header Length) | |||
The IHL (Internet Header Length) indicates the length of the internet | The IHL (Internet Header Length) indicates the length of the internet | |||
header in 32-bit words (4 bytes). As the minimum datagram size is 20 | header in 32-bit words (4 bytes). As the minimum datagram size is 20 | |||
skipping to change at page 10, line 11 | skipping to change at page 10, line 39 | |||
If the packet does not pass this check, it should be dropped, and | If the packet does not pass this check, it should be dropped, and | |||
this event should be logged (e.g., a counter could be incremented | this event should be logged (e.g., a counter could be incremented | |||
reflecting the packet drop). | reflecting the packet drop). | |||
For obvious reasons, the Internet header cannot be larger than the | For obvious reasons, the Internet header cannot be larger than the | |||
whole Internet datagram it is part of. Therefore, the following | whole Internet datagram it is part of. Therefore, the following | |||
check should be enforced: | check should be enforced: | |||
IHL * 4 <= Total Length | IHL * 4 <= Total Length | |||
This needs to refer to the size of the datagram as specified by | ||||
the sender in the Total Length field, since link layers might have | ||||
added some padding (see Section 3.4). | ||||
If the packet does not pass this check, it should be dropped, and | If the packet does not pass this check, it should be dropped, and | |||
this event should be logged (e.g., a counter could be incremented | this event should be logged (e.g., a counter could be incremented | |||
reflecting the packet drop). | reflecting the packet drop). | |||
The above check allows for Internet datagrams with no data bytes in | The above check allows for Internet datagrams with no data bytes in | |||
the payload that, while nonsensical for virtually every protocol that | the payload that, while nonsensical for virtually every protocol that | |||
runs over IP, it is still legal. | runs over IP, are is still legal. | |||
3.3. Differentiated Services field | 3.3. Type of Service | |||
3.3.1. Original Interpretation | ||||
Figure 2 shows the original syntax of the Type of Service field, as | ||||
defined by RFC 791 [RFC0791], and updated by RFC 1349 [RFC1349]. | ||||
This definition has been superseded long ago (see Section 3.3.2.1 and | ||||
Section 3.3.2.2), but it is still assumed by some deployed | ||||
implementations. | ||||
0 1 2 3 4 5 6 7 | ||||
+-----+-----+-----+-----+-----+-----+-----+-----+ | ||||
| PRECEDENCE | D | T | R | C | 0 | | ||||
+-----+-----+-----+-----+-----+-----+-----+-----+ | ||||
Figure 2: Type of Service Field (Original Interpretation) | ||||
+----------+----------------------------------------------+ | ||||
| Bits 0-2 | Precedence | | ||||
+----------+----------------------------------------------+ | ||||
| Bit 3 | 0 = Normal Delay, 1 = Low Delay | | ||||
+----------+----------------------------------------------+ | ||||
| Bit 4 | 0 = Normal Throughput, 1 = High Throughput | | ||||
+----------+----------------------------------------------+ | ||||
| Bit 5 | 0 = Normal Reliability, 1 = High Reliability | | ||||
+----------+----------------------------------------------+ | ||||
| Bit 6 | 0 = Normal Cost, 1 = Minimize Monetary Cost | | ||||
+----------+----------------------------------------------+ | ||||
| Bits 7 | Reserved for Future Use (must be zero) | | ||||
+----------+----------------------------------------------+ | ||||
Table 1: TOS-bits Semantics | ||||
+-----+-----------------+ | ||||
| 111 | Network Control | | ||||
+-----+-----------------+ | ||||
| 110 | Internetwork | | ||||
+-----+-----------------+ | ||||
| 101 | CRITIC/ECP | | ||||
+-----+-----------------+ | ||||
| 100 | Flash Override | | ||||
+-----+-----------------+ | ||||
| 011 | Flash | | ||||
+-----+-----------------+ | ||||
| 010 | Immediate | | ||||
+-----+-----------------+ | ||||
| 001 | Priority | | ||||
| 000 | Routine | | ||||
+-----+-----------------+ | ||||
Table 2: Precedence Field Values | ||||
The Type of Service field can be used to affect the way in which the | ||||
packet is treated by the systems of a network that process it. | ||||
Section 4.2.1 ("Precedence-ordered queue service") and Section 4.2.3 | ||||
("Weak TOS") of this document describe the security implications of | ||||
the Type of Service field in the forwarding of packets. | ||||
3.3.2. Standard Interpretation | ||||
3.3.2.1. Differentiated Services field | ||||
The Differentiated Services Architecture is intended to enable | The Differentiated Services Architecture is intended to enable | |||
scalable service discrimination in the Internet without the need for | scalable service discrimination in the Internet without the need for | |||
per-flow state and signaling at every hop [RFC2475]. RFC 2474 | per-flow state and signaling at every hop [RFC2475]. RFC 2474 | |||
[RFC2474] defines a Differentiated Services Field (DS Field), which | [RFC2474] redefined the IP "Type of Service" octet, introducing a | |||
is intended to supersede the original Type of Service field. Figure | Differentiated Services Field (DS Field). Figure 3 shows the format | |||
5 shows the format of the field. | of the field. | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| DSCP | CU | | | DSCP | CU | | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
Figure 2: Structure of the DS Field | Figure 3: Revised Structure of the Type of Service Field (RFC 2474) | |||
The DSCP ("Differentiated Services CodePoint").is used to select the | The DSCP ("Differentiated Services CodePoint") is used to select the | |||
treatment the packet is to receive within the Differentiated Services | treatment the packet is to receive within the Differentiated Services | |||
Domain. The CU ("Currently Unused") field was, at the time the | Domain. The CU ("Currently Unused") field was, at the time the | |||
specification was issued, reserved for future use. The DSCP field is | specification was issued, reserved for future use. The DSCP field is | |||
used to select a PHB, by matching against the entire 6-bit field. | used to select a PHB (Per-Hop Behavior), by matching against the | |||
entire 6-bit field. | ||||
Considering that the DSCP field determines how a packet is treated | Considering that the DSCP field determines how a packet is treated | |||
within a DS domain, an attacker send packets with a forged DSCP field | within a DS domain, an attacker could send packets with a forged DSCP | |||
to perform a theft of service or even a Denial of Service attack. In | field to perform a theft of service or even a Denial-of-Service | |||
particular, an attacker could forge packets with a codepoint of the | attack. In particular, an attacker could forge packets with a | |||
type '11x000' which, according to Section 4.2.2.2 of RFC 2474 | codepoint of the type '11x000' which, according to Section 4.2.2.2 of | |||
[RFC2474], would give the packets preferential forwarding treatment | RFC 2474 [RFC2474], would give the packets preferential forwarding | |||
when compared with the PHB selected by the codepoint '000000'. If | treatment when compared with the PHB selected by the codepoint | |||
strict priority queuing were utilized, a continuous stream of such | '000000'. If strict priority queuing were utilized, a continuous | |||
pockets could perform a Denial of Service to other flows which have a | stream of such packets could cause a Denial of Service to other flows | |||
DSCP of lower relative order. | which have a DSCP of lower relative order. | |||
As the DS field is incompatible with the original Type of Service | As the DS field is incompatible with the original Type of Service | |||
field, both DS domains and networks using the original Type of | field, both DS domains and networks using the original Type of | |||
Service field should protect themselves by remarking the | Service field should protect themselves by remarking the | |||
corresponding field where appropriate, probably deploying remarking | corresponding field where appropriate, probably deploying remarking | |||
boundary nodes. Nevertheless, care must be taken so that packets | boundary nodes. Nevertheless, care must be taken so that packets | |||
received with an unrecognized DSCP do not cause the handling system | received with an unrecognized DSCP do not cause the handling system | |||
to malfunction. | to malfunction. | |||
3.4. Explicit Congestion Notification (ECN) | 3.3.2.2. Explicit Congestion Notification (ECN) | |||
RFC 3168 [RFC3168] specifies a mechanism for routers to signal | RFC 3168 [RFC3168] specifies a mechanism for routers to signal | |||
congestion to hosts sending IP packets, by marking the offending | congestion to hosts exchanging IP packets, by marking the offending | |||
packets, rather than discarding them. RFC 3168 defines the ECN | packets, rather than discarding them. RFC 3168 defines the ECN | |||
field, which utilizes the CU unused field of the DSCP field described | field, which utilizes the CU field defined in RFC 2474 [RFC2474]. | |||
in Section 3.14 of this document. Figure 6 shows the syntax of the | Figure 4 shows the current syntax of the IP Type of Service field, | |||
ECN field, together with the DSCP field used for Differentiated | with the DSCP field used for Differentiated Services and the ECN | |||
Services. | field. | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+-----+-----+-----+-----+-----+-----+-----+-----+ | +-----+-----+-----+-----+-----+-----+-----+-----+ | |||
| DS FIELD, DSCP | ECN FIELD | | | DS FIELD, DSCP | ECN FIELD | | |||
+-----+-----+-----+-----+-----+-----+-----+-----+ | +-----+-----+-----+-----+-----+-----+-----+-----+ | |||
Figure 3: The Differentiated Services and ECN fields in IP | Figure 4: The Differentiated Services and ECN fields in IP | |||
As such, the ECN field defines four codepoints: | As such, the ECN field defines four codepoints: | |||
+-----------+-----------+ | +-----------+-----------+ | |||
| ECN field | Codepoint | | | ECN field | Codepoint | | |||
+-----------+-----------+ | +-----------+-----------+ | |||
| 00 | Not-ECT | | | 00 | Not-ECT | | |||
+-----------+-----------+ | +-----------+-----------+ | |||
| 01 | ECT(1) | | | 01 | ECT(1) | | |||
+-----------+-----------+ | +-----------+-----------+ | |||
| 10 | ECT(0) | | | 10 | ECT(0) | | |||
+-----------+-----------+ | +-----------+-----------+ | |||
| 11 | CE | | | 11 | CE | | |||
+-----------+-----------+ | +-----------+-----------+ | |||
Table 1: ECN codepoints | Table 3: ECN codepoints | |||
ECN is an end-to-end transport protocol mechanism based on | ||||
notifications by routers through which a packet flow passes. To | ||||
allow this interaction to happen on the fast path of routers, the ECN | ||||
field is located at a fixed location in the IP header. However, its | ||||
use must be negotiated at the transport layer, and the accumulated | ||||
congestion notifications must be communicated back to the sending | ||||
node using transport protocol means. Thus, ECN support must be | ||||
specified per transport protocol. | ||||
The security implications of ECN are discussed in detail in a number | The security implications of ECN are discussed in detail in a number | |||
of Sections of RFC 3168. Of the possible threats discussed in the | of Sections of RFC 3168. Of the possible threats discussed in the | |||
ECN specification, we believe that one that can be easily exploited | ECN specification, we believe that one that can be easily exploited | |||
is that of host falsely indicating ECN-Capability. | is that of a host falsely indicating ECN-Capability. | |||
An attacker could set the ECT codepoint in the packets it sends, to | An attacker could set the ECT codepoint in the packets it sends, to | |||
signal the network that the endpoints of the transport protocol are | signal the network that the endpoints of the transport protocol are | |||
ECN-capable. Consequently, when experiencing moderate congestion, | ECN-capable. Consequently, when experiencing moderate congestion, | |||
routers using active queue management based on RED would mark the | routers using active queue management based on RED would mark the | |||
packets (with the CE codepoint) rather than discard them. In the | packets (with the CE codepoint) rather than discard them. In this | |||
same scenario, packets of competing flows that do not have the ECT | same scenario, packets of competing flows that do not have the ECT | |||
codepoint set would be dropped. Therefore, an attacker would get | codepoint set would be dropped. Therefore, an attacker would get | |||
better network service than the competing flows. | better network service than the competing flows. | |||
However, if this moderate congestion turned into heavy congestion, | However, if this moderate congestion turned into heavy congestion, | |||
routers should switch to drop packets, regardless of whether the | routers should switch to drop packets, regardless of whether the | |||
packets have the ECT codepoint set or not. | packets have the ECT codepoint set or not. | |||
A number of other threats could arise if an attacker was a man in the | A number of other threats could arise if an attacker was a man in the | |||
middle (i.e., was in the middle of the path the packets travel to get | middle (i.e., was in the middle of the path the packets travel to get | |||
to the destination host). For a detailed discussion of those cases, | to the destination host). For a detailed discussion of those cases, | |||
we urge the reader to consult Section 16 of RFC 3168. | we urge the reader to consult Section 16 of RFC 3168. | |||
3.5. Total Length | There also is ongoing work in the research community and the IETF to | |||
define alternate semantics for the CU / ECN field of IP TOS octet | ||||
(see [RFC5559], [RFC5670], and [RFC5696]). The application of these | ||||
methods must be confined to tightly administered domains, and on exit | ||||
from such domains, all packets need to be (re-)marked with ECN | ||||
semantics. | ||||
3.4. Total Length | ||||
The Total Length field is the length of the datagram, measured in | The Total Length field is the length of the datagram, measured in | |||
bytes, including both the IP header and the IP payload. Being a 16- | bytes, including both the IP header and the IP payload. Being a 16- | |||
bit field, it allows for datagrams of up to 65535 bytes. RFC 791 | bit field, it allows for datagrams of up to 65535 bytes. RFC 791 | |||
[RFC0791] states that all hosts should be prepared to receive | [RFC0791] states that all hosts should be prepared to receive | |||
datagrams of up to 576 bytes (whether they arrive as a whole, or in | datagrams of up to 576 bytes (whether they arrive as a whole, or in | |||
fragments). However, most modern implementations can reassemble | fragments). However, most modern implementations can reassemble | |||
datagrams of at least 9 Kbytes. | datagrams of at least 9 Kbytes. | |||
Usually, a host will not send to a remote peer an IP datagram larger | Usually, a host will not send to a remote peer an IP datagram larger | |||
than 576 bytes, unless it is explicitly signaled that the remote peer | than 576 bytes, unless it is explicitly signaled that the remote peer | |||
is able to receive such "large" datagrams (for example, by means of | is able to receive such "large" datagrams (for example, by means of | |||
TCP's MSS option). However, systems should assume that they may be | TCP's MSS option). However, systems should assume that they may | |||
sent datagrams larger than 576 bytes, regardless of whether they | receive datagrams larger than 576 bytes, regardless of whether they | |||
signal their remote peers to do so or not. In fact, it is common for | signal their remote peers to do so or not. In fact, it is common for | |||
NFS [RFC3530]implementations to send datagrams larger than 576 bytes, | NFS [RFC3530] implementations to send datagrams larger than 576 | |||
even without explicit signaling that the destination system can | bytes, even without explicit signaling that the destination system | |||
receive such "large" datagram. | can receive such "large" datagram. | |||
o Additionally, see the discussion in Section 4.1 "Fragment | Additionally, see the discussion in Section 4.1 ("Fragment | |||
reassembly" regarding the possible packet sizes resulting from | reassembly") regarding the possible packet sizes resulting from | |||
fragment reassembly. | fragment reassembly. | |||
Implementations should be aware that the IP module could be handed a | Implementations should be aware that the IP module could be handed a | |||
packet larger than the value actually contained in the Total Length | packet larger than the value actually contained in the Total Length | |||
field. Such a difference usually has to do with legitimate padding | field. Such a difference usually has to do with legitimate padding | |||
bytes at the link-layer protocol, but it could also be the result of | bytes at the link-layer protocol, but it could also be the result of | |||
malicious activity by an attacker. Furthermore, even when the | malicious activity by an attacker. Furthermore, even when the | |||
maximum length of an IP datagram is 65535 bytes, if the link-layer | maximum length of an IP datagram is 65535 bytes, if the link-layer | |||
technology in use allows for payloads larger than 65535 bytes, an | technology in use allows for payloads larger than 65535 bytes, an | |||
attacker could forge such a large link-layer packet, meaning it for | attacker could forge such a large link-layer packet, meaning it for | |||
the IP module. If the IP module of the receiving system were not | the IP module. If the IP module of the receiving system were not | |||
prepared to handle such an oversized link-layer payload, an | prepared to handle such an oversized link-layer payload, an | |||
unexpected failure might occur. Therefore, the memory buffer used by | unexpected failure might occur. Therefore, the memory buffer used by | |||
the IP module to store the link-layer payload should be allocated | the IP module to store the link-layer payload should be allocated | |||
according to the payload size reported by the link-layer, rather than | according to the payload size reported by the link-layer, rather than | |||
according to the Total Length field of the IP packet it contains. | according to the Total Length field of the IP packet it contains. | |||
The IP module could also be handled a packet that is smaller than the | The IP module could also be handed a packet that is smaller than the | |||
actual IP packet size claimed by the Total Length field. This could | actual IP packet size claimed by the Total Length field. This could | |||
be used, for example, to produce an information leakage. Therefore, | be used, for example, to produce an information leakage. Therefore, | |||
the following check should be performed: | the following check should be performed: | |||
LinkLayer.PayloadSize >= Total Length | LinkLayer.PayloadSize >= Total Length | |||
If this check fails, the IP packet should be dropped, and this event | If this check fails, the IP packet should be dropped, and this event | |||
should be logged (e.g., a counter could be incremented reflecting the | should be logged (e.g., a counter could be incremented reflecting the | |||
packet drop). As the previous expression implies, the number of | packet drop). As the previous expression implies, the number of | |||
bytes passed by the link-layer to the IP module should contain at | bytes passed by the link-layer to the IP module should contain at | |||
least as many bytes as claimed by the Total Length field of the IP | least as many bytes as claimed by the Total Length field of the IP | |||
header. | header. | |||
o [US-CERT2002] is an example of the exploitation of a forged IP | [US-CERT2002] is an example of the exploitation of a forged IP | |||
Total Length field to produce an information leakage attack. | Total Length field to produce an information leakage attack. | |||
3.6. Identification (ID) | 3.5. Identification (ID) | |||
The Identification field is set by the sending host to aid in the | The Identification field is set by the sending host to aid in the | |||
reassembly of fragmented datagrams. At any time, it needs to be | reassembly of fragmented datagrams. At any time, it needs to be | |||
unique for each set of {Source Address, Destination Address, | unique for each set of {Source Address, Destination Address, | |||
Protocol}. | Protocol}. | |||
In many systems, the value used for this field is determined at the | In many systems, the value used for this field is determined at the | |||
IP layer, on a protocol-independent basis. Many of those systems | IP layer, on a protocol-independent basis. Many of those systems | |||
also simply increment the IP Identification field for each packet | also simply increment the IP Identification field for each packet | |||
they send. | they send. | |||
This implementation strategy is inappropriate for a number of | This implementation strategy is inappropriate for a number of | |||
reasons. First, if the Identification field is set on a protocol- | reasons. Firstly, if the Identification field is set on a protocol- | |||
independent basis, it will wrap more often than necessary, and thus | independent basis, it will wrap more often than necessary, and thus | |||
the implementation will be more prone to the problems discussed in | the implementation will be more prone to the problems discussed in | |||
[Kent1987] and [RFC4963]. | [Kent1987] and [RFC4963]. Secondly, this implementation strategy | |||
opens the door to an information leakage that can be exploited in a | ||||
number of ways. | ||||
Additionally, this implementation strategy opens the door to an | [Sanfilippo1998a] examined to determine the packet rate at which a | |||
information leakage that can be exploited to in a number of ways. | given system is transmitting information. Later, [Sanfilippo1998b] | |||
[Sanfilippo1998a] originally pointed out how this field could be | described how a system with such an implementation can be used to | |||
examined to determine the packet rate at which a given system is | perform a stealth port scan to a third (victim) host. | |||
transmitting information. Later, [Sanfilippo1998b] described how a | [Sanfilippo1999] explained how to exploit this implementation | |||
system with such an implementation can be used to perform a stealth | strategy to uncover the rules of a number of firewalls. | |||
port scan to a third (victim) host. [Sanfilippo1999] explained how | [Bellovin2002] explains how the IP Identification field can be | |||
to exploit this implementation strategy to uncover the rules of a | exploited to count the number of systems behind a NAT. [Fyodor2004] | |||
number of firewalls. [Bellovin2002] explains how the IP | is an entire paper on most (if not all) the ways to exploit the | |||
Identification field can be exploited to count the number of systems | information provided by the Identification field of the IP header. | |||
behind a NAT. [Fyodor2004] is an entire paper on most (if not all) | ||||
the ways to exploit the information provided by the Identification | ||||
field of the IP header. | ||||
3.6.1. Some workarounds implemented by the industry | Section 4.1 contains a discussion of the security implications of | |||
the IP fragment reassembly mechanism, which is the primary | ||||
"consumer" of this field. | ||||
3.5.1. Some Workarounds Implemented by the Industry | ||||
As the IP Identification field is only used for the reassembly of | As the IP Identification field is only used for the reassembly of | |||
datagrams, some operating systems (such as Linux) decided to set this | datagrams, some operating systems (such as Linux) decided to set this | |||
field to 0 in all packets that have the DF bit set. This would, in | field to 0 in all packets that have the DF bit set. This would, in | |||
principle, avoid any type of information leakage. However, it was | principle, avoid any type of information leakage. However, it was | |||
detected that some non-RFC-compliant middle-boxes fragmented packets | detected that some non-RFC-compliant middle-boxes fragmented packets | |||
even if they had the DF bit set. In such a scenario, all datagrams | even if they had the DF bit set. In such a scenario, all datagrams | |||
originally sent with the DF bit set would all result in fragments | originally sent with the DF bit set would all result in fragments | |||
that would have an Identification field of 0, which would lead to | with an Identification field of 0, which would lead to problems | |||
problems ("collision" of the Identification number) in the reassembly | ("collision" of the Identification number) in the reassembly process. | |||
process. | ||||
Linux (and Solaris) later set the IP Identification field on a per- | Linux (and Solaris) later set the IP Identification field on a per- | |||
IP-address basis. This avoids some of the security implications of | IP-address basis. This avoids some of the security implications of | |||
the IP Identification field, but not all. For example, systems | the IP Identification field, but not all. For example, systems | |||
behind a load balancer can still be counted. | behind a load balancer can still be counted. | |||
3.6.2. Possible security improvements | 3.5.2. Possible security improvements | |||
Contrary to common wisdom, the IP Identification field does not need | Contrary to common wisdom, the IP Identification field does not need | |||
to be system-wide unique for each packet, but has to be unique for | to be system-wide unique for each packet, but has to be unique for | |||
each {Source Address, Destination Address, Protocol} tuple. | each {Source Address, Destination Address, Protocol} tuple. | |||
o For instance, the TCP specification defines a generic send() | For instance, the TCP specification defines a generic send() | |||
function which takes the IP ID as one of its arguments. | function which takes the IP ID as one of its arguments. | |||
We provide an analysis of the possible security improvements that | We provide an analysis of the possible security improvements that | |||
could be implemented, based on whether the protocol using the | could be implemented, based on whether the protocol using the | |||
services of IP is connection-oriented or connection-less. | services of IP is connection-oriented or connection-less. | |||
Connection-oriented protocols | 3.5.2.1. Connection-Oriented Transport Protocols | |||
To avoid the security implications of the information leakage | To avoid the security implications of the information leakage | |||
described above, a pseudo-random number generator (PRNG) could be | described above, a pseudo-random number generator (PRNG) could be | |||
used to set the IP Identification field on a {Source Address, | used to set the IP Identification field on a {Source Address, | |||
Destination Address} basis (for each connection-oriented transport | Destination Address} basis (for each connection-oriented transport | |||
protocol). | protocol). | |||
o [Klein2007] is a security advisory that describes a weakness in | [Klein2007] is a security advisory that describes a weakness in | |||
the pseudo random number generator (PRNG) in use for the | the pseudo random number generator (PRNG) in use for the | |||
generation of the IP Identification by a number of operating | generation of the IP Identification by a number of operating | |||
systems. | systems. | |||
While in theory a pseudo-random number generator could lead to | While in theory a pseudo-random number generator could lead to | |||
scenarios in which a given Identification number is used more than | scenarios in which a given Identification number is used more than | |||
once in the same time-span for datagrams that end up getting | once in the same time-span for datagrams that end up getting | |||
fragmented (with the corresponding potential reassembly problems), in | fragmented (with the corresponding potential reassembly problems), in | |||
practice this is unlikely to cause trouble. | practice this is unlikely to cause trouble. | |||
By default, most implementations of connection-oriented protocols, | By default, most implementations of connection-oriented protocols, | |||
such as TCP, implement some mechanism for avoiding fragmentation | such as TCP, implement some mechanism for avoiding fragmentation | |||
(such as the Path-MTU Discovery mechanism described in [RFC1191]). | (such as the Path-MTU Discovery mechanism described in [RFC1191]). | |||
Thus, fragmentation will only take place sporadically, when a non- | Thus, fragmentation will only take place sporadically, when a non- | |||
RFC-compliant middle-box is placed somewhere along the path that the | RFC-compliant middle-box is placed somewhere along the path that the | |||
packets travel to get to the destination host. Once the sending | packets travel to get to the destination host. Once the sending | |||
system is signaled by the middle-box that it should reduce the size | system is signaled by the middle-box that it should reduce the size | |||
of the packets it sends, fragmentation would be avoided. Also, for | of the packets it sends, fragmentation would be avoided. Also, for | |||
reassembly problems to arise, the same Identification field should be | reassembly problems to arise, the same Identification value would | |||
reused very frequently, and either strong packet reordering or packet | need to be reused very frequently, and either strong packet | |||
loss should take place. | reordering or packet loss would need to take place. | |||
Nevertheless, regardless of what policy is used for selecting the | Nevertheless, regardless of what policy is used for selecting the | |||
Identification field, with the current link speeds fragmentation is | Identification field, with the current link speeds fragmentation is | |||
already bad enough to rely on it. A mechanism for avoiding | already bad enough to rely on it. A mechanism for avoiding | |||
fragmentation should be implemented, instead. | fragmentation (such as [RFC1191] or [RFC4821] should be implemented, | |||
instead. | ||||
Connectionless protocols | 3.5.2.2. Connectionless Transport Protocols | |||
Connectionless protocols usually have these characteristics: | Connectionless transport protocols often have these characteristics: | |||
o lack of flow-control mechanisms, | o lack of flow-control mechanisms, | |||
o lack of packet sequencing mechanisms, and, | o lack of packet sequencing mechanisms, and/or, | |||
o lack of reliability mechanisms (such as "timeout and retransmit"). | o lack of reliability mechanisms (such as "timeout and retransmit"). | |||
This basically means that the scenarios and/or applications for which | This basically means that the scenarios and/or applications for which | |||
connection-less transport protocols are used assume that: | connection-less transport protocols are used assume that: | |||
o Applications will be used in environments in which packet | o Applications will be used in environments in which packet | |||
reordering is very unlikely (such as Local Area Networks), as the | reordering is very unlikely (such as Local Area Networks), as the | |||
transport protocol itself does not provide data sequencing. | transport protocol itself does not provide data sequencing. | |||
o The data transfer rates will be low enough that flow control will | o The data transfer rates will be low enough that flow control will | |||
be unnecessary. | be unnecessary. | |||
o Packet loss is not important and probably also unlikely. | o Packet loss is can be tolerated and/or is unlikely. | |||
With these assumptions in mind, the Identification field could still | With these assumptions in mind, the Identification field could still | |||
be set according to a pseudo-random number generator (PRNG). In the | be set according to a pseudo-random number generator (PRNG). In the | |||
event a given Identification number was reused while the first | event a given Identification number was reused while the first | |||
instance of the same number is still on the network, the first IP | instance of the same number is still on the network, the first IP | |||
datagram would be reassembled before the fragments of the second IP | datagram would be reassembled before the fragments of the second IP | |||
datagram get to their destination. | datagram get to their destination. | |||
In the event this was not the case, the reassembly of fragments would | In the event this was not the case, the reassembly of fragments would | |||
result in a corrupt datagram. While some existing work | result in a corrupt datagram. While some existing work | |||
[Silbersack2005] assumes that this error would be caught by some | [Silbersack2005] assumes that this error would be caught by some | |||
upper-layer error detection code, the error detection code in | upper-layer error detection code, the error detection code in | |||
question (such as UDP's checksum) might be intended to detect single | question (such as UDP's checksum) might not be able to reliably | |||
bit errors, rather than data corruption arising from the replacement | detect data corruption arising from the replacement of a complete | |||
of a complete data block (as is the case in corruption arising from | data block (as is the case in corruption arising from collision of IP | |||
collision of IP Identification numbers). | Identification numbers). | |||
o In the case of UDP, unfortunately some systems have been known to | In the case of UDP, unfortunately some systems have been known to | |||
not enable the UDP checksum by default. For most applications, | not enable the UDP checksum by default. For most applications, | |||
packets containing errors should be dropped. Probably the only | packets containing errors should be dropped. Probably the only | |||
application that may benefit from disabling the checksum is | application that may benefit from disabling the checksum is | |||
streaming media, to avoid dropping a complete sample for a single- | streaming media, to avoid dropping a complete sample for a single- | |||
bit error. | bit error. | |||
In general, if IP Identification number collisions become an issue | In general, if IP Identification number collisions become an issue | |||
for the application using the connection-less protocol, then use of a | for the application using the connection-less protocol, then use of a | |||
different transport protocol (which hopefully avoids fragmentation) | different transport protocol (which hopefully avoids fragmentation) | |||
should be considered. | should be considered. | |||
It must be noted that an attacker could intentionally exploit | It must be noted that an attacker could intentionally exploit | |||
collisions of IP Identification numbers to perform a Denial of | collisions of IP Identification numbers to perform a Denial-of- | |||
Service attack, by sending forged fragments that would cause the | Service attack, by sending forged fragments that would cause the | |||
reassembly process to result in a corrupt datagram that would either | reassembly process to result in a corrupt datagram that would either | |||
be dropped by the transport protocol, or would incorrectly be handed | be dropped by the transport protocol, or would incorrectly be handed | |||
to the corresponding application. This issue is discussed in detail | to the corresponding application. This issue is discussed in detail | |||
in section 4.1 ("Fragment Reassembly"). | in section 4.1 ("Fragment Reassembly"). | |||
3.7. Flags | 3.6. Flags | |||
The IP header contains 3 control bits, two of which are currently | The IP header contains 3 control bits, two of which are currently | |||
used for the fragmentation and reassembly function. | used for the fragmentation and reassembly function. | |||
As described by RFC 791, their meaning is: | As described by RFC 791, their meaning is: | |||
Bit 0: reserved, must be zero | o Bit 0: reserved, must be zero (i.e., reserved for future | |||
standardization) | ||||
Bit 1: (DF) 0 = May Fragment, 1 = Don't Fragment | o Bit 1: (DF) 0 = May Fragment, 1 = Don't Fragment | |||
Bit 2: (MF) 0 = Last Fragment, 1 = More Fragments | ||||
o Bit 2: (MF) 0 = Last Fragment, 1 = More Fragments | ||||
The DF bit is usually set to implement the Path-MTU Discovery (PMTUD) | The DF bit is usually set to implement the Path-MTU Discovery (PMTUD) | |||
mechanism described in [RFC1191]. However, it can also be exploited | mechanism described in [RFC1191]. However, it can also be exploited | |||
by an attacker to evade Network Intrusion Detection Systems. An | by an attacker to evade Network Intrusion Detection Systems. An | |||
attacker could send a packet with the DF bit set to a system | attacker could send a packet with the DF bit set to a system | |||
monitored by a NIDS, and depending on the Path-MTU to the intended | monitored by a NIDS, and depending on the Path-MTU to the intended | |||
recipient, the packet might be dropped by some intervening router | recipient, the packet might be dropped by some intervening router | |||
(because of being too big to be forwarded without fragmentation), | (because of being too big to be forwarded without fragmentation), | |||
without the NIDS being aware of it. | without the NIDS being aware of it. | |||
(still to be added) | +---+ | |||
(See Figure 3 in Page 13 of the CPNI document) | | H | | |||
+---+ Victim host | ||||
| | ||||
Router A | MTU=1500 | ||||
| | ||||
+---+ +---+ +---+ | ||||
| R |-----| R |---------| R | | ||||
+---+ +---+ +---+ | ||||
| MTU=17914 Router B | ||||
+---+ | | ||||
| S |-----+ | ||||
+---+ | | ||||
| | ||||
NIDS Sensor | | ||||
| | ||||
_ ___/---\______ Attacker | ||||
/ \_/ \_ +---+ | ||||
/ Internet |---------| H | | ||||
\_ __/ +---+ | ||||
\__ __ ___/ <------ | ||||
\___/ \__/ 17914-byte packet | ||||
DF bit set | ||||
Figure 4: NIDS evasion by means of the Internet Protocol DF bit | Figure 5: NIDS evasion by means of the Internet Protocol DF bit | |||
In Figure 3, an attacker sends a 17914-byte datagram meant to the | In Figure 3, an attacker sends a 17914-byte datagram meant to the | |||
victim host in the same figure. The attacker's packet probably | victim host in the same figure. The attacker's packet probably | |||
contains an overlapping IP fragment or an overlapping TCP segment, | contains an overlapping IP fragment or an overlapping TCP segment, | |||
aiming at "confusing" the NIDS, as described in [Ptacek1998]. The | aiming at "confusing" the NIDS, as described in [Ptacek1998]. The | |||
packet is screened by the NIDS sensor at the network perimeter, which | packet is screened by the NIDS sensor at the network perimeter, which | |||
probably reassembles IP fragments and TCP segments for the purpose of | probably reassembles IP fragments and TCP segments for the purpose of | |||
assessing the data transferred to and from the monitored systems. | assessing the data transferred to and from the monitored systems. | |||
However, as the attacker's packet should transit a link with an MTU | However, as the attacker's packet should transit a link with an MTU | |||
smaller than 17914 bytes (1500 bytes in this example), the router | smaller than 17914 bytes (1500 bytes in this example), the router | |||
that encounters that this packet cannot be forwarded without | that encounters that this packet cannot be forwarded without | |||
fragmentation (Router B) discards the packet, and sends an ICMP | fragmentation (Router B) discards the packet, and sends an ICMP | |||
"fragmentation needed and DF bit set" error message to the source | "fragmentation needed and DF bit set" error message to the source | |||
host. In this scenario, the NIDS may remain unaware that the | host. In this scenario, the NIDS may remain unaware that the | |||
screened packet never reached the intended destination, and thus get | screened packet never reached the intended destination, and thus get | |||
an incorrect picture of the data being transferred to the monitored | an incorrect picture of the data being transferred to the monitored | |||
systems. | systems. | |||
o [Shankar2003] introduces a technique named "Active Mapping" that | [Shankar2003] introduces a technique named "Active Mapping" that | |||
prevents evasion of a NIDS by acquiring sufficient knowledge about | prevents evasion of a NIDS by acquiring sufficient knowledge about | |||
the network being monitored, to assess which packets will arrive | the network being monitored, to assess which packets will arrive | |||
at the intended recipient, and how they will be interpreted by it. | at the intended recipient, and how they will be interpreted by it. | |||
Some firewalls are known to drop packets that have both the MF (More | Some firewalls are known to drop packets that have both the MF (More | |||
Fragments) and the DF (Don't fragment) bits set. While in principle | Fragments) and the DF (Don't fragment) bits set. While in principle | |||
such a packet might seem nonsensical, there are a number of reasons | such a packet might seem nonsensical, there are a number of reasons | |||
for which non-malicious packets with these two bits set can be found | for which non-malicious packets with these two bits set can be found | |||
in a network. First, they may exist as the result of some middle-box | in a network. First, they may exist as the result of some middle-box | |||
processing a packet that was too large to be forwarded without | processing a packet that was too large to be forwarded without | |||
fragmentation. Instead of simply dropping the corresponding packet | fragmentation. Instead of simply dropping the corresponding packet | |||
and sending an ICMP error message to the source host, some middle- | and sending an ICMP error message to the source host, some middle- | |||
boxes fragment the packet (copying the DF bit to each fragment), and | boxes fragment the packet (copying the DF bit to each fragment), and | |||
also send an ICMP error message to the originating system. Second, | also send an ICMP error message to the originating system. Second, | |||
some systems (notably Linux) set both the MF and the DF bits to | some systems (notably Linux) set both the MF and the DF bits to | |||
implement Path-MTU Discovery (PMTUD) for UDP. These scenarios should | implement Path-MTU Discovery (PMTUD) for UDP. These scenarios should | |||
be taken into account when configuring firewalls and/or tuning | be taken into account when configuring firewalls and/or tuning | |||
Network Intrusion Detection Systems (NIDS). | Network Intrusion Detection Systems (NIDS). | |||
3.8. Fragment Offset | Section 4.1 contains a discussion of the security implications of the | |||
IP fragment reassembly mechanism. | ||||
3.7. Fragment Offset | ||||
The Fragment Offset is used for the fragmentation and reassembly of | The Fragment Offset is used for the fragmentation and reassembly of | |||
IP datagrams. It indicates where in the original datagram the | IP datagrams. It indicates where in the original datagram payload | |||
fragment belongs, and is measured in units of eight bytes. As a | the payload of the fragment belongs, and is measured in units of | |||
consequence, all fragments (except the last one), have to be aligned | eight bytes. As a consequence, all fragments (except the last one), | |||
on an 8-byte boundary. Therefore, if a packet has the MF flag set, | have to be aligned on an 8-byte boundary. Therefore, if a packet has | |||
the following check should be enforced: | the MF flag set, the following check should be enforced: | |||
(Total Length - IHL * 4) % 8 == 0 | (Total Length - IHL * 4) % 8 == 0 | |||
If the packet does not pass this check, it should be dropped, and | If the packet does not pass this check, it should be dropped, and | |||
this event should be logged (e.g., a counter could be incremented | this event should be logged (e.g., a counter could be incremented | |||
reflecting the packet drop). | reflecting the packet drop). | |||
Given that Fragment Offset is a 13-bit field, it can hold a value of | Given that Fragment Offset is a 13-bit field, it can hold a value of | |||
up to 8191, which would correspond to an offset 65528 bytes within | up to 8191, which would correspond to an offset 65528 bytes within | |||
the original (non-fragmented) datagram. As such, it is possible for | the original (non-fragmented) datagram. As such, it is possible for | |||
skipping to change at page 18, line 40 | skipping to change at page 22, line 5 | |||
when the fragmentation mechanism would seem to allow fragments that | when the fragmentation mechanism would seem to allow fragments that | |||
could reassemble into such large datagrams, the intent of the | could reassemble into such large datagrams, the intent of the | |||
specification is to allow for the transmission of datagrams of up to | specification is to allow for the transmission of datagrams of up to | |||
65535 bytes. Therefore, if a given fragment would reassemble into a | 65535 bytes. Therefore, if a given fragment would reassemble into a | |||
datagram of more than 65535 bytes, the resulting datagram should be | datagram of more than 65535 bytes, the resulting datagram should be | |||
dropped, and this event should be logged (e.g., a counter could be | dropped, and this event should be logged (e.g., a counter could be | |||
incremented reflecting the packet drop). To detect such a case, the | incremented reflecting the packet drop). To detect such a case, the | |||
following check should be enforced on all packets for which the | following check should be enforced on all packets for which the | |||
Fragment Offset contains a non-zero value: | Fragment Offset contains a non-zero value: | |||
Fragment Offset * 8 + (Total Length - IHL * 4) <= 65535 | Fragment Offset * 8 + (Total Length - IHL * 4) + IHL_FF * 4 <= 65535 | |||
In the worst-case scenario, the reassembled datagram could have a | where IHL_FF is the IHL field of the first fragment (the one with a | |||
size of up to 131043 bytes. | Fragment Offset of 0). | |||
o Such a datagram would result when the first fragment has a | If a fragment does not pass this check, it should be dropped. | |||
If IHL_FF is not yet available because the first fragment has not yet | ||||
arrived, for a preliminary, less rigid test, IHL_FF == IHL should be | ||||
assumed, and the test is simplified to: | ||||
Fragment Offset * 8 + Total Length <= 65535 | ||||
Once the first fragment is received, the full sanity check described | ||||
earlier should be applied, if that fragment contains "don't copy" | ||||
options. | ||||
In the worst-case scenario, an attacker could craft IP fragments such | ||||
that the reassembled datagram reassembled into a datagram of 131043 | ||||
bytes. | ||||
Such a datagram would result when the first fragment has a | ||||
Fragment Offset of 0 and a Total Length of 65532, and the second | Fragment Offset of 0 and a Total Length of 65532, and the second | |||
(and last) fragment has a Fragment Offset of 8189 (65512 bytes), | (and last) fragment has a Fragment Offset of 8189 (65512 bytes), | |||
and a Total Length of 65535. Assuming an IHL of 5 (i.e., a header | and a Total Length of 65535. Assuming an IHL of 5 (i.e., a header | |||
length of 20 bytes), the reassembled datagram would be 65532 + | length of 20 bytes), the reassembled datagram would be 65532 + | |||
(65535 - 20) = 131047 bytes. | (65535 - 20) = 131047 bytes. | |||
Additionally, the IP module should implement all the necessary | Additionally, the IP module should implement all the necessary | |||
measures to be able to handle such illegitimate reassembled | measures to be able to handle such illegitimate reassembled | |||
datagrams, so as to avoid them from overflowing the buffer(s) used | datagrams, so as to avoid them from overflowing the buffer(s) used | |||
for the reassembly function. | for the reassembly function. | |||
o [CERT1996c] and [Kenney1996] describe the exploitation of this | [CERT1996c] and [Kenney1996] describe the exploitation of this | |||
issue to perform a Denial of Service (DoS) attack. | issue to perform a Denial-of-Service (DoS) attack. | |||
3.9. Time to Live (TTL) | Section 4.1 contains a discussion of the security implications of the | |||
IP fragment reassembly mechanism. | ||||
The Time to Live (TTL) field has two functions: to bind the lifetime | 3.8. Time to Live (TTL) | |||
The Time to Live (TTL) field has two functions: to bound the lifetime | ||||
of the upper-layer packets (e.g., TCP segments) and to prevent | of the upper-layer packets (e.g., TCP segments) and to prevent | |||
packets from looping indefinitely in the network. | packets from looping indefinitely in the network. | |||
Originally, this field was meant to indicate maximum time a datagram | Originally, this field was meant to indicate the maximum time a | |||
was allowed to remain in the internet system, in units of seconds. | datagram was allowed to remain in the internet system, in units of | |||
As every internet module that processes a datagram must decrement the | seconds. As every internet module that processes a datagram must | |||
TTL by at least one, the original definition of the TTL field became | decrement the TTL by at least one, the original definition of the TTL | |||
obsolete, and it must now be interpreted as a hop count. | field became obsolete, and in practice it is interpreted as a hop | |||
count (see Section 5.3.1 of [RFC1812]). | ||||
Most systems allow the administrator to configure the TTL to be used | Most systems allow the administrator to configure the TTL to be used | |||
for the packets sent, with the default value usually being a power of | for the packets they originate, with the default value usually being | |||
2. The recommended value for the TTL field, as specified by the IANA | a power of 2, or 255 (see e.g. [Arkin2000]). The recommended value | |||
is 64 [IANA2006b]. This value reflects the assumed "diameter" of the | for the TTL field, as specified by the IANA is 64 [IANA2006b]. This | |||
Internet, plus a margin to accommodate its growth. | value reflects the assumed "diameter" of the Internet, plus a margin | |||
to accommodate its growth. | ||||
The TTL field has a number of properties that are interesting from a | The TTL field has a number of properties that are interesting from a | |||
security point of view. Given that the default value used for the | security point of view. Given that the default value used for the | |||
TTL is usually a power of eight, chances are that, unless the | TTL is usually a power of two or 255, chances are that, unless the | |||
originating system has been explicitly tuned to use a non-default | originating system has been explicitly tuned to use a non-default | |||
value, if a packet arrives with a TTL of 60, the packet was | value, if a packet arrives with a TTL of 60, the packet was | |||
originally sent with a TTL of 64. In the same way, if a packet is | originally sent with a TTL of 64. In the same way, if a packet is | |||
received with a TTL of 120, chances are that the original packet had | received with a TTL of 120, chances are that the original packet had | |||
a TTL of 128. | a TTL of 128. | |||
o This discussion assumes there was no protocol scrubber, | This discussion assumes there was no protocol scrubber, | |||
transparent proxy, or some other middle-box that overwrites the | transparent proxy, or some other middle-box that overwrites the | |||
TTL field in a non-standard way, between the originating system | TTL field in a non-standard way, between the originating system | |||
and the point of the network in which the packet was received. | and the point of the network in which the packet was received. | |||
Asserting the TTL with which a packet was originally sent by the | Asserting the TTL with which a packet was originally sent by the | |||
source system can help to obtain valuable information. Among other | source system can help to obtain valuable information. Among other | |||
things, it may help in: | things, it may help in: | |||
o Fingerprinting the operating system being used by the source host. | o Fingerprinting the originating operating system. | |||
o Fingerprinting the physical device from which the packets | o Fingerprinting the originating physical device. | |||
originate. | ||||
o Locating the source host in the network topology. | o Mapping the network topology. | |||
Additionally, it can be used to perform functions such as: | o Locating the source host in the network topology. | |||
o Evading Network Intrusion Detection Systems. | o Evading Network Intrusion Detection Systems. | |||
However, it can also be used to perform important functions such as: | ||||
o Improving the security of applications that make use of the | o Improving the security of applications that make use of the | |||
Internet Protocol (IP). | Internet Protocol (IP). | |||
3.9.1. Fingerprinting the operating system in use by the source host | o Limiting spread of packets. | |||
3.8.1. Fingerprinting the operating system in use by the source host | ||||
Different operating systems use a different default TTL for the | Different operating systems use a different default TTL for the | |||
packets they send. Thus, asserting the TTL with which a packet was | packets they send. Thus, asserting the TTL with which a packet was | |||
originally sent will help to reduce the number of possible operating | originally sent will help heuristics to reduce the number of possible | |||
systems in use by the source host. | operating systems in use by the source host. | |||
3.9.2. Fingerprinting the physical device from which the packets | However, these defaults may be configurable (system-wide or per | |||
protocol) and managed systems may employ such opportunities for | ||||
operational purposes and to defeat the capability of fingerprinting | ||||
heuristics. | ||||
3.8.2. Fingerprinting the physical device from which the packets | ||||
originate | originate | |||
When several systems are behind a middle-box such as a NAT or a load | When several systems are behind a middle-box such as a NAT or a load | |||
balancer, the TTL may help to count the number of systems behind the | balancer, the TTL may help to count the number of systems behind the | |||
middle-box. If each of the systems behind the middle-box use a | middle-box. If each of the systems behind the middle-box uses a | |||
different default TTL for the packets they send, or they are located | different default TTL value for the packets it sends, or each system | |||
in a different place of the network topology, an attacker could | is located at different distances in the network topology, an | |||
stimulate responses from the devices being fingerprinted, and each | attacker could stimulate responses from the devices being | |||
response that arrives with a different TTL could be assumed to come | fingerprinted, and responses that arrive with different TTL values | |||
from a different device. | could be assumed to come from a different devices. | |||
o Of course, there are many other and much more precise techniques | Of course, there are many other (and much more precise) techniques | |||
to fingerprint physical devices. Among drawbacks of this method, | to fingerprint physical devices. One weakness of this method is | |||
while many systems differ in the default TTL they use for the | that, while many systems differ in the default TTL value that they | |||
packets they send, there are also many implementations which use | use, there are also many implementations which use the same | |||
the same default TTL. Additionally, packets sent by a given | default TTL value. Additionally, packets sent by a given device | |||
device may take different routes (e.g., due to load sharing or | may take different routes (e.g., due to load sharing or route | |||
route changes), and thus a given packet may incorrectly be | changes), and thus a given packet may incorrectly be presumed to | |||
presumed to come from a different device, when in fact it just | come from a different device, when in fact it just traveled a | |||
traveled a different route. | different route. | |||
3.9.3. Locating the source host in the network topology | However, these defaults may be configurable (system-wide or per | |||
protocol) and managed systems may employ such opportunities for | ||||
operational purposes and to defeat the capability of fingerprinting | ||||
heuristics. | ||||
3.8.3. Mapping the Network Topology | ||||
An originating host may set the TTL field of the packets it sends to | ||||
progressively increasing values in order to elicit an ICMP error | ||||
message from the routers that decrement the TTL of each packet to | ||||
zero, and thereby determine the IP addresses of the routers on the | ||||
path to the packet's destination. This procedure has been | ||||
traditionally employed by the traceroute tool. | ||||
3.8.4. Locating the source host in the network topology | ||||
The TTL field may also be used to locate the source system in the | The TTL field may also be used to locate the source system in the | |||
network topology [Northcutt2000]. | network topology [Northcutt2000]. | |||
+---+ +---+ +---+ +---+ +---+ | +---+ +---+ +---+ +---+ +---+ | |||
| A |-----| R |------| R |----| R |-----| R | | | A |-----| R |------| R |----| R |-----| R | | |||
+---+ +---+ +---+ +---+ +---+ | +---+ +---+ +---+ +---+ +---+ | |||
/ | / \ | / | / \ | |||
/ | / \ | / | / \ | |||
/ | / +---+ | / | / +---+ | |||
skipping to change at page 21, line 27 | skipping to change at page 25, line 32 | |||
+---+ +---+ +---+ \ +---| | +---+ +---+ +---+ \ +---| | |||
| R |----------| R |-- \ | | R |----------| R |-- \ | |||
+---+ +---+ \ \ | +---+ +---+ \ \ | |||
| \ / \ +---+| +---+ | | \ / \ +---+| +---+ | |||
| \ / ----| R |------| R | | | \ / ----| R |------| R | | |||
| \ / +---+ +---+ | | \ / +---+ +---+ | |||
+---+ \ +---+ +---+ | +---+ \ +---+ +---+ | |||
| B | \| R |----| C | | | B | \| R |----| C | | |||
+---+ +---+ +---+ | +---+ +---+ +---+ | |||
Figure 5: Tracking a host by means of the TTL field | Figure 6: Tracking a host by means of the TTL field | |||
Consider network topology of Figure 5. Assuming that an attacker | Consider network topology of Figure 6. Assuming that an attacker | |||
("F" in the figure) is performing some type of attack that requires | ("F" in the figure) is performing some type of attack that requires | |||
forging the Source Address (such as a TCP-based DoS reflection | forging the Source Address (such as for a TCP-based DoS reflection | |||
attack), and some of the involved hosts are willing to cooperate to | attack), and some of the involved hosts are willing to cooperate to | |||
locate the attacking system. | locate the attacking system. | |||
Assuming that: | Assuming that: | |||
o All the packets A gets have a TTL of 61. | o All the packets A gets have a TTL of 61. | |||
o All the packets B gets have a TTL of 61. | o All the packets B gets have a TTL of 61. | |||
o All the packets C gets have a TTL of 61. | o All the packets C gets have a TTL of 61. | |||
skipping to change at page 22, line 5 | skipping to change at page 26, line 10 | |||
o All the packets D gets have a TTL of 62. | o All the packets D gets have a TTL of 62. | |||
Based on this information, and assuming that the system's default | Based on this information, and assuming that the system's default | |||
value was not overridden, it would be fair to assume that the | value was not overridden, it would be fair to assume that the | |||
original TTL of the packets was 64. With this information, the | original TTL of the packets was 64. With this information, the | |||
number of hops between the attacker and each of the aforementioned | number of hops between the attacker and each of the aforementioned | |||
hosts can be calculated. | hosts can be calculated. | |||
The attacker is: | The attacker is: | |||
o Three hops away from A. | o Four hops away from A. | |||
o Three hops away from B. | o Four hops away from B. | |||
o Three hops away from C. | o Four hops away from C. | |||
o Two hops away from D. | o Four hops away from D. | |||
In the network setup of Figure 3, the only system that satisfies all | In the network setup of Figure 3, the only system that satisfies all | |||
these conditions is the one marked as the "F". | these conditions is the one marked as the "F". | |||
The scenario described above is for illustration purposes only. In | The scenario described above is for illustration purposes only. In | |||
practice, there are a number of factors that may prevent this | practice, there are a number of factors that may prevent this | |||
technique from being successfully applied: | technique from being successfully applied: | |||
o Unless there is a "large" number of cooperating systems, and the | o Unless there is a "large" number of cooperating systems, and the | |||
attacker is assumed to be no more than a few hops away from these | attacker is assumed to be no more than a few hops away from these | |||
a systems, the number of "candidate" hosts will usually be too | systems, the number of "candidate" hosts will usually be too large | |||
large for the information to be useful. | for the information to be useful. | |||
o The attacker may be using a non-default TTL value, or, what is | o The attacker may be using a non-default TTL value, or, what is | |||
worse, using a pseudo-random value for the TTL of the packets it | worse, using a pseudo-random value for the TTL of the packets it | |||
sends. | sends. | |||
o The packets sent by the attacker may take different routes, as a | o The packets sent by the attacker may take different routes, as a | |||
result of a change in network topology, load sharing, etc., and | result of a change in network topology, load sharing, etc., and | |||
thus may lead to an incorrect analysis. | thus may lead to an incorrect analysis. | |||
3.9.4. Evading Network Intrusion Detection Systems | 3.8.5. Evading Network Intrusion Detection Systems | |||
The TTL field can be used to evade Network Intrusion Detection | The TTL field can be used to evade Network Intrusion Detection | |||
Systems. Depending on the position of a sensor relative to the | Systems. Depending on the position of a sensor relative to the | |||
destination host of the examined packet, the NIDS may get a different | destination host of the examined packet, the NIDS may get a different | |||
picture from that of the intended destination system. As an example, | picture from that of the intended destination system. As an example, | |||
a sensor may process a packet that will expire before getting to the | a sensor may process a packet that will expire before getting to the | |||
destination host. A general counter-measure for this type of attack | destination host. A general countermeasure for this type of attack | |||
is to normalize the traffic that gets to an organizational network. | is to normalize the traffic that gets to an organizational network. | |||
Examples of such traffic normalization can be found in [Paxson2001]. | Examples of such traffic normalization can be found in [Paxson2001]. | |||
OpenBSD Packet Filter is an example of a packet filter that includes | ||||
TTL-normalization functionality [OpenBSD-PF] | ||||
3.9.5. Improving the security of applications that make use of the | 3.8.6. Improving the security of applications that make use of the | |||
Internet Protocol (IP) | Internet Protocol (IP) | |||
In some scenarios, the TTL field can be also used to improve the | In some scenarios, the TTL field can be also used to improve the | |||
security of an application, by restricting the hosts that can | security of an application, by restricting the hosts that can | |||
communicate with the given application . For example, there are | communicate with the given application [RFC5082]. For example, there | |||
applications for which the communicating systems are typically in the | are applications for which the communicating systems are typically in | |||
same network segment (i.e., there are no intervening routers). Such | the same network segment (i.e., there are no intervening routers). | |||
an application is the BGP (Border Gateway Protocol) between utilized | Such an application is the BGP (Border Gateway Protocol) utilized by | |||
by two peer routers. | two peer routers (usually on a shared link medium). | |||
If both systems use a TTL of 255 for all the packets they send to | If both systems use a TTL of 255 for all the packets they send to | |||
each other, then a check could be enforced to require all packets | each other, then a check could be enforced to require all packets | |||
meant for the application in question to have a TTL of 255. | meant for the application in question to have a TTL of 255. | |||
As all packets sent by systems that are not in the same network | As all packets sent by systems that are not in the same network | |||
segment will have a TTL smaller than 255, those packets will not pass | segment will have a TTL smaller than 255, those packets will not pass | |||
the check enforced by these two cooperating peers. This check | the check enforced by these two cooperating peers. This check | |||
reduces the set of systems that may perform attacks against the | reduces the set of systems that may perform attacks against the | |||
protected application (BGP in this case), thus mitigating the attack | protected application (BGP in this case), thus mitigating the attack | |||
vectors described in [NISCC2004] and [Watson2004]. | vectors described in [NISCC2004] and [Watson2004]. | |||
o This same check is enforced for related ICMP error messages, with | This same check is enforced for related ICMP error messages, with | |||
the intent of mitigating the attack vectors described in | the intent of mitigating the attack vectors described in | |||
[NISCC2005] and [I-D.ietf-tcpm-icmp-attacks]. | [NISCC2005] and [I-D.ietf-tcpm-icmp-attacks]. | |||
The TTL field can be used in a similar way in scenarios in which the | The TTL field can be used in a similar way in scenarios in which the | |||
cooperating systems either do not use a default TTL of 255, or are | cooperating systems are not in the same network segment (i.e., multi- | |||
not in the same network segment (i.e., multi-hop peering). In that | hop peering). In that case, the following check could be enforced: | |||
case, the following check could be enforced: | ||||
TTL >= 255 - DeltaHops | TTL >= 255 - DeltaHops | |||
This means that the set of hosts from which packets will be accepted | This means that the set of hosts from which packets will be accepted | |||
for the protected application will be reduced to those that are no | for the protected application will be reduced to those that are no | |||
more than DeltaHops away. While for obvious reasons the level of | more than DeltaHops away. While for obvious reasons the level of | |||
protection will be smaller than in the case of directly-connected | protection will be smaller than in the case of directly-connected | |||
peers, the use of the TTL field for protecting multi-hop peering | peers, the use of the TTL field for protecting multi-hop peering | |||
still reduces the set of hosts that could potentially perform a | still reduces the set of hosts that could potentially perform a | |||
number of attacks against the protected application. | number of attacks against the protected application. | |||
skipping to change at page 23, line 46 | skipping to change at page 28, line 6 | |||
This use of the TTL field has been officially documented by the IETF | This use of the TTL field has been officially documented by the IETF | |||
under the name "Generalized TTL Security Mechanism" (GTSM) in | under the name "Generalized TTL Security Mechanism" (GTSM) in | |||
[RFC5082]. | [RFC5082]. | |||
Some protocol scrubbers enforce a minimum value for the TTL field of | Some protocol scrubbers enforce a minimum value for the TTL field of | |||
the packets they forward. It must be understood that depending on | the packets they forward. It must be understood that depending on | |||
the minimum TTL being enforced, and depending on the particular | the minimum TTL being enforced, and depending on the particular | |||
network setup, the protocol scrubber may actually help attackers to | network setup, the protocol scrubber may actually help attackers to | |||
fool the GTSM, by "raising" the TTL of the attacking packets. | fool the GTSM, by "raising" the TTL of the attacking packets. | |||
3.10. Protocol | 3.8.7. Limiting spread | |||
The originating host sets the TTL field to a small value (frequently | ||||
1, for link-scope services) in order to artifically limit the | ||||
(topological) distance the packet is allowed to travel. This is | ||||
suggested in Section 4.2.2.9 of RFC 1812 [RFC1812]. Further | ||||
discussion of this technique can be found in in RFC 1112 [RFC1112]. | ||||
3.9. Protocol | ||||
The Protocol field indicates the protocol encapsulated in the | The Protocol field indicates the protocol encapsulated in the | |||
internet datagram. The Protocol field may not only contain a value | internet datagram. The Protocol field may not only contain a value | |||
corresponding to an implemented protocol within the system, but also | corresponding to a protocol implemented by the system processing the | |||
a value corresponding to a protocol not implemented, or even a value | packet, but also a value corresponding to a protocol not implemented, | |||
not yet assigned by the IANA [IANA2006c]. | or even a value not yet assigned by the IANA [IANA2006c]. | |||
While in theory there should not be security implications from the | While in theory there should not be security implications from the | |||
use of any value in the protocol field, there have been security | use of any value in the protocol field, there have been security | |||
issues in the past with systems that had problems when handling | issues in the past with systems that had problems when handling | |||
packets with some specific protocol numbers [Cisco2003] [CERT2003]. | packets with some specific protocol numbers [Cisco2003] [CERT2003]. | |||
3.11. Header Checksum | 3.10. Header Checksum | |||
The Header Checksum field is an error detection mechanism meant to | The Header Checksum field is an error detection mechanism meant to | |||
detect errors in the IP header. While in principle there should not | detect errors in the IP header. While in principle there should not | |||
be security implications arising from this field, it should be noted | be security implications arising from this field, it should be noted | |||
that due to non-RFC-compliant implementations, the Header Checksum | that due to non-RFC-compliant implementations, the Header Checksum | |||
might be exploited to detect firewalls and/or evade network intrusion | might be exploited to detect firewalls and/or evade network intrusion | |||
detection systems (NIDS). | detection systems (NIDS). | |||
[Ed3f2002] describes the exploitation of the TCP checksum for | [Ed3f2002] describes the exploitation of the TCP checksum for | |||
performing such actions. As there are internet routers known to not | performing such actions. As there are internet routers known to not | |||
check the IP Header Checksum, and there might also be middle-boxes | check the IP Header Checksum, and there might also be middle-boxes | |||
(NATs, firewalls, etc.) not checking the IP checksum allegedly due to | (NATs, firewalls, etc.) not checking the IP checksum allegedly due to | |||
performance reasons, similar malicious activity to the one described | performance reasons, similar malicious activity to the one described | |||
in [Ed3f2002] might be performed with the IP checksum. | in [Ed3f2002] might be performed with the IP checksum. | |||
3.12. Source Address | 3.11. Source Address | |||
The Source Address of an IP datagram identifies the node from which | The Source Address of an IP datagram identifies the node from which | |||
the packet originated. | the packet originated. | |||
o Strictly speaking, the Source Address of an IP datagram identifies | Strictly speaking, the Source Address of an IP datagram identifies | |||
the interface of the sending system from which the packet was | the interface of the sending system from which the packet was | |||
sent, (rather than the originating "system"), as in the Internet | sent, (rather than the originating "system"), as in the Internet | |||
Architecture there's no concept of "node". | Architecture there's no concept of "node address". | |||
Unfortunately, it is trivial to forge the Source Address of an | Unfortunately, it is trivial to forge the Source Address of an | |||
Internet datagram. This has been exploited in the past for | Internet datagram because of the apparent lack of consistent "egress | |||
performing a variety of DoS (Denial of Service) attacks [NISCC2004] | filtering" near the edge of the network. This has been exploited in | |||
[RFC4987] [CERT1996a] [CERT1996b] [CERT1998a], and to impersonate as | the past for performing a variety of DoS (Denial of Service) attacks | |||
other systems in scenarios in which authentication was based on the | [NISCC2004] [RFC4987] [CERT1996a] [CERT1996b] [CERT1998a], and to | |||
Source Address of the sending system [daemon91996]. | impersonate as other systems in scenarios in which authentication was | |||
based on the Source Address of the sending system [daemon91996]. | ||||
The extent to which these attacks can be successfully performed in | The extent to which these attacks can be successfully performed in | |||
the Internet can be reduced through deployment of ingress/egress | the Internet can be reduced through deployment of ingress/egress | |||
filtering in the internet routers. [NISCC2006] is a detailed guide | filtering in the internet routers. [NISCC2006] is a detailed guide | |||
on ingress and egress filtering. [RFC3704] and [RFC2827] discuss | on ingress and egress filtering. [RFC2827] and [RFC3704] discuss | |||
ingress filtering. [GIAC2000] discusses egress filtering. | ingress filtering. [GIAC2000] discusses egress filtering. | |||
[SpooferProject] measures the Internet's susceptibility to forged | ||||
Source Address IP packets. | ||||
o Even when the obvious field on which to perform checks for | Even when the obvious field on which to perform checks for | |||
ingress/egress filtering is the Source Address and Destination | ingress/egress filtering is the Source Address and Destination | |||
Address fields of the IP header, there are other occurrences of IP | Address fields of the IP header, there are other occurrences of IP | |||
addresses on which the same type of checks should be performed. | addresses on which the same type of checks should be performed. | |||
One example is the IP addresses contained in the payload of ICMP | One example is the IP addresses contained in the payload of ICMP | |||
error messages, as discussed in [I-D.ietf-tcpm-icmp-attacks] and | error messages, as discussed in [I-D.ietf-tcpm-icmp-attacks] and | |||
[Gont2006]. | [Gont2006]. | |||
There are a number of sanity checks that should be performed on the | There are a number of sanity checks that should be performed on the | |||
Source Address of an IP datagram. Details can be found in Section | Source Address of an IP datagram. Details can be found in Section | |||
4.2 ("Addressing"). | 4.2 ("Addressing"). | |||
Additionally, there exist freely available tools that allow | Additionally, there exist freely available tools that allow | |||
administrators to monitor which IP addresses are used with which MAC | administrators to monitor which IP addresses are used with which MAC | |||
addresses [LBNL2006]. This functionality is also included in many | addresses [LBNL2006]. This functionality is also included in many | |||
Network Intrusion Detection Systems (NIDS). | Network Intrusion Detection Systems (NIDS). | |||
It is also very important to understand that authentication should | It is also very important to understand that authentication should | |||
never rely on the Source Address of the communicating systems. | never rely solely on the Source Address used by the communicating | |||
systems. | ||||
3.13. Destination Address | 3.12. Destination Address | |||
The Destination Address of an IP datagram identifies the destination | The Destination Address of an IP datagram identifies the destination | |||
host to which the packet is meant to be delivered. | host to which the packet is meant to be delivered. | |||
o Strictly speaking, the Destination Address of an IP datagram | Strictly speaking, the Destination Address of an IP datagram | |||
identifies the interface of the destination network interface, | identifies the interface of the destination network interface, | |||
rather than the destination "system", as in the Internet | rather than the destination "system", as in the Internet | |||
Architecture there's no concept of "node". | Architecture there's no concept of "node address". | |||
There are a number of sanity checks that should be performed on the | There are a number of sanity checks that should be performed on the | |||
Destination Address of an IP datagram. Details can be found in | Destination Address of an IP datagram. Details can be found in | |||
Section 4.2 ("Addressing"). | Section 4.2 ("Addressing"). | |||
3.14. Options | 3.13. Options | |||
According to RFC 791, IP options must be implemented by all IP | According to RFC 791, IP options must be implemented by all IP | |||
modules, both in hosts and gateways (i.e., end-systems and | modules, both in hosts and gateways (i.e., end-systems and | |||
intermediate-systems). | intermediate-systems). This means that the general rules for | |||
assembling, parsing, and processing of IP options must be | ||||
implemented. RFC 791 defines a set of options that "must be | ||||
understood", but this set has been updated by RFC 1122 [RFC1122], RFC | ||||
1812 [RFC1812], and other documents. Section 3.13.2 of this document | ||||
describes for each option type the current understanding of the | ||||
implementation requirements. IP systems are required to ignore | ||||
options they do not implement. | ||||
There are two cases for the format of an option: | There are two cases for the format of an option: | |||
o Case 1: A single byte of option-type. | o Case 1: A single byte of option-type. | |||
o Case 2: An option-type byte, an option-length byte, and the actual | o Case 2: An option-type byte, an option-length byte, and the actual | |||
option-data bytes. | option-data bytes. | |||
In the Case 2, the option-length byte counts the option-type byte and | In Case 2, the option-length byte counts the option-type byte and the | |||
the option-length byte, as well as the actual option-data bytes. | option-length byte, as well as the actual option-data bytes. | |||
All options except "End of Option List" (Type = 0) and "No Operation" | All current and future options except "End of Option List" (Type = 0) | |||
(Type = 1), are of Class 2. | and "No Operation" (Type = 1), are of Class 2. | |||
The option-type has three fields: | The option-type has three fields: | |||
o 1 bit: copied flag. | o 1 bit: copied flag. | |||
o 2 bits: option class. | o 2 bits: option class. | |||
o 5 bits: option number. | o 5 bits: option number. | |||
This format allows for the creation of new options for the extension | ||||
of the Internet Protocol (IP) and their transparent treatment on | ||||
intermediate systems that do not "understand" them, under direction | ||||
of the first three functional parts. | ||||
The copied flag indicates whether this option should be copied to all | The copied flag indicates whether this option should be copied to all | |||
fragments in the event the packet carrying it needs to be fragmented: | fragments in the event the packet carrying it needs to be fragmented: | |||
o 0 = not copied. | o 0 = not copied. | |||
o 1 = copied. | o 1 = copied. | |||
The values for the option class are: | The values for the option class are: | |||
o 0 = control. | o 0 = control. | |||
o 1 = reserved for future use. | o 1 = reserved for future use. | |||
o 2 = debugging and measurement. | o 2 = debugging and measurement. | |||
o 3 = reserved for future use. | o 3 = reserved for future use. | |||
This format allows for the creation of new options for the extension | ||||
of the Internet Protocol (IP). | ||||
Finally, the option number identifies the syntax of the rest of the | Finally, the option number identifies the syntax of the rest of the | |||
option. | option. | |||
3.14.1. General issues with IP options | [IANA2006b] contains the list of the currently assigned IP option | |||
numbers. It should be noted that IP systems are required to ignore | ||||
those options they do not implement. | ||||
3.13.1. General issues with IP options | ||||
The following subsections discuss security issues that apply to all | The following subsections discuss security issues that apply to all | |||
IP options. The proposed checks should be performed in addition to | IP options. The proposed checks should be performed in addition to | |||
any option-specific checks proposed in the next sections. | any option-specific checks proposed in the next sections. | |||
3.14.1.1. Processing requirements | 3.13.1.1. Processing requirements | |||
Router manufacturers tend to do IP option processing on the main | Router manufacturers tend to do IP option processing on the main | |||
processor, rather than on line cards. Unless special care is taken, | processor, rather than on line cards. Unless special care is taken, | |||
this represents Denial of Service (DoS) risk, as there is potential | this represents Denial of Service (DoS) risk, as there is potential | |||
for overwhelming the router with option processing. | for overwhelming the router with option processing. | |||
To reduce the impact of these packets on the system performance, a | To reduce the impact of these packets on the system performance, a | |||
few counter-measures could be implemented: | few countermeasures could be implemented: | |||
o Rate-limit the number of packets with IP options that are | o Rate-limit the number of packets with IP options that are | |||
processed by the system. | processed by the system. | |||
o Enforce a limit on the maximum number of options to be accepted on | o Enforce a limit on the maximum number of options to be accepted on | |||
a given internet datagram. | a given internet datagram. | |||
The first check avoids a flow of packets with IP options to overwhelm | The first check avoids a flow of packets with IP options to overwhelm | |||
the system in question. The second check avoids packets with | the system in question. The second check avoids packets with many IP | |||
multiple IP options to affect the performance of the system. | options to affect the performance of the system. | |||
3.14.1.2. Processing of the options by the upper layer protocol | 3.13.1.2. Processing of the options by the upper layer protocol | |||
Section 3.2.1.8 of RFC 1122 [RFC1122] states that all the IP options | Section 3.2.1.8 of RFC 1122 [RFC1122] states that all the IP options | |||
received in IP datagrams must be passed to the transport layer (or to | received in IP datagrams must be passed to the transport layer (or to | |||
ICMP processing when the datagram is an ICMP message). Therefore, | ICMP processing when the datagram is an ICMP message). Therefore, | |||
care in option processing must be taken not only at the internet | care in option processing must be taken not only at the internet | |||
layer, but also in every protocol module that may end up processing | layer, but also in every protocol module that may end up processing | |||
the options included in an IP datagram. | the options included in an IP datagram. | |||
3.14.1.3. General sanity checks on IP options | 3.13.1.3. General sanity checks on IP options | |||
There are a number of sanity checks that should be performed on IP | There are a number of sanity checks that should be performed on IP | |||
options before further option processing is done. They help prevent | options before further option processing is done. They help prevent | |||
a number of potential security problems, including buffer overflows. | a number of potential security problems, including buffer overflows. | |||
When these checks fail, the packet carrying the option should be | When these checks fail, the packet carrying the option should be | |||
dropped, and this event should be logged (e.g., a counter could be | dropped, and this event should be logged (e.g., a counter could be | |||
incremented to reflect the packet drop). | incremented to reflect the packet drop). | |||
RFC 1122 [RFC1122] recommends to send an ICMP "Parameter Problem" | RFC 1122 [RFC1122] recommends to send an ICMP "Parameter Problem" | |||
message to the originating system when a packet is dropped because of | message to the originating system when a packet is dropped because of | |||
a invalid value in a field, such as the cases discussed in the | an invalid value in a field, such as the cases discussed in the | |||
following subsections. Sending such a message might help in | following subsections. Sending such a message might help in | |||
debugging some network problems. However, it would also alert | debugging some network problems. However, it would also alert | |||
attackers about the system that is dropping packets because of the | attackers about the system that is dropping packets because of the | |||
invalid values in the protocol fields. | invalid values in the protocol fields. | |||
We advice that systems default to sending an ICMP "Parameter Problem" | We advice that systems default to sending an ICMP "Parameter Problem" | |||
error message when a packet is dropped because of an invalid value in | error message when a packet is dropped because of an invalid value in | |||
a protocol field (e.g., as a result of dropping a packet due to the | a protocol field (e.g., as a result of dropping a packet due to the | |||
sanity checks described in this section). However, we recommend that | sanity checks described in this section). However, we recommend that | |||
systems provide a system-wide toggle that allows an administrator to | systems provide a system-wide toggle that allows an administrator to | |||
override the default behavior so that packets can be silently dropped | override the default behavior so that packets can be silently dropped | |||
due when an invalid value in a protocol field is encountered. | when an invalid value in a protocol field is encountered. | |||
Option length | Option length | |||
Section 3.2.1.8 of RFC 1122 explicitly states that the IP layer must | ||||
not crash as the result of an option length that is outside the | ||||
possible range, and mentions that erroneous option lengths have been | ||||
observed to put some IP implementations into infinite loops. | ||||
For options that belong to the "Case 2" described in the previous | Section 3.2.1.8 of RFC 1122 explicitly states that the IP layer | |||
section, the following check should be performed: | must not crash as the result of an option length that is outside | |||
the possible range, and mentions that erroneous option lengths | ||||
have been observed to put some IP implementations into infinite | ||||
loops. | ||||
For options that belong to the "Case 2" described in the previous | ||||
section, the following check should be performed: | ||||
option-length >= 2 | option-length >= 2 | |||
o The value "2" accounts for the option-type byte, and the option- | The value "2" accounts for the option-type byte, and the | |||
length byte. | option-length byte. | |||
This check prevents, among other things, loops in option processing | This check prevents, among other things, loops in option | |||
that may arise from incorrect option lengths. | processing that may arise from incorrect option lengths. | |||
Additionally, while the option-length byte of IP options of "Case 2" | Additionally, while the option-length byte of IP options of | |||
allows for an option length of up to 255 bytes, there is a limit on | "Case 2" allows for an option length of up to 255 bytes, there is | |||
legitimate option length imposed by the syntax of the IP header. | a limit on legitimate option length imposed by the space available | |||
for options in the IP header. | ||||
For all options of "Case 2", the following check should be enforced: | For all options of "Case 2", the following check should be | |||
enforced: | ||||
option-offset + option-length <= IHL * 4 | option-offset + option-length <= IHL * 4 | |||
Where option-offset is the offset of the first byte of the option | Where option-offset is the offset of the first byte of the option | |||
within the IP header, with the first byte of the IP header being | within the IP header, with the first byte of the IP header being | |||
assigned an offset of 0. | assigned an offset of 0. | |||
If a packet does not pass these checks, the corresponding packet | This check assures that the option does not claim to extend beyond | |||
should be dropped, and this event should be logged (e.g., a counter | the IP header. If the packet does not pass this check, it should | |||
could be incremented to reflect the packet drop). | be dropped, and this event should be logged (e.g., a counter could | |||
be incremented to reflect the packet drop). | ||||
The aforementioned check is meant to detect forged option-length | The aforementioned check is meant to detect forged option-length | |||
values that might make an option overlap with the IP payload. This | values that might make an option overlap with the IP payload. | |||
would be particularly dangerous for those IP options which request | This would be particularly dangerous for those IP options which | |||
the processing systems to write information into the option-data area | request the processing systems to write information into the | |||
(such as the Record Route option), as it would allow the generation | option-data area (such as the Record Route option), as it would | |||
of overflows. | allow the generation of overflows. | |||
Data types | Data types | |||
Many IP options use pointer and length fields. Care must be taken as | Many IP options use pointer and length fields. Care must be taken | |||
to the data type used for these fields in the implementation. For | as to the data type used for these fields in the implementation. | |||
example, if an 8-bit signed data type were used to hold an 8-bit | For example, if an 8-bit signed data type were used to hold an | |||
pointer, then, pointer values larger than 128 might mistakenly be | 8-bit pointer, then, pointer values larger than 128 might | |||
interpreted as negative numbers, and thus might lead to unpredictable | mistakenly be interpreted as negative numbers, and thus might lead | |||
results. | to unpredictable results. | |||
3.14.2. Issues with specific options | ||||
3.14.2.1. End of Option List (Type = 0) | 3.13.2. Issues with specific options | |||
3.13.2.1. End of Option List (Type=0) | ||||
This option is used to indicate the "end of options" in those cases | This option is used to indicate the "end of options" in those cases | |||
in which the end of options would not coincide with the end of the | in which the end of options would not coincide with the end of the | |||
Internet Protocol Header. | Internet Protocol Header. Octets in the IP header following the "End | |||
of Option List" are to be regarded as padding (they should set to 0 | ||||
by the originator and must to be ignored by receiving nodes). | ||||
IP systems are required to ignore those options they do not | However, an originating node could alternatively fill the remaining | |||
implement. Therefore, even in those cases in which this option is | space in the Internet header with No Operation options (see | |||
required, but is missing, IP systems should be able to process the | Section 3.13.2.2). The End of Option List option allows slightly | |||
remaining bytes of the IP header without any problems. | more efficient parsing on receiving nodes and should be preferred by | |||
packet originators. All IP systems are required to understand both | ||||
encodings. | ||||
3.14.2.2. No Operation (Type = 1) | 3.13.2.2. No Operation (Type=1) | |||
The no-operation option is basically meant to allow the sending | The no-operation option is basically meant to allow the sending | |||
system to align subsequent options in, for example, 32-bit | system to align subsequent options in, for example, 32-bit | |||
boundaries. | boundaries, but it can also be used at the end of the options (se | |||
Section Section 3.13.2.1). | ||||
With a single exception (see Section 3.13.2.13 below), this option is | ||||
the only IP option defined so far that can occur in multiple | ||||
instances in a single IP packet. | ||||
This option does not have security implications. | This option does not have security implications. | |||
3.14.2.3. Loose Source Record Route (LSRR) (Type = 131) | 3.13.2.3. Loose Source and Record Route (LSRR) (Type=131) | |||
This option lets the originating system specify a number of | This option lets the originating system specify a number of | |||
intermediate systems a packet must pass through to get to the | intermediate systems a packet must pass through to get to the | |||
destination host. Additionally, the route followed by the packet is | destination host. Additionally, the route followed by the packet is | |||
recorded in the option. The receiving host (end-system) must use the | recorded in the option. The receiving host (end-system) must use the | |||
reverse of the path contained in the received LSRR option. | reverse of the path contained in the received LSRR option. | |||
The LSSR option can be of help in debugging some network problems. | The LSSR option can be of help in debugging some network problems. | |||
Some ISP (Internet Service Provider) peering agreements require | Some ISP (Internet Service Provider) peering agreements require | |||
support for this option in the routers within the peer of the ISP. | support for this option in the routers within the peer of the ISP. | |||
skipping to change at page 29, line 45 | skipping to change at page 35, line 4 | |||
The LSSR option can be of help in debugging some network problems. | The LSSR option can be of help in debugging some network problems. | |||
Some ISP (Internet Service Provider) peering agreements require | Some ISP (Internet Service Provider) peering agreements require | |||
support for this option in the routers within the peer of the ISP. | support for this option in the routers within the peer of the ISP. | |||
The LSRR option has well-known security implications. Among other | The LSRR option has well-known security implications. Among other | |||
things, the option can be used to: | things, the option can be used to: | |||
o Bypass firewall rules | o Bypass firewall rules | |||
o Reach otherwise unreachable internet systems | o Reach otherwise unreachable internet systems | |||
o Establish TCP connections in a stealthy way | o Establish TCP connections in a stealthy way | |||
o Learn about the topology of a network | o Learn about the topology of a network | |||
o Perform bandwidth-exhaustion attacks | o Perform bandwidth-exhaustion attacks | |||
Of these attack vectors, the one that has probably received least | Of these attack vectors, the one that has probably received least | |||
attention is the use of the LSRR option to perform bandwidth | attention is the use of the LSRR option to perform bandwidth | |||
exhaustion attacks. The LSRR option can be used as an amplification | exhaustion attacks. The LSRR option can be used as an amplification | |||
method for performing bandwidth-exhaustion attacks, as an attacker | method for performing bandwidth-exhaustion attacks, as an attacker | |||
could make a packet bounce multiple times between a number of systems | could make a packet bounce multiple times between a number of systems | |||
by carefully crafting an LSRR option. | by carefully crafting an LSRR option. | |||
o This is the IPv4-version of the IPv6 amplification attack that was | This is the IPv4-version of the IPv6 amplification attack that was | |||
widely publicized in 2007 [Biondi2007]. The only difference is | widely publicized in 2007 [Biondi2007]. The only difference is | |||
that the maximum length of the IPv4 header (and hence the LSRR | that the maximum length of the IPv4 header (and hence the LSRR | |||
option) limits the amplification factor when compared to the IPv6 | option) limits the amplification factor when compared to the IPv6 | |||
counter-part. | counter-part. | |||
While the LSSR option may be of help in debugging some network | While the LSSR option may be of help in debugging some network | |||
problems, its security implications outweigh any legitimate use. | problems, its security implications outweigh any legitimate use. | |||
All systems should, by default, drop IP packets that contain an LSRR | All systems should, by default, drop IP packets that contain an LSRR | |||
option, and should log this event (e.g., a counter could be | option, and should log this event (e.g., a counter could be | |||
skipping to change at page 30, line 39 | skipping to change at page 35, line 45 | |||
Section 3.3.5 of RFC 1122 [RFC1122] states that a host may be able to | Section 3.3.5 of RFC 1122 [RFC1122] states that a host may be able to | |||
act as an intermediate hop in a source route, forwarding a source- | act as an intermediate hop in a source route, forwarding a source- | |||
routed datagram to the next specified hop. We strongly discourage | routed datagram to the next specified hop. We strongly discourage | |||
host software from forwarding source-routed datagrams. | host software from forwarding source-routed datagrams. | |||
If processing of source-routed datagrams is explicitly enabled in a | If processing of source-routed datagrams is explicitly enabled in a | |||
system, the following sanity checks should be performed. | system, the following sanity checks should be performed. | |||
RFC 791 states that this option should appear, at most, once in a | RFC 791 states that this option should appear, at most, once in a | |||
given packet. Thus, if a packet is found to have more than one LSRR | given packet. Thus, if a packet contains more than one LSRR option, | |||
option, it should be dropped, and this event should be logged (e.g., | it should be dropped, and this event should be logged (e.g., a | |||
a counter could be incremented to reflect the packet drop). | counter could be incremented to reflect the packet drop). | |||
Therefore, hosts and routers should discard packets that contain more | Additionally, packets containing a combination of LSRR and SSRR | |||
than one LSRR option. Additionally, if a packet were found to have | options should be dropped, and this event should be logged (e.g., a | |||
both LSRR and SSRR options, it should be dropped, and this event | counter could be incremented to reflect the packet drop). | |||
should be logged (e.g., a counter could be incremented to reflect the | ||||
packet drop). | ||||
As many other IP options, the LSSR contains a Length field that | As all other IP options of "Case 2", the LSSR contains a Length field | |||
indicates the length of the option. Given the format of the option, | that indicates the length of the option. Given the format of the | |||
the Length field should be checked to be at least 3 (three): | option, the Length field should be checked to have a minimum value of | |||
three and be 3 (3 + n*4): | ||||
LSRR.Length >= 3 | LSRR.Length % 4 == 3 && LSRR.Length != 0 | |||
If the packet does not pass this check, it should be dropped, and | If the packet does not pass this check, it should be dropped, and | |||
this event should be logged (e.g., a counter could be incremented to | this event should be logged (e.g., a counter could be incremented to | |||
reflect the packet drop). | reflect the packet drop). | |||
Additionally, the following check should be performed on the Length | ||||
field: | ||||
LSRR.Offset + LSRR.Length < IHL *4 | ||||
This check assures that the option does not overlap with the IP | ||||
payload (i.e., it does not go past the IP header). If the packet | ||||
does not pass this check, it should be dropped, and this event should | ||||
be logged (e.g., a counter could be incremented to reflect the packet | ||||
drop). | ||||
The Pointer is relative to this option. Thus, the minimum legal | The Pointer is relative to this option. Thus, the minimum legal | |||
value is 4. Therefore, the following check should be performed. | value is 4. Therefore, the following check should be performed. | |||
LSRR.Pointer >= 4 | LSRR.Pointer >= 4 | |||
If the packet does not pass this check, it should be dropped, and | If the packet does not pass this check, it should be dropped, and | |||
this event should be logged (e.g., a counter could be incremented to | this event should be logged (e.g., a counter could be incremented to | |||
reflect the packet drop). Additionally, the Pointer field should be | reflect the packet drop). Additionally, the Pointer field should be | |||
a multiple of 4. Consequently, the following check should be | a multiple of 4. Consequently, the following check should be | |||
performed: | performed: | |||
LSRR.Pointer % 4 == 0 | LSRR.Pointer % 4 == 0 | |||
If a packet does not pass this check, it should be dropped, and this | If a packet does not pass this check, it should be dropped, and this | |||
event should be logged (e.g., a counter could be incremented to | event should be logged (e.g., a counter could be incremented to | |||
reflect the packet drop). | reflect the packet drop). | |||
When a system receives an IP packet with the LSRR route option, it | When a system receives an IP packet with the LSRR option passing the | |||
should check whether the source route is empty or not. The option is | above checks, it should check whether the source route is empty or | |||
empty if: | not. The option is empty if: | |||
LSRR.Pointer > LSRR.Length | LSRR.Pointer > LSRR.Length | |||
In that case, routing should be based on the Destination Address | In that case, routing should be based on the Destination Address | |||
field, and no further processing should be done on the LSRR option. | field, and no further processing should be done on the LSRR option. | |||
o [Microsoft1999] is a security advisory about a vulnerability | [Microsoft1999] is a security advisory about a vulnerability | |||
arising from improper validation of the LSRR.Pointer field. | arising from improper validation of the LSRR.Pointer field. | |||
If the address in the Destination Address field has been reached, and | If the address in the Destination Address field has been reached, and | |||
the option is not empty, the next address in the source route | the option is not empty, the next address in the source route | |||
replaces the address in the Destination Address field. | replaces the address in the Destination Address field, and the IP | |||
address of the interface that will be used to forward this datagram | ||||
The IP address of the interface that will be used to forward this | is recorded in its place in the LSRR.Data field. Then, the | |||
datagram should be recorded into the LSRR. However, before writing | LSRR.Pointer. is incremented by 4. | |||
in the route data area, the following check should be performed: | ||||
LSRR.Length - LSRR.Pointer >= 3 | ||||
This assures that there will be at least 4 bytes of space in which to | ||||
record the IP address. If the packet does not pass this check, it | ||||
should be dropped, and this event should be logged (e.g., a counter | ||||
could be incremented to reflect the packet drop). | ||||
o An offset of "1" corresponds to the option type, that's why the | Note that the sanity checks for the LSRR.Length and the | |||
performed check is LSRR.Length - LSRR.Pointer >=3, and not | LSRR.Pointer fields described above ensure that if the option is | |||
LSRR.Length - LSRR.Pointer >=4. | not empty, there will be (4*n) octets in the option. That is, | |||
there will be at least one IP address to read, and enough room to | ||||
record the IP address of the interface that will be used to | ||||
forward this datagram. | ||||
The LSRR must be copied on fragmentation. This means that if a | The LSRR must be copied on fragmentation. This means that if a | |||
packet that carries the LSRR is fragmented, each of the fragments | packet that carries the LSRR is fragmented, each of the fragments | |||
will have to go through the list of systems specified in the LSRR | will have to go through the list of systems specified in the LSRR | |||
option. | option. | |||
3.14.2.4. Strict Source and Record Route (SSRR) (Type = 137) | 3.13.2.4. Strict Source and Record Route (SSRR) (Type=137) | |||
This option allows the originating system to specify a number of | This option allows the originating system to specify a number of | |||
intermediate systems a packet must pass through to get to the | intermediate systems a packet must pass through to get to the | |||
destination host. Additionally, the route followed by the packet is | destination host. Additionally, the route followed by the packet is | |||
recorded in the option, and the destination host (end-system) must | recorded in the option, and the destination host (end-system) must | |||
use the reverse of the path contained in the received SSRR option. | use the reverse of the path contained in the received SSRR option. | |||
This option is similar to the Loose Source and Record Route (LSRR) | This option is similar to the Loose Source and Record Route (LSRR) | |||
option, with the only difference that in the case of SSRR, the route | option, with the only difference that in the case of SSRR, the route | |||
specified in the option is the exact route the packet must take | specified in the option is the exact route the packet must take | |||
(i.e., no other intervening routers are allowed to be in the route). | (i.e., no other intervening routers are allowed to be in the route). | |||
The SSSR option can be of help in debugging some network problems. | The SSSR option can be of help in debugging some network problems. | |||
Some ISP (Internet Service Provider) peering agreements require | Some ISP (Internet Service Provider) peering agreements require | |||
support for this option in the routers within the peer of the ISP. | support for this option in the routers within the peer of the ISP. | |||
The SSRR option has the same security implications as the LSRR | The SSRR option has the same security implications as the LSRR | |||
option. Please refer to Section Section 3.14.2.3 for a discussion of | option. Please refer to Section 3.13.2.3 for a discussion of such | |||
such security implications. | security implications. | |||
As with the LSRR, while the SSSR option may be of help in debugging | As with the LSRR, while the SSSR option may be of help in debugging | |||
some network problems, its security implications outweigh any | some network problems, its security implications outweigh any | |||
legitimate use of it. | legitimate use of it. | |||
All systems should, by default, drop IP packets that contain an LSRR | All systems should, by default, drop IP packets that contain an SSRR | |||
option, and should log this event (e.g., a counter could be | option, and should log this event (e.g., a counter could be | |||
incremented to reflect the packet drop). However, they should | incremented to reflect the packet drop). However, they should | |||
provide a system-wide toggle to enable support for this option for | provide a system-wide toggle to enable support for this option for | |||
those scenarios in which this option is required. Such system-wide | those scenarios in which this option is required. Such system-wide | |||
toggle should default to "off" (or "disable"). | toggle should default to "off" (or "disable"). | |||
[OpenBSD1998] is a security advisory about an improper | [OpenBSD1998] is a security advisory about an improper | |||
implementation of such a system-wide toggle in 4.4BSD kernels. | implementation of such a system-wide toggle in 4.4BSD kernels. | |||
In the event processing of the SSRR option were explicitly enabled, | In the event processing of the SSRR option were explicitly enabled, | |||
the same sanity checks described for the LSRR option in | the same sanity checks described for the LSRR option in | |||
Section 3.14.2.3 should be performed on the SSRR option. Namely, | Section 3.13.2.3 should be performed on the SSRR option. Namely, | |||
sanity checks shoudl be performed on the option length (SSRR.Length) | sanity checks shoudl be performed on the option length (SSRR.Length) | |||
and the Pointer field (SSRR.Pointer). | and the pointer field (SSRR.Pointer). | |||
If the packet passes the aforementioned sanity checks, the receiving | If the packet passes the aforementioned sanity checks, the receiving | |||
system should determine whether the Destination Address of the packet | system should determine whether the Destination Address of the packet | |||
corresponds to one of its IP addresses. If does not, it should be | corresponds to one of its IP addresses. If does not, it should be | |||
dropped, and this event should be logged (e.g., a counter could be | dropped, and this event should be logged (e.g., a counter could be | |||
incremented to reflect the packet drop). | incremented to reflect the packet drop). | |||
Contrary to the IP Loose Source and Record Route (LSRR) option, | Contrary to the IP Loose Source and Record Route (LSRR) option, | |||
the SSRR option does not allow in the route other routers than | the SSRR option does not allow in the route other routers than | |||
those contained in the option. If the system implements the weak | those contained in the option. If the system implements the weak | |||
skipping to change at page 34, line 10 | skipping to change at page 38, line 46 | |||
In that case, if the address in the destination field has not been | In that case, if the address in the destination field has not been | |||
reached, the packet should be dropped, and this event should be | reached, the packet should be dropped, and this event should be | |||
logged (e.g., a counter could be incremented to reflect the packet | logged (e.g., a counter could be incremented to reflect the packet | |||
drop). | drop). | |||
[Microsoft1999] is a security advisory about a vulnerability | [Microsoft1999] is a security advisory about a vulnerability | |||
arising from improper validation of the SSRR.Pointer field. | arising from improper validation of the SSRR.Pointer field. | |||
If the option is not empty, and the address in the Destination | If the option is not empty, and the address in the Destination | |||
Address field has been reached, the next address in the source route | Address field has been reached, the next address in the source route | |||
replaces the address in the Destination Address field. This IP | replaces the address in the Destination Address field, and the IP | |||
address must be reachable without the use of any intervening router | address of the interface that will be used to forward this datagram | |||
(i.e., the address must belong to any of the networks to which the | is recorded in its place in the source route (SSRR.Data field). | |||
system is directly attached). If that is not the case, the packet | Then, the SSRR.Pointer. is incremented by 4. | |||
should be dropped, and this event should be logged (e.g., a counter | ||||
could be incremented to reflect the packet drop). | ||||
The IP address of the interface that will be used to forward this | ||||
datagram should be recorded into the SSRR. However, before doing | ||||
that, the following check should be performed: | ||||
SSRR.Length - SSRR.Pointer >=3 | ||||
An offset of "1" corresponds to the option type, that's why the | ||||
performed check is SSRR.Length - SSRR.Pointer >=3, and not | ||||
SSRR.Length - SSRR.Pointer >=4. | ||||
This assures that there will be at least 4 bytes of space on which to | Note that the sanity checks for the SSRR.Length and the | |||
record the IP address. If the packet does not pass this check, it | SSRR.Pointer fields described above ensure that if the option is | |||
should be dropped, and this event should be logged (e.g., a counter | not empty, there will be (4*n) octets in the option. That is, | |||
could be incremented to reflect the packet drop). | there will be at least one IP address to read, and enough room to | |||
record the IP address of the interface that will be used to | ||||
forward this datagram. | ||||
The SSRR option must be copied on fragmentation. This means that if | The SSRR option must be copied on fragmentation. This means that if | |||
a packet that carries the SSRR is fragmented, each of the fragments | a packet that carries the SSRR is fragmented, each of the fragments | |||
will have to go through the list of systems specified in the SSRR | will have to go through the list of systems specified in the SSRR | |||
option. | option. | |||
3.14.2.5. Record Route (Type = 7) | 3.13.2.5. Record Route (Type=7) | |||
This option provides a means to record the route that a given packet | This option provides a means to record the route that a given packet | |||
follows. | follows. | |||
The option begins with an 8-bit option code, which must be equal to | The option begins with an 8-bit option code, which is equal to 7. | |||
7. The second byte is the option length, which includes the option- | The second byte is the option length, which includes the option-type | |||
type byte, the option-length byte, the pointer byte, and the actual | byte, the option-length byte, the pointer byte, and the actual | |||
option-data. The third byte is a pointer into the route data, | option-data. The third byte is a pointer into the route data, | |||
indicating the first byte of the area in which to store the next | indicating the first byte of the area in which to store the next | |||
route data. The pointer is relative to the option start. | route data. The pointer is relative to the option start. | |||
RFC 791 states that this option should appear, at most, once in a | RFC 791 states that this option should appear, at most, once in a | |||
given packet. Therefore, if a packet has more than one instance of | given packet. Therefore, if a packet has more than one instance of | |||
this option, it should be dropped, and this event should be logged | this option, it should be dropped, and this event should be logged | |||
(e.g., a counter could be incremented to reflect the packet drop). | (e.g., a counter could be incremented to reflect the packet drop). | |||
The same sanity checks performed for the Length field and the Pointer | The same sanity checks performed for the Length field and the Pointer | |||
field of the LSRR and the SSRR options should be performed on the | field of the LSRR and the SSRR options should be performed on the | |||
Length field (RR.Length) and the Pointer field (RR.Pointer) of the RR | Length field (RR.Length) and the Pointer field (RR.Pointer) of the RR | |||
option. And, as with the LSRR and SSRR options, if the packet does | option. As with the LSRR and SSRR options, if the packet does not | |||
not pass these checks it should be dropped, and this event should be | pass these checks it should be dropped, and this event should be | |||
logged (e.g., a counter could be incremented to reflect the packet | logged (e.g., a counter could be incremented to reflect the packet | |||
drop). | drop). | |||
When a system receives an IP packet with the Record Route option, it | When a system receives an IP packet with the Record Route option that | |||
should check whether there is space in the option to store route | passes the above checks, it should check whether there is space in | |||
information. The option is full if: | the option to store route information. The option is full if: | |||
RR.Pointer > RR.Length | RR.Pointer > RR.Length | |||
If the option is full, the datagram should be forwarded without | If the option is full, the datagram should be forwarded without | |||
further processing of this option. If not, the following check | further processing of this option. | |||
should be performed before writing any route data into the option: | ||||
RR.Pointer - RR.Length >= 3 | ||||
If the packet does not pass this check, the packet should be | ||||
considered in error, and therefore should be dropped, and this event | ||||
should be logged (e.g., a counter could be incremented to reflect the | ||||
packet drop). | ||||
If the option is not full (i.e., RR.Pointer <= RR.Length), but | ||||
RR.Pointer - RR.Length < 4, it means that while there's space in | ||||
the option, there is not not enough space to store an IP address. | ||||
It is fair to assume that such an scenario will only occur when | ||||
the packet has been crafted. | ||||
If the packet passes this check, the IP address of the interface that | If the option is not full (i.e., RR.Pointer <= RR.Length), the IP | |||
will be used to forward this datagram should be recorded into the | address of the interface that will be used to forward this datagram | |||
area pointed by the RR.Pointer, and RR.Pointer should then be | should be recorded into the area pointed to by the RR.Pointer, and | |||
incremented by 4. | RR.Pointer should then incremented by 4. | |||
This option is not copied on fragmentation, and thus appears in the | This option is not copied on fragmentation, and thus appears in the | |||
first fragment only. If a fragment other than the one with offset 0 | first fragment only. If a fragment other than the one with offset 0 | |||
contains the Record Route option, it should be dropped, and this | contains the Record Route option, it should be dropped, and this | |||
event should be logged (e.g., a counter could be incremented to | event should be logged (e.g., a counter could be incremented to | |||
reflect the packet drop). | reflect the packet drop). | |||
3.14.2.6. Stream Identifier (Type = 136) | The Record Route option can be exploited to learn about the topology | |||
of a network. However, the limited space in the IP header limits the | ||||
usefulness of this option for that purpose. | ||||
3.13.2.6. Stream Identifier (Type=136) | ||||
The Stream Identifier option originally provided a means for the 16- | The Stream Identifier option originally provided a means for the 16- | |||
bit SATNET stream Identifier to be carried through networks that did | bit SATNET stream Identifier to be carried through networks that did | |||
not support the stream concept. | not support the stream concept. | |||
However, as stated by Section 4.2.2.1 of RFC 1812 [RFC1812], this | However, as stated by Section 4.2.2.1 of RFC 1812 [RFC1812], this | |||
option is obsolete. Therefore, it should be ignored by the | option is obsolete. Therefore, it must be ignored by the processing | |||
processing systems. | systems. | |||
In the case of legacy systems still using this option, the length | In the case of legacy systems still using this option, the length | |||
field of the option should be checked to be 4. If the option does | field of the option should be checked to be 4. If the option does | |||
not pass this check, it should be dropped, and this event should be | not pass this check, it should be dropped, and this event should be | |||
logged (e.g., a counter could be incremented to reflect the packet | logged (e.g., a counter could be incremented to reflect the packet | |||
drop). | drop). | |||
RFC 791 states that this option appears at most once in a given | RFC 791 states that this option appears at most once in a given | |||
datagram. Therefore, if a packet contains more than one instance of | datagram. Therefore, if a packet contains more than one instance of | |||
this option, it should be dropped, and this event should be logged | this option, it should be dropped, and this event should be logged | |||
(e.g., a counter could be incremented to reflect the packet drop). | (e.g., a counter could be incremented to reflect the packet drop). | |||
3.14.2.7. Internet Timestamp (Type = 68) | 3.13.2.7. Internet Timestamp (Type=68) | |||
This option provides a means for recording the time at which each | This option provides a means for recording the time at which each | |||
system processed this datagram. The timestamp option has a number of | system processed this datagram. The timestamp option has a number of | |||
security implications. Among them are: | security implications. Among them are: | |||
o It allows an attacker to obtain the current time of the systems | o It allows an attacker to obtain the current time of the systems | |||
that process the packet, which the attacker may find useful in a | that process the packet, which the attacker may find useful in a | |||
number of scenarios. | number of scenarios. | |||
o It may be used to map the network topology, in a similar way to | o It may be used to map the network topology, in a similar way to | |||
skipping to change at page 37, line 17 | skipping to change at page 41, line 32 | |||
to store timestamps). Therefore, upon receipt of a packet that | to store timestamps). Therefore, upon receipt of a packet that | |||
contains an Internet Timestamp option, the following check should be | contains an Internet Timestamp option, the following check should be | |||
performed: | performed: | |||
IT.Length >= 4 | IT.Length >= 4 | |||
If the packet does not pass this check, it should be dropped, and | If the packet does not pass this check, it should be dropped, and | |||
this event should be logged (e.g., a counter could be incremented to | this event should be logged (e.g., a counter could be incremented to | |||
reflect the packet drop). | reflect the packet drop). | |||
Additionally, the following check should be performed on the option | The Pointer is an index within this option, counting the option type | |||
length field: | octet as octet #1. It points to the first byte of the area in which | |||
the next timestamp data should be stored and thus, the minimum legal | ||||
value is 5. Since the only change of the Pointer allowed by RFC 791 | ||||
is incrementing it by 4 or 8, the following checks should be | ||||
performed on the Internet Timestamp option, depending on the Flag | ||||
value (see below). | ||||
IT.Offset + IT.Length < IHL *4 | If IT.Flag is equal to 0, the following check should be performed: | |||
This check assures that the option does not overlap with the IP | IT.Pointer %4 == 1 && IT.Pointer != 1 | |||
payload (i.e., it does not go past the IP header). If the packet | ||||
does not pass this check, it should be dropped, and this event should | ||||
be logged (e.g., a counter could be incremented to reflect the packet | ||||
drop). | ||||
The pointer byte points to the first byte of the area in which the | If the packet does not pass this check, it should be dropped, and | |||
next timestamp data should be stored. As its value is relative to | this event should be logged (e.g., a counter could be incremented to | |||
the beginning of the option, its minimum legal value is 5. | reflect the packet drop). | |||
Consequently, the following check should be performed on a packet | ||||
that contains the Internet Timestamp option: | ||||
IT.Pointer >= 5 | Otherwise, the following sanity check should be performed on the | |||
option: | ||||
IT.Pointer % 8 == 5 | ||||
If the packet does not pass this check, it should be dropped, and | If the packet does not pass this check, it should be dropped, and | |||
this event should be logged (e.g., a counter could be incremented to | this event should be logged (e.g., a counter could be incremented to | |||
reflect the packet drop). | reflect the packet drop). | |||
The flag field has three possible legal values: | The flag field has three possible legal values: | |||
o 0: Record time stamps only, stored in consecutive 32-bit words. | o 0: Record time stamps only, stored in consecutive 32-bit words. | |||
o 1: Record each timestamp preceded with the internet address of the | o 1: Record each timestamp preceded with the internet address of the | |||
skipping to change at page 38, line 15 | skipping to change at page 42, line 29 | |||
Therefore the following check should be performed: | Therefore the following check should be performed: | |||
IT.Flag == 0 || IT.Flag == 1 || IT.Flag == 3 | IT.Flag == 0 || IT.Flag == 1 || IT.Flag == 3 | |||
If the packet does not pass this check, it should be dropped, and | If the packet does not pass this check, it should be dropped, and | |||
this event should be logged (e.g., a counter could be incremented to | this event should be logged (e.g., a counter could be incremented to | |||
reflect the packet drop). | reflect the packet drop). | |||
The timestamp field is a right-justified 32-bit timestamp in | The timestamp field is a right-justified 32-bit timestamp in | |||
milliseconds since UT. If the time is not available in milliseconds, | milliseconds since UTC. If the time is not available in | |||
or cannot be provided with respect to UT, then any time may be | milliseconds, or cannot be provided with respect to UTC, then any | |||
inserted as a timestamp, provided the high order bit of the timestamp | time may be inserted as a timestamp, provided the high order bit of | |||
is set, to indicate this non-standard value. | the timestamp is set, to indicate this non-standard value. | |||
According to RFC 791, the initial contents of the timestamp area must | According to RFC 791, the initial contents of the timestamp area must | |||
be initialized to zero, or internet address/zero pairs. However, | be initialized to zero, or internet address/zero pairs. However, | |||
internet systems should be able to handle non-zero values, possibly | internet systems should be able to handle non-zero values, possibly | |||
discarding the offending datagram. | discarding the offending datagram. | |||
When an internet system receives a packet with an Internet Timestamp | When an internet system receives a packet with an Internet Timestamp | |||
option, it decides whether it should record its timestamp in the | option, it decides whether it should record its timestamp in the | |||
option. If it determines that it should, it should then determine | option. If it determines that it should, it should then determine | |||
whether the timestamp data area is full, by means of the following | whether the timestamp data area is full, by means of the following | |||
skipping to change at page 38, line 42 | skipping to change at page 43, line 7 | |||
If this condition is true, the timestamp data area is full. If not, | If this condition is true, the timestamp data area is full. If not, | |||
there is room in the timestamp data area. | there is room in the timestamp data area. | |||
If the timestamp data area is full, the overflow byte should be | If the timestamp data area is full, the overflow byte should be | |||
incremented, and the packet should be forwarded without inserting the | incremented, and the packet should be forwarded without inserting the | |||
timestamp. If the overflow byte itself overflows, the packet should | timestamp. If the overflow byte itself overflows, the packet should | |||
be dropped, and this event should be logged (e.g., a counter could be | be dropped, and this event should be logged (e.g., a counter could be | |||
incremented to reflect the packet drop). | incremented to reflect the packet drop). | |||
If timestamp data area is not full, then further checks should be | If the timestamp data area is not full, then processing continues as | |||
performed before actually inserting any data. | follows (note that the above checks on IT.Pointer ensure that there | |||
is room for another entry in the option): | ||||
If the IT.Flag byte is 0, the following check should be performed: | ||||
IT.Length - IT.Pointer >= 3 | ||||
If the packet does not pass this check, it should be dropped, and | ||||
this event should be logged (e.g., a counter could be incremented to | ||||
reflect the packet drop). If the packet passes this check, there is | ||||
room for at least one 32-bit timestamp. The system's 32-bit | ||||
timestamp should be inserted at the area pointed by the pointer byte, | ||||
and the pointer byte should be incremented by four. | ||||
If the IT.Flag byte is 1, then the following check should be | ||||
performed: | ||||
IT.Length - IT.Pointer >= 7 | ||||
If the packet does not pass this check, it should be dropped, and | ||||
this event should be logged (e.g., a counter could be incremented to | ||||
reflect the packet drop). If the packet does pass this check, it | ||||
means there is space in the timestamp data area to store at least one | ||||
IP address plus the corresponding 32-bit timestamp. The IP address | ||||
of the system should be stored at the area pointed to by the pointer | ||||
byte, followed by the 32-bit system timestamp. The pointer byte | ||||
should then be incremented by 8. | ||||
If the flag byte is 3, then the following check should be performed: | o If IT.Flag is 0, then the system's 32-bit timestamp is stored into | |||
the area pointed to by the pointer byte and the pointer byte is | ||||
incremented by 4. | ||||
IT.Length - IT.Pointer >= 7 | o If IT.Flag is 1, then the IP address of the system is stored into | |||
the area pointed to by the pointer byte, followed by the 32-bit | ||||
system timestamp, and the pointer byte is incremented by 8. | ||||
If the packet does not pass this check, it should be dropped, and | o Otherwise (IT.Flag is 3), if the IP address in the first 4 bytes | |||
this event should be logged (e.g., a counter could be incremented to | pointed to by IT.Pointer matches one of the IP addresses assigned | |||
reflect the packet drop). If it does, it means there is space in the | to an interface of the system, then the system's timestamp is | |||
timestamp data area to store an IP address and store the | stored into the area pointed to by IT.Pointer + 4, and the pointer | |||
corresponding 32-bit timestamp. The system's timestamp should be | byte is incremented by 8. | |||
stored at the area pointed by IT.Pointer + 4. Then, the pointer byte | ||||
should be incremented by 8. | ||||
[Kohno2005] describes a technique for fingerprinting devices by | [Kohno2005] describes a technique for fingerprinting devices by | |||
measuring the clock skew. It exploits, among other things, the | measuring the clock skew. It exploits, among other things, the | |||
timestamps that can be obtained by means of the ICMP timestamp | timestamps that can be obtained by means of the ICMP timestamp | |||
request messages [RFC0791]. However, the same fingerprinting method | request messages [RFC0791]. However, the same fingerprinting method | |||
could be implemented with the aid of the Internet Timestamp option. | could be implemented with the aid of the Internet Timestamp option. | |||
3.14.2.8. Router Alert (Type = 148) | 3.13.2.8. Router Alert (Type=148) | |||
The Router Alert option is defined in RFC 2113 [RFC2113]. It has the | The Router Alert option is defined in RFC 2113 [RFC2113] and later | |||
semantic "routers should examine this packet more closely". A packet | updates to it have been clarified by RFC 5350 [RFC5350]. It contains | |||
that contains a Router Alert option will not go through the router's | a 16-bit Value governed by an IANA registry (see [RFC5350]). The | |||
fast-path and will be processed in the router more slowly than if the | Router Alert option has the semantic "routers should examine this | |||
option were not set. Therefore, this option may impact the | packet more closely, if they participate in the functionality denoted | |||
performance of the systems that handle the packet carrying it. | by the Value of the option". | |||
According to the syntax of the option as defined in RFC 2113, the | According to the syntax of the option as defined in RFC 2113, the | |||
following check should be enforced: | following check should be enforced, if the router supports this | |||
option: | ||||
RA.Length == 4 | RA.Length == 4 | |||
If the packet does not pass this check, it should be dropped, and | If the packet does not pass this check, it should be dropped, and | |||
this event should be logged (e.g., a counter could be incremented to | this event should be logged (e.g., a counter could be incremented to | |||
reflect the packet drop). Furthermore, the following check should be | ||||
performed on the Value field: | ||||
RA.Value == 0 | ||||
If the packet does not pass this check, it should be dropped, and | ||||
this event should be logged (e.g., a counter could be incremented to | ||||
reflect the packet drop). | reflect the packet drop). | |||
As explained in RFC 2113, hosts should ignore this option. | A packet that contains a Router Alert option with an option value | |||
corresponding to functionality supported by an active module in the | ||||
router will not go through the router's fast-path but will be | ||||
processed in the slow path of the router, handing it over for closer | ||||
inspection to the modules that has registered the matching option | ||||
value. Therefore, this option may impact the performance of the | ||||
systems that handle the packet carrying it. | ||||
3.14.2.9. Probe MTU (Type =11) | As explained in RFC 2113 [RFC2113], hosts should ignore this option. | |||
This option is defined in RFC 1063 [RFC1063], and originally provided | 3.13.2.9. Probe MTU (Type=11) (obsolete) | |||
a mechanism to discover the Path-MTU. | ||||
This option was defined in RFC 1063 [RFC1063], and originally | ||||
provided a mechanism to discover the Path-MTU. | ||||
This option is obsolete, and therefore any packet that is received | This option is obsolete, and therefore any packet that is received | |||
containing this option should be dropped, and this event should be | containing this option should be dropped, and this event should be | |||
logged (e.g., a counter could be incremented to reflect the packet | logged (e.g., a counter could be incremented to reflect the packet | |||
drop). | drop). | |||
3.14.2.10. Reply MTU (Type = 12) | 3.13.2.10. Reply MTU (Type=12) (obsolete) | |||
This option is defined in RFC 1063 [RFC1063], and originally provided | This option is defined in RFC 1063 [RFC1063], and originally provided | |||
a mechanism to discover the Path-MTU. | a mechanism to discover the Path-MTU. | |||
This option is obsolete, and therefore any packet that is received | This option is obsolete, and therefore any packet that is received | |||
containing this option should be dropped, and this event should be | containing this option should be dropped, and this event should be | |||
logged (e.g., a counter could be incremented to reflect the packet | logged (e.g., a counter could be incremented to reflect the packet | |||
drop). | drop). | |||
3.14.2.11. Traceroute (Type = 82) | 3.13.2.11. Traceroute (Type=82) | |||
This option is defined in RFC 1393 [RFC1393], and originally provided | This option is defined in RFC 1393 [RFC1393], and originally provided | |||
a mechanism to trace the path to a host. | a mechanism to trace the path to a host. | |||
This option is obsolete, and therefore any packet that is received | This option is obsolete, and therefore any packet that is received | |||
containing this option should be dropped, and this event should be | containing this option should be dropped, and this event should be | |||
logged (e.g., a counter could be incremented to reflect the packet | logged (e.g., a counter could be incremented to reflect the packet | |||
drop). | drop). | |||
3.14.2.12. DoD Basic Security Option (Type = 130) | 3.13.2.12. DoD Basic Security Option (Type=130) | |||
This option is used by end-systems and intermediate systems of an | This option is used by Multi-Level-Secure (MLS) end-systems and | |||
internet to [RFC1108]: | intermediate systems in specific environments to [RFC1108]: | |||
o Transmit from source to destination in a network standard | o Transmit from source to destination in a network standard | |||
representation the common security labels required by computer | representation the common security labels required by computer | |||
security models, | security models, | |||
o Validate the datagram as appropriate for transmission from the | o Validate the datagram as appropriate for transmission from the | |||
source and delivery to the destination, and, | source and delivery to the destination, and, | |||
o Ensure that the route taken by the datagram is protected to the | o Ensure that the route taken by the datagram is protected to the | |||
level required by all protection authorities indicated on the | level required by all protection authorities indicated on the | |||
datagram. | datagram. | |||
It is specified by RFC 1108 [RFC1108] (which obsoletes RFC 1038 | It is specified by RFC 1108 [RFC1108] (which obsoletes RFC 1038 | |||
[RFC1038]). | [RFC1038]). | |||
o RFC 791 [RFC0791] defined the "Security Option" (Type = 130), | RFC 791 [RFC0791] defined the "Security Option" (Type=130), which | |||
which used the same option type as the DoD Basic Security option | used the same option type as the DoD Basic Security option | |||
discussed in this section. The "Security Option" specified in RFC | discussed in this section. The "Security Option" specified in RFC | |||
791 is considered obsolete by Section 4.2.2.1 of RFC 1812, and | 791 is considered obsolete by Section 3.2.1.8 of RFC 1122, and | |||
therefore the discussion in this section is focused on the DoD | therefore the discussion in this section is focused on the DoD | |||
Basic Security option specified by RFC 1108 [RFC1108]. | Basic Security option specified by RFC 1108 [RFC1108]. | |||
Section 4.2.2.1 of RFC 1812 states that routers "SHOULD implement | Section 4.2.2.1 of RFC 1812 states that routers "SHOULD implement | |||
this option". | this option". | |||
The DoD Basic Security Option is currently implemented in a number of | The DoD Basic Security Option is currently implemented in a number of | |||
operating systems (e.g., [IRIX2008], [SELinux2008], [Solaris2008], | operating systems (e.g., [IRIX2008], [SELinux2008], [Solaris2008], | |||
and [Cisco2008]), and deployed in a number of high-security networks. | and [Cisco2008]), and deployed in a number of high-security networks. | |||
Systems that belong to networks in which this option is in use should | ||||
process the DoD Basic Security option contained in each packet as | ||||
specified in [RFC1108]. | ||||
RFC 1108 states that the option should appear at most once in a | RFC 1108 states that the option should appear at most once in a | |||
datagram. Therefore, if more than one DoD Basic Security option | datagram. Therefore, if more than one DoD Basic Security option | |||
(BSO) appears in a given datagram, the corresponding datagram should | (BSO) appears in a given datagram, the corresponding datagram should | |||
be dropped, and this event should be logged (e.g., a counter could be | be dropped, and this event should be logged (e.g., a counter could be | |||
incremented to reflect the packet drop). | incremented to reflect the packet drop). | |||
RFC 1108 states that the option Length is variable, with a minimum | RFC 1108 states that the option Length is variable, with a minimum | |||
option Length of 3 bytes. Therefore, the following check should be | option Length of 3 bytes. Therefore, the following check should be | |||
performed: | performed: | |||
BSO.Length >= 3 | BSO.Length >= 3 | |||
If the packet does not pass this check, it should be dropped, and | If the packet does not pass this check, it should be dropped, and | |||
this event should be logged (e.g., a counter could be incremented to | this event should be logged (e.g., a counter could be incremented to | |||
reflect the packet drop). | reflect the packet drop). | |||
Systems that belong to networks in which this option is in use should | Current deployments of the security options described in this | |||
process the DoD Basic Security option contained in each packet as | section and the two subsequent sections have motivated the | |||
specified in [RFC1108]. | ||||
o Current deployments of the DoD Security Options have motivated the | ||||
proposal of a "Common Architecture Label IPv6 Security Option | proposal of a "Common Architecture Label IPv6 Security Option | |||
(CALIPSO)" for the IPv6 protocol. [RFC1038]. | (CALIPSO)" for the IPv6 protocol. [RFC5570]. | |||
3.14.2.13. DoD Extended Security Option (Type = 133) | 3.13.2.13. DoD Extended Security Option (Type=133) | |||
This option permits additional security labeling information, beyond | This option permits additional security labeling information, beyond | |||
that present in the Basic Security Option (Section 3.13.2.12), to be | that present in the Basic Security Option (Section 3.13.2.12), to be | |||
supplied in an IP datagram to meet the needs of registered | supplied in an IP datagram to meet the needs of registered | |||
authorities. It is specified by RFC 1108 [RFC1108]. | authorities. It is specified by RFC 1108 [RFC1108]. | |||
This option may be present only in conjunction with the DoD Basic | This option may be present only in conjunction with the DoD Basic | |||
Security option. Therefore, if a packet contains a DoD Extended | Security option. Therefore, if a packet contains a DoD Extended | |||
Security option (ESO), but does not contain a DoD Basic Security | Security option (ESO), but does not contain a DoD Basic Security | |||
option, it should be dropped, and this event should be logged (e.g., | option, it should be dropped, and this event should be logged (e.g., | |||
a counter could be incremented to reflect the packet drop). It | a counter could be incremented to reflect the packet drop). It | |||
should be noted that, unlike the DoD Basic Security option, this | should be noted that, unlike the DoD Basic Security option, this | |||
option may appear multiple times in a single IP header. | option may appear multiple times in a single IP header. | |||
Systems that belong to networks in which this option is in use, | ||||
should process the DoD Extended Security option contained in each | ||||
packet as specified in RFC 1108 [RFC1108]. | ||||
RFC 1108 states that the option Length is variable, with a minimum | RFC 1108 states that the option Length is variable, with a minimum | |||
option Length of 3 bytes. Therefore, the following check should be | option Length of 3 bytes. Therefore, the following check should be | |||
performed: | performed: | |||
ESO.Length >= 3 | ESO.Length >= 3 | |||
If the packet does not pass this check, it should be dropped, and | If the packet does not pass this check, it should be dropped, and | |||
this event should be logged (e.g., a counter could be incremented to | this event should be logged (e.g., a counter could be incremented to | |||
reflect the packet drop). | reflect the packet drop). | |||
Systems that belong to networks in which this option is in use, | 3.13.2.14. Commercial IP Security Option (CIPSO) (Type=134) | |||
should process the DoD Extended Security option contained in each | ||||
packet as specified in RFC 1108 [RFC1108]. | ||||
3.14.2.14. Commercial IP Security Option (CIPSO) (Type = 134) | ||||
This option was proposed by the Trusted Systems Interoperability | This option was proposed by the Trusted Systems Interoperability | |||
Group (TSIG), with the intent of meeting trusted networking | Group (TSIG), with the intent of meeting trusted networking | |||
requirements for the commercial trusted systems market place. It is | requirements for the commercial trusted systems market place. It is | |||
specified in [CIPSO1992] and [FIPS1994]. | specified in [CIPSO1992] and [FIPS1994]. | |||
o The TSIG proposal was taken to the Commercial Internet Security | The TSIG proposal was taken to the Commercial Internet Security | |||
Option (CIPSO) Working Group of the IETF [CIPSOWG1994], and an | Option (CIPSO) Working Group of the IETF [CIPSOWG1994], and an | |||
Internet-Draft was produced [CIPSO1992]. The Internet-Draft was | Internet-Draft was produced [CIPSO1992]. The Internet-Draft was | |||
never published as an RFC, and the proposal was later standardized | never published as an RFC, but the proposal was later standardized | |||
by the U.S. National Institute of Standards and Technology (NIST) | by the U.S. National Institute of Standards and Technology (NIST) | |||
as "Federal Information Processing Standard Publication 188" | as "Federal Information Processing Standard Publication 188" | |||
[FIPS1994]. | [FIPS1994]. | |||
It is currently implemented in a number of operating systems (e.g., | It is currently implemented in a number of operating systems (e.g., | |||
IRIX [IRIX2008], Security-Enhanced Linux [SELinux2008], and Solaris | IRIX [IRIX2008], Security-Enhanced Linux [SELinux2008], and Solaris | |||
[Solaris2008]), and deployed in a number of high-security networks. | [Solaris2008]), and deployed in a number of high-security networks. | |||
o [Zakrzewski2002] and [Haddad2004] provide an overview of a Linux | [Zakrzewski2002] and [Haddad2004] provide an overview of a Linux | |||
implementation. | implementation. | |||
Systems that belong to networks in which this option is in use should | ||||
process the CIPSO option contained in each packet as specified in | ||||
[CIPSO1992]. | ||||
According to the option syntax specified in [CIPSO1992] the following | According to the option syntax specified in [CIPSO1992] the following | |||
validation check should be performed: | validation check should be performed: | |||
CIPSO.Length >= 6 | CIPSO.Length >= 6 | |||
If a packet does not pass this check, it should be dropped, and this | If a packet does not pass this check, it should be dropped, and this | |||
event should be logged (e.g., a counter could be incremented to | event should be logged (e.g., a counter could be incremented to | |||
reflect the packet drop). | reflect the packet drop). | |||
Systems that belong to networks in which this option is in use should | 3.13.2.15. Sender Directed Multi-Destination Delivery (Type=149) | |||
process the CIPSO option contained in each packet as specified in | ||||
[CIPSO1992]. | ||||
3.14.2.15. Sender Directed Multi-Destination Delivery (Type = 149) | ||||
This option is defined in RFC 1770 [RFC1770], and originally provided | This option is defined in RFC 1770 [RFC1770], and originally provided | |||
unreliable UDP delivery to a set of addresses included in the option. | unreliable UDP delivery to a set of addresses included in the option. | |||
This option is obsolete. If a received packet contains this option, | This option is obsolete. If a received packet contains this option, | |||
it should be dropped, and this event should be logged (e.g., a | it should be dropped, and this event should be logged (e.g., a | |||
counter could be incremented to reflect the packet drop). | counter could be incremented to reflect the packet drop). | |||
3.15. TOS | ||||
Figure 2 shows the syntax of the Type of Service field, as defined by | ||||
RFC 791 [RFC0791], and updated by RFC 1349 [RFC1349]. We provide a | ||||
discussion of this obsoleted definition, legacy implementations might | ||||
still be using these semantics. | ||||
0 1 2 3 4 5 6 7 | ||||
+-----+-----+-----+-----+-----+-----+-----+-----+ | ||||
| PRECEDENCE | D | T | R | C | 0 | | ||||
+-----+-----+-----+-----+-----+-----+-----+-----+ | ||||
Figure 6: Type of Service field | ||||
+----------+----------------------------------------------+ | ||||
| Bits 0-2 | Precedence | | ||||
+----------+----------------------------------------------+ | ||||
| Bit 3 | 0 = Normal Delay, 1 = Low Delay | | ||||
+----------+----------------------------------------------+ | ||||
| Bit 4 | 0 = Normal Throughput, 1 = High Throughput | | ||||
+----------+----------------------------------------------+ | ||||
| Bit 5 | 0 = Normal Reliability, 1 = High Reliability | | ||||
+----------+----------------------------------------------+ | ||||
| Bit 6 | 0 = Normal Cost, 1 = Minimize Monetary Cost | | ||||
+----------+----------------------------------------------+ | ||||
| Bits 7 | Reserved for Future Use (must be zero) | | ||||
+----------+----------------------------------------------+ | ||||
Table 2: TOS bits | ||||
+-----+-----------------+ | ||||
| 111 | Network Control | | ||||
+-----+-----------------+ | ||||
| 110 | Internetwork | | ||||
+-----+-----------------+ | ||||
| 101 | CRITIC/ECP | | ||||
+-----+-----------------+ | ||||
| 100 | Flash Override | | ||||
+-----+-----------------+ | ||||
| 011 | Flash | | ||||
+-----+-----------------+ | ||||
| 010 | Immediate | | ||||
+-----+-----------------+ | ||||
| 001 | Priority | | ||||
+-----+-----------------+ | ||||
| 000 | Routine | | ||||
+-----+-----------------+ | ||||
Table 3: Precedence field | ||||
The Type of Service field can be used to affect the way in which the | ||||
packet is treated by the systems of a network that process it. | ||||
Section 4.2.1 ("Precedence-ordered queue service") and Section 4.2.3 | ||||
("Weak TOS") of this document describe the security implications of | ||||
the Type of Service field in the forwarding of packets. | ||||
4. Internet Protocol Mechanisms | 4. Internet Protocol Mechanisms | |||
4.1. Fragment reassembly | 4.1. Fragment reassembly | |||
To accommodate networks with different Maximum Transmission Units | To accommodate networks with different Maximum Transmission Units | |||
(MTUs), the Internet Protocol provides a mechanism for the | (MTUs), the Internet Protocol provides a mechanism for the | |||
fragmentation of IP packets by end-systems (hosts) and/or | fragmentation of IP packets by end-systems (hosts) and/or | |||
intermediate systems (routers). Reassembly of fragments is performed | intermediate systems (routers). Reassembly of fragments is performed | |||
only by the end-systems. | only by the end-systems. | |||
o [Cerf1974] provides the rationale for which packet reassembly is | [Cerf1974] provides the rationale for why packet reassembly is not | |||
not performed by intermediate systems. | performed by intermediate systems. | |||
During the last few decades, IP fragmentation and reassembly has been | During the last few decades, IP fragmentation and reassembly has been | |||
exploited in a number of ways, to perform actions such as evading | exploited in a number of ways, to perform actions such as evading | |||
Network Intrusion Detection Systems (NIDS), bypassing firewall rules, | Network Intrusion Detection Systems (NIDS), bypassing firewall rules, | |||
and performing Denial of Service (DoS) attacks. | and performing Denial of Service (DoS) attacks. | |||
o [Bendi1998] and [Humble1998] are examples of the exploitation of | [Bendi1998] and [Humble1998] are examples of the exploitation of | |||
these issues for performing Denial of Service (DoS) attacks. | these issues for performing Denial of Service (DoS) attacks. | |||
[CERT1997] and [CERT1998b] document these issues. [Anderson2001] | [CERT1997] and [CERT1998b] document these issues. [Anderson2001] | |||
is a survey of fragmentation attacks. [US-CERT2001] is an example | is a survey of fragmentation attacks. [US-CERT2001] is an example | |||
of the exploitation of IP fragmentation to bypass firewall rules. | of the exploitation of IP fragmentation to bypass firewall rules. | |||
[CERT1999] describes the implementation of fragmentation attacks | [CERT1999] describes the implementation of fragmentation attacks | |||
in Distributed Denial of Service (DDoS) attack tools. | in Distributed Denial of Service (DDoS) attack tools. | |||
The problem with IP fragment reassembly basically has to do with the | The problem with IP fragment reassembly basically has to do with the | |||
complexity of the function, in a number of aspects: | complexity of the function, in a number of aspects: | |||
o Fragment reassembly is a stateful operation for a stateless | o Fragment reassembly is a stateful operation for a stateless | |||
protocol (IP). The IP module at the host performing the | protocol (IP). The IP module at the host performing the | |||
reassembly function must allocate memory buffers both for | reassembly function must allocate memory buffers both for | |||
temporarily storing the received fragments, and to perform the | temporarily storing the received fragments, and to perform the | |||
reassembly function. Attackers can exploit this fact to exhaust | reassembly function. Attackers can exploit this fact to exhaust | |||
memory buffers at the system performing the fragment reassembly. | memory buffers at the system performing the fragment reassembly. | |||
o The fragmentation and reassembly mechanisms were designed at a | o The fragmentation and reassembly mechanisms were designed at a | |||
time in which the available bandwidths were very different from | time in which the available bandwidths were very different from | |||
the bandwidths available nowadays. With the current available | the bandwidths available nowadays. With the current available | |||
bandwidths, a number of interoperability problems may arise. And | bandwidths, a number of interoperability problems may arise, and | |||
these issues may be intentionally exploited by attackers to | these issues may be intentionally exploited by attackers to | |||
perform Denial of Service (DoS) attacks. | perform Denial of Service (DoS) attacks. | |||
o Fragment reassembly must usually be performed without any | o Fragment reassembly must usually be performed without any | |||
knowledge of the properties of the path the fragments follow. | knowledge of the properties of the path the fragments follow. | |||
Without this information, hosts cannot make any educated guess on | Without this information, hosts cannot make any educated guess on | |||
how long they should wait for missing fragments to arrive. | how long they should wait for missing fragments to arrive. | |||
o The fragment reassembly algorithm, as described by the IETF | o The fragment reassembly algorithm, as described by the IETF | |||
specifications, is ambiguous, and allows for a number of | specifications, is ambiguous, and allows for a number of | |||
skipping to change at page 46, line 30 | skipping to change at page 49, line 11 | |||
temporarily stored in system memory, until the IP module processes it | temporarily stored in system memory, until the IP module processes it | |||
and hands it to the protocol machine that corresponds to the | and hands it to the protocol machine that corresponds to the | |||
encapsulated protocol. | encapsulated protocol. | |||
In the case of fragmented IP packets, while the IP module may perform | In the case of fragmented IP packets, while the IP module may perform | |||
preliminary processing of the IP header (such as checking the header | preliminary processing of the IP header (such as checking the header | |||
for errors and processing IP options), fragments must be kept in | for errors and processing IP options), fragments must be kept in | |||
system buffers until all fragments are received and are reassembled | system buffers until all fragments are received and are reassembled | |||
into a complete internet datagram. | into a complete internet datagram. | |||
As mentioned above, the fact that the internet layer will not usually | As mentioned above, because the internet layer will not usually have | |||
have information about the characteristics of the path between the | information about the characteristics of the path between the system | |||
system and the remote host, no educated guess can be made on the | and the remote host, no educated guess can be made on the amount of | |||
amount of time that should be waited for the other fragments to | time that should be waited for the other fragments to arrive. | |||
arrive. Therefore, the specifications recommend to wait for a period | Therefore, the specifications recommend to wait for a period of time | |||
of time that will be acceptable for virtually all the possible | that is acceptable for virtually all the possible network scenarios | |||
network scenarios in which the protocols might operate. | in which the protocols might operate. After that time has elapsed, | |||
Specifically, RFC 1122 [RFC1122] states that the reassembly timeout | all the received fragments for the corresponding incomplete packet | |||
should be a fixed value between 60 and 120 seconds. If after waiting | are discarded. | |||
for that period of time the remaining fragments have not yet arrived, | ||||
all the received fragments for the corresponding packet are | ||||
discarded. | ||||
o The original IP Specification, RFC 791 [RFC0791], states that | The original IP Specification, RFC 791 [RFC0791], states that | |||
systems should wait for at least 15 seconds for the missing | systems should wait for at least 15 seconds for the missing | |||
fragments to arrive. Systems that follow the "Example Reassembly | fragments to arrive. Systems that follow the "Example Reassembly | |||
Procedure" described in Section 3.2 of RFC 791 may end up using a | Procedure" described in Section 3.2 of RFC 791 may end up using a | |||
reassembly timer of up to 4.25 minutes, with minimum of 15 | reassembly timer of up to 4.25 minutes, with a minimum of 15 | |||
seconds. Section 3.3.2 ("Reassembly") of RFC 1122 corrected this | seconds. Section 3.3.2 ("Reassembly") of RFC 1122 corrected this | |||
advice, stating that the reassembly timeout should be a fixed | advice, stating that the reassembly timeout should be a fixed | |||
value between 60 and 120 seconds. | value between 60 and 120 seconds. | |||
However, the longer the system waits for the missing fragments to | However, the longer the system waits for the missing fragments to | |||
arrive, the longer the corresponding system resources must be tied to | arrive, the longer the corresponding system resources must be tied to | |||
the corresponding packet. The amount of system memory is finite, and | the corresponding packet. The amount of system memory is finite, and | |||
even with today's systems, it can still be considered a scarce | even with today's systems, it can still be considered a scarce | |||
resource. | resource. | |||
An attacker could take advantage of the uncomfortable situation the | An attacker could take advantage of the uncomfortable situation the | |||
system performing fragment reassembly is in, by sending forged | system performing fragment reassembly is in, by sending forged | |||
fragments that will never reassemble into a complete datagram. That | fragments that will never reassemble into a complete datagram. That | |||
is, an attacker would send many different fragments, with different | is, an attacker would send many different fragments, with different | |||
IP IDs, without ever sending all the necessary fragments that would | IP IDs, without ever sending all the necessary fragments that would | |||
be needed to reassemble them into a full IP datagram. For each of | be needed to reassemble them into a full IP datagram. For each of | |||
the fragments, the IP module would allocate resources and tie them to | the fragments, the IP module would allocate resources and tie them to | |||
the corresponding fragment, until any the reassembly timer for the | the corresponding fragment, until the reassembly timer for the | |||
corresponding packet expires. | corresponding packet expires. | |||
There are some implementation strategies which could increase the | There are some implementation strategies which could increase the | |||
impact of this attack. For example, upon receipt of a fragment, some | impact of this attack. For example, upon receipt of a fragment, some | |||
systems allocate a memory buffer that will be large enough to | systems allocate a memory buffer that will be large enough to | |||
reassemble the whole datagram. While this might be beneficial in | reassemble the whole datagram. While this might be beneficial in | |||
legitimate cases, this just amplifies the impact of the possible | legitimate cases, this just amplifies the impact of the possible | |||
attacks, as a single small fragment could tie up memory buffers for | attacks, as a single small fragment could tie up memory buffers for | |||
the size of an extremely large (and unlikely) datagram. The | the size of an extremely large (and unlikely) datagram. The | |||
implementation strategy suggested in RFC 815 [RFC0815] leads to such | implementation strategy suggested in RFC 815 [RFC0815] leads to such | |||
an implementation. | an implementation. | |||
The impact of the aforementioned attack may vary depending on some | The impact of the aforementioned attack may vary depending on some | |||
specific implementation details: | specific implementation details: | |||
o If the system does not enforce limits on the amount of memory that | o If the system does not enforce limits on the amount of memory that | |||
can be allocated by the IP module, then an attacker could tie all | can be allocated by the IP module, then an attacker could tie all | |||
system memory to fragments, at which point the system would become | system memory to fragments, at which point the system would become | |||
unusable, probably crashing. | unusable, perhaps crashing. | |||
o If the system enforces limits on the amount of memory that can be | o If the system enforces limits on the amount of memory that can be | |||
allocated by the IP module as a whole, then, when this limit is | allocated by the IP module as a whole, then, when this limit is | |||
reached, all further IP packets that arrive would be discarded, | reached, all further IP packets that arrive would be discarded, | |||
until some fragments time out and free memory is available again. | until some fragments time out and free memory is available again. | |||
o If the system enforces limits on the amount memory that can be | o If the system enforces limits on the amount memory that can be | |||
allocated for the reassembly of fragments (in addition to | allocated for the reassembly of fragments, then, when this limit | |||
enforcing a limit for the IP module as a whole), then, when this | is reached, all further fragments that arrive would be discarded, | |||
limit is reached, all further fragments that arrive would be | until some fragment(s) time out and free memory is available | |||
discarded, until some fragment(s) time out and free memory is | again. | |||
available again. | ||||
4.1.1.2. Problems that arise from the length of the IP Identification | 4.1.1.2. Problems that arise from the length of the IP Identification | |||
field | field | |||
The Internet Protocols are currently being used in environments that | The Internet Protocols are currently being used in environments that | |||
are quite different from the ones in which they were conceived. For | are quite different from the ones in which they were conceived. For | |||
instance, the availability of bandwidth at the time the Internet | instance, the availability of bandwidth at the time the Internet | |||
Protocol was designed was completely different from the availability | Protocol was designed was completely different from the availability | |||
of bandwidth in today's networks. | of bandwidth in today's networks. | |||
The Identification field is a 16-bit field that is used for the | The Identification field is a 16-bit field that is used for the | |||
fragmentation and reassembly function. In the event a datagram gets | fragmentation and reassembly function. In the event a datagram gets | |||
fragmented, all the corresponding fragments will share the same | fragmented, all the corresponding fragments will share the same | |||
Identification number. Thus, the system receiving the fragments will | {Source Address, Destination Address, Protocol, Identification | |||
be able to uniquely identify them as fragments that correspond to the | number} four-tuple. Thus, the system receiving the fragments will be | |||
able to uniquely identify them as fragments that correspond to the | ||||
same IP datagram. At a given point in time, there must be at most | same IP datagram. At a given point in time, there must be at most | |||
only one packet in the network with a given Identification number. | only one packet in the network with a given four-tuple. If not, an | |||
If not, an Identification number "collision" might occur, and the | Identification number "collision" might occur, and the receiving | |||
receiving system might end up "mixing" fragments that correspond to | system might end up "mixing" fragments that correspond to different | |||
different IP datagrams which simply reused the same Identification | IP datagrams which simply reused the same Identification number. | |||
number. | ||||
For example, sending over a 1 Gbit/s path a continuous stream of | ||||
(UDP) packets of roughly 1 kb size that all get fragmented into | ||||
two equally sized fragments of 576 octets each (minimum reasesmbly | ||||
buffer size) would repeat the IP Identification values within less | ||||
than 0.65 seconds (assuming roughly 10% link layer overhead); with | ||||
shorter packets that still get fragmented, this figure could | ||||
easily drop below 0.4 seconds. With a single IP packet dropped in | ||||
this short timeframe, packets would start to be reassembled | ||||
wrongly and continuously once in such interval until an error | ||||
detection and recovery algorithm at an upper layer lets the | ||||
application back out. | ||||
For each group of fragments whose Identification numbers "collide", | For each group of fragments whose Identification numbers "collide", | |||
the fragment reassembly will lead to corrupted packets. The IP | the fragment reassembly will lead to corrupted packets. The IP | |||
payload of the reassembled datagram will be handed to the | payload of the reassembled datagram will be handed to the | |||
corresponding upper layer protocol, where the error will (hopefully) | corresponding upper layer protocol, where the error will (hopefully) | |||
be detected by some error detecting code (such as the TCP checksum) | be detected by some error detecting code (such as the TCP checksum) | |||
and the packet will be discarded. | and the packet will be discarded. | |||
An attacker could exploit this fact to intentionally cause a system | An attacker could exploit this fact to intentionally cause a system | |||
to discard all or part of the fragmented traffic it gets, thus | to discard all or part of the fragmented traffic it gets, thus | |||
performing a Denial of Service attack. Such an attacker would simply | performing a Denial-of-Service attack. Such an attacker would simply | |||
establish a flow of fragments with different IP Identification | establish a flow of fragments with different IP Identification | |||
numbers, to trash all or part of the IP Identification space. As a | numbers, to trash all or part of the IP Identification space. As a | |||
result, the receiving system would use the attacker's fragments for | result, the receiving system would use the attacker's fragments for | |||
the reassembly of legitimate datagrams, leading to corrupted packets | the reassembly of legitimate datagrams, leading to corrupted packets | |||
which would later (and hopefully) get dropped. | which would later (and hopefully) get dropped. | |||
In most cases, use of a long fragment timeout will benefit the | In most cases, use of a long fragment timeout will benefit the | |||
attacker, as forged fragments will keep the IP Identification space | attacker, as forged fragments will keep the IP Identification space | |||
trashed for a longer period of time. | trashed for a longer period of time. | |||
skipping to change at page 49, line 10 | skipping to change at page 51, line 44 | |||
As IP packets can be duplicated by the network, and each packet may | As IP packets can be duplicated by the network, and each packet may | |||
take a different path to get to the destination host, fragments may | take a different path to get to the destination host, fragments may | |||
arrive not only out of order and/or duplicated, but also overlapping. | arrive not only out of order and/or duplicated, but also overlapping. | |||
This means that the reassembly process can be somewhat complex, with | This means that the reassembly process can be somewhat complex, with | |||
the corresponding implementation being not specifically trivial. | the corresponding implementation being not specifically trivial. | |||
[Shannon2001] analyzes the causes and attributes of fragment traffic | [Shannon2001] analyzes the causes and attributes of fragment traffic | |||
measured in several types of WANs. | measured in several types of WANs. | |||
During the years, a number of attacks have exploited bugs in the | During the years, a number of attacks have exploited bugs in the | |||
reassembly function of a number of operating systems, producing | reassembly function of several operating systems, producing buffer | |||
buffer overflows that have led, in most cases, to a crash of the | overflows that have led, in most cases, to a crash of the attacked | |||
attacked system. | system. | |||
4.1.1.4. Problems that arise from the ambiguity of the reassembly | 4.1.1.4. Problems that arise from the ambiguity of the reassembly | |||
process | process | |||
Network Intrusion Detection Systems (NIDSs) typically monitor the | Network Intrusion Detection Systems (NIDSs) typically monitor the | |||
traffic on a given network with the intent of identifying traffic | traffic on a given network with the intent of identifying traffic | |||
patterns that might indicate network intrusions. | patterns that might indicate network intrusions. | |||
In the presence of IP fragments, in order to detect illegitimate | In the presence of IP fragments, in order to detect illegitimate | |||
activity at the transport or application layers (i.e., any protocol | activity at the transport or application layers (i.e., any protocol | |||
skipping to change at page 51, line 15 | skipping to change at page 53, line 50 | |||
While the first of the choices might seem to be the most straight- | While the first of the choices might seem to be the most straight- | |||
forward, it implies that even when a single small fragment of a given | forward, it implies that even when a single small fragment of a given | |||
packet is received, the amount of memory that will be allocated for | packet is received, the amount of memory that will be allocated for | |||
that fragment will account for the size of the complete IP datagram, | that fragment will account for the size of the complete IP datagram, | |||
thus using more system resources than what is actually needed. | thus using more system resources than what is actually needed. | |||
Furthermore, the only situation in which the actual size of the whole | Furthermore, the only situation in which the actual size of the whole | |||
datagram will be known is when the last fragment of the packet is | datagram will be known is when the last fragment of the packet is | |||
received first, as that is the only packet from which the total size | received first, as that is the only packet from which the total size | |||
of the IP datagram can be asserted. Otherwise, memory should be | of the IP datagram can be asserted. Otherwise, memory should be | |||
allocated for largest possible packet size (65535 bytes). | allocated for the largest possible packet size (65535 bytes). | |||
The IP module should also enforce a limit on the amount of memory | The IP module should also enforce a limit on the amount of memory | |||
that can be allocated for IP fragments, as well as a limit on the | that can be allocated for IP fragments, as well as a limit on the | |||
number of fragments that at any time will be allowed in the system. | number of fragments that at any time will be allowed in the system. | |||
This will basically limit the resources spent on the reassembly | This will basically limit the resources spent on the reassembly | |||
process, and prevent an attacker from trashing the whole system | process, and prevent an attacker from trashing the whole system | |||
memory. | memory. | |||
Furthermore, the IP module should keep a different buffer for IP | Furthermore, the IP module should keep a different buffer for IP | |||
fragments than for complete IP datagrams. This will basically | fragments than for complete IP datagrams. This will basically | |||
separate the effects of fragment attacks on non-fragmented traffic. | separate the effects of fragment attacks on non-fragmented traffic. | |||
Most TCP/IP implementations, such as that in Linux and those in BSD- | Most TCP/IP implementations, such as that in Linux and those in BSD- | |||
derived systems, already implement this. | derived systems, already implement this. | |||
[Jones2002] contains an analysis about the amount of memory that may | [Jones2002] analyzes the amount of memory that may be needed for the | |||
be needed for the fragment reassembly buffer depending on a number of | fragment reassembly buffer depending on a number of network | |||
network characteristics. | characteristics. | |||
4.1.2.2. Flushing the fragment buffer | 4.1.2.2. Flushing the fragment buffer | |||
In the case of those attacks that aim to consume the memory buffers | In the case of those attacks that aim to consume the memory buffers | |||
used for fragments, and those that aim to cause a collision of IP | used for fragments, and those that aim to cause a collision of IP | |||
Identification numbers, there are a number of counter-measures that | Identification numbers, there are a number of countermeasures that | |||
can be implemented. | can be implemented. | |||
The IP module should enforce a limit on the amount of memory that can | Even with these countermeasures in place, there is still the issue of | |||
be allocated for IP fragments, as well as a limit on the number of | what to do when the buffer pool used for IP fragments gets full. | |||
fragments that at any time will be allowed in the system. This will | ||||
basically limit the resources spent on the reassembly process, and | ||||
prevent an attacker from trashing the whole system memory. | ||||
Additionally, the IP module should keep a different buffer for IP | ||||
fragments than for complete IP datagrams. This will basically | ||||
separate the effects of fragment attacks on non-fragmented traffic. | ||||
Most TCP/IP implementations, such as that in Linux and those in BSD- | ||||
derived systems, already implement this. | ||||
Even with these counter-measures in place, there is still the issue | ||||
of what to do when the buffer used for IP fragments get full. | ||||
Basically, if the fragment buffer is full, no instance of | Basically, if the fragment buffer is full, no instance of | |||
communication that relies on fragmentation will be able to progress. | communication that relies on fragmentation will be able to progress. | |||
Unfortunately, there are not many options for reacting to this | Unfortunately, there are not many options for reacting to this | |||
situation. If nothing is done, all the instances of communication | situation. If nothing is done, all the instances of communication | |||
that rely on fragmentation will experience a denial of service. | that rely on fragmentation will experience a denial of service. | |||
Thus, the only thing that can be done is flush all or part of the | Thus, the only thing that can be done is flush all or part of the | |||
fragment buffer, on the premise that legitimate traffic will be able | fragment buffer, on the premise that legitimate traffic will be able | |||
to make use of the freed buffer space to allow communication flows to | to make use of the freed buffer space to allow communication flows to | |||
progress. | progress. | |||
There are a number of factors that should be taken into consideration | There are a number of factors that should be taken into consideration | |||
when flushing the fragment buffer. First, if a fragment of a given | when flushing the fragment buffers. First, if a fragment of a given | |||
packet (i.e., fragment with a given Identification number) is | packet (i.e., fragment with a given Identification number) is | |||
flushed, all the other fragments that correspond to the same datagram | flushed, all the other fragments that correspond to the same datagram | |||
should be flushed. As in order for a packet to be reassembled all of | should be flushed. As in order for a packet to be reassembled all of | |||
its fragments must be received by the system performing the | its fragments must be received by the system performing the | |||
reassembly function, flushing only a subset of the fragments of a | reassembly function, flushing only a subset of the fragments of a | |||
given packet would keep the corresponding buffers tied to fragments | given packet would keep the corresponding buffers tied to fragments | |||
that would never reassemble into a complete datagram. Additionally, | that would never reassemble into a complete datagram. Additionally, | |||
care must be taken so that, in the event that subsequent buffer | care must be taken so that, in the event that subsequent buffer | |||
flushes need to be performed, it is not always the same set of | flushes need to be performed, it is not always the same set of | |||
fragments that get dropped, as such a behavior would probably cause a | fragments that get dropped, as such a behavior would probably cause a | |||
selective Denial of Service (DoS) to the traffic flows to which that | selective Denial of Service (DoS) to the traffic flows to which that | |||
set of fragments belong. | set of fragments belongs. | |||
Many TCP/IP implementations define a threshold for the number of | Many TCP/IP implementations define a threshold for the number of | |||
fragments that, when reached, triggers a fragment-buffer flush. Some | fragments that, when reached, triggers a fragment-buffer flush. Some | |||
systems flush 1/2 of the fragment buffer when the threshold is | systems flush 1/2 of the fragment buffer when the threshold is | |||
reached. As mentioned before, the idea of flushing the buffer is to | reached. As mentioned before, the idea of flushing the buffer is to | |||
create some free space in the fragment buffer, on the premise that | create some free space in the fragment buffer, on the premise that | |||
this will allow for new and legitimate fragments to be processed by | this will allow for new and legitimate fragments to be processed by | |||
the IP module, thus letting communication survive the overwhelming | the IP module, thus letting communication survive the overwhelming | |||
situation. On the other hand, the idea of flushing a somewhat large | situation. On the other hand, the idea of flushing a somewhat large | |||
portion of the buffer is to avoid flushing always the same set of | portion of the buffer is to avoid flushing always the same set of | |||
packets. | packets. | |||
4.1.2.3. A more selective fragment buffer flushing strategy | 4.1.2.3. A more selective fragment buffer flushing strategy | |||
One of the difficulties in implementing counter-measures for the | One of the difficulties in implementing countermeasures for the | |||
fragmentation attacks described in this document is that it is | fragmentation attacks described in throughout Section 4.1 is that it | |||
difficult to perform validation checks on the received fragments. | is difficult to perform validation checks on the received fragments. | |||
For instance, the fragment on which validity checks could be | For instance, the fragment on which validity checks could be | |||
performed, the first fragment, may be not the first fragment to | performed, the first fragment, may be not the first fragment to | |||
arrive at the destination host. | arrive at the destination host. | |||
Fragments can not only arrive out of order because of packet | Fragments can not only arrive out of order because of packet | |||
reordering performed by the network, but also because the system (or | reordering performed by the network, but also because the system (or | |||
systems) that fragmented the IP datagram may indeed transmit the | systems) that fragmented the IP datagram may indeed transmit the | |||
fragments out of order. A notable example of this is the Linux | fragments out of order. A notable example of this is the Linux | |||
TCP/IP stack, which transmits the fragments in reverse order. | TCP/IP stack, which transmits the fragments in reverse order. | |||
o This means that we cannot enforce checks on the fragments for | This means that we cannot enforce checks on the fragments for which | |||
which we allocate reassembly resources, as the first fragment we | we allocate reassembly resources, as the first fragment we receive | |||
receive for a given packet may be some other fragment than the | for a given packet may be some other fragment than the first one (the | |||
first one (the one with an Fragment Offset of 0). | one with an Fragment Offset of 0). | |||
However, at the point in which we decide to free some space in the | However, at the point in which we decide to free some space in the | |||
fragment buffer, some refinements can be done to the flushing policy. | fragment buffer, some refinements can be done to the flushing policy. | |||
The first thing we would like to do is to stop different types of | The first thing we would like to do is to stop different types of | |||
traffic from interfering with each other. This means, in principle, | traffic from interfering with each other. This means, in principle, | |||
that we do not want fragmented UDP traffic to interfere with | that we do not want fragmented UDP traffic to interfere with | |||
fragmented TCP traffic. In order to implement this traffic | fragmented TCP traffic. In order to implement this traffic | |||
separation for the different protocols, a different fragment buffer | separation for the different protocols, a different fragment buffer | |||
would be needed, in principle, for each of the 256 different | pool would be needed, in principle, for each of the 256 different | |||
protocols that can be encapsulated in an IP datagram. | protocols that can be encapsulated in an IP datagram. | |||
We believe a tradeoff is to implement two separate fragment buffers: | We believe a tradeoff is to implement two separate fragment buffers: | |||
one for IP datagrams that encapsulate IPsec packets, and another for | one for IP datagrams that encapsulate IPsec packets, and another for | |||
the rest of the traffic. This basically means that traffic not | the rest of the traffic. This basically means that traffic not | |||
protected by IPsec will not interfere with those flows of | protected by IPsec will not interfere with those flows of | |||
communication that are being protected by IPsec. | communication that are being protected by IPsec. | |||
The processing of each of these two different fragment buffers would | The processing of each of these two different fragment buffer pools | |||
be completely independent from each other. In the case of the IPsec | would be completely independent from each other. In the case of the | |||
fragment buffer, when the buffer needs to be flushed, the following | IPsec fragment buffer pool, when the buffers needs to be flushed, the | |||
refined policy could be applied: | following refined policy could be applied: | |||
o First, for each packet for which the IPsec header has been | o First, for each packet for which the IPsec header has been | |||
received, check that the SPI field of the IPsec header corresponds | received, check that the SPI field of the IPsec header corresponds | |||
to an existing IPsec Security Association (SA), and probably also | to an existing IPsec Security Association (SA), and probably also | |||
check that the IPsec sequence number is valid. If the check | check that the IPsec sequence number is valid. If the check | |||
fails, drop all the fragments that correspond to this packet. | fails, drop all the fragments that correspond to this packet. | |||
o Second, if the fragment buffer still needs to be flushed, drop all | o Second, if still more fragment buffers need to be flushed, drop | |||
the fragments that correspond to packets for which the full IPsec | all the fragments that correspond to packets for which the full | |||
header has not yet been received. The number of packets for which | IPsec header has not yet been received. The number of packets for | |||
this flushing is performed depends on the amount of free space | which this flushing is performed depends on the amount of free | |||
that needs to be created. | space that needs to be created. | |||
o Third, if after flushing packets with invalid IPsec information | o Third, if after flushing packets with invalid IPsec information | |||
(First step), and packets on which validation checks could not be | (First step), and packets on which validation checks could not be | |||
performed (Second step), there is still not enough space in the | performed (Second step), there is still not enough space in the | |||
fragment buffer, drop all the fragments that correspond to packets | fragment buffer, drop all the fragments that correspond to packets | |||
that passed the checks of the first step, until the necessary free | that passed the checks of the first step, until the necessary free | |||
space is created. | space is created. | |||
The rationale behind this policy is that, at the point of flushing | The rationale behind this policy is that, at the point of flushing | |||
the fragment buffer, we prefer to keep those packets on which we | fragment buffers, we prefer to keep those packets on which we could | |||
could successfully perform a number of validation checks, over those | successfully perform a number of validation checks, over those | |||
packets on which those checks failed, or the checks could not even be | packets on which those checks failed, or the checks could not even be | |||
performed. | performed. | |||
By checking both the IPsec SPI and the IPsec sequence number, it is | By checking both the IPsec SPI and the IPsec sequence number, it is | |||
virtually impossible for an attacker that is off-path to perform a | virtually impossible for an attacker that is off-path to perform a | |||
Denial of Service attack to communication flows being protected by | Denial-of-Service attack to communication flows being protected by | |||
IPsec. | IPsec. | |||
Unfortunately, some IP implementations (such as that in Linux | Unfortunately, some IP implementations (such as that in Linux | |||
[Linux2006]), when performing fragmentation, send the corresponding | [Linux2006]), when performing fragmentation, send the corresponding | |||
fragments in reverse order. In such cases, at the point of flushing | fragments in reverse order. In such cases, at the point of flushing | |||
the fragment buffer, legitimate fragments will receive the same | the fragment buffer, legitimate fragments will receive the same | |||
treatment as the possible forged fragments. | treatment as the possible forged fragments. | |||
This refined flushing policy provides an increased level of | This refined flushing policy provides an increased level of | |||
protection against this type of resource exhaustion attack, while not | protection against this type of resource exhaustion attack, while not | |||
skipping to change at page 55, line 9 | skipping to change at page 57, line 32 | |||
to approximately 15 seconds; although further research on this issue | to approximately 15 seconds; although further research on this issue | |||
is necessary. | is necessary. | |||
It should be noted that in network scenarios of long-delay and high- | It should be noted that in network scenarios of long-delay and high- | |||
bandwidth (usually referred to as "Long-Fat Networks"), using a long | bandwidth (usually referred to as "Long-Fat Networks"), using a long | |||
fragment timeout would likely increase the probability of collision | fragment timeout would likely increase the probability of collision | |||
of IP ID numbers. Therefore, in such scenarios it is highly | of IP ID numbers. Therefore, in such scenarios it is highly | |||
desirable to avoid the use of fragmentation with techniques such as | desirable to avoid the use of fragmentation with techniques such as | |||
PMTUD [RFC1191] or PLPMTUD [RFC4821]. | PMTUD [RFC1191] or PLPMTUD [RFC4821]. | |||
4.1.2.5. Counter-measure for some IDS evasion techniques | 4.1.2.5. countermeasure for some IDS evasion techniques | |||
[Shankar2003] introduces a technique named "Active Mapping" that | [Shankar2003] introduces a technique named "Active Mapping" that | |||
prevents evasion of a NIDS by acquiring sufficient knowledge about | prevents evasion of a NIDS by acquiring sufficient knowledge about | |||
the network being monitored, to assess which packets will arrive at | the network being monitored, to assess which packets will arrive at | |||
the intended recipient, and how they will be interpreted by it. | the intended recipient, and how they will be interpreted by it. | |||
[Novak2005] describes some techniques that are applied by the Snort | [Novak2005] describes some techniques that are applied by the Snort | |||
NIDS to avoid evasion. | NIDS to avoid evasion. | |||
4.1.2.6. Counter-measure for firewall-rules bypassing | 4.1.2.6. countermeasure for firewall-rules bypassing | |||
One of the classical techniques to bypass firewall rules involves | One of the classical techniques to bypass firewall rules involves | |||
sending packets in which the header of the encapsulated protocol is | sending packets in which the header of the encapsulated protocol is | |||
fragmented. Even when it would be legal (as far as the IETF | fragmented. Even when it would be legal (as far as the IETF | |||
specifications are concerned) to receive such a packets, the MTUs of | specifications are concerned) to receive such a packets, the MTUs of | |||
the network technologies used in practice are not that small to | the network technologies used in practice are not that small to | |||
require the header of the encapsulated protocol to be fragmented. | require the header of the encapsulated protocol to be fragmented. | |||
Therefore, the system performing reassembly should drop all packets | Therefore, the system performing reassembly should drop all packets | |||
which fragment the upper-layer protocol header, and this event should | which fragment the upper-layer protocol header, and this event should | |||
be logged (e.g., a counter could be incremented to reflect the packet | be logged (e.g., a counter could be incremented to reflect the packet | |||
drop). The necessary information to perform this check could be | drop). | |||
stored by the IP module together with the rest of the upper-layer | ||||
protocol information. | ||||
Additionally, given that many middle-boxes such as firewalls create | Additionally, given that many middle-boxes such as firewalls create | |||
state according to the contents of the first fragment of a given | state according to the contents of the first fragment of a given | |||
packet, it is best that, in the event an end-system receives | packet, it is best that, in the event an end-system receives | |||
overlapping fragments, it honors the information contained in the | overlapping fragments, it honors the information contained in the | |||
fragment that was received first. | fragment that was received first. | |||
RFC 1858 [RFC1858] describes the abuse of IP fragmentation to bypass | RFC 1858 [RFC1858] describes the abuse of IP fragmentation to bypass | |||
firewall rules. RFC 3128 [RFC3128] corrects some errors in RFC 1858. | firewall rules. RFC 3128 [RFC3128] corrects some errors in RFC 1858. | |||
skipping to change at page 56, line 27 | skipping to change at page 58, line 47 | |||
to police and remark the Type of Service or Differentiated Services | to police and remark the Type of Service or Differentiated Services | |||
values, according to the type of service at which each end-system has | values, according to the type of service at which each end-system has | |||
been allowed to send packets. | been allowed to send packets. | |||
Bullet 4 of Section 5.3.3.3 of RFC 1812 states that routers "MUST NOT | Bullet 4 of Section 5.3.3.3 of RFC 1812 states that routers "MUST NOT | |||
change precedence settings on packets it did not originate". | change precedence settings on packets it did not originate". | |||
However, given the security implications of the Precedence field, it | However, given the security implications of the Precedence field, it | |||
is fair for routers, switches or other middle-boxes, particularly | is fair for routers, switches or other middle-boxes, particularly | |||
those in the network edge, to overwrite the Type of Service (or | those in the network edge, to overwrite the Type of Service (or | |||
Differentiated Services) field of the packets they are forwarding, | Differentiated Services) field of the packets they are forwarding, | |||
according to a configured network policy. | according to a configured network policy (this is the specified | |||
behavior for DS domains [RFC2475]). | ||||
Section 5.3.3.1 and Section 5.3.6 of RFC 1812 states that if | Section 5.3.3.1 and Section 5.3.6 of RFC 1812 states that if | |||
precedence-ordered queue service is implemented and enabled, the | precedence-ordered queue service is implemented and enabled, the | |||
router "MUST NOT discard a packet whose precedence is higher than | router "MUST NOT discard a packet whose precedence is higher than | |||
that of a packet that is not discarded". While this recommendation | that of a packet that is not discarded". While this recommendation | |||
makes sense given the semantics of the Precedence field, it is | makes sense given the semantics of the Precedence field, it is | |||
important to note that it would be simple for an attacker to send | important to note that it would be simple for an attacker to send | |||
packets with forged high Precedence value to congest some internet | packets with forged high Precedence value to congest some internet | |||
router(s), and cause all (or most) traffic with a lower Precedence | router(s), and cause all (or most) traffic with a lower Precedence | |||
value to be discarded. | value to be discarded. | |||
4.2.2. Weak Type of Service | 4.2.2. Weak Type of Service | |||
Section 5.2.4.3 of RFC 1812 describes the algorithm for determining | Section 5.2.4.3 of RFC 1812 describes the algorithm for determining | |||
the next-hop address (i.e., the forwarding algorithm). Bullet 3, | the next-hop address (i.e., the forwarding algorithm). Bullet 3, | |||
"Weak TOS", addresses the case in which routes contain a "type of | "Weak TOS", addresses the case in which routes contain a "type of | |||
service" attribute. It states that in case a packet contains a non- | service" attribute. It states that in case a packet contains a non- | |||
default TOS (i.e., 0000), only routes with the same TOS or with the | default TOS (i.e., 0000), only routes with the same TOS or with the | |||
default TOS should be considered for forwarding that packet. | default TOS should be considered for forwarding that packet. | |||
However, this means that among the longest match routes for a given | However, this means that if among the longest match routes for a | |||
in packet are routes with some TOS other than the one contained in | given packet are routes with some TOS other than the one contained in | |||
the received packet, and no routes with the default TOS, the | the received packet, and no routes with the default TOS, the | |||
corresponding packet would be dropped. This may or may not be a | corresponding packet would be dropped. This may or may not be a | |||
desired behavior. | desired behavior. | |||
An alternative to this would be to, in the case among the "longest | An alternative for the case in which among the "longest match" routes | |||
match" routes there are only routes with non-default type of services | there are only routes with non-default type of service which do not | |||
which do not match the TOS contained in the received packet, to use a | match the TOS contained in the received packet, would be to use a | |||
route with any other TOS. While this route would most likely not be | route with any other TOS. While this route would most likely not be | |||
able to address the type of service requested by packet, it would, at | able to address the type of service requested by packet, it would, at | |||
least, provide a "best effort" service. | least, provide a "best effort" service. | |||
It must be noted that Section 5.3.2 of RFC 1812 allows for routers | It must be noted that Section 5.3.2 of RFC 1812 allows routers to not | |||
for not honoring the TOS field. Therefore, the proposed alternative | honor the TOS field. Therefore, the proposed alternative behavior is | |||
behavior is still compliant with the IETF specifications. | still compliant with the IETF specifications. | |||
o While officially specified in the RFC series, TOS-based routing is | While officially specified in the RFC series, TOS-based routing is | |||
not widely deployed in the Internet. | not widely deployed in the Internet. | |||
4.2.3. Address Resolution | 4.2.3. Impact of Address Resolution on Buffer Management | |||
In the case of broadcast link-layer technologies, in order for a | In the case of broadcast link-layer technologies, in order for a | |||
system to transfer an IP datagram it must usually first map an IP | system to transfer an IP datagram it must usually first map an IP | |||
address to the corresponding link-layer address (for example, by | address to the corresponding link-layer address (for example, by | |||
means of the ARP protocol [RFC0826]) . This means that while this | means of the ARP protocol [RFC0826]) . This means that while this | |||
operation is being performed, the packets that would require such a | operation is being performed, the packets that would require such a | |||
mapping would need to be kept in memory. This may happen both in the | mapping would need to be kept in memory. This may happen both in the | |||
case of hosts and in the case of routers. | case of hosts and in the case of routers. | |||
This situation might be exploited by an attacker, which could send a | This situation might be exploited by an attacker, which could send a | |||
large amount of packets to a non-existent host which would supposedly | large amount of packets to a non-existent host which would supposedly | |||
be directly connected to the attacked router. While trying to map | be directly connected to the attacked router. While trying to map | |||
the corresponding IP address into a link-layer address, the attacked | the corresponding IP address into a link-layer address, the attacked | |||
router would keep in memory all the packets that would need to make | router would keep in memory all the packets that would need to make | |||
use of that link-layer address. At the point in which the mapping | use of that link-layer address. At the point in which the mapping | |||
function times out, depending on the policy implemented by the | function times out, depending on the policy implemented by the | |||
attacked router, only the packet that triggered the call to the | attacked router, only the packet that triggered the call to the | |||
mapping function might be dropped. In that case, the same operation | mapping function might be dropped. In that case, the same operation | |||
would be repeated for every packet destined to the non-existent host. | would be repeated for every packet destined to the non-existent host. | |||
Depending on the timeout value for the mapping function, this | Depending on the timeout value for the mapping function, this | |||
situation might lead to the router buffers to run out of free space, | situation might lead the router to run out of free buffer space, with | |||
with the consequence that incoming legitimate packets would have to | the consequence that incoming legitimate packets would have to be | |||
be dropped, or that legitimate packets already stored in the router's | dropped, or that legitimate packets already stored in the router's | |||
buffers might get dropped. Both of these situations would lead | buffers might get dropped. Both of these situations would lead | |||
either to a complete Denial of Service, or to a degradation of the | either to a complete Denial of Service, or to a degradation of the | |||
network service. | network service. | |||
One counter-measure to this problem would be to drop, at the point | One countermeasure to this problem would be to drop, at the point the | |||
the mapping function times out all the packets destined to the | mapping function times out, all the packets destined to the address | |||
address that timed out. In addition, a "negative cache entry" might | that timed out. In addition, a "negative cache entry" might be kept | |||
be kept in the module performing the matching function, so that for | in the module performing the matching function, so that for some | |||
some amount of time, the mapping function would return an error when | amount of time, the mapping function would return an error when the | |||
the IP module requests to perform a mapping for some address for | IP module requests to perform a mapping for some address for which | |||
which the mapping has recently timed out. | the mapping has recently timed out. | |||
o A common implementation strategy for routers is that when a packet | A common implementation strategy for routers is that when a packet | |||
is received that requires an ARP request to be performed before | is received that requires an ARP resolution to be performed before | |||
the packet can be forwarded, the packet is dropped and the router | the packet can be forwarded, the packet is dropped and the router | |||
is then engaged in the ARP procedure. | is then engaged in the ARP procedure. | |||
4.2.4. Dropping packets | 4.2.4. Dropping packets | |||
In some scenarios, it may be necessary for a host or router to drop | In some scenarios, it may be necessary for a host or router to drop | |||
packets from the output queue. In the event one of such packets | packets from the output queue. In the event one of such packets | |||
happens to be an IP fragment, and there were other fragments of the | happens to be an IP fragment, and there were other fragments of the | |||
same packet in the queue, those other fragments should also be | same packet in the queue, those other fragments should also be | |||
dropped. The rationale for this policy is that it is nonsensical to | dropped. The rationale for this policy is that it is nonsensical to | |||
skipping to change at page 58, line 28 | skipping to change at page 61, line 4 | |||
spend system resources on those other fragments, because, as long as | spend system resources on those other fragments, because, as long as | |||
one fragment is missing, it will be impossible for the receiving | one fragment is missing, it will be impossible for the receiving | |||
system to reassemble them into a complete IP datagram. | system to reassemble them into a complete IP datagram. | |||
Some systems have been known to drop just a subset of fragments of a | Some systems have been known to drop just a subset of fragments of a | |||
given datagram, leading to a denial of service condition, as only a | given datagram, leading to a denial of service condition, as only a | |||
subset of all the fragments of the packets were actually transferred | subset of all the fragments of the packets were actually transferred | |||
to the next hop. | to the next hop. | |||
4.3. Addressing | 4.3. Addressing | |||
4.3.1. Unreachable addresses | 4.3.1. Unreachable addresses | |||
It is important to understand that while there are some addresses | It is important to understand that while there are some addresses | |||
that are supposed to be unreachable from the public Internet (such as | that are supposed to be unreachable from the public Internet (such as | |||
those described in RFC 1918 [RFC1918], or the "loopback" address), | the private IP addresses described in RFC 1918 [RFC1918], or the | |||
there are a number of tricks an attacker can perform to reach those | "loopback" address), there are a number of tricks an attacker can | |||
IP addresses that would otherwise be unreachable (e.g., exploit the | perform to reach those IP addresses that would otherwise be | |||
LSRR or SSRR IP options). Therefore, when applicable, packet | unreachable (e.g., exploit the LSRR or SSRR IP options). Therefore, | |||
filtering should be performed at organizational network boundary to | when applicable, packet filtering should be performed at private | |||
assure that those addresses will be unreachable. | network boundary to assure that those addresses will be unreachable. | |||
Similarly, link-local unicast addresses [RFC3927] and multicast | ||||
addresses with limited scope (link- and site-local addresses) should | ||||
not be accessible from outside the proper network boundaries and not | ||||
be passed across these boundaries. | ||||
[RFC5735] provides a summary of special use IPv4 addresses. | [RFC5735] provides a summary of special use IPv4 addresses. | |||
4.3.2. Private address space | 4.3.2. Private address space | |||
The Internet Assigned Numbers Authority (IANA) has reserved the | The Internet Assigned Numbers Authority (IANA) has reserved the | |||
following three blocks of the IP address space for private internets: | following three blocks of the IP address space for private internets: | |||
o 10.0.0.0 - 10.255.255.255 (10/8 prefix) | o 10.0.0.0 - 10.255.255.255 (10/8 prefix) | |||
skipping to change at page 59, line 4 | skipping to change at page 61, line 30 | |||
[RFC5735] provides a summary of special use IPv4 addresses. | [RFC5735] provides a summary of special use IPv4 addresses. | |||
4.3.2. Private address space | 4.3.2. Private address space | |||
The Internet Assigned Numbers Authority (IANA) has reserved the | The Internet Assigned Numbers Authority (IANA) has reserved the | |||
following three blocks of the IP address space for private internets: | following three blocks of the IP address space for private internets: | |||
o 10.0.0.0 - 10.255.255.255 (10/8 prefix) | o 10.0.0.0 - 10.255.255.255 (10/8 prefix) | |||
o 172.16.0.0 - 172.31.255.255 (172.16/12 prefix) | o 172.16.0.0 - 172.31.255.255 (172.16/12 prefix) | |||
o 192.168.0.0 - 192.168.255.255 (192.168/16 prefix) | o 192.168.0.0 - 192.168.255.255 (192.168/16 prefix) | |||
Use of these address blocks is described in RFC 1918 [RFC1918]. | Use of these address blocks is described in RFC 1918 [RFC1918]. | |||
Where applicable, packet filtering should be performed at the | Where applicable, packet filtering should be performed at the | |||
organizational perimeter to assure that these addresses are not | organizational perimeter to assure that these addresses are not | |||
reachable from outside the enterprise network. | reachable from outside the private network where such addresses are | |||
employed. | ||||
4.3.3. Class D addresses (224/4 address block) | 4.3.3. Former Class D Addresses (224/4 Address Block) | |||
The Class D addresses correspond to the 224/4 address block, and are | The former Class D addresses correspond to the 224/4 address block, | |||
used for Internet multicast. Therefore, if a packet is received with | and are used for Internet multicast. Therefore, if a packet is | |||
a Class D address as the Source Address, it should be dropped, and | received with a "Class D" address as the Source Address, it should be | |||
this event should be logged (e.g., a counter could be incremented to | dropped, and this event should be logged (e.g., a counter could be | |||
reflect the packet drop). Additionally, if an IP packet with a | incremented to reflect the packet drop). Additionally, if an IP | |||
multicast Destination Address is received for a connection-oriented | packet with a multicast Destination Address is received for a | |||
protocol (e.g., TCP), the packet should be dropped, and this event | connection-oriented protocol (e.g., TCP), the packet should be | |||
should be logged (e.g., a counter could be incremented to reflect the | dropped (see Section 4.3.5), and this event should be logged (e.g., a | |||
packet drop). | counter could be incremented to reflect the packet drop). | |||
4.3.4. Class E addresses (240/4 address block) | 4.3.4. Former Class E Addresses (240/4 Address Block) | |||
The Class E addresses correspond to the 240/4 address block, and are | The former Class E addresses correspond to the 240/4 address block, | |||
currently reserved for experimental use. As a result, a number of | and are currently reserved for experimental use. As a result, a | |||
implementations discard packets that contain a Class E address as the | number of implementations discard packets that contain a "Class" E | |||
Source Address or Destination Address. | address as the Source Address or Destination Address. | |||
However, there exists ongoing work to reclassify the Class E (240/4) | However, there exists ongoing work to reclassify the former Class E | |||
address block as usable unicast address spaces [Fuller2008a] | (240/4) address block as usable unicast address spaces [Fuller2008a] | |||
[I-D.fuller-240space] [I-D.wilson-class-e]. Therefore, we recommend | [I-D.fuller-240space] [I-D.wilson-class-e]. Therefore, we recommend | |||
implementations to accept addresses in the 240/4 block as valid | implementations to accept addresses in the 240/4 block as valid | |||
addresses for the Source Address and Destination Address. | addresses for the Source Address and Destination Address. | |||
It should be noted that the broadcast address 255.255.255.255 still | It should be noted that the broadcast address 255.255.255.255 still | |||
must be treated as indicated in Section 4.3.7 of this document. | must be treated as indicated in Section 4.3.7 of this document. | |||
4.3.5. Broadcast and multicast addresses, and connection-oriented | 4.3.5. Broadcast/Multicast addresses, and Connection-Oriented Protocols | |||
protocols | ||||
For connection-oriented protocols, such as TCP, shared state is | For connection-oriented protocols, such as TCP, shared state is | |||
maintained between only two endpoints at a time. Therefore, if an IP | maintained between only two endpoints at a time. Therefore, if an IP | |||
packet with a multicast (or broadcast) Destination Address is | packet with a multicast (or broadcast) Destination Address is | |||
received for a connection-oriented protocol (e.g., TCP), the packet | received for a connection-oriented protocol (e.g., TCP), the packet | |||
should be dropped, and this event should be logged (e.g., a counter | should be dropped, and this event should be logged (e.g., a counter | |||
could be incremented to reflect the packet drop). | could be incremented to reflect the packet drop). | |||
4.3.6. Broadcast and network addresses | 4.3.6. Broadcast and network addresses | |||
Originally, the IETF specifications did not permit IP addresses to | Originally, the IETF specifications did not permit IP addresses to | |||
have the value 0 or -1 for any of the Host number, network number, or | have the value 0 or -1 (shorthand for all bits set to 1) for any of | |||
subnet number fields, except for the cases indicated in Section | the Host number, network number, or subnet number fields, except for | |||
4.3.7. However, this changed fundamentally with the deployment of | the cases indicated in Section 4.3.7. However, this changed | |||
Classless Inter-Domain Routing (CIDR) [RFC4632], as with CIDR a | fundamentally with the deployment of Classless Inter-Domain Routing | |||
system cannot know a priori what the subnet mask is for a particular | (CIDR) [RFC4632], as with CIDR a system cannot know a priori what the | |||
IP address. | subnet mask is for a particular IP address. | |||
Many systems now allow administrators to use the values 0 or -1 for | Many systems now allow administrators to use the values 0 or -1 for | |||
those fields. Despite that according to the IETF specifications | those fields. Despite that according to the original IETF | |||
these addresses are illegal, modern IP implementations should | specifications these addresses are illegal, modern IP implementations | |||
consider these addresses to be valid. | should consider these addresses to be valid. | |||
4.3.7. Special Internet addresses | 4.3.7. Special Internet addresses | |||
RFC 1812 [RFC1812] discusses the use of some special internet | RFC 1812 [RFC1812] discusses the use of some special internet | |||
addresses, which is of interest to perform some sanity checks on the | addresses, which is of interest to perform some sanity checks on the | |||
Source Address and Destination Address fields of an IP packet. It | Source Address and Destination Address fields of an IP packet. It | |||
uses the following notation for an IP address: | uses the following notation for an IP address: | |||
{ <Network-prefix>, <Host-number> } | { <Network-prefix>, <Host-number> } | |||
where the length of the network prefix is generally implied by the | ||||
network mask assigned to the IP interface under consideration. | ||||
o RFC 1122 [RFC1122] contained a similar discussion of special | RFC 1122 [RFC1122] contained a similar discussion of special | |||
internet addresses, including some of the form { <Network-prefix>, | internet addresses, including some of the form { <Network-prefix>, | |||
<Subnet-number>, <Host-number> }. However, as explained in | <Subnet-number>, <Host-number> }. However, as explained in | |||
Section 4.2.2.11 of RFC 1812, in a CIDR world, the subnet number | Section 4.2.2.11 of RFC 1812, in a CIDR world, the subnet number | |||
is clearly an extension of the network prefix and cannot be | is clearly an extension of the network prefix and cannot be | |||
interpreted without the remainder of the prefix. | distinguished from the remainder of the prefix. | |||
{0, 0} | {0, 0} | |||
This address means "this host on this network". It is meant to be | This address means "this host on this network". It is meant to be | |||
used only during the initialization procedure, by which the host | used only during the initialization procedure, by which the host | |||
learns its own IP address. | learns its own IP address. | |||
If a packet is received with 0.0.0.0 as the Source Address for any | If a packet is received with 0.0.0.0 as the Source Address for any | |||
purpose other than bootstrapping, the corresponding packet should be | purpose other than bootstrapping, the corresponding packet should be | |||
silently dropped, and this event should be logged (e.g., a counter | silently dropped, and this event should be logged (e.g., a counter | |||
skipping to change at page 61, line 22 | skipping to change at page 64, line 5 | |||
reflect the packet drop). | reflect the packet drop). | |||
{-1, -1} | {-1, -1} | |||
This address is the local broadcast address. It should not be used | This address is the local broadcast address. It should not be used | |||
as a source IP address. If a packet is received with 255.255.255.255 | as a source IP address. If a packet is received with 255.255.255.255 | |||
as the Source Address, it should be dropped, and this event should be | as the Source Address, it should be dropped, and this event should be | |||
logged (e.g., a counter could be incremented to reflect the packet | logged (e.g., a counter could be incremented to reflect the packet | |||
drop). | drop). | |||
o Some systems, when receiving an ICMP echo request, for example, | Some systems, when receiving an ICMP echo request, for example, | |||
will use the Destination Address in the ICMP echo request packet | will use the Destination Address in the ICMP echo request packet | |||
as the Source Address of the response they send (in this case, an | as the Source Address of the response they send (in this case, an | |||
ICMP echo reply). Thus, when such systems receive a request sent | ICMP echo reply). Thus, when such systems receive a request sent | |||
to a broadcast address, the Source Address of the response will | to a broadcast address, the Source Address of the response will | |||
contain a broadcast address. This should be considered a bug, | contain a broadcast address. This should be considered a bug, | |||
rather than a malicious use of the limited broadcast address. | rather than a malicious use of the limited broadcast address. | |||
{Network number, -1} | {Network number, -1} | |||
This is the directed broadcast to the specified network. As | This is the directed broadcast to the specified network. As | |||
skipping to change at page 61, line 46 | skipping to change at page 64, line 29 | |||
As noted in Section 4.3.6 of this document, many systems now allow | As noted in Section 4.3.6 of this document, many systems now allow | |||
administrators to configure these addresses as unicast addresses for | administrators to configure these addresses as unicast addresses for | |||
network interfaces. In such scenarios, routers should forward these | network interfaces. In such scenarios, routers should forward these | |||
addresses as if they were traditional unicast addresses. | addresses as if they were traditional unicast addresses. | |||
In some scenarios a host may have knowledge about a particular IP | In some scenarios a host may have knowledge about a particular IP | |||
address being a network-directed broadcast address, rather than a | address being a network-directed broadcast address, rather than a | |||
unicast address (e.g., that IP address is configured on the local | unicast address (e.g., that IP address is configured on the local | |||
system as a "broadcast address"). In such scenarios, if a system can | system as a "broadcast address"). In such scenarios, if a system can | |||
infer the Source Address of a received packet is a network-directed | infer that the Source Address of a received packet is a network- | |||
broadcast address, the packet should be dropped, and this event | directed broadcast address, the packet should be dropped, and this | |||
should be logged (e.g., a counter could be incremented to reflect the | event should be logged (e.g., a counter could be incremented to | |||
packet drop). | reflect the packet drop). | |||
As noted in Section 4.3.6 of this document, with the deployment of | As noted in Section 4.3.6 of this document, with the deployment of | |||
CIDR [RFC4632], it may be difficult for a system to infer whether a | CIDR [RFC4632], it may be difficult for a system to infer whether a | |||
particular IP address that does not belong to a directly attached | particular IP address that does not belong to a directly attached | |||
subnet is a broadcast address. | subnet is a broadcast address. | |||
{127, any} | {127.0.0.0/8, any} | |||
This is the internal host loopback address. Any packet that arrives | This is the internal host loopback address. Any packet that arrives | |||
on any physical interface containing this address as the Source | on any physical interface containing this address as the Source | |||
Address, the Destination Address, or as part of a source route | Address, the Destination Address, or as part of a source route | |||
(either LSRR or SSRR), should be dropped, and this event should be | (either LSRR or SSRR), should be dropped. | |||
logged (e.g., a counter could be incremented to reflect the packet | ||||
drop). | ||||
For example, packets with a Destination Address in the 127.0.0.0/8 | For example, packets with a Destination Address in the 127.0.0.0/8 | |||
address block that are received on an interface other than loopback | address block that are received on an interface other than loopback | |||
should be silently dropped, and this event should be logged (e.g., a | should be silently dropped. Packets received on any interface other | |||
counter could be incremented to reflect the packet drop). Packets | than loopback with a Source Address corresponding to the system | |||
received on any interface other than loopback with a Source Address | receiving the packet should also be dropped. | |||
corresponding to the system receiving the packet should also be | ||||
dropped, and this event should be logged (e.g., a counter could be | In all the above cases, when a packet is dropped, this event should | |||
incremented to reflect the packet drop). | be logged (e.g., a counter could be incremented to reflect the packet | |||
drop). | ||||
5. Security Considerations | 5. Security Considerations | |||
This document discusses the security implications of the Internet | This document discusses the security implications of the Internet | |||
Protocol (IP), and discusses a number of implementation strategies | Protocol (IP) and a number of implementation strategies that help to | |||
that help to mitigate a number of vulnerabilities found in the | mitigate a number of vulnerabilities found in the protocol during the | |||
protocol during the last 25 years or so. | last 25 years or so. | |||
6. Acknowledgements | 6. Acknowledgements | |||
The author would like to thank Alfred Hoenes, Joel Jaeggli, Bruno | The author wishes to thank Alfred Hoenes for providing very thorough | |||
Rohee, and Andrew Yourtchenko for providing valuable comments on | reviews of earlier versions of this document, thus leading to | |||
earlier versions of this document. | numerous improvements. | |||
The author would like to thank Joel Jaeggli, Bruno Rohee, and Andrew | ||||
Yourtchenko for providing valuable comments on earlier versions of | ||||
this document. | ||||
This document was written by Fernando Gont on behalf of the UK CPNI | This document was written by Fernando Gont on behalf of the UK CPNI | |||
(United Kingdom's Centre for the Protection of National | (United Kingdom's Centre for the Protection of National | |||
Infrastructure), and is heavily based on the "Security Assessment of | Infrastructure), and is heavily based on the "Security Assessment of | |||
the Internet Protocol" [CPNI2008] published by the UK Centre for the | the Internet Protocol" [CPNI2008] published by the UK CPNI in 2008. | |||
Protection of National Infrastructure (CPNI). | ||||
The author would like to thank Randall Atkinson, John Day, Juan | The author would like to thank Randall Atkinson, John Day, Juan | |||
Fraschini, Roque Gagliano, Guillermo Gont, Martin Marino, Pekka | Fraschini, Roque Gagliano, Guillermo Gont, Martin Marino, Pekka | |||
Savola, and Christos Zoulas for providing valuable comments on | Savola, and Christos Zoulas for providing valuable comments on | |||
earlier versions of [CPNI2008], on which this document is based. | earlier versions of [CPNI2008], on which this document is based. | |||
The author would like to thank Randall Atkinson and Roque Gagliano, | The author would like to thank Randall Atkinson and Roque Gagliano, | |||
who generously answered a number of questions. | who generously answered a number of questions. | |||
Finally, the author would like to thank UK CPNI (formerly NISCC) for | Finally, the author would like to thank UK CPNI (formerly NISCC) for | |||
skipping to change at page 63, line 31 | skipping to change at page 66, line 15 | |||
RFC 826, November 1982. | RFC 826, November 1982. | |||
[RFC1038] St. Johns, M., "Draft revised IP security option", | [RFC1038] St. Johns, M., "Draft revised IP security option", | |||
RFC 1038, January 1988. | RFC 1038, January 1988. | |||
[RFC1063] Mogul, J., Kent, C., Partridge, C., and K. McCloghrie, "IP | [RFC1063] Mogul, J., Kent, C., Partridge, C., and K. McCloghrie, "IP | |||
MTU discovery options", RFC 1063, July 1988. | MTU discovery options", RFC 1063, July 1988. | |||
[RFC1108] Kent, S., "U.S", RFC 1108, November 1991. | [RFC1108] Kent, S., "U.S", RFC 1108, November 1991. | |||
[RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5, | ||||
RFC 1112, August 1989. | ||||
[RFC1122] Braden, R., "Requirements for Internet Hosts - | [RFC1122] Braden, R., "Requirements for Internet Hosts - | |||
Communication Layers", STD 3, RFC 1122, October 1989. | Communication Layers", STD 3, RFC 1122, October 1989. | |||
[RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191, | [RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191, | |||
November 1990. | November 1990. | |||
[RFC1349] Almquist, P., "Type of Service in the Internet Protocol | [RFC1349] Almquist, P., "Type of Service in the Internet Protocol | |||
Suite", RFC 1349, July 1992. | Suite", RFC 1349, July 1992. | |||
[RFC1393] Malkin, G., "Traceroute Using an IP Option", RFC 1393, | [RFC1393] Malkin, G., "Traceroute Using an IP Option", RFC 1393, | |||
January 1993. | January 1993. | |||
[RFC1770] Graff, C., "IPv4 Option for Sender Directed Multi- | [RFC1770] Graff, C., "IPv4 Option for Sender Directed Multi- | |||
Destination Delivery", RFC 1770, March 1995. | Destination Delivery", RFC 1770, March 1995. | |||
[RFC1812] Baker, F., "Requirements for IP Version 4 Routers", | [RFC1812] Baker, F., "Requirements for IP Version 4 Routers", | |||
RFC 1812, June 1995. | RFC 1812, June 1995. | |||
[RFC1918] Rekhter, Y., Moskowitz, R., Karrenberg, D., Groot, G., and | ||||
E. Lear, "Address Allocation for Private Internets", | ||||
BCP 5, RFC 1918, February 1996. | ||||
[RFC2113] Katz, D., "IP Router Alert Option", RFC 2113, | [RFC2113] Katz, D., "IP Router Alert Option", RFC 2113, | |||
February 1997. | February 1997. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | ||||
Requirement Levels", BCP 14, RFC 2119, March 1997. | ||||
[RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black, | [RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black, | |||
"Definition of the Differentiated Services Field (DS | "Definition of the Differentiated Services Field (DS | |||
Field) in the IPv4 and IPv6 Headers", RFC 2474, | Field) in the IPv4 and IPv6 Headers", RFC 2474, | |||
December 1998. | December 1998. | |||
[RFC2475] Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z., | [RFC2475] Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z., | |||
and W. Weiss, "An Architecture for Differentiated | and W. Weiss, "An Architecture for Differentiated | |||
Services", RFC 2475, December 1998. | Services", RFC 2475, December 1998. | |||
[RFC2644] Senie, D., "Changing the Default for Directed Broadcasts | [RFC2644] Senie, D., "Changing the Default for Directed Broadcasts | |||
in Routers", BCP 34, RFC 2644, August 1999. | in Routers", BCP 34, RFC 2644, August 1999. | |||
[RFC2827] Ferguson, P. and D. Senie, "Network Ingress Filtering: | ||||
Defeating Denial of Service Attacks which employ IP Source | ||||
Address Spoofing", BCP 38, RFC 2827, May 2000. | ||||
[RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition | ||||
of Explicit Congestion Notification (ECN) to IP", | ||||
RFC 3168, September 2001. | ||||
[RFC3704] Baker, F. and P. Savola, "Ingress Filtering for Multihomed | ||||
Networks", BCP 84, RFC 3704, March 2004. | ||||
[RFC3927] Cheshire, S., Aboba, B., and E. Guttman, "Dynamic | [RFC3927] Cheshire, S., Aboba, B., and E. Guttman, "Dynamic | |||
Configuration of IPv4 Link-Local Addresses", RFC 3927, | Configuration of IPv4 Link-Local Addresses", RFC 3927, | |||
May 2005. | May 2005. | |||
[RFC4632] Fuller, V. and T. Li, "Classless Inter-domain Routing | ||||
(CIDR): The Internet Address Assignment and Aggregation | ||||
Plan", BCP 122, RFC 4632, August 2006. | ||||
[RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU | [RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU | |||
Discovery", RFC 4821, March 2007. | Discovery", RFC 4821, March 2007. | |||
[RFC5082] Gill, V., Heasley, J., Meyer, D., Savola, P., and C. | ||||
Pignataro, "The Generalized TTL Security Mechanism | ||||
(GTSM)", RFC 5082, October 2007. | ||||
[RFC5350] Manner, J. and A. McDonald, "IANA Considerations for the | ||||
IPv4 and IPv6 Router Alert Options", RFC 5350, | ||||
September 2008. | ||||
[RFC5735] Cotton, M. and L. Vegoda, "Special Use IPv4 Addresses", | [RFC5735] Cotton, M. and L. Vegoda, "Special Use IPv4 Addresses", | |||
BCP 153, RFC 5735, January 2010. | BCP 153, RFC 5735, January 2010. | |||
7.2. Informative References | 7.2. Informative References | |||
[Anderson2001] | [Anderson2001] | |||
Anderson, J., "An Analysis of Fragmentation Attacks", | Anderson, J., "An Analysis of Fragmentation Attacks", | |||
Available at: http://www.ouah.org/fragma.html , 2001. | Available at: http://www.ouah.org/fragma.html , 2001. | |||
[Arkin2000] | ||||
Arkin, "IP TTL Field Value with ICMP (Oops - Identifying | ||||
Windows 2000 again and more)", http:// | ||||
ofirarkin.files.wordpress.com/2008/11/ | ||||
ofirarkin2000-06.pdf, 2000. | ||||
[Barisani2006] | [Barisani2006] | |||
Barisani, A., "FTester - Firewall and IDS testing tool", | Barisani, A., "FTester - Firewall and IDS testing tool", | |||
Available at: http://dev.inversepath.com/trac/ftester , | Available at: http://dev.inversepath.com/trac/ftester , | |||
2001. | 2001. | |||
[Bellovin1989] | [Bellovin1989] | |||
Bellovin, S., "Security Problems in the TCP/IP Protocol | Bellovin, S., "Security Problems in the TCP/IP Protocol | |||
Suite", Computer Communication Review Vol. 19, No. 2, pp. | Suite", Computer Communication Review Vol. 19, No. 2, pp. | |||
32-48, 1989. | 32-48, 1989. | |||
[Bellovin2002] | [Bellovin2002] | |||
Bellovin, S., "A Technique for Counting NATted Hosts", | Bellovin, S., "A Technique for Counting NATted Hosts", | |||
IMW'02 Nov. 6-8, 2002, Marseille, France, 2002. | IMW'02 Nov. 6-8, 2002, Marseille, France, 2002. | |||
[Bendi1998] | [Bendi1998] | |||
Bendi, "Boink exploit", http://www.insecure.org/sploits/ | Bendi, "Bonk exploit", http://www.insecure.org/sploits/ | |||
95.NT.fragmentation.bonk.html , 1998. | 95.NT.fragmentation.bonk.html , 1998. | |||
[Biondi2007] | [Biondi2007] | |||
Biondi, P. and A. Ebalard, "IPv6 Routing Header Security", | Biondi, P. and A. Ebalard, "IPv6 Routing Header Security", | |||
CanSecWest 2007 Security Conference http://www.secdev.org/ | CanSecWest 2007 Security Conference http://www.secdev.org/ | |||
conf/IPv6_RH_security-csw07.pdf, 2007. | conf/IPv6_RH_security-csw07.pdf, 2007. | |||
[CERT1996a] | [CERT1996a] | |||
CERT, "CERT Advisory CA-1996-01: UDP Port Denial-of- | CERT, "CERT Advisory CA-1996-01: UDP Port Denial-of- | |||
Service Attack", | Service Attack", | |||
skipping to change at page 65, line 47 | skipping to change at page 69, line 22 | |||
[CERT1999] | [CERT1999] | |||
CERT, "CERT Advisory CA-1999-17: Denial-of-Service Tools", | CERT, "CERT Advisory CA-1999-17: Denial-of-Service Tools", | |||
http://www.cert.org/advisories/CA-1999-17.html, 1999. | http://www.cert.org/advisories/CA-1999-17.html, 1999. | |||
[CERT2001] | [CERT2001] | |||
CERT, "CERT Advisory CA-2001-09: Statistical Weaknesses in | CERT, "CERT Advisory CA-2001-09: Statistical Weaknesses in | |||
TCP/IP Initial Sequence Numbers", | TCP/IP Initial Sequence Numbers", | |||
http://www.cert.org/advisories/CA-2001-09.html, 2001. | http://www.cert.org/advisories/CA-2001-09.html, 2001. | |||
[CERT2003] | [CERT2003] | |||
CERT, "CERT Advisory CA-2003-15 Cisco IOS Interface | CERT, "CERT Advisory CA-2003-15: Cisco IOS Interface | |||
Blocked by IPv4 Packet", | Blocked by IPv4 Packet", | |||
http://www.cert.org/advisories/CA-2003-15.html, 2003. | http://www.cert.org/advisories/CA-2003-15.html, 2003. | |||
[CIPSO1992] | [CIPSO1992] | |||
CIPSO, "COMMERCIAL IP SECURITY OPTION (CIPSO 2.2)", IETF | CIPSO, "COMMERCIAL IP SECURITY OPTION (CIPSO 2.2)", IETF | |||
Internet-Draft (draft-ietf-cipso-ipsecurity-01.txt), work | Internet-Draft (draft-ietf-cipso-ipsecurity-01.txt), work | |||
in progress , 1992. | in progress , 1992. | |||
[CIPSOWG1994] | [CIPSOWG1994] | |||
CIPSOWG, "Commercial Internet Protocol Security Option | CIPSOWG, "Commercial Internet Protocol Security Option | |||
skipping to change at page 67, line 28 | skipping to change at page 70, line 52 | |||
[Gont2006] | [Gont2006] | |||
Gont, F., "Advanced ICMP packet filtering", | Gont, F., "Advanced ICMP packet filtering", | |||
http://www.gont.com.ar/papers/icmp-filtering.html, 2006. | http://www.gont.com.ar/papers/icmp-filtering.html, 2006. | |||
[Haddad2004] | [Haddad2004] | |||
Haddad, I. and M. Zakrzewski, "Security Distribution for | Haddad, I. and M. Zakrzewski, "Security Distribution for | |||
Linux Clusters", Linux | Linux Clusters", Linux | |||
Journal http://www.linuxjournal.com/article/6943, 2004. | Journal http://www.linuxjournal.com/article/6943, 2004. | |||
[Humble1998] | [Humble1998] | |||
Gont, F., "Nestea exploit", | Humble, "Nestea exploit", | |||
http://www.insecure.org/sploits/linux.PalmOS.nestea.html, | http://www.insecure.org/sploits/linux.PalmOS.nestea.html, | |||
1998. | 1998. | |||
[I-D.fuller-240space] | [I-D.fuller-240space] | |||
Fuller, V., "Reclassifying 240/4 as usable unicast address | Fuller, V., "Reclassifying 240/4 as usable unicast address | |||
space", draft-fuller-240space-02 (work in progress), | space", draft-fuller-240space-02 (work in progress), | |||
March 2008. | March 2008. | |||
[I-D.ietf-tcpm-icmp-attacks] | [I-D.ietf-tcpm-icmp-attacks] | |||
Gont, F., "ICMP attacks against TCP", | Gont, F., "ICMP attacks against TCP", | |||
draft-ietf-tcpm-icmp-attacks-10 (work in progress), | draft-ietf-tcpm-icmp-attacks-12 (work in progress), | |||
January 2010. | March 2010. | |||
[I-D.stjohns-sipso] | ||||
StJohns, M., "Common Architecture Label IPv6 Security | ||||
Option (CALIPSO)", draft-stjohns-sipso-11 (work in | ||||
progress), March 2009. | ||||
[I-D.templin-mtuassurance] | [I-D.templin-mtuassurance] | |||
Templin, F., "Requirements for IP-in-IP Tunnel MTU | Templin, F., "Requirements for IP-in-IP Tunnel MTU | |||
Assurance", draft-templin-mtuassurance-02 (work in | Assurance", draft-templin-mtuassurance-02 (work in | |||
progress), October 2006. | progress), October 2006. | |||
[I-D.wilson-class-e] | [I-D.wilson-class-e] | |||
Wilson, P., Michaelson, G., and G. Huston, "Redesignation | Wilson, P., Michaelson, G., and G. Huston, "Redesignation | |||
of 240/4 from "Future Use" to "Private Use"", | of 240/4 from "Future Use" to "Private Use"", | |||
draft-wilson-class-e-02 (work in progress), | draft-wilson-class-e-02 (work in progress), | |||
skipping to change at page 69, line 45 | skipping to change at page 73, line 15 | |||
[Northcutt2000] | [Northcutt2000] | |||
Northcut, S. and Novak, "Network Intrusion Detection - An | Northcut, S. and Novak, "Network Intrusion Detection - An | |||
Analyst's Handbook", Second Edition New Riders Publishing, | Analyst's Handbook", Second Edition New Riders Publishing, | |||
2000. | 2000. | |||
[Novak2005] | [Novak2005] | |||
Novak, "Target-Based Fragmentation Reassembly", | Novak, "Target-Based Fragmentation Reassembly", | |||
http://www.snort.org/reg/docs/target_based_frag.pdf, | http://www.snort.org/reg/docs/target_based_frag.pdf, | |||
2005. | 2005. | |||
[OpenBSD-PF] | ||||
Sanfilippo, S., "PF: Scrub (Packet Normalization)", | ||||
http://www.openbsd.org/faq/pf/scrub.html, 2010. | ||||
[OpenBSD1998] | [OpenBSD1998] | |||
OpenBSD, "OpenBSD Security Advisory: IP Source Routing | OpenBSD, "OpenBSD Security Advisory: IP Source Routing | |||
Problem", | Problem", | |||
http://www.openbsd.org/advisories/sourceroute.txt, 1998. | http://www.openbsd.org/advisories/sourceroute.txt, 1998. | |||
[Paxson2001] | [Paxson2001] | |||
Paxson, V., Handley, M., and C. Kreibich, "Network | Paxson, V., Handley, M., and C. Kreibich, "Network | |||
Intrusion Detection: Evasion, Traffic Normalization, and | Intrusion Detection: Evasion, Traffic Normalization, and | |||
End-to-End Protocol Semantics", USENIX Conference, 2001, | End-to-End Protocol Semantics", USENIX Conference, 2001, | |||
2001. | 2001. | |||
skipping to change at page 70, line 21 | skipping to change at page 73, line 43 | |||
http://www.aciri.org/vern/Ptacek-Newsham-Evasion-98.ps, | http://www.aciri.org/vern/Ptacek-Newsham-Evasion-98.ps, | |||
1998. | 1998. | |||
[RFC0815] Clark, D., "IP datagram reassembly algorithms", RFC 815, | [RFC0815] Clark, D., "IP datagram reassembly algorithms", RFC 815, | |||
July 1982. | July 1982. | |||
[RFC1858] Ziemba, G., Reed, D., and P. Traina, "Security | [RFC1858] Ziemba, G., Reed, D., and P. Traina, "Security | |||
Considerations for IP Fragment Filtering", RFC 1858, | Considerations for IP Fragment Filtering", RFC 1858, | |||
October 1995. | October 1995. | |||
[RFC1918] Rekhter, Y., Moskowitz, R., Karrenberg, D., Groot, G., and | ||||
E. Lear, "Address Allocation for Private Internets", | ||||
BCP 5, RFC 1918, February 1996. | ||||
[RFC2544] Bradner, S. and J. McQuaid, "Benchmarking Methodology for | [RFC2544] Bradner, S. and J. McQuaid, "Benchmarking Methodology for | |||
Network Interconnect Devices", RFC 2544, March 1999. | Network Interconnect Devices", RFC 2544, March 1999. | |||
[RFC2827] Ferguson, P. and D. Senie, "Network Ingress Filtering: | ||||
Defeating Denial of Service Attacks which employ IP Source | ||||
Address Spoofing", BCP 38, RFC 2827, May 2000. | ||||
[RFC3056] Carpenter, B. and K. Moore, "Connection of IPv6 Domains | [RFC3056] Carpenter, B. and K. Moore, "Connection of IPv6 Domains | |||
via IPv4 Clouds", RFC 3056, February 2001. | via IPv4 Clouds", RFC 3056, February 2001. | |||
[RFC3128] Miller, I., "Protection Against a Variant of the Tiny | [RFC3128] Miller, I., "Protection Against a Variant of the Tiny | |||
Fragment Attack (RFC 1858)", RFC 3128, June 2001. | Fragment Attack (RFC 1858)", RFC 3128, June 2001. | |||
[RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition | ||||
of Explicit Congestion Notification (ECN) to IP", | ||||
RFC 3168, September 2001. | ||||
[RFC3530] Shepler, S., Callaghan, B., Robinson, D., Thurlow, R., | [RFC3530] Shepler, S., Callaghan, B., Robinson, D., Thurlow, R., | |||
Beame, C., Eisler, M., and D. Noveck, "Network File System | Beame, C., Eisler, M., and D. Noveck, "Network File System | |||
(NFS) version 4 Protocol", RFC 3530, April 2003. | (NFS) version 4 Protocol", RFC 3530, April 2003. | |||
[RFC3704] Baker, F. and P. Savola, "Ingress Filtering for Multihomed | ||||
Networks", BCP 84, RFC 3704, March 2004. | ||||
[RFC4459] Savola, P., "MTU and Fragmentation Issues with In-the- | [RFC4459] Savola, P., "MTU and Fragmentation Issues with In-the- | |||
Network Tunneling", RFC 4459, April 2006. | Network Tunneling", RFC 4459, April 2006. | |||
[RFC4632] Fuller, V. and T. Li, "Classless Inter-domain Routing | ||||
(CIDR): The Internet Address Assignment and Aggregation | ||||
Plan", BCP 122, RFC 4632, August 2006. | ||||
[RFC4963] Heffner, J., Mathis, M., and B. Chandler, "IPv4 Reassembly | [RFC4963] Heffner, J., Mathis, M., and B. Chandler, "IPv4 Reassembly | |||
Errors at High Data Rates", RFC 4963, July 2007. | Errors at High Data Rates", RFC 4963, July 2007. | |||
[RFC4987] Eddy, W., "TCP SYN Flooding Attacks and Common | [RFC4987] Eddy, W., "TCP SYN Flooding Attacks and Common | |||
Mitigations", RFC 4987, August 2007. | Mitigations", RFC 4987, August 2007. | |||
[RFC5082] Gill, V., Heasley, J., Meyer, D., Savola, P., and C. | [RFC5559] Eardley, P., "Pre-Congestion Notification (PCN) | |||
Pignataro, "The Generalized TTL Security Mechanism | Architecture", RFC 5559, June 2009. | |||
(GTSM)", RFC 5082, October 2007. | ||||
[RFC5570] StJohns, M., Atkinson, R., and G. Thomas, "Common | ||||
Architecture Label IPv6 Security Option (CALIPSO)", | ||||
RFC 5570, July 2009. | ||||
[RFC5670] Eardley, P., "Metering and Marking Behaviour of PCN- | ||||
Nodes", RFC 5670, November 2009. | ||||
[RFC5696] Moncaster, T., Briscoe, B., and M. Menth, "Baseline | ||||
Encoding and Transport of Pre-Congestion Information", | ||||
RFC 5696, November 2009. | ||||
[SELinux2008] | [SELinux2008] | |||
Security Enhanced Linux, "http://www.nsa.gov/selinux/". | Security Enhanced Linux, "http://www.nsa.gov/selinux/". | |||
[Sanfilippo1998a] | [Sanfilippo1998a] | |||
Sanfilippo, S., "about the ip header id", Post to Bugtraq | Sanfilippo, S., "about the ip header id", Post to Bugtraq | |||
mailing-list, Mon Dec 14 | mailing-list, Mon Dec 14 | |||
1998 http://www.kyuzz.org/antirez/papers/ipid.html, 1998. | 1998 http://www.kyuzz.org/antirez/papers/ipid.html, 1998. | |||
[Sanfilippo1998b] | [Sanfilippo1998b] | |||
skipping to change at page 72, line 14 | skipping to change at page 75, line 26 | |||
[Solaris2008] | [Solaris2008] | |||
Solaris Trusted Extensions - Labeled Security for Absolute | Solaris Trusted Extensions - Labeled Security for Absolute | |||
Protection, "http://www.sun.com/software/solaris/ds/ | Protection, "http://www.sun.com/software/solaris/ds/ | |||
trusted_extensions.jsp#3", 2008. | trusted_extensions.jsp#3", 2008. | |||
[Song1999] | [Song1999] | |||
Song, D., "Frag router tool", | Song, D., "Frag router tool", | |||
http://www.anzen.com/research/nidsbench/. | http://www.anzen.com/research/nidsbench/. | |||
[SpooferProject] | ||||
MIT ANA, "The MIT ANA Spoofer project", | ||||
http://spoofer.csail.mit.edu/index.php, 2010. | ||||
[US-CERT2001] | [US-CERT2001] | |||
US-CERT, "US-CERT Vulnerability Note VU#446689: Check | US-CERT, "US-CERT Vulnerability Note VU#446689: Check | |||
Point FireWall-1 allows fragmented packets through | Point FireWall-1 allows fragmented packets through | |||
firewall if Fast Mode is enabled", | firewall if Fast Mode is enabled", | |||
http://www.kb.cert.org/vuls/id/446689, 2001. | http://www.kb.cert.org/vuls/id/446689, 2001. | |||
[US-CERT2002] | [US-CERT2002] | |||
US-CERT, "US-CERT Vulnerability Note VU#310387: Cisco IOS | US-CERT, "US-CERT Vulnerability Note VU#310387: Cisco IOS | |||
discloses fragments of previous packets when Express | discloses fragments of previous packets when Express | |||
Forwarding is enabled", | Forwarding is enabled", | |||
http://www.kb.cert.org/vuls/id/310387, 2002. | http://www.kb.cert.org/vuls/id/310387, 2002. | |||
[Watson2004] | [Watson2004] | |||
Watson, P., "Slipping in the Window: TCP Reset Attacks", | Watson, P., "Slipping in the Window: TCP Reset Attacks", | |||
2004 CanSecWest Conference , 2004. | CanSecWest Conference , 2004. | |||
[Zakrzewski2002] | [Zakrzewski2002] | |||
Zakrzewski, M. and I. Haddad, "Linux Distributed Security | Zakrzewski, M. and I. Haddad, "Linux Distributed Security | |||
Module", http://www.linuxjournal.com/article/6215, 2002. | Module", http://www.linuxjournal.com/article/6215, 2002. | |||
[daemon91996] | [daemon91996] | |||
daemon9, route, and infinity, "IP-spoofing Demystified | daemon9, route, and infinity, "IP-spoofing Demystified | |||
(Trust-Relationship Exploitation)", Phrack Magazine, | (Trust-Relationship Exploitation)", Phrack Magazine, | |||
Volume Seven, Issue Forty-Eight, File 14 of | Volume Seven, Issue Forty-Eight, File 14 of 18 http:// | |||
18 http://www.phrack.org/phrack/48/P48-14 , 1988. | www.phrack.org/issues.html?issue=48&id=14&mode=txt, 1988. | |||
Appendix A. Advice and guidance to vendors | Appendix A. Advice and guidance to vendors | |||
Vendors are urged to contact CPNI (vulteam@cpni.gsi.gov.uk) if they | Vendors are urged to contact CPNI (vulteam@cpni.gsi.gov.uk) if they | |||
think they may be affected by the issues described in this document. | think they may be affected by the issues described in this document. | |||
As the lead coordination center for these issues, CPNI is well placed | As the lead coordination center for these issues, CPNI is well placed | |||
to give advice and guidance as required. | to give advice and guidance as required. | |||
CPNI works extensively with government departments and agencies, | CPNI works extensively with government departments and agencies, | |||
commercial organizations and the academic community to research | commercial organizations and the academic community to research | |||
vulnerabilities and potential threats to IT systems especially where | vulnerabilities and potential threats to IT systems especially where | |||
they may have an impact on Critical National Infrastructure's (CNI). | they may have an impact on Critical National Infrastructure's (CNI). | |||
Other ways to contact CPNI, plus CPNI's PGP public key, are available | Other ways to contact CPNI, plus CPNI's PGP public key, are available | |||
at http://www.cpni.gov.uk . | at http://www.cpni.gov.uk . | |||
Appendix B. Changes from previous versions of the draft (to be removed | Appendix B. Changes from previous versions of the draft | |||
by the RFC Editor before publishing this document as an | ||||
RFC) | ||||
B.1. Changes from draft-ietf-opsec-ip-security-01 | This whole appendix should be removed by the RFC Editor before | |||
publishing this document as an RFC. | ||||
B.1. Changes from draft-ietf-opsec-ip-security-02 | ||||
o Addresses a very thorough review by Alfred Hoenes (sent off-list) | ||||
o Miscellaneous edits (centers expressions, fills missing graphics | ||||
with ASCII-art, etc.) | ||||
B.2. Changes from draft-ietf-opsec-ip-security-01 | ||||
o Addresses rest of the feedback received from Andrew Yourtchenko | o Addresses rest of the feedback received from Andrew Yourtchenko | |||
(http://www.ietf.org/mail-archive/web/opsec/current/msg00417.html) | (http://www.ietf.org/mail-archive/web/opsec/current/msg00417.html) | |||
o Addresses a very thorough review by Alfred Hoenes (sent off-list) | o Addresses a very thorough review by Alfred Hoenes (sent off-list) | |||
o Addresses feedback submitted by Joel Jaeggli (off-list) | o Addresses feedback submitted by Joel Jaeggli (off-list) | |||
o Addresses feedback submitted (off-list) by Bruno Rohee. | o Addresses feedback submitted (off-list) by Bruno Rohee. | |||
o Miscellaneous edits (centers expressions, fills missing graphics | o Miscellaneous edits (centers expressions, fills missing graphics | |||
with ASCII-art, etc.) | with ASCII-art, etc.) | |||
B.2. Changes from draft-ietf-opsec-ip-security-00 | B.3. Changes from draft-ietf-opsec-ip-security-00 | |||
o Addresses part of the feedback received from Andrew Yourtchenko | o Addresses part of the feedback received from Andrew Yourtchenko | |||
(http://www.ietf.org/mail-archive/web/opsec/current/msg00417.html) | (http://www.ietf.org/mail-archive/web/opsec/current/msg00417.html) | |||
B.3. Changes from draft-gont-opsec-ip-security-01 | B.4. Changes from draft-gont-opsec-ip-security-01 | |||
o Draft resubmitted as draft-ietf, as a result of wg consensus on | o Draft resubmitted as draft-ietf, as a result of wg consensus on | |||
adopting the document as an opsec wg item. | adopting the document as an opsec wg item. | |||
B.4. Changes from draft-gont-opsec-ip-security-00 | B.5. Changes from draft-gont-opsec-ip-security-00 | |||
o Fixed author's affiliation. | o Fixed author's affiliation. | |||
o Added Figure 5. | o Added Figure 6. | |||
o Fixed a few typos. | o Fixed a few typos. | |||
o (no technical changes) | o (no technical changes) | |||
Author's Address | Author's Address | |||
Fernando Gont | Fernando Gont | |||
UK Centre for the Protection of National Infrastructure | UK Centre for the Protection of National Infrastructure | |||
End of changes. 307 change blocks. | ||||
839 lines changed or deleted | 982 lines changed or added | |||
This html diff was produced by rfcdiff 1.38. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |