Movatterモバイル変換


[0]ホーム

URL:


[RFC Home] [TEXT|PDF|HTML] [Tracker] [IPR] [Info page]

PROPOSED STANDARD
Network Working Group                                        M. HorowitzRequest for Comments: 2228                              Cygnus SolutionsUpdates:959                                                     S. LuntCategory: Standards Track                                       Bellcore                                                            October 1997FTP Security ExtensionsStatus of this Memo   This document specifies an Internet standards track protocol for the   Internet community, and requests discussion and suggestions for   improvements.  Please refer to the current edition of the "Internet   Official Protocol Standards" (STD 1) for the standardization state   and status of this protocol.  Distribution of this memo is unlimited.Copyright Notice   Copyright (C) The Internet Society (1997).  All Rights Reserved.Abstract   This document defines extensions to the FTP specification STD 9,RFC959, "FILE TRANSFER PROTOCOL (FTP)" (October 1985).  These extensions   provide strong authentication, integrity, and confidentiality on both   the control and data channels with the introduction of new optional   commands, replies, and file transfer encodings.   The following new optional commands are introduced in this   specification:      AUTH (Authentication/Security Mechanism),      ADAT (Authentication/Security Data),      PROT (Data Channel Protection Level),      PBSZ (Protection Buffer Size),      CCC (Clear Command Channel),      MIC (Integrity Protected Command),      CONF (Confidentiality Protected Command), and      ENC (Privacy Protected Command).   A new class of reply types (6yz) is also introduced for protected   replies.   None of the above commands are required to be implemented, but   interdependencies exist.  These dependencies are documented with the   commands.   Note that this specification is compatible with STD 9,RFC 959.Horowitz & Lunt             Standards Track                     [Page 1]

RFC 2228                FTP Security Extensions             October 19971.  Introduction   The File Transfer Protocol (FTP) currently defined in STD 9,RFC 959   and in place on the Internet uses usernames and passwords passed in   cleartext to authenticate clients to servers (via the USER and PASS   commands).  Except for services such as "anonymous" FTP archives,   this represents a security risk whereby passwords can be stolen   through monitoring of local and wide-area networks.  This either aids   potential attackers through password exposure and/or limits   accessibility of files by FTP servers who cannot or will not accept   the inherent security risks.   Aside from the problem of authenticating users in a secure manner,   there is also the problem of authenticating servers, protecting   sensitive data and/or verifying its integrity.  An attacker may be   able to access valuable or sensitive data merely by monitoring a   network, or through active means may be able to delete or modify the   data being transferred so as to corrupt its integrity.  An active   attacker may also initiate spurious file transfers to and from a site   of the attacker's choice, and may invoke other commands on the   server.  FTP does not currently have any provision for the encryption   or verification of the authenticity of commands, replies, or   transferred data.  Note that these security services have value even   to anonymous file access.   Current practice for sending files securely is generally either:      1.  via FTP of files pre-encrypted under keys which are manually          distributed,      2.  via electronic mail containing an encoding of a file encrypted          under keys which are manually distributed,      3.  via a PEM message, or      4.  via the rcp command enhanced to use Kerberos.   None of these means could be considered even a de facto standard, and   none are truly interactive.  A need exists to securely transfer files   using FTP in a secure manner which is supported within the FTP   protocol in a consistent manner and which takes advantage of existing   security infrastructure and technology.  Extensions are necessary to   the FTP specification if these security services are to be introduced   into the protocol in an interoperable way.Horowitz & Lunt             Standards Track                     [Page 2]

RFC 2228                FTP Security Extensions             October 1997   Although the FTP control connection follows the Telnet protocol, and   Telnet has defined an authentication and encryption option [TELNET-   SEC], [RFC-1123] explicitly forbids the use of Telnet option   negotiation over the control connection (other than Synch and IP).   Also, the Telnet authentication and encryption option does not   provide for integrity protection only (without confidentiality), and   does not address the protection of the data channel.2.  FTP Security Overview   At the highest level, the FTP security extensions seek to provide an   abstract mechanism for authenticating and/or authorizing connections,   and integrity and/or confidentiality protecting commands, replies,   and data transfers.   In the context of FTP security, authentication is the establishment   of a client's identity and/or a server's identity in a secure way,   usually using cryptographic techniques.  The basic FTP protocol does   not have a concept of authentication.   Authorization is the process of validating a user for login.  The   basic authorization process involves the USER, PASS, and ACCT   commands.  With the FTP security extensions, authentication   established using a security mechanism may also be used to make the   authorization decision.   Without the security extensions, authentication of the client, as   this term is usually understood, never happens.  FTP authorization is   accomplished with a password, passed on the network in the clear as   the argument to the PASS command.  The possessor of this password is   assumed to be authorized to transfer files as the user named in the   USER command, but the identity of the client is never securely   established.   An FTP security interaction begins with a client telling the server   what security mechanism it wants to use with the AUTH command.  The   server will either accept this mechanism, reject this mechanism, or,   in the case of a server which does not implement the security   extensions, reject the command completely.  The client may try   multiple security mechanisms until it requests one which the server   accepts.  This allows a rudimentary form of negotiation to take   place.  (If more complex negotiation is desired, this may be   implemented as a security mechanism.)  The server's reply will   indicate if the client must respond with additional data for theHorowitz & Lunt             Standards Track                     [Page 3]

