Re: [regext] review of draft-ietf-regext-login-security-03

Martin Casanova <martin.casanova@switch.ch> Mon, 08 April 2019 10:28 UTC

Return-Path: <martin.casanova@switch.ch>
X-Original-To: regext@ietfa.amsl.com
Delivered-To: regext@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 4FDCB12030D for <regext@ietfa.amsl.com>; Mon, 8 Apr 2019 03:28:58 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.2
X-Spam-Level:
X-Spam-Status: No, score=-4.2 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id yKecHmkIBWiM for <regext@ietfa.amsl.com>; Mon, 8 Apr 2019 03:28:53 -0700 (PDT)
Received: from edge10.ethz.ch (edge10.ethz.ch [82.130.75.186]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 0A67F1202EB for <regext@ietf.org>; Mon, 8 Apr 2019 03:28:51 -0700 (PDT)
Received: from mail260p.d.ethz.ch (172.31.52.69) by edge10.ethz.ch (82.130.75.186) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 8 Apr 2019 12:27:34 +0200
Received: from [130.59.18.153] (130.59.18.153) by mail260p.d.ethz.ch (172.31.52.69) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Mon, 8 Apr 2019 12:27:37 +0200
To: "Gould, James" <jgould@verisign.com>, "regext@ietf.org" <regext@ietf.org>
References: <afac0d26-e054-54a3-306b-5ec5a49fd489@switch.ch> <7597ff38-29ba-77e3-e093-524c5cb7123a@switch.ch> <878793C3-AE5B-4364-AA0A-572467EDB0D6@verisign.com>
From: Martin Casanova <martin.casanova@switch.ch>
Openpgp: preference=signencrypt
Autocrypt: addr=martin.casanova@switch.ch; keydata= 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 VAZcZu9m6I6DIgR9WXEy
Message-ID: <fa8f12c3-851b-d29a-969d-605120704ed6@switch.ch>
Date: Mon, 08 Apr 2019 12:27:36 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1
MIME-Version: 1.0
In-Reply-To: <878793C3-AE5B-4364-AA0A-572467EDB0D6@verisign.com>
Content-Type: multipart/alternative; boundary="------------D21F031162F20487944DE12F"
Content-Language: en-US
X-Originating-IP: [130.59.18.153]
X-ClientProxiedBy: mailm114.d.ethz.ch (129.132.139.6) To mail260p.d.ethz.ch (172.31.52.69)
X-TM-SNTS-SMTP: 83ACD4A3F5637CA379766EAE300858D306B32829096412E644F8FD24E25A34212000:8
Archived-At: <https://mailarchive.ietf.org/arch/msg/regext/44u_MIj_v418kDiThE71OSM6PSo>
Subject: Re: [regext] review of draft-ietf-regext-login-security-03
X-BeenThere: regext@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Registration Protocols Extensions <regext.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/regext>, <mailto:regext-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/regext/>
List-Post: <mailto:regext@ietf.org>
List-Help: <mailto:regext-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/regext>, <mailto:regext-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 08 Apr 2019 10:29:02 -0000

Jim

Below my comments. Thanks.

MC

On 04.04.19 00:20, Gould, James wrote:
>
> Martin,
>
>  
>
> Thank you for doing a detailed review of
> draft-ietf-regext-login-security.  I provide my responses to your
> feedback embedded below.
>
>   
>
> —
>
>  
>
> JG
>
>
> cid:image001.png@01D255E2.EB933A30
>
> *James Gould
> *Distinguished Engineer
> jgould@Verisign.com
>
> 703-948-3271
> 12061 Bluemont Way
> Reston, VA 20190
>
> Verisign.com <http://verisigninc.com/>
>
>  
>
> *From: *regext <regext-bounces@ietf.org> on behalf of Martin Casanova
> <martin.casanova@switch.ch>
> *Date: *Tuesday, March 26, 2019 at 1:56 PM
> *To: *"regext@ietf.org" <regext@ietf.org>
> *Subject: *[EXTERNAL] [regext] review of
> draft-ietf-regext-login-security-03
>
>  
>
> Jim
>
> Since we support that draft I started implementing and read it again
> more carefully. I have the following comments / feedback
>
> 1. (comment) Event type "cipher" or "tlsProtocol" :
>
> In case the client uses deprecated protocol or cipher we currently
> hang up the TLS connection immediately so there is no possibility to
> send a type "error" security event.
> At chapter 3.1 near "exDate" is written that "At expiry there MAY be
> an error to connect or MAY be an error to login." So in case of an
> error to connect you run in the same situation and will not be able to
> send back a "error" level event but thats OK. However it is useful to
> warn the client during a transition period when we know that we are
> going to disable a certain cipher or TLS protocol on a specific day in
> the future.
>
> JG – Yes, connectivity events like “cipher”, “tlsProtocol”, and
> “certificate” are really only useful when they are provided as a
> warning with an optional exDate to indicate when the event will result
> in a connection error.  The policies for the possible set of events
> can be defined using the Login Security Policy Extension
> (https://tools.ietf.org/html/draft-gould-regext-login-security-policy),
> which is an extension of the Registry Mapping
> (https://tools.ietf.org/html/draft-gould-carney-regext-registry).  The
> clients need to look for the security events in the login response to
> act on them.       
>
MC -Agreed.


> 2 . (comment) Event type “newPw”:
> Here we currently use  2306 “Parameter value policy error” and write
> in the <reason> of <extValue> element that the new password was too
> weak. 
> I guess we would use the loginSec Event in the future in case the
> extension was specified at login whether the pw was changed via
> login-security extension or not.
>
> I know that you have foreseen draft-gould-regext-login-security-policy
> to query about password complexity but I think for convenience of the
> registrar it would still be nice to somehow include the password
> requirement in the response even if it is redundant. Otherwise one has
> to implement draft-gould-regext-login-security-policy  at the same
> time or communicate the requirement out of band.
>
> Maybe like that
>
>    S:        <loginSec:event
>    S:          type=”newPW”
>    S:          value=”expression: (?=.*\d)(?=.*[a-zA-Z])(?=.*[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]) (?!^\s+) (?!.*\s+$)(?!.*\s{2,})^[\x20-\x7e]{16,128}$”
>    S:          level=”error”>
>    S:          New password does not meet complexity requirements
>    S:        </loginSec:event>
>    S:    <result code=”2200”>
>    S:      <msg>Authentication error</msg>
>
>
> Are you sure you want to return a 2200 and not a 2306 Parameter value
> policy error in this case (page 10). I don’t see a reason why this
> should be another return code with or without extension.
>
> JG – On the first part of your feedback, I’m not sure that we want to
> inject policy elements into the error response.  Of course the policy
> information could be embedded within the human readable message, such
> as below.  I don’t recommend the client parsing the human readable
> message for policy information, but this would be useful for logging
> and troubleshooting on the client-side.  One issue is that the client
> can only receive the password complexity expression upon an error. 
> It’s best to handle the password complexity expression out-of-band or
> via the Login Security Policy Extension
> (draft-gould-regext-login-security-policy) to enable the client to
> know about the policy prior to an error.      
>
>    S:        <loginSec:event
>    S:          type=”newPW”
>    S:          level=”error”>
>    S:          New password does not meet complexity requirement: (?=.*\d)(?=.*[a-zA-Z])(?=.*[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]) (?!^\s+) (?!.*\s+$)(?!.*\s{2,})^[\x20-\x7e]{16,128}$
>    S:        </loginSec:event>

MC - agreed:  - useful for logging and troubleshooting on the
client-side, shouldn't be parsed.. Generally I think error feedback
should be as indicative of the problem as possible so the registrar
would not open a ticket at the registry to ask why the error occurred or
how it could be prevented. The out of band documentation is a must
anyway so these tickets will be answered by RTFM! as in many cases :)
I guess this is a "nice to have" but I also don't see a problem with
including this piece of policy information. It's not a policy
information that is enforced by XML Schema or so..


> JG – On the second part of your feedback, I believe that the login
> should fail if an invalid new password is passed with a 2200
> “Authentication error”.  The use of 2200 is not normative, so the
> server could choose a different result code, such as 2306.  The Login
> Security Extension will provide more specific information associated
> with the error.  Are there thoughts from others related to which error
> result code (2200, 2306, or other) should be used for an invalid new
> password and whether it should be normative?       
>
MC - RFC 5730

      2200    "Authentication error"

              This response code MUST be returned when a server notes an
              error when validating client credentials.

So I think 2200 is OK if you see <newpw> already as client credentials.
However a client could get confused with 2200 thinking the error code
relates to the <pw> filed which is correct. (if it wasn't for the
<loginSec:event>) What is your current return code when pw complexity is
not OK without using loginSec extension ? Ours is 2306..

>
> 3. (question) Event type "stat" :
>
> How often would you send back this event
>
>    <loginSec:event
>      type="stat"
>      name="failedLogins"
>      level="warning"
>      value="100"
>      duration="P1D">
>      Excessive invalid daily logins
>    </loginSec:event>
>
> Only once with first successful login after the series of failed ones
> or for a whole day ? I suggest one time with first successful login.
>
> JG – My thought is that returning the statistical information should
> not be stateful, so that means that the interval would be up to the
> server (e.g., for a one day duration start calculating the statistic
> based on a start / end of midnight UTC), but all applicable events
> would be returned in all login responses.  I do not recommend the
> server keeping track of which events have been returned and which have
> not been returned.  What are your thoughts on this? 
>
MC -  Agreed that this should not be stateful and I wouldn't want to
persist anything for this. Currently we have a mechanism in place that
hangs up the existing session and blocks new TLS sessions for x seconds
when there were too many failed request in the past y seconds. We do
have a "sliding window" algorithm in place to determine whether a client
is currently blocked or nor not. We could use the same to inform at
every successful  login that a blocking event occurred in the last 24
hours (since now)


> 4. (question) In chapter 4.1 EPP <login> Command is written
>
> ..
>
> internal contiguous
>        whitespace that includes #x9 (tab), #xA (linefeed), #xD (carriage
>        return), and #x20 (space) is replaced with a single #x20 (space).
> ...
>
> Since this is "normal" XML parsing behavior should there not be
> reference to where this is described for general XML processing. (I
> don't know where that would be though)
>
> JG – The choice was to directly include the definition within the
> draft in place of referencing out.  I’m not aware of an RFC that can
> be referenced for the XML processing of an XML schema “token” type. 
> My recommendation is to leave the definition directly in the draft
> without an external reference.
>
MC - OK
>
> 5.  (suggestion) The element  <loginSec:userAgent> could be more
> structured to make it easier for the registry to parse the different
> fields and to give a hint to the registrar what information should be
> provided.
>
> Therefore I suggest  child elements for example
>
> <os>           Operating System
> <client>      Client technology (eg. java)
> <version> Client software version (eg. 1.8.0) etc.
>
> JG – If we were going to make the <loginSec:userAgent> structured, my
> recommendation is to handle it with the following definition:
>
>    <complexType name="userAgentType">
>
>     <sequence>
>
>       <element name="client" type="token"
>
>        minOccurs="0"/>
>
>       <element name="lang" type="token"
>
>        minOccurs="0"/>
>
>       <element name="os" type="token"
>
>        minOccurs="0"/>
>
>     </sequence>
>
>    </complexType>
>
> JG – Below would be an example structured <loginSec:userAgent> element:
>
>    <loginSec:userAgent>
>
>      <loginSec:client>EPP SDK 1.0.0</loginSec:client>
>
>      <loginSec:lang>Java 11.0.2</loginSec:lang>
>
>      <loginSec:os>x86_64 Mac OS X 10.21</loginSec:os>
>
>    </loginSec:userAgent>
>
> JG – What are your thoughts on the structured version of the
> <loginSec:userAgent> element.  If this works, I will revise the draft
> to support it. 
>
MC -  Maybe the "lang" field is a bit misleading since "lang" also
exists in RFC 5730 where it has another meaning.

<element name="lang" type="language"
          maxOccurs="unbounded"/>

Hopefully nobody would fill it out with "EN".. So maybe we could find
another terminology. How about "tec" for technology ?

The information  that would be interesting to us is

- Client application and version (eg. EPP SDK 1.0.0)
- Client technology  and version (eg. openjdk version "1.8.0_191" or
Perl or ?)
- Client OS and version (eg.|Distributor ID:    Ubuntu  Description:  
 Ubuntu 16.04.5 LTS)|)

So the version is important too to decide if a client is affected by
some security issues but maybe this would be an overkill to enforce /
"ask for" or not ?


Other than that I have currently no feedback - so looking forward to the
next next revision..


>
>  
>
> Thanks
>
>  
>
> Martin Casanova
>
>
>
> -- 
> --- 
> SWITCH 
> Martin Casanova, Domain Applications
> Werdstrasse 2, P.O. Box, 8021 Zurich, Switzerland 
> phone +41 44 268 15 55, direct +41 44 268 16 25
> martin.casanova@switch.ch <mailto:martin.casanova@switch.ch>, www.switch.ch <http://www.switch.ch> 
>  
> Working for a better digital world

-- 
--- 
SWITCH 
Martin Casanova, Domain Applications
Werdstrasse 2, P.O. Box, 8021 Zurich, Switzerland 
phone +41 44 268 15 55, direct +41 44 268 16 25
martin.casanova@switch.ch, www.switch.ch 
 
Working for a better digital world