Re: [radext] Secure COA

Alan DeKok <aland@deployingradius.com> Tue, 24 March 2015 15:42 UTC

Return-Path: <aland@deployingradius.com>
X-Original-To: radext@ietfa.amsl.com
Delivered-To: radext@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C59DE1A8934 for <radext@ietfa.amsl.com>; Tue, 24 Mar 2015 08:42:25 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level:
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9] autolearn=ham
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 EpMTIVHaZSQB for <radext@ietfa.amsl.com>; Tue, 24 Mar 2015 08:42:21 -0700 (PDT)
Received: from power.freeradius.org (power.freeradius.org [195.154.231.44]) by ietfa.amsl.com (Postfix) with ESMTP id 88FD31A8A7F for <radext@ietf.org>; Tue, 24 Mar 2015 08:42:11 -0700 (PDT)
Received: from localhost (localhost [127.0.0.1]) by power.freeradius.org (Postfix) with ESMTP id 02C2B2240853; Tue, 24 Mar 2015 16:42:11 +0100 (CET)
X-Virus-Scanned: Debian amavisd-new at power.freeradius.org
Received: from power.freeradius.org ([127.0.0.1]) by localhost (power.freeradius.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qoia9_je3KJg; Tue, 24 Mar 2015 16:42:10 +0100 (CET)
Received: from dhcp-a5d0.meeting.ietf.org (dhcp-a5d0.meeting.ietf.org [31.133.165.208]) by power.freeradius.org (Postfix) with ESMTPSA id 99C092240363; Tue, 24 Mar 2015 16:42:09 +0100 (CET)
Content-Type: text/plain; charset="windows-1252"
Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\))
From: Alan DeKok <aland@deployingradius.com>
In-Reply-To: <tsllhim8mqo.fsf_-_@mit.edu>
Date: Tue, 24 Mar 2015 05:42:07 -1000
Content-Transfer-Encoding: quoted-printable
Message-Id: <32EBB4F3-56D8-434B-83CD-9CD570A62F18@deployingradius.com>
References: <5502B836.5000100@restena.lu> <alpine.WNT.2.20.1.1503221133420.3600@SMURF> <9C712CB9-7834-4049-9318-54E769F7661D@deployingradius.com> <alpine.WNT.2.20.1.1503221518060.3600@SMURF> <2DB68EA1-97A6-4263-9E7F-9BD24B567C7A@deployingradius.com> <alpine.WNT.2.20.1.1503221852040.3600@SMURF> <5FA970CC-2E05-4EFC-8AE6-840D334B28E4@deployingradius.com> <alpine.WNT.2.20.1.1503230923000.3600@SMURF> <1A6EF1EA-3412-4AAA-9646-3FD18EC0C4E4@deployingradius.com> <tsl4mpbb8r6.fsf@mit.edu> <6C5BFB5E-133B-4D3A-AB80-81D1C0F9AE38@deployingradius.com> <tsllhim8mqo.fsf_-_@mit.edu>
To: Sam Hartman <hartmans@painless-security.com>
X-Mailer: Apple Mail (2.1878.6)
Archived-At: <http://mailarchive.ietf.org/arch/msg/radext/2my5nKT_GDu03UOohrD4J-ZLcFU>
Cc: radext@ietf.org, Peter Deacon <peterd@iea-software.com>
Subject: Re: [radext] Secure COA
X-BeenThere: radext@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: RADIUS EXTensions working group discussion list <radext.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/radext>, <mailto:radext-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/radext/>
List-Post: <mailto:radext@ietf.org>
List-Help: <mailto:radext-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/radext>, <mailto:radext-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 24 Mar 2015 15:42:25 -0000

  To back up a bit, most of the forgery problem can be avoided by noting that the Operator-NAS-Identifier is itself a unique key.  If the visited realm creates many values for the attribute, then guessing correct values is hard, and forgery is trivially detectable.

  i.e. if each user session has a different Operator-NAS-Identifier, then a home server can forge a CoA packet, but it will get detected by the visited realm as a forgery.  The proxies need to do nothing.

  The visited realm could simply track user sessions in a database (as they mostly do now), and create unique Operator-NAS-Identifiers for each user.  When receiving a CoA request, look up the identifier in a DB, and get the IP of the NAS from there.  Or, the visited realm could be stateless, and encrypt the real NAS IP address with a combination of a secret local key, and the destination realm.  This makes a unique (and secret) identifier for each realm, and for each NAS in the visited realm.

  Remember, all of these packets are sent within a trusted network.  The systems aren’t open to the wider internet, and there isn’t a requirement to protect against DoS attacks from every single IP on the planet.

  I view the forgery problem as something which is best dealt with by non-technical means.  *Detecting* forgery is a technical requirement.  But *preventing* forgery isn’t necessarily a requirement.

  i.e. it’s OK for the visited realm to detect a forged request, ignore it, and escalate the problem to an administrator.  The intermediate proxies don’t need to detect or prevent the forgery.  That’s a hard problem to solve.

On Mar 24, 2015, at 4:59 AM, Sam Hartman <hartmans@painless-security.com> wrote:
re: crypto keys

> It's much less obvious to me that this is untenible.
> We definitely have key distribution mechanisms that seem up to the task.
> This is especially true in deployments where the original access request
> travels through  the same operators as  the COA packet travels in
> reverse.
> In that case, operators can add/transform their own state, and need only
> manage keys within  their own domain.

  If we do want the proxies to get involved, we could use per-proxy encryption keys.

  Each proxy has it’s own secret key, K_p.  The proxy uses the key to encrypt the Operator-NAS-Identifier when proxying auth / acct packets to a home server.  It uses the same key to decrypt the Operator-NAS-Identifier when proxying CoA / Disconnect packets to the visited realm.  Forged packets from home servers get decrypted to nonsense, and the visited realm will reject the CoA packet.

  The reason this works is that no one but the visited realm can interpret Operator-NAS-Identifier.  Therefore, it’s safe to transform the value in a “conservative” or reversible way.

re: User-Name verification.
> This seems fairly weak to me.

  It’s not perfect, but it’s not wrong.  It’s a good idea to do, in any case.

> I'd be much more comfortable with a solution that took routing and
> session state into account.

  I agree.

  In the end, I think the solutions to this are pretty simple.  CoA proxies can protect themselves by doing reverse realm lookups on User-Name.  Visited realms can prevent forgery by using unique Operator-NAS-Identifiers within a large space.

  Alan DeKok.