RFC 2228                FTP Security Extensions             October 1997   security mechanism to interpret.  If none is needed, this will   usually mean that the mechanism is one where the password (specified   by the PASS command) is to be interpreted differently, such as with a   token or one-time password system.   If the server requires additional security information, then the   client and server will enter into a security data exchange.  The   client will send an ADAT command containing the first block of   security data.  The server's reply will indicate if the data exchange   is complete, if there was an error, or if more data is needed.  The   server's reply can optionally contain security data for the client to   interpret.  If more data is needed, the client will send another ADAT   command containing the next block of data, and await the server's   reply.  This exchange can continue as many times as necessary.  Once   this exchange completes, the client and server have established a   security association.  This security association may include   authentication (client, server, or mutual) and keying information for   integrity and/or confidentiality, depending on the mechanism in use.   The term "security data" here is carefully chosen.  The purpose of   the security data exchange is to establish a security association,   which might not actually include any authentication at all, between   the client and the server as described above.  For instance, a   Diffie-Hellman exchange establishes a secret key, but no   authentication takes place.  If an FTP server has an RSA key pair but   the client does not, then the client can authenticate the server, but   the server cannot authenticate the client.   Once a security association is established, authentication which is a   part of this association may be used instead of or in addition to the   standard username/password exchange for authorizing a user to connect   to the server.  A username specified by the USER command is always   required to specify the identity to be used on the server.   In order to prevent an attacker from inserting or deleting commands   on the control stream, if the security association supports   integrity, then the server and client must use integrity protection   on the control stream, unless it first transmits a CCC command to   turn off this requirement.  Integrity protection is performed with   the MIC and ENC commands, and the 63z reply codes.  The CCC command   and its reply must be transmitted with integrity protection.   Commands and replies may be transmitted without integrity (that is,   in the clear or with confidentiality only) only if no security   association is established, the negotiated security association does   not support integrity, or the CCC command has succeeded.Horowitz & Lunt             Standards Track                     [Page 4]

RFC 2228                FTP Security Extensions             October 1997   Once the client and server have negotiated with the PBSZ command an   acceptable buffer size for encapsulating protected data over the data   channel, the security mechanism may also be used to protect data   channel transfers.   Policy is not specified by this document.  In particular, client and   server implementations may choose to implement restrictions on what   operations can be performed depending on the security association   which exists.  For example, a server may require that a client   authorize via a security mechanism rather than using a password,   require that the client provide a one-time password from a token,   require at least integrity protection on the command channel, or   require that certain files only be transmitted encrypted.  An   anonymous ftp client might refuse to do file transfers without   integrity protection in order to insure the validity of files   downloaded.   No particular set of functionality is required, except as   dependencies described in the next section.  This means that none of   authentication, integrity, or confidentiality are required of an   implementation, although a mechanism which does none of these is not   of much use.  For example, it is acceptable for a mechanism to   implement only integrity protection, one-way authentication and/or   encryption, encryption without any authentication or integrity   protection, or any other subset of functionality if policy or   technical considerations make this desirable.  Of course, one peer   might require as a matter of policy stronger protection than the   other is able to provide, preventing perfect interoperability.3.  New FTP Commands   The following commands are optional, but dependent on each other.   They are extensions to the FTP Access Control Commands.   The reply codes documented here are generally described as   recommended, rather than required.  The intent is that reply codes   describing the full range of success and failure modes exist, but   that servers be allowed to limit information presented to the client.   For example, a server might implement a particular security   mechanism, but have a policy restriction against using it.  The   server should respond with a 534 reply code in this case, but may   respond with a 504 reply code if it does not wish to divulge that the   disallowed mechanism is supported.  If the server does choose to use   a different reply code than the recommended one, it should try to use   a reply code which only differs in the last digit.  In all cases, the   server must use a reply code which is documented as returnable from   the command received, and this reply code must begin with the same   digit as the recommended reply code for the situation.Horowitz & Lunt             Standards Track                     [Page 5]

RFC 2228                FTP Security Extensions             October 1997   AUTHENTICATION/SECURITY MECHANISM (AUTH)      The argument field is a Telnet string identifying a supported      mechanism.  This string is case-insensitive.  Values must be      registered with the IANA, except that values beginning with "X-"      are reserved for local use.      If the server does not recognize the AUTH command, it must respond      with reply code 500.  This is intended to encompass the large      deployed base of non-security-aware ftp servers, which will      respond with reply code 500 to any unrecognized command.  If the      server does recognize the AUTH command but does not implement the      security extensions, it should respond with reply code 502.      If the server does not understand the named security mechanism, it      should respond with reply code 504.      If the server is not willing to accept the named security      mechanism, it should respond with reply code 534.      If the server is not able to accept the named security mechanism,      such as if a required resource is unavailable, it should respond      with reply code 431.      If the server is willing to accept the named security mechanism,      but requires security data, it must respond with reply code 334.      If the server is willing to accept the named security mechanism,      and does not require any security data, it must respond with reply      code 234.      If the server is responding with a 334 reply code, it may include      security data as described in the next section.      Some servers will allow the AUTH command to be reissued in order      to establish new authentication.  The AUTH command, if accepted,      removes any state associated with prior FTP Security commands.      The server must also require that the user reauthorize (that is,      reissue some or all of the USER, PASS, and ACCT commands) in this      case (seesection 4 for an explanation of "authorize" in this      context).Horowitz & Lunt             Standards Track                     [Page 6]

