c65f56aefa
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@1 7dcaeef0-15fb-0310-b436-a5af3365683c
1737 строки
72 KiB
Plaintext
1737 строки
72 KiB
Plaintext
|
||
|
||
Network Working Group T. Ylonen
|
||
Internet-Draft T. Kivinen
|
||
Expires: January 12, 2004 SSH Communications Security Corp
|
||
M. Saarinen
|
||
University of Jyvaskyla
|
||
T. Rinne
|
||
S. Lehtinen
|
||
SSH Communications Security Corp
|
||
July 14, 2003
|
||
|
||
|
||
SSH Protocol Architecture
|
||
draft-ietf-secsh-architecture-14.txt
|
||
|
||
Status of this Memo
|
||
|
||
This document is an Internet-Draft and is in full conformance with
|
||
all provisions of Section 10 of RFC2026.
|
||
|
||
Internet-Drafts are working documents of the Internet Engineering
|
||
Task Force (IETF), its areas, and its working groups. Note that
|
||
other groups may also distribute working documents as Internet-
|
||
Drafts.
|
||
|
||
Internet-Drafts are draft documents valid for a maximum of six
|
||
months and may be updated, replaced, or obsoleted by other
|
||
documents at any time. It is inappropriate to use Internet-Drafts
|
||
as reference material or to cite them other than as "work in
|
||
progress."
|
||
|
||
The list of current Internet-Drafts can be accessed at
|
||
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 January 12, 2004.
|
||
|
||
Copyright Notice
|
||
|
||
Copyright (C) The Internet Society (2003). All Rights Reserved.
|
||
|
||
Abstract
|
||
|
||
SSH is a protocol for secure remote login and other secure network
|
||
services over an insecure network. This document describes the
|
||
architecture of the SSH protocol, as well as the notation and
|
||
terminology used in SSH protocol documents. It also discusses the
|
||
SSH algorithm naming system that allows local extensions. The SSH
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 1]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
protocol consists of three major components: The Transport Layer
|
||
Protocol provides server authentication, confidentiality, and
|
||
integrity with perfect forward secrecy. The User Authentication
|
||
Protocol authenticates the client to the server. The Connection
|
||
Protocol multiplexes the encrypted tunnel into several logical
|
||
channels. Details of these protocols are described in separate
|
||
documents.
|
||
|
||
Table of Contents
|
||
|
||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
|
||
2. Specification of Requirements . . . . . . . . . . . . . . . 4
|
||
3. Architecture . . . . . . . . . . . . . . . . . . . . . . . . 4
|
||
3.1 Host Keys . . . . . . . . . . . . . . . . . . . . . . . . . 4
|
||
3.2 Extensibility . . . . . . . . . . . . . . . . . . . . . . . 6
|
||
3.3 Policy Issues . . . . . . . . . . . . . . . . . . . . . . . 6
|
||
3.4 Security Properties . . . . . . . . . . . . . . . . . . . . 7
|
||
3.5 Packet Size and Overhead . . . . . . . . . . . . . . . . . . 7
|
||
3.6 Localization and Character Set Support . . . . . . . . . . . 8
|
||
4. Data Type Representations Used in the SSH Protocols . . . . 9
|
||
5. Algorithm Naming . . . . . . . . . . . . . . . . . . . . . . 11
|
||
6. Message Numbers . . . . . . . . . . . . . . . . . . . . . . 12
|
||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . 12
|
||
8. Security Considerations . . . . . . . . . . . . . . . . . . 13
|
||
8.1 Pseudo-Random Number Generation . . . . . . . . . . . . . . 13
|
||
8.2 Transport . . . . . . . . . . . . . . . . . . . . . . . . . 14
|
||
8.2.1 Confidentiality . . . . . . . . . . . . . . . . . . . . . . 14
|
||
8.2.2 Data Integrity . . . . . . . . . . . . . . . . . . . . . . . 17
|
||
8.2.3 Replay . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
|
||
8.2.4 Man-in-the-middle . . . . . . . . . . . . . . . . . . . . . 18
|
||
8.2.5 Denial-of-service . . . . . . . . . . . . . . . . . . . . . 20
|
||
8.2.6 Covert Channels . . . . . . . . . . . . . . . . . . . . . . 21
|
||
8.2.7 Forward Secrecy . . . . . . . . . . . . . . . . . . . . . . 21
|
||
8.3 Authentication Protocol . . . . . . . . . . . . . . . . . . 21
|
||
8.3.1 Weak Transport . . . . . . . . . . . . . . . . . . . . . . . 22
|
||
8.3.2 Debug messages . . . . . . . . . . . . . . . . . . . . . . . 22
|
||
8.3.3 Local security policy . . . . . . . . . . . . . . . . . . . 23
|
||
8.3.4 Public key authentication . . . . . . . . . . . . . . . . . 23
|
||
8.3.5 Password authentication . . . . . . . . . . . . . . . . . . 24
|
||
8.3.6 Host based authentication . . . . . . . . . . . . . . . . . 24
|
||
8.4 Connection protocol . . . . . . . . . . . . . . . . . . . . 24
|
||
8.4.1 End point security . . . . . . . . . . . . . . . . . . . . . 24
|
||
8.4.2 Proxy forwarding . . . . . . . . . . . . . . . . . . . . . . 24
|
||
8.4.3 X11 forwarding . . . . . . . . . . . . . . . . . . . . . . . 25
|
||
9. Intellectual Property . . . . . . . . . . . . . . . . . . . 25
|
||
10. Additional Information . . . . . . . . . . . . . . . . . . . 26
|
||
References . . . . . . . . . . . . . . . . . . . . . . . . . 26
|
||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 29
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 2]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
Full Copyright Statement . . . . . . . . . . . . . . . . . . 31
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 3]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
1. Introduction
|
||
|
||
SSH is a protocol for secure remote login and other secure network
|
||
services over an insecure network. It consists of three major
|
||
components:
|
||
o The Transport Layer Protocol [SSH-TRANS] provides server
|
||
authentication, confidentiality, and integrity. It may
|
||
optionally also provide compression. The transport layer will
|
||
typically be run over a TCP/IP connection, but might also be
|
||
used on top of any other reliable data stream.
|
||
o The User Authentication Protocol [SSH-USERAUTH] authenticates
|
||
the client-side user to the server. It runs over the transport
|
||
layer protocol.
|
||
o The Connection Protocol [SSH-CONNECT] multiplexes the encrypted
|
||
tunnel into several logical channels. It runs over the user
|
||
authentication protocol.
|
||
|
||
The client sends a service request once a secure transport layer
|
||
connection has been established. A second service request is sent
|
||
after user authentication is complete. This allows new protocols
|
||
to be defined and coexist with the protocols listed above.
|
||
|
||
The connection protocol provides channels that can be used for a
|
||
wide range of purposes. Standard methods are provided for setting
|
||
up secure interactive shell sessions and for forwarding
|
||
("tunneling") arbitrary TCP/IP ports and X11 connections.
|
||
|
||
2. Specification of Requirements
|
||
|
||
All documents related to the SSH protocols shall use the keywords
|
||
"MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
|
||
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" to describe
|
||
requirements. They are to be interpreted as described in [RFC-
|
||
2119].
|
||
|
||
3. Architecture
|
||
|
||
3.1 Host Keys
|
||
|
||
Each server host SHOULD have a host key. Hosts MAY have multiple
|
||
host keys using multiple different algorithms. Multiple hosts MAY
|
||
share the same host key. If a host has keys at all, it MUST have
|
||
at least one key using each REQUIRED public key algorithm
|
||
(currently DSS [FIPS-186]).
|
||
|
||
The server host key is used during key exchange to verify that the
|
||
client is really talking to the correct server. For this to be
|
||
possible, the client must have a priori knowledge of the server's
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 4]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
public host key.
|
||
|
||
Two different trust models can be used:
|
||
o The client has a local database that associates each host name
|
||
(as typed by the user) with the corresponding public host key.
|
||
This method requires no centrally administered infrastructure,
|
||
and no third-party coordination. The downside is that the
|
||
database of name-to-key associations may become burdensome to
|
||
maintain.
|
||
o The host name-to-key association is certified by some trusted
|
||
certification authority. The client only knows the CA root
|
||
key, and can verify the validity of all host keys certified by
|
||
accepted CAs.
|
||
|
||
The second alternative eases the maintenance problem, since
|
||
ideally only a single CA key needs to be securely stored on the
|
||
client. On the other hand, each host key must be appropriately
|
||
certified by a central authority before authorization is
|
||
possible. Also, a lot of trust is placed on the central
|
||
infrastructure.
|
||
|
||
The protocol provides the option that the server name - host key
|
||
association is not checked when connecting to the host for the
|
||
first time. This allows communication without prior communication
|
||
of host keys or certification. The connection still provides
|
||
protection against passive listening; however, it becomes
|
||
vulnerable to active man-in-the-middle attacks. Implementations
|
||
SHOULD NOT normally allow such connections by default, as they
|
||
pose a potential security problem. However, as there is no widely
|
||
deployed key infrastructure available on the Internet yet, this
|
||
option makes the protocol much more usable during the transition
|
||
time until such an infrastructure emerges, while still providing a
|
||
much higher level of security than that offered by older solutions
|
||
(e.g. telnet [RFC-854] and rlogin [RFC-1282]).
|
||
|
||
Implementations SHOULD try to make the best effort to check host
|
||
keys. An example of a possible strategy is to only accept a host
|
||
key without checking the first time a host is connected, save the
|
||
key in a local database, and compare against that key on all
|
||
future connections to that host.
|
||
|
||
Implementations MAY provide additional methods for verifying the
|
||
correctness of host keys, e.g. a hexadecimal fingerprint derived
|
||
from the SHA-1 hash of the public key. Such fingerprints can
|
||
easily be verified by using telephone or other external
|
||
communication channels.
|
||
|
||
All implementations SHOULD provide an option to not accept host
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 5]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
keys that cannot be verified.
|
||
|
||
We believe that ease of use is critical to end-user acceptance of
|
||
security solutions, and no improvement in security is gained if
|
||
the new solutions are not used. Thus, providing the option not to
|
||
check the server host key is believed to improve the overall
|
||
security of the Internet, even though it reduces the security of
|
||
the protocol in configurations where it is allowed.
|
||
|
||
3.2 Extensibility
|
||
|
||
We believe that the protocol will evolve over time, and some
|
||
organizations will want to use their own encryption,
|
||
authentication and/or key exchange methods. Central registration
|
||
of all extensions is cumbersome, especially for experimental or
|
||
classified features. On the other hand, having no central
|
||
registration leads to conflicts in method identifiers, making
|
||
interoperability difficult.
|
||
|
||
We have chosen to identify algorithms, methods, formats, and
|
||
extension protocols with textual names that are of a specific
|
||
format. DNS names are used to create local namespaces where
|
||
experimental or classified extensions can be defined without fear
|
||
of conflicts with other implementations.
|
||
|
||
One design goal has been to keep the base protocol as simple as
|
||
possible, and to require as few algorithms as possible. However,
|
||
all implementations MUST support a minimal set of algorithms to
|
||
ensure interoperability (this does not imply that the local policy
|
||
on all hosts would necessary allow these algorithms). The
|
||
mandatory algorithms are specified in the relevant protocol
|
||
documents.
|
||
|
||
Additional algorithms, methods, formats, and extension protocols
|
||
can be defined in separate drafts. See Section Algorithm Naming
|
||
(Section 5) for more information.
|
||
|
||
3.3 Policy Issues
|
||
|
||
The protocol allows full negotiation of encryption, integrity, key
|
||
exchange, compression, and public key algorithms and formats.
|
||
Encryption, integrity, public key, and compression algorithms can
|
||
be different for each direction.
|
||
|
||
The following policy issues SHOULD be addressed in the
|
||
configuration mechanisms of each implementation:
|
||
o Encryption, integrity, and compression algorithms, separately
|
||
for each direction. The policy MUST specify which is the
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 6]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
preferred algorithm (e.g. the first algorithm listed in each
|
||
category).
|
||
o Public key algorithms and key exchange method to be used for
|
||
host authentication. The existence of trusted host keys for
|
||
different public key algorithms also affects this choice.
|
||
o The authentication methods that are to be required by the
|
||
server for each user. The server's policy MAY require multiple
|
||
authentication for some or all users. The required algorithms
|
||
MAY depend on the location where the user is trying to log in
|
||
from.
|
||
o The operations that the user is allowed to perform using the
|
||
connection protocol. Some issues are related to security; for
|
||
example, the policy SHOULD NOT allow the server to start
|
||
sessions or run commands on the client machine, and MUST NOT
|
||
allow connections to the authentication agent unless forwarding
|
||
such connections has been requested. Other issues, such as
|
||
which TCP/IP ports can be forwarded and by whom, are clearly
|
||
issues of local policy. Many of these issues may involve
|
||
traversing or bypassing firewalls, and are interrelated with
|
||
the local security policy.
|
||
|
||
3.4 Security Properties
|
||
|
||
The primary goal of the SSH protocol is improved security on the
|
||
Internet. It attempts to do this in a way that is easy to deploy,
|
||
even at the cost of absolute security.
|
||
o All encryption, integrity, and public key algorithms used are
|
||
well-known, well-established algorithms.
|
||
o All algorithms are used with cryptographically sound key sizes
|
||
that are believed to provide protection against even the
|
||
strongest cryptanalytic attacks for decades.
|
||
o All algorithms are negotiated, and in case some algorithm is
|
||
broken, it is easy to switch to some other algorithm without
|
||
modifying the base protocol.
|
||
|
||
Specific concessions were made to make wide-spread fast deployment
|
||
easier. The particular case where this comes up is verifying that
|
||
the server host key really belongs to the desired host; the
|
||
protocol allows the verification to be left out (but this is NOT
|
||
RECOMMENDED). This is believed to significantly improve usability
|
||
in the short term, until widespread Internet public key
|
||
infrastructures emerge.
|
||
|
||
3.5 Packet Size and Overhead
|
||
|
||
Some readers will worry about the increase in packet size due to
|
||
new headers, padding, and MAC. The minimum packet size is in the
|
||
order of 28 bytes (depending on negotiated algorithms). The
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 7]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
increase is negligible for large packets, but very significant for
|
||
one-byte packets (telnet-type sessions). There are, however,
|
||
several factors that make this a non-issue in almost all cases:
|
||
o The minimum size of a TCP/IP header is 32 bytes. Thus, the
|
||
increase is actually from 33 to 51 bytes (roughly).
|
||
o The minimum size of the data field of an Ethernet packet is 46
|
||
bytes [RFC-894]. Thus, the increase is no more than 5 bytes.
|
||
When Ethernet headers are considered, the increase is less than
|
||
10 percent.
|
||
o The total fraction of telnet-type data in the Internet is
|
||
negligible, even with increased packet sizes.
|
||
|
||
The only environment where the packet size increase is likely to
|
||
have a significant effect is PPP [RFC-1134] over slow modem lines
|
||
(PPP compresses the TCP/IP headers, emphasizing the increase in
|
||
packet size). However, with modern modems, the time needed to
|
||
transfer is in the order of 2 milliseconds, which is a lot faster
|
||
than people can type.
|
||
|
||
There are also issues related to the maximum packet size. To
|
||
minimize delays in screen updates, one does not want excessively
|
||
large packets for interactive sessions. The maximum packet size
|
||
is negotiated separately for each channel.
|
||
|
||
3.6 Localization and Character Set Support
|
||
|
||
For the most part, the SSH protocols do not directly pass text
|
||
that would be displayed to the user. However, there are some
|
||
places where such data might be passed. When applicable, the
|
||
character set for the data MUST be explicitly specified. In most
|
||
places, ISO 10646 with UTF-8 encoding is used [RFC-2279]. When
|
||
applicable, a field is also provided for a language tag [RFC-
|
||
1766].
|
||
|
||
One big issue is the character set of the interactive session.
|
||
There is no clear solution, as different applications may display
|
||
data in different formats. Different types of terminal emulation
|
||
may also be employed in the client, and the character set to be
|
||
used is effectively determined by the terminal emulation. Thus,
|
||
no place is provided for directly specifying the character set or
|
||
encoding for terminal session data. However, the terminal
|
||
emulation type (e.g. "vt100") is transmitted to the remote site,
|
||
and it implicitly specifies the character set and encoding.
|
||
Applications typically use the terminal type to determine what
|
||
character set they use, or the character set is determined using
|
||
some external means. The terminal emulation may also allow
|
||
configuring the default character set. In any case, the character
|
||
set for the terminal session is considered primarily a client
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 8]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
local issue.
|
||
|
||
Internal names used to identify algorithms or protocols are
|
||
normally never displayed to users, and must be in US-ASCII.
|
||
|
||
The client and server user names are inherently constrained by
|
||
what the server is prepared to accept. They might, however,
|
||
occasionally be displayed in logs, reports, etc. They MUST be
|
||
encoded using ISO 10646 UTF-8, but other encodings may be required
|
||
in some cases. It is up to the server to decide how to map user
|
||
names to accepted user names. Straight bit-wise binary comparison
|
||
is RECOMMENDED.
|
||
|
||
For localization purposes, the protocol attempts to minimize the
|
||
number of textual messages transmitted. When present, such
|
||
messages typically relate to errors, debugging information, or
|
||
some externally configured data. For data that is normally
|
||
displayed, it SHOULD be possible to fetch a localized message
|
||
instead of the transmitted message by using a numerical code. The
|
||
remaining messages SHOULD be configurable.
|
||
|
||
4. Data Type Representations Used in the SSH Protocols
|
||
byte
|
||
|
||
A byte represents an arbitrary 8-bit value (octet) [RFC-1700].
|
||
Fixed length data is sometimes represented as an array of
|
||
bytes, written byte[n], where n is the number of bytes in the
|
||
array.
|
||
|
||
boolean
|
||
|
||
A boolean value is stored as a single byte. The value 0
|
||
represents FALSE, and the value 1 represents TRUE. All non-
|
||
zero values MUST be interpreted as TRUE; however, applications
|
||
MUST NOT store values other than 0 and 1.
|
||
|
||
uint32
|
||
|
||
Represents a 32-bit unsigned integer. Stored as four bytes in
|
||
the order of decreasing significance (network byte order). For
|
||
example, the value 699921578 (0x29b7f4aa) is stored as 29 b7 f4
|
||
aa.
|
||
|
||
uint64
|
||
|
||
Represents a 64-bit unsigned integer. Stored as eight bytes in
|
||
the order of decreasing significance (network byte order).
|
||
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 9]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
string
|
||
|
||
Arbitrary length binary string. Strings are allowed to contain
|
||
arbitrary binary data, including null characters and 8-bit
|
||
characters. They are stored as a uint32 containing its length
|
||
(number of bytes that follow) and zero (= empty string) or more
|
||
bytes that are the value of the string. Terminating null
|
||
characters are not used.
|
||
|
||
Strings are also used to store text. In that case, US-ASCII is
|
||
used for internal names, and ISO-10646 UTF-8 for text that
|
||
might be displayed to the user. The terminating null character
|
||
SHOULD NOT normally be stored in the string.
|
||
|
||
For example, the US-ASCII string "testing" is represented as 00
|
||
00 00 07 t e s t i n g. The UTF8 mapping does not alter the
|
||
encoding of US-ASCII characters.
|
||
|
||
mpint
|
||
|
||
Represents multiple precision integers in two's complement
|
||
format, stored as a string, 8 bits per byte, MSB first.
|
||
Negative numbers have the value 1 as the most significant bit
|
||
of the first byte of the data partition. If the most
|
||
significant bit would be set for a positive number, the number
|
||
MUST be preceded by a zero byte. Unnecessary leading bytes
|
||
with the value 0 or 255 MUST NOT be included. The value zero
|
||
MUST be stored as a string with zero bytes of data.
|
||
|
||
By convention, a number that is used in modular computations in
|
||
Z_n SHOULD be represented in the range 0 <= x < n.
|
||
|
||
Examples:
|
||
value (hex) representation (hex)
|
||
---------------------------------------------------------------
|
||
0 00 00 00 00
|
||
9a378f9b2e332a7 00 00 00 08 09 a3 78 f9 b2 e3 32 a7
|
||
80 00 00 00 02 00 80
|
||
-1234 00 00 00 02 ed cc
|
||
-deadbeef 00 00 00 05 ff 21 52 41 11
|
||
|
||
|
||
|
||
name-list
|
||
|
||
A string containing a comma separated list of names. A name
|
||
list is represented as a uint32 containing its length (number
|
||
of bytes that follow) followed by a comma-separated list of
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 10]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
zero or more names. A name MUST be non-zero length, and it
|
||
MUST NOT contain a comma (','). Context may impose additional
|
||
restrictions on the names; for example, the names in a list may
|
||
have to be valid algorithm identifier (see Algorithm Naming
|
||
below), or [RFC-1766] language tags. The order of the names in
|
||
a list may or may not be significant, also depending on the
|
||
context where the list is is used. Terminating NUL characters
|
||
are not used, neither for the individual names, nor for the
|
||
list as a whole.
|
||
|
||
Examples:
|
||
value representation (hex)
|
||
---------------------------------------
|
||
(), the empty list 00 00 00 00
|
||
("zlib") 00 00 00 04 7a 6c 69 62
|
||
("zlib", "none") 00 00 00 09 7a 6c 69 62 2c 6e 6f 6e 65
|
||
|
||
|
||
|
||
|
||
5. Algorithm Naming
|
||
|
||
The SSH protocols refer to particular hash, encryption, integrity,
|
||
compression, and key exchange algorithms or protocols by names.
|
||
There are some standard algorithms that all implementations MUST
|
||
support. There are also algorithms that are defined in the
|
||
protocol specification but are OPTIONAL. Furthermore, it is
|
||
expected that some organizations will want to use their own
|
||
algorithms.
|
||
|
||
In this protocol, all algorithm identifiers MUST be printable US-
|
||
ASCII non-empty strings no longer than 64 characters. Names MUST
|
||
be case-sensitive.
|
||
|
||
There are two formats for algorithm names:
|
||
o Names that do not contain an at-sign (@) are reserved to be
|
||
assigned by IETF consensus (RFCs). Examples include `3des-
|
||
cbc', `sha-1', `hmac-sha1', and `zlib' (the quotes are not part
|
||
of the name). Names of this format MUST NOT be used without
|
||
first registering them. Registered names MUST NOT contain an
|
||
at-sign (@) or a comma (,).
|
||
o Anyone can define additional algorithms by using names in the
|
||
format name@domainname, e.g. "ourcipher-cbc@ssh.com". The
|
||
format of the part preceding the at sign is not specified; it
|
||
MUST consist of US-ASCII characters except at-sign and comma.
|
||
The part following the at-sign MUST be a valid fully qualified
|
||
internet domain name [RFC-1034] controlled by the person or
|
||
organization defining the name. It is up to each domain how it
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 11]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
manages its local namespace.
|
||
|
||
6. Message Numbers
|
||
|
||
SSH packets have message numbers in the range 1 to 255. These
|
||
numbers have been allocated as follows:
|
||
|
||
|
||
Transport layer protocol:
|
||
|
||
1 to 19 Transport layer generic (e.g. disconnect, ignore, debug,
|
||
etc.)
|
||
20 to 29 Algorithm negotiation
|
||
30 to 49 Key exchange method specific (numbers can be reused for
|
||
different authentication methods)
|
||
|
||
User authentication protocol:
|
||
|
||
50 to 59 User authentication generic
|
||
60 to 79 User authentication method specific (numbers can be
|
||
reused for different authentication methods)
|
||
|
||
Connection protocol:
|
||
|
||
80 to 89 Connection protocol generic
|
||
90 to 127 Channel related messages
|
||
|
||
Reserved for client protocols:
|
||
|
||
128 to 191 Reserved
|
||
|
||
Local extensions:
|
||
|
||
192 to 255 Local extensions
|
||
|
||
|
||
|
||
7. IANA Considerations
|
||
|
||
Allocation of the following types of names in the SSH protocols is
|
||
assigned by IETF consensus:
|
||
o encryption algorithm names,
|
||
o MAC algorithm names,
|
||
o public key algorithm names (public key algorithm also implies
|
||
encoding and signature/encryption capability),
|
||
o key exchange method names, and
|
||
o protocol (service) names.
|
||
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 12]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
These names MUST be printable US-ASCII strings, and MUST NOT
|
||
contain the characters at-sign ('@'), comma (','), or whitespace
|
||
or control characters (ASCII codes 32 or less). Names are case-
|
||
sensitive, and MUST NOT be longer than 64 characters.
|
||
|
||
Names with the at-sign ('@') in them are allocated by the owner of
|
||
DNS name after the at-sign (hierarchical allocation in [RFC-
|
||
2343]), otherwise the same restrictions as above.
|
||
|
||
Each category of names listed above has a separate namespace.
|
||
However, using the same name in multiple categories SHOULD be
|
||
avoided to minimize confusion.
|
||
|
||
Message numbers (see Section Message Numbers (Section 6)) in the
|
||
range of 0..191 should be allocated via IETF consensus; message
|
||
numbers in the 192..255 range (the "Local extensions" set) are
|
||
reserved for private use.
|
||
|
||
8. Security Considerations
|
||
|
||
In order to make the entire body of Security Considerations more
|
||
accessible, Security Considerations for the transport,
|
||
authentication, and connection documents have been gathered here.
|
||
|
||
The transport protocol [1] provides a confidential channel over an
|
||
insecure network. It performs server host authentication, key
|
||
exchange, encryption, and integrity protection. It also derives a
|
||
unique session id that may be used by higher-level protocols.
|
||
|
||
The authentication protocol [2] provides a suite of mechanisms
|
||
which can be used to authenticate the client user to the server.
|
||
Individual mechanisms specified in the in authentication protocol
|
||
use the session id provided by the transport protocol and/or
|
||
depend on the security and integrity guarantees of the transport
|
||
protocol.
|
||
|
||
The connection protocol [3] specifies a mechanism to multiplex
|
||
multiple streams [channels] of data over the confidential and
|
||
authenticated transport. It also specifies channels for accessing
|
||
an interactive shell, for 'proxy-forwarding' various external
|
||
protocols over the secure transport (including arbitrary TCP/IP
|
||
protocols), and for accessing secure 'subsystems' on the server
|
||
host.
|
||
|
||
8.1 Pseudo-Random Number Generation
|
||
|
||
This protocol binds each session key to the session by including
|
||
random, session specific data in the hash used to produce session
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 13]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
keys. Special care should be taken to ensure that all of the
|
||
random numbers are of good quality. If the random data here
|
||
(e.g., DH parameters) are pseudo-random then the pseudo-random
|
||
number generator should be cryptographically secure (i.e., its
|
||
next output not easily guessed even when knowing all previous
|
||
outputs) and, furthermore, proper entropy needs to be added to the
|
||
pseudo-random number generator. RFC 1750 [1750] offers
|
||
suggestions for sources of random numbers and entropy.
|
||
Implementors should note the importance of entropy and the well-
|
||
meant, anecdotal warning about the difficulty in properly
|
||
implementing pseudo-random number generating functions.
|
||
|
||
The amount of entropy available to a given client or server may
|
||
sometimes be less than what is required. In this case one must
|
||
either resort to pseudo-random number generation regardless of
|
||
insufficient entropy or refuse to run the protocol. The latter is
|
||
preferable.
|
||
|
||
8.2 Transport
|
||
|
||
8.2.1 Confidentiality
|
||
|
||
It is beyond the scope of this document and the Secure Shell
|
||
Working Group to analyze or recommend specific ciphers other than
|
||
the ones which have been established and accepted within the
|
||
industry. At the time of this writing, ciphers commonly in use
|
||
include 3DES, ARCFOUR, twofish, serpent and blowfish. AES has
|
||
been accepted by The published as a US Federal Information
|
||
Processing Standards [FIPS-197] and the cryptographic community as
|
||
being acceptable for this purpose as well has accepted AES. As
|
||
always, implementors and users should check current literature to
|
||
ensure that no recent vulnerabilities have been found in ciphers
|
||
used within products. Implementors should also check to see which
|
||
ciphers are considered to be relatively stronger than others and
|
||
should recommend their use to users over relatively weaker
|
||
ciphers. It would be considered good form for an implementation
|
||
to politely and unobtrusively notify a user that a stronger cipher
|
||
is available and should be used when a weaker one is actively
|
||
chosen.
|
||
|
||
The "none" cipher is provided for debugging and SHOULD NOT be used
|
||
except for that purpose. It's cryptographic properties are
|
||
sufficiently described in RFC 2410, which will show that its use
|
||
does not meet the intent of this protocol.
|
||
|
||
The relative merits of these and other ciphers may also be found
|
||
in current literature. Two references that may provide
|
||
information on the subject are [SCHNEIER] and
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 14]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
[KAUFMAN,PERLMAN,SPECINER]. Both of these describe the CBC mode
|
||
of operation of certain ciphers and the weakness of this scheme.
|
||
Essentially, this mode is theoretically vulnerable to chosen
|
||
cipher-text attacks because of the high predictability of the
|
||
start of packet sequence. However, this attack is still deemed
|
||
difficult and not considered fully practicable especially if
|
||
relatively longer block sizes are used.
|
||
|
||
Additionally, another CBC mode attack may be mitigated through the
|
||
insertion of packets containing SSH_MSG_IGNORE. Without this
|
||
technique, a specific attack may be successful. For this attack
|
||
(commonly known as the Rogaway attack
|
||
[ROGAWAY],[DAI],[BELLARE,KOHNO,NAMPREMPRE]) to work, the attacker
|
||
would need to know the IV of the next block that is going to be
|
||
encrypted. In CBC mode that is the output of the encryption of
|
||
the previous block. If the attacker does not have any way to see
|
||
the packet yet (i.e it is in the internal buffers of the ssh
|
||
implementation or even in the kernel) then this attack will not
|
||
work. If the last packet has been sent out to the network (i.e
|
||
the attacker has access to it) then he can use the attack.
|
||
|
||
In the optimal case an implementor would need to add an extra
|
||
packet only if the packet has been sent out onto the network and
|
||
there are no other packets waiting for transmission. Implementors
|
||
may wish to check to see if there are any unsent packets awaiting
|
||
transmission, but unfortunately it is not normally easy to obtain
|
||
this information from the kernel or buffers. If there are not,
|
||
then a packet containing SSH_MSG_IGNORE SHOULD be sent. If a new
|
||
packet is added to the stream every time the attacker knows the IV
|
||
that is supposed to be used for the next packet, then the attacker
|
||
will not be able to guess the correct IV, thus the attack will
|
||
never be successfull.
|
||
|
||
As an example, consider the following case:
|
||
|
||
|
||
Client Server
|
||
------ ------
|
||
TCP(seq=x, len=500) ->
|
||
contains Record 1
|
||
|
||
[500 ms passes, no ACK]
|
||
|
||
TCP(seq=x, len=1000) ->
|
||
contains Records 1,2
|
||
|
||
ACK
|
||
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 15]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
1. The Nagle algorithm + TCP retransmits mean that the two
|
||
records get coalesced into a single TCP segment
|
||
2. Record 2 is *not* at the beginning of the TCP segment and
|
||
never will be, since it gets ACKed.
|
||
3. Yet, the attack is possible because Record 1 has already been
|
||
seen.
|
||
|
||
As this example indicates, it's totally unsafe to use the
|
||
existence of unflushed data in the TCP buffers proper as a guide
|
||
to whether you need an empty packet, since when you do the second
|
||
write(), the buffers will contain the un-ACKed Record 1.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 16]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
On the other hand, it's perfectly safe to have the following
|
||
situation:
|
||
|
||
|
||
Client Server
|
||
------ ------
|
||
TCP(seq=x, len=500) ->
|
||
contains SSH_MSG_IGNORE
|
||
|
||
TCP(seq=y, len=500) ->
|
||
contains Data
|
||
|
||
Provided that the IV for second SSH Record is fixed after the data for
|
||
the Data packet is determined -i.e. you do:
|
||
read from user
|
||
encrypt null packet
|
||
encrypt data packet
|
||
|
||
|
||
8.2.2 Data Integrity
|
||
|
||
This protocol does allow the Data Integrity mechanism to be
|
||
disabled. Implementors SHOULD be wary of exposing this feature
|
||
for any purpose other than debugging. Users and administrators
|
||
SHOULD be explicitly warned anytime the "none" MAC is enabled.
|
||
|
||
So long as the "none" MAC is not used, this protocol provides data
|
||
integrity.
|
||
|
||
Because MACs use a 32 bit sequence number, they might start to
|
||
leak information after 2**32 packets have been sent. However,
|
||
following the rekeying recommendations should prevent this attack.
|
||
The transport protocol [1] recommends rekeying after one gigabyte
|
||
of data, and the smallest possible packet is 16 bytes. Therefore,
|
||
rekeying SHOULD happen after 2**28 packets at the very most.
|
||
|
||
8.2.3 Replay
|
||
|
||
The use of a MAC other than 'none' provides integrity and
|
||
authentication. In addition, the transport protocol provides a
|
||
unique session identifier (bound in part to pseudo-random data
|
||
that is part of the algorithm and key exchange process) that can
|
||
be used by higher level protocols to bind data to a given session
|
||
and prevent replay of data from prior sessions. For example, the
|
||
authentication protocol uses this to prevent replay of signatures
|
||
from previous sessions. Because public key authentication
|
||
exchanges are cryptographically bound to the session (i.e., to the
|
||
initial key exchange) they cannot be successfully replayed in
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 17]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
other sessions. Note that the session ID can be made public
|
||
without harming the security of the protocol.
|
||
|
||
If two session happen to have the same session ID [hash of key
|
||
exchanges] then packets from one can be replayed against the
|
||
other. It must be stressed that the chances of such an occurrence
|
||
are, needless to say, minimal when using modern cryptographic
|
||
methods. This is all the more so true when specifying larger hash
|
||
function outputs and DH parameters.
|
||
|
||
Replay detection using monotonically increasing sequence numbers
|
||
as input to the MAC, or HMAC in some cases, is described in RFC
|
||
2085 [2085], RFC 2246 [2246], RFC 2743 [2743], RFC 1964 [1964],
|
||
RFC 2025 [2025], and RFC 1510 [1510]. The underlying construct is
|
||
discussed in RFC 2104 [2104]. Essentially a different sequence
|
||
number in each packet ensures that at least this one input to the
|
||
MAC function will be unique and will provide a nonrecurring MAC
|
||
output that is not predictable to an attacker. If the session
|
||
stays active long enough, however, this sequence number will wrap.
|
||
This event may provide an attacker an opportunity to replay a
|
||
previously recorded packet with an identical sequence number but
|
||
only if the peers have not rekeyed since the transmission of the
|
||
first packet with that sequence number. If the peers have
|
||
rekeyed, then the replay will be detected as the MAC check will
|
||
fail. For this reason, it must be emphasized that peers MUST
|
||
rekey before a wrap of the sequence numbers. Naturally, if an
|
||
attacker does attempt to replay a captured packet before the peers
|
||
have rekeyed, then the receiver of the duplicate packet will not
|
||
be able to validate the MAC and it will be discarded. The reason
|
||
that the MAC will fail is because the receiver will formulate a
|
||
MAC based upon the packet contents, the shared secret, and the
|
||
expected sequence number. Since the replayed packet will not be
|
||
using that expected sequence number (the sequence number of the
|
||
replayed packet will have already been passed by the receiver)
|
||
then the calculated MAC will not match the MAC received with the
|
||
packet.
|
||
|
||
8.2.4 Man-in-the-middle
|
||
|
||
This protocol makes no assumptions nor provisions for an
|
||
infrastructure or means for distributing the public keys of hosts.
|
||
It is expected that this protocol will sometimes be used without
|
||
first verifying the association between the server host key and
|
||
the server host name. Such usage is vulnerable to man-in-the-
|
||
middle attacks. This section describes this and encourages
|
||
administrators and users to understand the importance of verifying
|
||
this association before any session is initiated.
|
||
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 18]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
There are three cases of man-in-the-middle attacks to consider.
|
||
The first is where an attacker places a device between the client
|
||
and the server before the session is initiated. In this case, the
|
||
attack device is trying to mimic the legitimate server and will
|
||
offer its public key to the client when the client initiates a
|
||
session. If it were to offer the public key of the server, then
|
||
it would not be able to decrypt or sign the transmissions between
|
||
the legitimate server and the client unless it also had access to
|
||
the private-key of the host. The attack device will also,
|
||
simultaneously to this, initiate a session to the legitimate
|
||
server masquerading itself as the client. If the public key of
|
||
the server had been securely distributed to the client prior to
|
||
that session initiation, the key offered to the client by the
|
||
attack device will not match the key stored on the client. In
|
||
that case, the user SHOULD be given a warning that the offered
|
||
host key does not match the host key cached on the client. As
|
||
described in Section 3.1 of [ARCH], the user may be free to accept
|
||
the new key and continue the session. It is RECOMMENDED that the
|
||
warning provide sufficient information to the user of the client
|
||
device so they may make an informed decision. If the user chooses
|
||
to continue the session with the stored public-key of the server
|
||
(not the public-key offered at the start of the session), then the
|
||
session specific data between the attacker and server will be
|
||
different between the client-to-attacker session and the attacker-
|
||
to-server sessions due to the randomness discussed above. From
|
||
this, the attacker will not be able to make this attack work since
|
||
the attacker will not be able to correctly sign packets containing
|
||
this session specific data from the server since he does not have
|
||
the private key of that server.
|
||
|
||
The second case that should be considered is similar to the first
|
||
case in that it also happens at the time of connection but this
|
||
case points out the need for the secure distribution of server
|
||
public keys. If the server public keys are not securely
|
||
distributed then the client cannot know if it is talking to the
|
||
intended server. An attacker may use social engineering
|
||
techniques to pass off server keys to unsuspecting users and may
|
||
then place a man-in-the-middle attack device between the
|
||
legitimate server and the clients. If this is allowed to happen
|
||
then the clients will form client-to-attacker sessions and the
|
||
attacker will form attacker-to-server sessions and will be able to
|
||
monitor and manipulate all of the traffic between the clients and
|
||
the legitimate servers. Server administrators are encouraged to
|
||
make host key fingerprints available for checking by some means
|
||
whose security does not rely on the integrity of the actual host
|
||
keys. Possible mechanisms are discussed in Section 3.1 of [SSH-
|
||
ARCH] and may also include secured Web pages, physical pieces of
|
||
paper, etc. Implementors SHOULD provide recommendations on how
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 19]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
best to do this with their implementation. Because the protocol
|
||
is extensible, future extensions to the protocol may provide
|
||
better mechanisms for dealing with the need to know the server's
|
||
host key before connecting. For example, making the host key
|
||
fingerprint available through a secure DNS lookup, or using
|
||
kerberos over gssapi during key exchange to authenticate the
|
||
server are possibilities.
|
||
|
||
In the third man-in-the-middle case, attackers may attempt to
|
||
manipulate packets in transit between peers after the session has
|
||
been established. As described in the Replay part of this
|
||
section, a successful attack of this nature is very improbable.
|
||
As in the Replay section, this reasoning does assume that the MAC
|
||
is secure and that it is infeasible to construct inputs to a MAC
|
||
algorithm to give a known output. This is discussed in much
|
||
greater detail in Section 6 of RFC 2104. If the MAC algorithm has
|
||
a vulnerability or is weak enough, then the attacker may be able
|
||
to specify certain inputs to yield a known MAC. With that they
|
||
may be able to alter the contents of a packet in transit.
|
||
Alternatively the attacker may be able to exploit the algorithm
|
||
vulnerability or weakness to find the shared secret by reviewing
|
||
the MACs from captured packets. In either of those cases, an
|
||
attacker could construct a packet or packets that could be
|
||
inserted into an SSH stream. To prevent that, implementors are
|
||
encouraged to utilize commonly accepted MAC algorithms and
|
||
administrators are encouraged to watch current literature and
|
||
discussions of cryptography to ensure that they are not using a
|
||
MAC algorithm that has a recently found vulnerability or weakness.
|
||
|
||
In summary, the use of this protocol without a reliable
|
||
association of the binding between a host and its host keys is
|
||
inherently insecure and is NOT RECOMMENDED. It may however be
|
||
necessary in non-security critical environments, and will still
|
||
provide protection against passive attacks. Implementors of
|
||
protocols and applications running on top of this protocol should
|
||
keep this possibility in mind.
|
||
|
||
8.2.5 Denial-of-service
|
||
|
||
This protocol is designed to be used over a reliable transport.
|
||
If transmission errors or message manipulation occur, the
|
||
connection is closed. The connection SHOULD be re-established if
|
||
this occurs. Denial of service attacks of this type ("wire
|
||
cutter") are almost impossible to avoid.
|
||
|
||
In addition, this protocol is vulnerable to Denial of Service
|
||
attacks because an attacker can force the server to go through the
|
||
CPU and memory intensive tasks of connection setup and key
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 20]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
exchange without authenticating. Implementors SHOULD provide
|
||
features that make this more difficult. For example, only
|
||
allowing connections from a subset of IPs known to have valid
|
||
users.
|
||
|
||
8.2.6 Covert Channels
|
||
|
||
The protocol was not designed to eliminate covert channels. For
|
||
example, the padding, SSH_MSG_IGNORE messages, and several other
|
||
places in the protocol can be used to pass covert information, and
|
||
the recipient has no reliable way to verify whether such
|
||
information is being sent.
|
||
|
||
8.2.7 Forward Secrecy
|
||
|
||
It should be noted that the Diffie-Hellman key exchanges may
|
||
provide perfect forward secrecy (PFS). PFS is essentially defined
|
||
as the cryptographic property of a key-establishment protocol in
|
||
which the compromise of a session key or long-term private key
|
||
after a given session does not cause the compromise of any earlier
|
||
session. [ANSI T1.523-2001] SSHv2 sessions resulting from a key
|
||
exchange using diffie-hellman-group1-sha1 are secure even if
|
||
private keying/authentication material is later revealed, but not
|
||
if the session keys are revealed. So, given this definition of
|
||
PFS, SSHv2 does have PFS. It is hoped that all other key exchange
|
||
mechanisms proposed and used in the future will also provide PFS.
|
||
This property is not commuted to any of the applications or
|
||
protocols using SSH as a transport however. The transport layer
|
||
of SSH provides confidentiality for password authentication and
|
||
other methods that rely on secret data.
|
||
|
||
Of course, if the DH private parameters for the client and server
|
||
are revealed then the session key is revealed, but these items can
|
||
be thrown away after the key exchange completes. It's worth
|
||
pointing out that these items should not be allowed to end up on
|
||
swap space and that they should be erased from memory as soon as
|
||
the key exchange completes.
|
||
|
||
8.3 Authentication Protocol
|
||
|
||
The purpose of this protocol is to perform client user
|
||
authentication. It assumes that this run over a secure transport
|
||
layer protocol, which has already authenticated the server
|
||
machine, established an encrypted communications channel, and
|
||
computed a unique session identifier for this session.
|
||
|
||
Several authentication methods with different security
|
||
characteristics are allowed. It is up to the server's local
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 21]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
policy to decide which methods (or combinations of methods) it is
|
||
willing to accept for each user. Authentication is no stronger
|
||
than the weakest combination allowed.
|
||
|
||
The server may go into a "sleep" period after repeated
|
||
unsuccessful authentication attempts to make key search more
|
||
difficult for attackers. Care should be taken so that this
|
||
doesn't become a self-denial of service vector.
|
||
|
||
8.3.1 Weak Transport
|
||
|
||
If the transport layer does not provide confidentiality,
|
||
authentication methods that rely on secret data SHOULD be
|
||
disabled. If it does not provide strong integrity protection,
|
||
requests to change authentication data (e.g. a password change)
|
||
SHOULD be disabled to prevent an attacker from modifying the
|
||
ciphertext without being noticed, or rendering the new
|
||
authentication data unusable (denial of service).
|
||
|
||
The assumption as stated above that the Authentication Protocol
|
||
only run over a secure transport that has previously authenticated
|
||
the server is very important to note. People deploying SSH are
|
||
reminded of the consequences of man-in-the-middle attacks if the
|
||
client does not have a very strong a priori association of the
|
||
server with the host key of that server. Specifically for the
|
||
case of the Authentication Protocol the client may form a session
|
||
to a man-in-the-middle attack device and divulge user credentials
|
||
such as their username and password. Even in the cases of
|
||
authentication where no user credentials are divulged, an attacker
|
||
may still gain information they shouldn't have by capturing key-
|
||
strokes in much the same way that a honeypot works.
|
||
|
||
8.3.2 Debug messages
|
||
|
||
Special care should be taken when designing debug messages. These
|
||
messages may reveal surprising amounts of information about the
|
||
host if not properly designed. Debug messages can be disabled
|
||
(during user authentication phase) if high security is required.
|
||
Administrators of host machines should make all attempts to
|
||
compartmentalize all event notification messages and protect them
|
||
from unwarranted observation. Developers should be aware of the
|
||
sensitive nature of some of the normal event messages and debug
|
||
messages and may want to provide guidance to administrators on
|
||
ways to keep this information away from unauthorized people.
|
||
Developers should consider minimizing the amount of sensitive
|
||
information obtainable by users during the authentication phase in
|
||
accordance with the local policies. For this reason, it is
|
||
RECOMMENDED that debug messages be initially disabled at the time
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 22]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
of deployment and require an active decision by an administrator
|
||
to allow them to be enabled. It is also RECOMMENDED that a
|
||
message expressing this concern be presented to the administrator
|
||
of a system when the action is taken to enable debugging messages.
|
||
|
||
8.3.3 Local security policy
|
||
|
||
Implementer MUST ensure that the credentials provided validate the
|
||
professed user and also MUST ensure that the local policy of the
|
||
server permits the user the access requested. In particular,
|
||
because of the flexible nature of the SSH connection protocol, it
|
||
may not be possible to determine the local security policy, if
|
||
any, that should apply at the time of authentication because the
|
||
kind of service being requested is not clear at that instant. For
|
||
example, local policy might allow a user to access files on the
|
||
server, but not start an interactive shell. However, during the
|
||
authentication protocol, it is not known whether the user will be
|
||
accessing files or attempting to use an interactive shell, or even
|
||
both. In any event, where local security policy for the server
|
||
host exists, it MUST be applied and enforced correctly.
|
||
|
||
Implementors are encouraged to provide a default local policy and
|
||
make its parameters known to administrators and users. At the
|
||
discretion of the implementors, this default policy may be along
|
||
the lines of 'anything goes' where there are no restrictions
|
||
placed upon users, or it may be along the lines of 'excessively
|
||
restrictive' in which case the administrators will have to
|
||
actively make changes to this policy to meet their needs.
|
||
Alternatively, it may be some attempt at providing something
|
||
practical and immediately useful to the administrators of the
|
||
system so they don't have to put in much effort to get SSH
|
||
working. Whatever choice is made MUST be applied and enforced as
|
||
required above.
|
||
|
||
8.3.4 Public key authentication
|
||
|
||
The use of public-key authentication assumes that the client host
|
||
has not been compromised.
|
||
|
||
This risk can be mitigated by the use of passphrases on private
|
||
keys; however, this is not an enforceable policy. The use of
|
||
smartcards, or other technology to make passphrases an enforceable
|
||
policy is suggested.
|
||
|
||
The server could require both password and public-key
|
||
authentication, however, this requires the client to expose its
|
||
password to the server (see section on password authentication
|
||
below.)
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 23]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
8.3.5 Password authentication
|
||
|
||
The password mechanism as specified in the authentication protocol
|
||
assumes that the server has not been compromised. If the server
|
||
has been compromised, using password authentication will reveal a
|
||
valid username / password combination to the attacker, which may
|
||
lead to further compromises.
|
||
|
||
This vulnerability can be mitigated by using an alternative form
|
||
of authentication. For example, public-key authentication makes
|
||
no assumptions about security on the server.
|
||
|
||
8.3.6 Host based authentication
|
||
|
||
Host based authentication assumes that the client has not been
|
||
compromised. There are no mitigating strategies, other than to
|
||
use host based authentication in combination with another
|
||
authentication method.
|
||
|
||
8.4 Connection protocol
|
||
|
||
8.4.1 End point security
|
||
|
||
End point security is assumed by the connection protocol. If the
|
||
server has been compromised, any terminal sessions, port
|
||
forwarding, or systems accessed on the host are compromised.
|
||
There are no mitigating factors for this.
|
||
|
||
If the client end point has been compromised, and the server fails
|
||
to stop the attacker at the authentication protocol, all services
|
||
exposed (either as subsystems or through forwarding) will be
|
||
vulnerable to attack. Implementors SHOULD provide mechanisms for
|
||
administrators to control which services are exposed to limit the
|
||
vulnerability of other services.
|
||
|
||
These controls might include controlling which machines and ports
|
||
can be target in 'port-forwarding' operations, which users are
|
||
allowed to use interactive shell facilities, or which users are
|
||
allowed to use exposed subsystems.
|
||
|
||
8.4.2 Proxy forwarding
|
||
|
||
The SSH connection protocol allows for proxy forwarding of other
|
||
protocols such as SNMP, POP3, and HTTP. This may be a concern for
|
||
network administrators who wish to control the access of certain
|
||
applications by users located outside of their physical location.
|
||
Essentially, the forwarding of these protocols may violate site
|
||
specific security policies as they may be undetectably tunneled
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 24]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
through a firewall. Implementors SHOULD provide an administrative
|
||
mechanism to control the proxy forwarding functionality so that
|
||
site specific security policies may be upheld.
|
||
|
||
In addition, a reverse proxy forwarding functionality is
|
||
available, which again can be used to bypass firewall controls.
|
||
|
||
As indicated above, end-point security is assumed during proxy
|
||
forwarding operations. Failure of end-point security will
|
||
compromise all data passed over proxy forwarding.
|
||
|
||
8.4.3 X11 forwarding
|
||
|
||
Another form of proxy forwarding provided by the ssh connection
|
||
protocol is the forwarding of the X11 protocol. If end-point
|
||
security has been compromised, X11 forwarding may allow attacks
|
||
against the X11 server. Users and administrators should, as a
|
||
matter of course, use appropriate X11 security mechanisms to
|
||
prevent unauthorized use of the X11 server. Implementors,
|
||
administrators and users who wish to further explore the security
|
||
mechanisms of X11 are invited to read [SCHEIFLER] and analyze
|
||
previously reported problems with the interactions between SSH
|
||
forwarding and X11 in CERT vulnerabilities VU#363181 and VU#118892
|
||
[CERT].
|
||
|
||
X11 display forwarding with SSH, by itself, is not sufficient to
|
||
correct well known problems with X11 security [VENEMA]. However,
|
||
X11 display forwarding in SSHv2 (or other, secure protocols),
|
||
combined with actual and pseudo-displays which accept connections
|
||
only over local IPC mechanisms authorized by permissions or ACLs,
|
||
does correct many X11 security problems as long as the "none" MAC
|
||
is not used. It is RECOMMENDED that X11 display implementations
|
||
default to allowing display opens only over local IPC. It is
|
||
RECOMMENDED that SSHv2 server implementations that support X11
|
||
forwarding default to allowing display opens only over local IPC.
|
||
On single-user systems it might be reasonable to default to
|
||
allowing local display opens over TCP/IP.
|
||
|
||
Implementors of the X11 forwarding protocol SHOULD implement the
|
||
magic cookie access checking spoofing mechanism as described in
|
||
[ssh-connect] as an additional mechanism to prevent unauthorized
|
||
use of the proxy.
|
||
|
||
9. Intellectual Property
|
||
|
||
The IETF takes no position regarding the validity or scope of any
|
||
intellectual property or other rights that might be claimed to
|
||
pertain to the implementation or use of the technology described
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 25]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
in this document or the extent to which any license under such
|
||
rights might or might not be available; neither does it represent
|
||
that it has made any effort to identify any such rights.
|
||
Information on the IETF's procedures with respect to rights in
|
||
standards-track and standards-related documentation can be found
|
||
in BCP-11. Copies of claims of rights made available for
|
||
publication and any assurances of licenses to be made available,
|
||
or the result of an attempt made to obtain a general license or
|
||
permission for the use of such proprietary rights by implementers
|
||
or users of this specification can be obtained from the IETF
|
||
Secretariat.
|
||
|
||
The IETF has been notified of intellectual property rights claimed
|
||
in regard to some or all of the specification contained in this
|
||
document. For more information consult the online list of claimed
|
||
rights.
|
||
|
||
10. Additional Information
|
||
|
||
The current document editor is: Darren.Moffat@Sun.COM. Comments
|
||
on this internet draft should be sent to the IETF SECSH working
|
||
group, details at: http://ietf.org/html.charters/secsh-
|
||
charter.html
|
||
|
||
References
|
||
|
||
[FIPS-186] Federal Information Processing
|
||
Standards Publication, ., "FIPS PUB
|
||
186, Digital Signature Standard", May
|
||
1994.
|
||
|
||
[FIPS-197] National Institue of Standards and
|
||
Technology, ., "FIPS 197,
|
||
Specification for the Advanced
|
||
Encryption Standard", November 2001.
|
||
|
||
[ANSI T1.523-2001] American National Standards Insitute,
|
||
Inc., "Telecom Glossary 2000",
|
||
February 2001.
|
||
|
||
[SCHEIFLER] Scheifler, R., "X Window System : The
|
||
Complete Reference to Xlib, X
|
||
Protocol, Icccm, Xlfd, 3rd edition.",
|
||
Digital Press ISBN 1555580882,
|
||
Feburary 1992.
|
||
|
||
[RFC0854] Postel, J. and J. Reynolds, "Telnet
|
||
Protocol Specification", STD 8, RFC
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 26]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
854, May 1983.
|
||
|
||
[RFC0894] Hornig, C., "Standard for the
|
||
transmission of IP datagrams over
|
||
Ethernet networks", STD 41, RFC 894,
|
||
Apr 1984.
|
||
|
||
[RFC1034] Mockapetris, P., "Domain names -
|
||
concepts and facilities", STD 13, RFC
|
||
1034, Nov 1987.
|
||
|
||
[RFC1134] Perkins, D., "Point-to-Point Protocol:
|
||
A proposal for multi-protocol
|
||
transmission of datagrams over Point-
|
||
to-Point links", RFC 1134, Nov 1989.
|
||
|
||
[RFC1282] Kantor, B., "BSD Rlogin", RFC 1282,
|
||
December 1991.
|
||
|
||
[RFC1510] Kohl, J. and C. Neuman, "The Kerberos
|
||
Network Authentication Service (V5)",
|
||
RFC 1510, September 1993.
|
||
|
||
[RFC1700] Reynolds, J. and J. Postel, "Assigned
|
||
Numbers", STD 2, RFC 1700, October
|
||
1994.
|
||
|
||
[RFC1750] Eastlake, D., Crocker, S. and J.
|
||
Schiller, "Randomness Recommendations
|
||
for Security", RFC 1750, December
|
||
1994.
|
||
|
||
[RFC1766] Alvestrand, H., "Tags for the
|
||
Identification of Languages", RFC
|
||
1766, March 1995.
|
||
|
||
[RFC1964] Linn, J., "The Kerberos Version 5 GSS-
|
||
API Mechanism", RFC 1964, June 1996.
|
||
|
||
[RFC2025] Adams, C., "The Simple Public-Key GSS-
|
||
API Mechanism (SPKM)", RFC 2025,
|
||
October 1996.
|
||
|
||
[RFC2085] Oehler, M. and R. Glenn, "HMAC-MD5 IP
|
||
Authentication with Replay
|
||
Prevention", RFC 2085, February 1997.
|
||
|
||
[RFC2104] Krawczyk, H., Bellare, M. and R.
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 27]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
Canetti, "HMAC: Keyed-Hashing for
|
||
Message Authentication", RFC 2104,
|
||
February 1997.
|
||
|
||
[RFC2119] Bradner, S., "Key words for use in
|
||
RFCs to Indicate Requirement Levels",
|
||
BCP 14, RFC 2119, March 1997.
|
||
|
||
[RFC2246] Dierks, T. and C. Allen, "The TLS
|
||
Protocol Version 1.0", RFC 2246,
|
||
January 1999.
|
||
|
||
[RFC2279] Yergeau, F., "UTF-8, a transformation
|
||
format of ISO 10646", RFC 2279,
|
||
January 1998.
|
||
|
||
[RFC2410] Glenn, R. and S. Kent, "The NULL
|
||
Encryption Algorithm and Its Use With
|
||
IPsec", RFC 2410, November 1998.
|
||
|
||
[RFC2434] Narten, T. and H. Alvestrand,
|
||
"Guidelines for Writing an IANA
|
||
Considerations Section in RFCs", BCP
|
||
26, RFC 2434, October 1998.
|
||
|
||
[RFC2743] Linn, J., "Generic Security Service
|
||
Application Program Interface Version
|
||
2, Update 1", RFC 2743, January 2000.
|
||
|
||
[SSH-ARCH] Ylonen, T., "SSH Protocol
|
||
Architecture", I-D draft-ietf-
|
||
architecture-14.txt, July 2003.
|
||
|
||
[SSH-TRANS] Ylonen, T., "SSH Transport Layer
|
||
Protocol", I-D draft-ietf-transport-
|
||
16.txt, July 2003.
|
||
|
||
[SSH-USERAUTH] Ylonen, T., "SSH Authentication
|
||
Protocol", I-D draft-ietf-userauth-
|
||
17.txt, July 2003.
|
||
|
||
[SSH-CONNECT] Ylonen, T., "SSH Connection Protocol",
|
||
I-D draft-ietf-connect-17.txt, July
|
||
2003.
|
||
|
||
[SSH-NUMBERS] Lehtinen, S. and D. Moffat, "SSH
|
||
Protocol Assigned Numbers", I-D draft-
|
||
ietf-secsh-assignednumbers-03.txt,
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 28]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
July 2003.
|
||
|
||
[SCHNEIER] Schneier, B., "Applied Cryptography
|
||
Second Edition: protocols algorithms
|
||
and source in code in C", 1996.
|
||
|
||
[KAUFMAN,PERLMAN,SPECINER] Kaufman, C., Perlman, R. and M.
|
||
Speciner, "Network Security: PRIVATE
|
||
Communication in a PUBLIC World",
|
||
1995.
|
||
|
||
[CERT] CERT Coordination Center, The.,
|
||
"http://www.cert.org/nav/index_red.html"
|
||
.
|
||
|
||
[VENEMA] Venema, W., "Murphy's Law and Computer
|
||
Security", Proceedings of 6th USENIX
|
||
Security Symposium, San Jose CA
|
||
http://www.usenix.org/publications/library/proceedings/sec96/venema.html
|
||
, July 1996.
|
||
|
||
[ROGAWAY] Rogaway, P., "Problems with Proposed
|
||
IP Cryptography", Unpublished paper
|
||
http://www.cs.ucdavis.edu/~rogaway/papers/draft-rogaway-ipsec-comments-00.txt
|
||
, 1996.
|
||
|
||
[DAI] Dai, W., "An attack against SSH2
|
||
protocol", Email to the SECSH Working
|
||
Group ietf-ssh@netbsd.org
|
||
ftp://ftp.ietf.org/ietf-mail-
|
||
archive/secsh/2002-02.mail, Feb 2002.
|
||
|
||
[BELLARE,KOHNO,NAMPREMPRE] Bellaire, M., Kohno, T. and C.
|
||
Namprempre, "Authenticated Encryption
|
||
in SSH: Fixing the SSH Binary Packet
|
||
Protocol", , Sept 2002.
|
||
|
||
|
||
Authors' Addresses
|
||
|
||
Tatu Ylonen
|
||
SSH Communications Security Corp
|
||
Fredrikinkatu 42
|
||
HELSINKI FIN-00100
|
||
Finland
|
||
|
||
EMail: ylo@ssh.com
|
||
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 29]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
Tero Kivinen
|
||
SSH Communications Security Corp
|
||
Fredrikinkatu 42
|
||
HELSINKI FIN-00100
|
||
Finland
|
||
|
||
EMail: kivinen@ssh.com
|
||
|
||
|
||
Markku-Juhani O. Saarinen
|
||
University of Jyvaskyla
|
||
|
||
|
||
Timo J. Rinne
|
||
SSH Communications Security Corp
|
||
Fredrikinkatu 42
|
||
HELSINKI FIN-00100
|
||
Finland
|
||
|
||
EMail: tri@ssh.com
|
||
|
||
|
||
Sami Lehtinen
|
||
SSH Communications Security Corp
|
||
Fredrikinkatu 42
|
||
HELSINKI FIN-00100
|
||
Finland
|
||
|
||
EMail: sjl@ssh.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 30]
|
||
|
||
Internet-Draft SSH Protocol Architecture July 2003
|
||
|
||
|
||
Full Copyright Statement
|
||
|
||
Copyright (C) The Internet Society (2003). All Rights Reserved.
|
||
|
||
This document and translations of it may be copied and furnished
|
||
to others, and derivative works that comment on or otherwise
|
||
explain it or assist in its implementation may be prepared,
|
||
copied, published and distributed, in whole or in part, without
|
||
restriction of any kind, provided that the above copyright notice
|
||
and this paragraph are included on all such copies and derivative
|
||
works. However, this document itself may not be modified in any
|
||
way, such as by removing the copyright notice or references to the
|
||
Internet Society or other Internet organizations, except as needed
|
||
for the purpose of developing Internet standards in which case the
|
||
procedures for copyrights defined in the Internet Standards
|
||
process must be followed, or as required to translate it into
|
||
languages other than English.
|
||
|
||
The limited permissions granted above are perpetual and will not
|
||
be revoked by the Internet Society or its successors or assigns.
|
||
|
||
This document and the information contained herein is provided on
|
||
an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET
|
||
ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR
|
||
IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
|
||
THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
|
||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
||
Acknowledgement
|
||
|
||
Funding for the RFC Editor function is currently provided by the
|
||
Internet Society.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Ylonen, et. al. Expires January 12, 2004 [Page 31]
|
||
|