All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paul Moore <paul.moore@hp.com>
To: Steffen Klassert <steffen.klassert@secunet.com>
Cc: linux-security-module@vger.kernel.org, selinux@tycho.nsa.gov
Subject: Re: [PATCH 07/10] selinux: Check receiving against sending interface on packet forwarding
Date: Wed, 23 Feb 2011 16:34:59 -0500	[thread overview]
Message-ID: <201102231635.00378.paul.moore@hp.com> (raw)
In-Reply-To: <20110222130409.GD20852@secunet.com>

On Tuesday, February 22, 2011 8:04:09 AM Steffen Klassert wrote:
> On Wed, Feb 16, 2011 at 03:32:40PM -0500, Paul Moore wrote:
> > On Mon, 2011-02-14 at 14:21 +0100, Steffen Klassert wrote:
> > > As it is, it is not possible to check in the forwarding and
> > > the postrouting hook whether a packet that is received via some
> > > network interface is allowed to be forwarded via some other network
> > > interface. With this patch we decode the security identifier on
> > > selinux_xfrm_decode_session to the sid of the incoming interface,
> > > if we have neither a secpath nor socket context, so this check is
> > > possible now. Also set the sid to SECINITSID_KERNEL if we have none
> > > of secpath, socket context and incoming interface as the packet
> > > must be kernel generated in this case.
> > > 
> > > Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
> > 
> > If you want to control which interface is allowed to forward to which
> > other interface, you should use good ol' iptables, not SELinux.
> 
> Well, I think the problem is that we can't use labled SA's on
> packet forwarding.
> 
> Consider the following: As it is, the sid of the labeled SA and the sid of
> the flow must be identical. Say we receive a plain IP packet that should be
> forwarded ...

For this argument I'm assuming "plain IP packet" == "IP packet without a peer 
label associated with it".

> ... IPsec transformed with a labeled SA.

Okay, I think that is our disconnect right there.  You are trying to send an 
unlabeled packet (peer label set to "unlabeled_t") over a labeled SA (peer 
label set to "foo_t") without any explicit relabel operation by the 
administrator.  This is a Very Bad Thing.

> Now __xfrm_route_forward() decodes the sid of the flow with
> selinux_xfrm_decode_session(). This packet has neither a secpath nor socket
> conext. So the sid of the flow is decoded to SECSID_NULL.

I suppose we probably should set the flow's label in this case to 
SECINITSID_UNLABELED instead of SECSID_NULL, that would be more consistent ... 
although we would probably need to make sure we don't break anything in 
selinux_xfrm_state_pol_flow_match().

> Then selinux_xfrm_state_pol_flow_match() enforces the sid of SA and flow to
> be identical. This in turn means, that the label of the SA must be
> SECSID_NULL.

Which makes sense to me.  If you are forwarding unlabeled packets across an 
IPsec gateway, the IPsec gateway should establish SAs which are also 
unlabeled.

> So I think we have to chane something if we want to use labeled SAs on
> packet forwarding, or do I miss something here?

I think so, look below.

> With this patch we would decode the sid of the flow to the sid of the
> receiving interface, so the used SA could have the same sid as the
> receiving interface.

I think the problem is that you believe the network interface's label becomes 
the peer label of unlabeled packets, that is not the case.  If you want to 
provide a network peer label to unlabeled packets you need to use NetLabel's 
fallback labeling mechanism which applies peer labels to what would otherwise 
be unlabeled packets (see an example at the link below).

I haven't (or can't remember) testing this in the case of labeled IPsec 
gateway connected to unlabeled, single label networks but I have tested it 
against a CIPSO gateway connected to unlabeled, single label networks.  If it 
doesn't work for you in the labeled IPsec case, this would be a bug and 
something we would need to address.

* http://paulmoore.livejournal.com/1758.html

--
paul moore
linux @ hp