RFC 2228                FTP Security Extensions             October 1997   AUTHENTICATION/SECURITY DATA (ADAT)      The argument field is a Telnet string representing base 64 encoded      security data (seeSection 9, "Base 64 Encoding").  If a reply      code indicating success is returned, the server may also use a      string of the form "ADAT=base64data" as the text part of the reply      if it wishes to convey security data back to the client.      The data in both cases is specific to the security mechanism      specified by the previous AUTH command.  The ADAT command, and the      associated replies, allow the client and server to conduct an      arbitrary security protocol.  The security data exchange must      include enough information for both peers to be aware of which      optional features are available.  For example, if the client does      not support data encryption, the server must be made aware of      this, so it will know not to send encrypted command channel      replies.  It is strongly recommended that the security mechanism      provide sequencing on the command channel, to insure that commands      are not deleted, reordered, or replayed.      The ADAT command must be preceded by a successful AUTH command,      and cannot be issued once a security data exchange completes      (successfully or unsuccessfully), unless it is preceded by an AUTH      command to reset the security state.      If the server has not yet received an AUTH command, or if a prior      security data exchange completed, but the security state has not      been reset with an AUTH command, it should respond with reply code      503.      If the server cannot base 64 decode the argument, it should      respond with reply code 501.      If the server rejects the security data (if a checksum fails, for      instance), it should respond with reply code 535.      If the server accepts the security data, and requires additional      data, it should respond with reply code 335.      If the server accepts the security data, but does not require any      additional data (i.e., the security data exchange has completed      successfully), it must respond with reply code 235.      If the server is responding with a 235 or 335 reply code, then it      may include security data in the text part of the reply as      specified above.Horowitz & Lunt             Standards Track                     [Page 7]

RFC 2228                FTP Security Extensions             October 1997      If the ADAT command returns an error, the security data exchange      will fail, and the client must reset its internal security state.      If the client becomes unsynchronized with the server (for example,      the server sends a 234 reply code to an AUTH command, but the      client has more data to transmit), then the client must reset the      server's security state.   PROTECTION BUFFER SIZE (PBSZ)      The argument is a decimal integer representing the maximum size,      in bytes, of the encoded data blocks to be sent or received during      file transfer.  This number shall be no greater than can be      represented in a 32-bit unsigned integer.      This command allows the FTP client and server to negotiate a      maximum protected buffer size for the connection.  There is no      default size; the client must issue a PBSZ command before it can      issue the first PROT command.      The PBSZ command must be preceded by a successful security data      exchange.      If the server cannot parse the argument, or if it will not fit in      32 bits, it should respond with a 501 reply code.      If the server has not completed a security data exchange with the      client, it should respond with a 503 reply code.      Otherwise, the server must reply with a 200 reply code.  If the      size provided by the client is too large for the server, it must      use a string of the form "PBSZ=number" in the text part of the      reply to indicate a smaller buffer size.  The client and the      server must use the smaller of the two buffer sizes if both buffer      sizes are specified.   DATA CHANNEL PROTECTION LEVEL (PROT)      The argument is a single Telnet character code specifying the data      channel protection level.      This command indicates to the server what type of data channel      protection the client and server will be using.  The following      codes are assigned:         C - Clear         S - Safe         E - Confidential         P - PrivateHorowitz & Lunt             Standards Track                     [Page 8]

RFC 2228                FTP Security Extensions             October 1997      The default protection level if no other level is specified is      Clear.  The Clear protection level indicates that the data channel      will carry the raw data of the file transfer, with no security      applied.  The Safe protection level indicates that the data will      be integrity protected.  The Confidential protection level      indicates that the data will be confidentiality protected.  The      Private protection level indicates that the data will be integrity      and confidentiality protected.      It is reasonable for a security mechanism not to provide all data      channel protection levels.  It is also reasonable for a mechanism      to provide more protection at a level than is required (for      instance, a mechanism might provide Confidential protection, but      include integrity-protection in that encoding, due to API or other      considerations).      The PROT command must be preceded by a successful protection      buffer size negotiation.      If the server does not understand the specified protection level,      it should respond with reply code 504.      If the current security mechanism does not support the specified      protection level, the server should respond with reply code 536.      If the server has not completed a protection buffer size      negotiation with the client, it should respond with a 503 reply      code.      The PROT command will be rejected and the server should reply 503      if no previous PBSZ command was issued.      If the server is not willing to accept the specified protection      level, it should respond with reply code 534.      If the server is not able to accept the specified protection      level, such as if a required resource is unavailable, it should      respond with reply code 431.      Otherwise, the server must reply with a 200 reply code to indicate      that the specified protection level is accepted.   CLEAR COMMAND CHANNEL (CCC)      This command does not take an argument.Horowitz & Lunt             Standards Track                     [Page 9]

RFC 2228                FTP Security Extensions             October 1997      It is desirable in some environments to use a security mechanism      to authenticate and/or authorize the client and server, but not to      perform any integrity checking on the subsequent commands.  This      might be used in an environment where IP security is in place,      insuring that the hosts are authenticated and that TCP streams      cannot be tampered, but where user authentication is desired.      If unprotected commands are allowed on any connection, then an      attacker could insert a command on the control stream, and the      server would have no way to know that it was invalid.  In order to      prevent such attacks, once a security data exchange completes      successfully, if the security mechanism supports integrity, then      integrity (via the MIC or ENC command, and 631 or 632 reply) must      be used, until the CCC command is issued to enable non-integrity      protected control channel messages.  The CCC command itself must      be integrity protected.      Once the CCC command completes successfully, if a command is not      protected, then the reply to that command must also not be      protected.  This is to support interoperability with clients which      do not support protection once the CCC command has been issued.      This command must be preceded by a successful security data      exchange.      If the command is not integrity-protected, the server must respond      with a 533 reply code.      If the server is not willing to turn off the integrity      requirement, it should respond with a 534 reply code.      Otherwise, the server must reply with a 200 reply code to indicate      that unprotected commands and replies may now be used on the      command channel.   INTEGRITY PROTECTED COMMAND (MIC) and   CONFIDENTIALITY PROTECTED COMMAND (CONF) and   PRIVACY PROTECTED COMMAND (ENC)      The argument field of MIC is a Telnet string consisting of a base      64 encoded "safe" message produced by a security mechanism      specific message integrity procedure.  The argument field of CONF      is a Telnet string consisting of a base 64 encoded "confidential"      message produced by a security mechanism specific confidentiality      procedure.  The argument field of ENC is a Telnet string      consisting of a base 64 encoded "private" message produced by a      security mechanism specific message integrity and confidentiality      procedure.Horowitz & Lunt             Standards Track                    [Page 10]

RFC 2228                FTP Security Extensions             October 1997      The server will decode and/or verify the encoded message.      This command must be preceded by a successful security data      exchange.      A server may require that the first command after a successful      security data exchange be CCC, and not implement the protection      commands at all.  In this case, the server should respond with a      502 reply code.      If the server cannot base 64 decode the argument, it should      respond with a 501 reply code.      If the server has not completed a security data exchange with the      client, it should respond with a 503 reply code.      If the server has completed a security data exchange with the      client using a mechanism which supports integrity, and requires a      CCC command due to policy or implementation limitations, it should      respond with a 503 reply code.      If the server rejects the command because it is not supported by      the current security mechanism, the server should respond with      reply code 537.      If the server rejects the command (if a checksum fails, for      instance), it should respond with reply code 535.      If the server is not willing to accept the command (if privacy is      required by policy, for instance, or if a CONF command is received      before a CCC command), it should respond with reply code 533.      Otherwise, the command will be interpreted as an FTP command.  An      end-of-line code need not be included, but if one is included, it      must be a Telnet end-of-line code, not a local end-of-line code.      The server may require that, under some or all circumstances, all      commands be protected.  In this case, it should make a 533 reply      to commands other than MIC, CONF, and ENC.4.  Login Authorization   The security data exchange may, among other things, establish the   identity of the client in a secure way to the server.  This identity   may be used as one input to the login authorization process.Horowitz & Lunt             Standards Track                    [Page 11]

RFC 2228                FTP Security Extensions             October 1997   In response to the FTP login commands (AUTH, PASS, ACCT), the server   may choose to change the sequence of commands and replies specified   byRFC 959 as follows.  There are also some new replies available.   If the server is willing to allow the user named by the USER command   to log in based on the identity established by the security data   exchange, it should respond with reply code 232.   If the security mechanism requires a challenge/response password, it   should respond to the USER command with reply code 336.  The text   part of the reply should contain the challenge.  The client must   display the challenge to the user before prompting for the password   in this case.  This is particularly relevant to more sophisticated   clients or graphical user interfaces which provide dialog boxes or   other modal input.  These clients should be careful not to prompt for   the password before the username has been sent to the server, in case   the user needs the challenge in the 336 reply to construct a valid   password.5.  New FTP Replies   The new reply codes are divided into two classes.  The first class is   new replies made necessary by the new FTP Security commands.  The   second class is a new reply type to indicate protected replies.   5.1.  New individual reply codes      232 User logged in, authorized by security data exchange.      234 Security data exchange complete.      235 [ADAT=base64data]            ; This reply indicates that the security data exchange            ; completed successfully.  The square brackets are not            ; to be included in the reply, but indicate that            ; security data in the reply is optional.      334 [ADAT=base64data]            ; This reply indicates that the requested security mechanism            ; is ok, and includes security data to be used by the client            ; to construct the next command.  The square brackets are not            ; to be included in the reply, but indicate that            ; security data in the reply is optional.      335 [ADAT=base64data]            ; This reply indicates that the security data is            ; acceptable, and more is required to complete the            ; security data exchange.  The square brackets            ; are not to be included in the reply, but indicate            ; that security data in the reply is optional.Horowitz & Lunt             Standards Track                    [Page 12]