--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.

  parent reply	other threads:[~2011-02-23 21:35 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20110214131651.GA15640@secunet.com>
2011-02-14 16:59 ` [PATCHSET RFC] selinux: rework labeled IPsec networking Paul Moore
     [not found]   ` <20110215121900.GA25769@secunet.com>
2011-02-16  0:02     ` Paul Moore
     [not found]       ` <20110221115403.GA20852@secunet.com>
2011-02-21 15:28         ` Paul Moore
     [not found] ` <20110214131739.GB15640@secunet.com>
2011-02-16 19:18   ` [PATCH 01/10] selinux: Fix check for xfrm selinux context algorithm Paul Moore
     [not found] ` <20110214131815.GC15640@secunet.com>
2011-02-16 19:34   ` [PATCH 02/10] selinux: Perform postroute access control checks after IPsec transfomations Paul Moore
     [not found]     ` <20110222112334.GB20852@secunet.com>
2011-02-23 21:02       ` Paul Moore
2011-02-28  7:29         ` Steffen Klassert
     [not found] ` <20110214131855.GD15640@secunet.com>
2011-02-16 19:39   ` [PATCH 03/10] selinux: Remove checks for xfrm transformations from selinux_xfrm_postroute_last Paul Moore
     [not found] ` <20110214131934.GE15640@secunet.com>
2011-02-16 19:46   ` [PATCH 04/10] selinux: Fix wrong checks for selinux_policycap_netpeer Paul Moore
     [not found] ` <20110214132009.GF15640@secunet.com>
2011-02-16 20:11   ` [PATCH 05/10] selinux: selinux_xfrm_decode_session check for socket sid Paul Moore
     [not found]     ` <20110222121143.GC20852@secunet.com>
2011-02-23 21:16       ` Paul Moore
2011-02-25 19:21         ` Joy Latten
2011-02-28 10:25           ` Steffen Klassert
2011-02-28  8:51         ` Steffen Klassert
     [not found] ` <20110214132049.GG15640@secunet.com>
2011-02-16 20:19   ` [PATCH 06/10] selinux: Fix packet forwarding checks on postrouting Paul Moore
     [not found] ` <20110214132122.GH15640@secunet.com>
2011-02-16 20:32   ` [PATCH 07/10] selinux: Check receiving against sending interface on packet forwarding Paul Moore
     [not found]     ` <20110222130409.GD20852@secunet.com>
2011-02-23 21:34       ` Paul Moore [this message]
2011-02-28  9:10         ` Steffen Klassert
     [not found] ` <20110214132157.GI15640@secunet.com>
2011-02-16 20:57   ` [PATCH 08/10] selinux: Fix handling of kernel generated packets on labeled IPsec Paul Moore
     [not found]     ` <20110222133150.GE20852@secunet.com>
2011-02-23 21:45       ` Paul Moore
2011-02-25 20:50         ` Joy Latten
2011-02-28 10:33         ` Steffen Klassert
2011-03-01 18:41           ` Paul Moore
     [not found] ` <20110214132312.GK15640@secunet.com>
2011-02-16 21:08   ` [PATCH 10/10] selinux: Perform xfrm checks for unlabeled access in any case Paul Moore
     [not found]     ` <20110222135217.GF20852@secunet.com>
2011-02-23 21:59       ` Paul Moore
2011-02-28 11:34         ` Steffen Klassert
2011-03-01 18:42           ` Paul Moore
     [not found] ` <20110214132234.GJ15640@secunet.com>
     [not found]   ` <1297889991.25079.46.camel@sifl>
2011-02-16 22:08     ` [PATCH 09/10] selinux: xfrm - notify users on dropped packets James Morris

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201102231635.00378.paul.moore@hp.com \
    --to=paul.moore@hp.com \
    --cc=linux-security-module@vger.kernel.org \
    --cc=selinux@tycho.nsa.gov \
    --cc=steffen.klassert@secunet.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.