RFC 2228                FTP Security Extensions             October 1997      336 Username okay, need password.  Challenge is "...."            ; The exact representation of the challenge should be chosen            ; by the mechanism to be sensible to the human user of the            ; system.      431 Need some unavailable resource to process security.      533 Command protection level denied for policy reasons.      534 Request denied for policy reasons.      535 Failed security check (hash, sequence, etc).      536 Requested PROT level not supported by mechanism.      537 Command protection level not supported by security mechanism.   5.2.  Protected replies.      One new reply type is introduced:         6yz   Protected reply            There are three reply codes of this type.  The first, reply            code 631 indicates an integrity protected reply.  The            second, reply code 632, indicates a confidentiality and            integrity protected reply.  the third, reply code 633,            indicates a confidentiality protected reply.            The text part of a 631 reply is a Telnet string consisting            of a base 64 encoded "safe" message produced by a security            mechanism specific message integrity procedure.  The text            part of a 632 reply is a Telnet string consisting of a base            64 encoded "private" message produced by a security            mechanism specific message confidentiality and integrity            procedure.  The text part of a 633 reply is a Telnet string            consisting of a base 64 encoded "confidential" message            produced by a security mechanism specific message            confidentiality procedure.            The client will decode and verify the encoded reply.  How            failures decoding or verifying replies are handled is            implementation-specific.  An end-of-line code need not be            included, but if one is included, it must be a Telnet end-            of-line code, not a local end-of-line code.            A protected reply may only be sent if a security data            exchange has succeeded.            The 63z reply may be a multiline reply.  In this case, the            plaintext reply must be broken up into a number of            fragments.  Each fragment must be protected, then base 64Horowitz & Lunt             Standards Track                    [Page 13]

RFC 2228                FTP Security Extensions             October 1997            encoded in order into a separate line of the multiline            reply.  There need not be any correspondence between the            line breaks in the plaintext reply and the encoded reply.            Telnet end-of-line codes must appear in the plaintext of the            encoded reply, except for the final end-of-line code, which            is optional.            The multiline reply must be formatted more strictly than the            continuation specification inRFC 959.  In particular, each            line before the last must be formed by the reply code,            followed immediately by a hyphen, followed by a base 64            encoded fragment of the reply.            For example, if the plaintext reply is               123-First line               Second line                 234 A line beginning with numbers               123 The last line            then the resulting protected reply could be any of the            following (the first example has a line break only to fit            within the margins):  631 base64(protect("123-First line\r\nSecond line\r\n  234 A line  631-base64(protect("123-First line\r\n"))  631-base64(protect("Second line\r\n"))  631-base64(protect("  234 A line beginning with numbers\r\n"))  631 base64(protect("123 The last line"))  631-base64(protect("123-First line\r\nSecond line\r\n  234 A line b"))  631 base64(protect("eginning with numbers\r\n123 The last line\r\n"))6.  Data Channel Encapsulation   When data transfers are protected between the client and server (in   either direction), certain transformations and encapsulations must be   performed so that the recipient can properly decode the transmitted   file.   The sender must apply all protection services after transformations   associated with the representation type, file structure, and transfer   mode have been performed.  The data sent over the data channel is,   for the purposes of protection, to be treated as a byte stream.   When performing a data transfer in an authenticated manner, the   authentication checks are performed on individual blocks of the file,   rather than on the file as a whole. Consequently, it is possible forHorowitz & Lunt             Standards Track                    [Page 14]

RFC 2228                FTP Security Extensions             October 1997   insertion attacks to insert blocks into the data stream (i.e.,   replays) that authenticate correctly, but result in a corrupted file   being undetected by the receiver. To guard against such attacks, the   specific security mechanism employed should include mechanisms to   protect against such attacks.  Many GSS-API mechanisms usable with   the specification inAppendix I, and the Kerberos mechanism inAppendix II do so.   The sender must take the input byte stream, and break it up into   blocks such that each block, when encoded using a security mechanism   specific procedure, will be no larger than the buffer size negotiated   by the client with the PBSZ command.  Each block must be encoded,   then transmitted with the length of the encoded block prepended as a   four byte unsigned integer, most significant byte first.   When the end of the file is reached, the sender must encode a block   of zero bytes, and send this final block to the recipient before   closing the data connection.   The recipient will read the four byte length, read a block of data   that many bytes long, then decode and verify this block with a   security mechanism specific procedure.  This must be repeated until a   block encoding a buffer of zero bytes is received.  This indicates   the end of the encoded byte stream.   Any transformations associated with the representation type, file   structure, and transfer mode are to be performed by the recipient on   the byte stream resulting from the above process.   When using block transfer mode, the sender's (cleartext) buffer size   is independent of the block size.   The server will reply 534 to a STOR, STOU, RETR, LIST, NLST, or APPE   command if the current protection level is not at the level dictated   by the server's security requirements for the particular file   transfer.   If any data protection services fail at any time during data transfer   at the server end (including an attempt to send a buffer size greater   than the negotiated maximum), the server will send a 535 reply to the   data transfer command (either STOR, STOU, RETR, LIST, NLST, or APPE).Horowitz & Lunt             Standards Track                    [Page 15]

RFC 2228                FTP Security Extensions             October 19977.  Potential policy considerations   While there are no restrictions on client and server policy, there   are a few recommendations which an implementation should implement.    - Once a security data exchange takes place, a server should require      all commands be protected (with integrity and/or confidentiality),      and it should protect all replies.  Replies should use the same      level of protection as the command which produced them.  This      includes replies which indicate failure of the MIC, CONF, and ENC      commands.  In particular, it is not meaningful to require that      AUTH and ADAT be protected; it is meaningful and useful to require      that PROT and PBSZ be protected.  In particular, the use of CCC is      not recommended, but is defined in the interest of      interoperability between implementations which might desire such      functionality.    - A client should encrypt the PASS command whenever possible.  It is      reasonable for the server to refuse to accept a non-encrypted PASS      command if the server knows encryption is available.    - Although no security commands are required to be implemented, it      is recommended that an implementation provide all commands which      can be implemented, given the mechanisms supported and the policy      considerations of the site (export controls, for instance).8.  Declarative specifications   These sections are modelled after sections5.3 and5.4 ofRFC 959,   which describe the same information, except for the standard FTP   commands and replies.   8.1.  FTP Security commands and arguments      AUTH <SP> <mechanism-name> <CRLF>      ADAT <SP> <base64data> <CRLF>      PROT <SP> <prot-code> <CRLF>      PBSZ <SP> <decimal-integer> <CRLF>      MIC <SP> <base64data> <CRLF>      CONF <SP> <base64data> <CRLF>      ENC <SP> <base64data> <CRLF>      <mechanism-name> ::= <string>      <base64data> ::= <string>              ; must be formatted as described insection 9      <prot-code> ::= C | S | E | P      <decimal-integer> ::= any decimal integer from 1 to (2^32)-1Horowitz & Lunt             Standards Track                    [Page 16]

RFC 2228                FTP Security Extensions             October 1997   8.2.  Command-Reply sequences      Security Association Setup         AUTH            234            334            502, 504, 534, 431            500, 501, 421         ADAT            235            335            503, 501, 535            500, 501, 421      Data protection negotiation commands         PBSZ            200            503            500, 501, 421, 530         PROT            200            504, 536, 503, 534, 431            500, 501, 421, 530      Command channel protection commands         MIC            535, 533            500, 501, 421         CONF            535, 533            500, 501, 421         ENC            535, 533            500, 501, 421      Security-Enhanced login commands (only new replies listed)         USER            232            336      Data channel commands (only new replies listed)         STOR            534, 535         STOU            534, 535         RETR            534, 535Horowitz & Lunt             Standards Track                    [Page 17]

RFC 2228                FTP Security Extensions             October 1997         LIST            534, 535         NLST            534, 535         APPE            534, 535      In addition to these reply codes, any security command can return      500, 501, 502, 533, or 421.  Any ftp command can return a reply      code encapsulated in a 631, 632, or 633 reply once a security data      exchange has completed successfully.Horowitz & Lunt             Standards Track                    [Page 18]

RFC 2228                FTP Security Extensions             October 19979.  State Diagrams   This section includes a state diagram which demonstrates the flow of   authentication and authorization in a security enhanced FTP   implementation.  The rectangular blocks show states where the client   must issue a command, and the diamond blocks show states where the   server must issue a response.          ,------------------,  USER       __\| Unauthenticated  |_________\      |  /| (new connection) |         /|      |   `------------------'          |      |            |                    |      |            | AUTH               |      |            V                    |      |           / \                   |      | 4yz,5yz  /   \   234            |      |<--------<     >------------->.  |      |          \   /               |  |      |           \_/                |  |      |            |                 |  |      |            | 334             |  |      |            V                 |  |      |  ,--------------------,      |  |      |  | Need Security Data |<--.  |  |      |  `--------------------'   |  |  |      |            |              |  |  |      |            | ADAT         |  |  |      |            V              |  |  |      |           / \             |  |  |      | 4yz,5yz  /   \   335      |  |  |      `<--------<     >-----------'  |  |                 \   /               |  |                  \_/                |  |                   |                 |  |                   | 235             |  |                   V                 |  |           ,---------------.         |  |      ,--->| Authenticated |<--------'  |  After the client and server      |    `---------------'            |  have completed authenti-      |            |                    |  cation, command must be      |            | USER               |  integrity-protected if      |            |                    |  integrity is available.  The      |            |<-------------------'  CCC command may be issued to      |            V                       relax this restriction.Horowitz & Lunt             Standards Track                    [Page 19]

RFC 2228                FTP Security Extensions             October 1997      |           / \      | 4yz,5yz  /   \   2yz      |<--------<     >------------->.      |          \   /               |      |           \_/                |      |            |                 |      |            | 3yz             |      |            V                 |      |    ,---------------.         |      |    | Need Password |         |      |    `---------------'         |      |            |                 |      |            | PASS            |      |            V                 |      |           / \                |      | 4yz,5yz  /   \   2yz         |      |<--------<     >------------->|      |          \   /               |      |           \_/                |      |            |                 |      |            | 3yz             |      |            V                 |      |    ,--------------.          |      |    | Need Account |          |      |    `--------------'          |      |            |                 |      |            | ACCT            |      |            V                 |      |           / \                |      | 4yz,5yz  /   \   2yz         |      `<--------<     >------------->|                 \   /               |                  \_/                |                   |                 |                   | 3yz             |                   V                 |             ,-------------.         |             | Authorized  |/________|             | (Logged in) |\             `-------------'Horowitz & Lunt             Standards Track                    [Page 20]

RFC 2228                FTP Security Extensions             October 199710.  Base 64 Encoding   Base 64 encoding is the same as the Printable Encoding described inSection 4.3.2.4 of [RFC-1421], except that line breaks must not be   included. This encoding is defined as follows.   Proceeding from left to right, the bit string resulting from the   mechanism specific protection routine is encoded into characters   which are universally representable at all sites, though not   necessarily with the same bit patterns (e.g., although the character   "E" is represented in an ASCII-based system as hexadecimal 45 and as   hexadecimal C5 in an EBCDIC-based system, the local significance of   the two representations is equivalent).   A 64-character subset of International Alphabet IA5 is used, enabling   6 bits to be represented per printable character.  (The proposed   subset of characters is represented identically in IA5 and ASCII.)   The character "=" signifies a special processing function used for   padding within the printable encoding procedure.   The encoding process represents 24-bit groups of input bits as output   strings of 4 encoded characters.  Proceeding from left to right   across a 24-bit input group output from the security mechanism   specific message protection procedure, each 6-bit group is used as an   index into an array of 64 printable characters, namely "[A-Z][a-   z][0-9]+/".  The character referenced by the index is placed in the   output string.  These characters are selected so as to be universally   representable, and the set excludes characters with particular   significance to Telnet (e.g., "<CR>", "<LF>", IAC).   Special processing is performed if fewer than 24 bits are available   in an input group at the end of a message.  A full encoding quantum   is always completed at the end of a message.  When fewer than 24   input bits are available in an input group, zero bits are added (on   the right) to form an integral number of 6-bit groups.  Output   character positions which are not required to represent actual input   data are set to the character "=".  Since all canonically encoded   output is an integral number of octets, only the following cases can   arise: (1) the final quantum of encoding input is an integral   multiple of 24 bits; here, the final unit of encoded output will be   an integral multiple of 4 characters with no "=" padding, (2) the   final quantum of encoding input is exactly 8 bits; here, the final   unit of encoded output will be two characters followed by two "="   padding characters, or (3) the final quantum of encoding input is   exactly 16 bits; here, the final unit of encoded output will be three   characters followed by one "=" padding character.Horowitz & Lunt             Standards Track                    [Page 21]

RFC 2228                FTP Security Extensions             October 1997   Implementors must keep in mind that the base 64 encodings in ADAT,   MIC, CONF, and ENC commands, and in 63z replies may be arbitrarily   long.  Thus, the entire line must be read before it can be processed.   Several successive reads on the control channel may be necessary.  It   is not appropriate to for a server to reject a command containing a   base 64 encoding simply because it is too long (assuming that the   decoding is otherwise well formed in the context in which it was   sent).   Case must not be ignored when reading commands and replies containing   base 64 encodings.11.  Security Considerations   This entire document deals with security considerations related to   the File Transfer Protocol.   Third party file transfers cannot be secured using these extensions,   since a security context cannot be established between two servers   using these facilities (no control connection exists between servers   over which to pass ADAT tokens).  Further work in this area is   deferred.12.  Acknowledgements   I would like to thank the members of the CAT WG, as well as all   participants in discussions on the "cat-ietf@mit.edu" mailing list,   for their contributions to this document.  I would especially like to   thank Sam Sjogren, John Linn, Ted Ts'o, Jordan Brown, Michael Kogut,   Derrick Brashear, John Gardiner Myers, Denis Pinkas, and Karri Balk   for their contributions to this work.  Of course, without Steve Lunt,   the author of the first six revisions of this document, it would not   exist at all.13.  References   [TELNET-SEC] Borman, D., "Telnet Authentication and Encryption      Option", Work in Progress.   [RFC-1123] Braden, R., "Requirements for Internet Hosts --      Application and Support", STD 3,RFC 1123, October 1989.   [RFC-1421] Linn, J., "Privacy Enhancement for Internet Electronic      Mail: Part I: Message Encryption and Authentication Procedures",RFC 1421, February 1993.Horowitz & Lunt             Standards Track                    [Page 22]

RFC 2228                FTP Security Extensions             October 199714.  Author's Address   Marc Horowitz   Cygnus Solutions   955 Massachusetts Avenue   Cambridge, MA 02139   Phone: +1 617 354 7688   EMail: marc@cygnus.comHorowitz & Lunt             Standards Track                    [Page 23]

RFC 2228                FTP Security Extensions             October 1997Appendix I: Specification under the GSSAPI   In order to maximise the utility of new security mechanisms, it is   desirable that new mechanisms be implemented as GSSAPI mechanisms   rather than as FTP security mechanisms.  This will enable existing   ftp implementations to support the new mechanisms more easily, since   little or no code will need to be changed.  In addition, the   mechanism will be usable by other protocols, such as IMAP, which are   built on top of the GSSAPI, with no additional specification or   implementation work needed by the mechanism designers.   The security mechanism name (for the AUTH command) associated with   all mechanisms employing the GSSAPI is GSSAPI.  If the server   supports a security mechanism employing the GSSAPI, it must respond   with a 334 reply code indicating that an ADAT command is expected   next.   The client must begin the authentication exchange by calling   GSS_Init_Sec_Context, passing in 0 for input_context_handle   (initially), and a targ_name equal to output_name from   GSS_Import_Name called with input_name_type of Host-Based Service and   input_name_string of "ftp@hostname" where "hostname" is the fully   qualified host name of the server with all letters in lower case.   (Failing this, the client may try again using input_name_string of   "host@hostname".) The output_token must then be base 64 encoded and   sent to the server as the argument to an ADAT command.  If   GSS_Init_Sec_Context returns GSS_S_CONTINUE_NEEDED, then the client   must expect a token to be returned in the reply to the ADAT command.   This token must subsequently be passed to another call to   GSS_Init_Sec_Context.  In this case, if GSS_Init_Sec_Context returns   no output_token, then the reply code from the server for the previous   ADAT command must have been 235.  If GSS_Init_Sec_Context returns   GSS_S_COMPLETE, then no further tokens are expected from the server,   and the client must consider the server authenticated.   The server must base 64 decode the argument to the ADAT command and   pass the resultant token to GSS_Accept_Sec_Context as input_token,   setting acceptor_cred_handle to NULL (for "use default credentials"),   and 0 for input_context_handle (initially).  If an output_token is   returned, it must be base 64 encoded and returned to the client by   including "ADAT=base64string" in the text of the reply.  If   GSS_Accept_Sec_Context returns GSS_S_COMPLETE, the reply code must be   235, and the server must consider the client authenticated.  If   GSS_Accept_Sec_Context returns GSS_S_CONTINUE_NEEDED, the reply code   must be 335.  Otherwise, the reply code should be 535, and the text   of the reply should contain a descriptive error message.Horowitz & Lunt             Standards Track                    [Page 24]

RFC 2228                FTP Security Extensions             October 1997   The chan_bindings input to GSS_Init_Sec_Context and   GSS_Accept_Sec_Context should use the client internet address and   server internet address as the initiator and acceptor addresses,   respectively.  The address type for both should be GSS_C_AF_INET. No   application data should be specified.   Since GSSAPI supports anonymous peers to security contexts, it is   possible that the client's authentication of the server does not   actually establish an identity.   The procedure associated with MIC commands, 631 replies, and Safe   file transfers is:      GSS_Wrap for the sender, with conf_flag == FALSE      GSS_Unwrap for the receiver   The procedure associated with ENC commands, 632 replies, and Private   file transfers is:      GSS_Wrap for the sender, with conf_flag == TRUE      GSS_Unwrap for the receiver   CONF commands and 633 replies are not supported.   Both the client and server should inspect the value of conf_avail to   determine whether the peer supports confidentiality services.   When the security state is reset (when AUTH is received a second   time, or when REIN is received), this should be done by calling the   GSS_Delete_sec_context function.Appendix II:  Specification under Kerberos version 4   The security mechanism name (for the AUTH command) associated with   Kerberos Version 4 is KERBEROS_V4.  If the server supports   KERBEROS_V4, it must respond with a 334 reply code indicating that an   ADAT command is expected next.   The client must retrieve a ticket for the Kerberos principal   "ftp.hostname@realm" by calling krb_mk_req(3) with a principal name   of "ftp", an instance equal to the first part of the canonical host   name of the server with all letters in lower case (as returned by   krb_get_phost(3)), the server's realm name (as returned by   krb_realmofhost(3)), and an arbitrary checksum.  The ticket must then   be base 64 encoded and sent as the argument to an ADAT command.Horowitz & Lunt             Standards Track                    [Page 25]

RFC 2228                FTP Security Extensions             October 1997   If the "ftp" principal name is not a registered principal in the   Kerberos database, then the client may fall back on the "rcmd"   principal name (same instance and realm).  However, servers must   accept only one or the other of these principal names, and must not   be willing to accept either.  Generally, if the server has a key for   the "ftp" principal in its srvtab, then that principal only must be   used, otherwise the "rcmd" principal only must be used.   The server must base 64 decode the argument to the ADAT command and   pass the result to krb_rd_req(3).  The server must add one to the   checksum from the authenticator, convert the result to network byte   order (most significant byte first), and sign it using   krb_mk_safe(3), and base 64 encode the result.  Upon success, the   server must reply to the client with a 235 code and include   "ADAT=base64string" in the text of the reply.  Upon failure, the   server should reply 535.   Upon receipt of the 235 reply from the server, the client must parse   the text of the reply for the base 64 encoded data, decode it,   convert it from network byte order, and pass the result to   krb_rd_safe(3).  The client must consider the server authenticated if   the resultant checksum is equal to one plus the value previously   sent.   The procedure associated with MIC commands, 631 replies, and Safe   file transfers is:      krb_mk_safe(3) for the sender      krb_rd_safe(3) for the receiver   The procedure associated with ENC commands, 632 replies, and Private   file transfers is:      krb_mk_priv(3) for the sender      krb_rd_priv(3) for the receiver   CONF commands and 633 replies are not supported.   Note that this specification for KERBEROS_V4 contains no provision   for negotiating alternate means for integrity and confidentiality   routines.  Note also that the ADAT exchange does not convey whether   the peer supports confidentiality services.   In order to stay within the allowed PBSZ, implementors must take note   that a cleartext buffer will grow by 31 bytes when processed by   krb_mk_safe(3) and will grow by 26 bytes when processed by   krb_mk_priv(3).Horowitz & Lunt             Standards Track                    [Page 26]

RFC 2228                FTP Security Extensions             October 1997Full Copyright Statement   Copyright (C) The Internet Society (1997).  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 implmentation may be prepared, copied, published   andand 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.Horowitz & Lunt             Standards Track                    [Page 27]

[8]ページ先頭

©2009-2025 Movatter.jp