From: Casey Schaufler <casey@schaufler-ca.com>
To: Paul Moore <paul.moore@hp.com>, selinux@tycho.nsa.gov
Cc: James Morris <jmorris@namei.org>,
Darrel Goeddel <DGoeddel@TrustedCS.com>,
Stephen Smalley <sds@tycho.nsa.gov>,
kaigai@ak.jp.nec.com, joe@nall.com,
Eric Paris <eparis@parisplace.org>
Subject: Re: [RFC 0/5] Static/fallback external labels for NetLabel
Date: Fri, 24 Aug 2007 12:02:00 -0700 (PDT) [thread overview]
Message-ID: <454500.99769.qm@web36612.mail.mud.yahoo.com> (raw)
In-Reply-To: <200708241231.23793.paul.moore@hp.com>
--- Paul Moore <paul.moore@hp.com> wrote:
> For those of you who are still paying attention to this thread you may have
> been wondering why it went quiet all of a sudden; well, the thread didn't go
> quiet, it went off-list.
Boo.
> ...
>
> * Packet labels (one or two)
>
> ... voting to continue with the two packet labels as they currently
> exist.
For SELinux this appears prudent. For those using other schemes
the difference may be less obvious, but I see you discuss that
more below.
> One thing that did arise during the discussion was the slow realization that
> the names for the two packet labels are probably not as descriptive as they
> should be and that has most likely led to a certain amount of confusion. In
> an effort to help make the two different label types more clear it was
> decided to start calling the external labels "peer labels" as the external
> label always represents the label of the peer who originated the packet and
> it's data. It was also decided to start calling the internal labels "secmark
>
> labels", while the compat_net mechanism still exists it is deprecated in
> favor of the SECMARK mechanism which is the only way to set/manipulate the
> internal label.
Hmm. In one case the name reflects the purpose (label of peer) and
in the other the name reflects the mechanism (label used in SECMARK).
I like the clarification of the former as it tells an LSM writer
what to use the label for, while I dislike the latter because it
does nothing to help me understand the intent of the mechanism.
> As a reminder, below is a definition of the two types of labels.
>
> Secmark, or internal, labels are essentially a means for integrating the
> traditional firewall rules with SELinux mandatory access controls.
Is it really intended that Secmark is an SELinux specific mechanism?
Yes, yes, I understand that SELinux is the only upstream LSM and all
that. If it is intended only as a component of SELinux going forward
regardless of alternative LSM availability maybe that should be more
explicit in the related documentation. I would personally be
disappointed if the mechanism were unavailable to other LSMs, but that
is of course your call.
> The
> secmark labels allow policy writers and security administrators to meet
> security goals similar to the following:
> "Only allow Apache to accept connections over tcp/80 from
> 192.168.0.0/24, restricting it to my local network and not
> the Big-Bad-Internet."
> -- or --
> "Only allow a particular instance of Firefox to connect to
> 1.2.3.4 over tcp/443, restricting it to my online banking
> site."
>
> Peer, or external, labels, furnished by NetLabel or labeled IPsec/XFRM,
> provide the domain/context/label of the process which generated the
> packet/data.
As I mentioned earlier, I like this definition because it describes
the intent of the facility and provides guidance to those who would
extend the facility or use it to other ends.
> The external labels allow policy writers and security
> administrators to meet security goals similar to the following:
> "This instance of Apache serves sensitive financial data and
> I only want specific clients/peers/domains to be able to access
> the data from this Apache instance."
> -- or --
> "I want to ensure that users connecting to the login server over
> a Secret connection run in a Secret domain."
>
> * Splitting the SECMARK field
>
> After it was agreed to continue using both the peer and secmark labels the
> discussion turned to how best to propagate those labels with the packet. As
> you probably know there is a 32 bit field already in the packet/sk_buff
> structure which is currently used exclusively by the secmark label. Once
> again, there were two approaches considered. The first was the continuation
> of the status quo where the secmark label is determined by looking directly
> at the secmark field in the sk_buff, "sk_buff.secmark", and the peer label is
>
> determined through a function call with the sk_buff as an
> argument, "peer_label(sk_buff)".
Would that be netlbl_peer_label(sk_buff), selinux_peer_label(sk_buff),
or security_peer_label(sk_buff)?
> The second idea was to divide the secmark ... the potential for
> introducing compatibility problems.
Yup.
> * Loopback/Localhost peer packet labeling
>
> This has been a long standing requirement which at first glance seems like it
>
> would be simple to achieve but in practice it has proven quiet difficult to
> implement. Current solutions to the problem involve using either
> NetLabel/CIPSO or labeled IPsec over loopback to provide peer labels,
> unfortunately both have drawbacks. NetLabel/CIPSO is currently limited to
> only conveying the MLS sensitivity label over the wire and only then for IPv4
>
> packets. Labeled IPsec can convey the full SELinux label/context of the peer
>
> for both IPv4 and IPv6 but is difficult to configure and introduces
> unnecessary overhead for packets that never leave the machine.
In the early Smack development I experimented with a scheme that
was very like CIPSO with the exception that it carried the MAC
information directly. That would be a smack_t for me, but it
would do u32s just fine. I abandoned it in favor of CIPSO to
reduce the changes outside of the LSM, but it would be easy to
resurrect. It has the disadvantage that you have to be careful
to avoid going off the box since there's no RFC supporting it.
I seem to recall there is an "approved" scheme lurking in the
networking header files, but I never persued that.
> The solution for this problem is tightly coupled with the decision to
> split/not-split the secmark field in the sk_buff structure. If the secmark
> field were split then the peer label could be set directly in the packet to
> the originating socket and then preserved across the loopback
> pseudo-interface for use on the receiving/inbound side. However, this does
> require splitting the secmark field and all that goes along with it (see
> above). If the secmark field were not split then the solution is to continue
>
> to develop the peer labeling mechanisms to support loopback labeling. Joy
> Latten from IBM has been working on better support for IPsec over loopback
> (although I'm not sure of it's current status) and I am steadily working
> towards a more full featured NetLabel which would be able to convey a full
> SELinux context over the wire/loopback.
So how big is a "full" context?
> * Packet flow control
>
> ...
>
> * Fallback labels
>
> The simple idea that started this whole discussion. The need for a usable
> peer label fallback mechanism is understood by everyone but the granularity
> with which peer fallback labels are assigned are still a source of debate.
> The idea is wether the granularity proposed in this NetLabel patchset which
> allows per-host/subnet granularity for each interface is enough, and if not
> is a very granular iptables/netfilter peer label assignment of fallback
> labels required? This topic did come up briefly some time ago on the public
> mailing list between Joshua Brindle and myself and we agreed that the
> granularity presented in this patchset is sufficient, however, not everyone
> feels this way so we are still discussing the best solution.
>
> As part of the peer fallback label discussion it became apparent to everyone
> that better integration/cooperation between the NetLabel and XFRM labeling
> mechanisms is needed. The strict separation worked well in the beginning but
>
> as we start to develop a richer set of functionality the two labeling
> mechanisms need to work better together to ensure the consistency of the
> network access controls. If the approach put forward in this patch set is
> agreed upon as the right way to solve the peer fallback problem I will be
> modifying it to take into account XFRM labels so that the NetLabel provided
> fallback peer label will only be used when there is no XFRM or NetLabel/CIPSO
>
> label on the packet. Further, work will be done to ensure that when both a
> XFRM and NetLabel/CIPSO label are present on an incoming packet that the
> labels are the same, otherwise the packet will be dropped/rejected.
It makes me uncomfortable to hear you say that XFRM is SELinux specific
and that it needs to be integrated with NetLabel, which currently isn't.
I know that Smack isn't upstream yet. Nonetheless, I would hate to see
underlying mechanisms that currently provide useful facilities become
SELinux specific.
Thank you.
Casey Schaufler
casey@schaufler-ca.com
--
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.
next prev parent reply other threads:[~2007-08-24 19:02 UTC|newest]
Thread overview: 105+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-07 14:14 [RFC 0/5] Static/fallback external labels for NetLabel Paul Moore
2007-08-07 14:14 ` [RFC 1/5] SELinux: add secctx_to_secid() LSM hook Paul Moore
2007-08-07 14:14 ` [RFC 2/5] NetLabel: Add secid token support to the NetLabel secattr struct Paul Moore
2007-08-07 14:14 ` [RFC 3/5] NetLabel: add IP address family information to the netlbl_skbuff_getattr() function Paul Moore
2007-08-07 14:14 ` [RFC 4/5] NetLabel: introduce static network labels for unlabeled connections Paul Moore
2007-08-07 14:14 ` [RFC 5/5] NetLabel: add auditing to the static labeling mechanism Paul Moore
2007-08-09 10:57 ` [RFC 0/5] Static/fallback external labels for NetLabel KaiGai Kohei
2007-08-09 11:48 ` Paul Moore
2007-08-09 12:42 ` Stephen Smalley
2007-08-09 13:29 ` Paul Moore
2007-08-09 13:54 ` Stephen Smalley
2007-08-09 14:48 ` Paul Moore
2007-08-09 15:49 ` James Morris
2007-08-09 16:01 ` Stephen Smalley
2007-08-09 22:35 ` Paul Moore
2007-08-09 13:59 ` James Morris
2007-08-09 14:50 ` Paul Moore
2007-08-09 15:13 ` Stephen Smalley
2007-08-09 14:41 ` Darrel Goeddel
2007-08-09 14:57 ` Paul Moore
2007-08-09 15:07 ` Darrel Goeddel
2007-08-09 15:32 ` Casey Schaufler
2007-08-09 15:39 ` Stephen Smalley
2007-08-09 16:16 ` Casey Schaufler
2007-08-09 14:09 ` Darrel Goeddel
2007-08-09 14:24 ` James Morris
2007-08-09 16:42 ` Darrel Goeddel
2007-08-09 19:20 ` Joe Nall
2007-08-09 19:47 ` Darrel Goeddel
2007-08-09 20:12 ` Joe Nall
2007-08-09 21:15 ` Stephen Smalley
2007-08-09 21:18 ` Darrel Goeddel
2007-08-09 22:48 ` Paul Moore
2007-08-09 20:17 ` Paul Moore
2007-08-09 14:53 ` Paul Moore
2007-08-09 16:08 ` Darrel Goeddel
2007-08-09 22:55 ` Darrel Goeddel
2007-08-10 16:49 ` James Morris
2007-08-14 14:47 ` Darrel Goeddel
2007-08-15 4:24 ` James Morris
2007-08-15 22:35 ` Darrel Goeddel
2007-08-16 15:04 ` James Morris
2007-08-24 16:31 ` Paul Moore
2007-08-24 18:34 ` James Morris
2007-08-24 19:02 ` Casey Schaufler [this message]
2007-08-24 19:49 ` Paul Moore
2007-08-24 20:17 ` James Morris
2007-08-24 20:24 ` Paul Moore
2007-08-24 20:47 ` Joshua Brindle
2007-08-24 20:42 ` Casey Schaufler
2007-08-24 21:10 ` Paul Moore
2007-08-24 21:37 ` Casey Schaufler
2007-08-24 20:29 ` Joshua Brindle
2007-08-28 14:03 ` Darrel Goeddel
2007-08-28 15:16 ` Paul Moore
2007-08-09 15:48 ` Casey Schaufler
2007-08-09 19:38 ` Paul Moore
-- strict thread matches above, loose matches on Subject: below --
2007-08-24 17:37 Venkat Yekkirala
2007-08-25 21:01 ` Paul Moore
2007-08-24 18:11 Venkat Yekkirala
2007-08-27 12:44 Venkat Yekkirala
2007-08-27 14:37 ` Paul Moore
2007-08-27 12:57 Venkat Yekkirala
2007-08-27 12:59 Venkat Yekkirala
2007-08-27 13:02 Venkat Yekkirala
2007-08-27 13:48 ` Paul Moore
2007-08-27 22:09 Venkat Yekkirala
2007-08-28 14:51 ` Paul Moore
2007-08-28 14:58 ` Darrel Goeddel
2007-08-28 15:12 ` Darrel Goeddel
2007-08-28 15:51 ` Paul Moore
2007-08-28 16:18 ` Joe Nall
2007-08-28 18:51 ` Paul Moore
2007-08-28 19:10 ` Joe Nall
2007-08-28 19:08 ` Stephen Smalley
2007-08-28 19:48 ` Joshua Brindle
2007-08-28 22:26 ` Joe Nall
2007-08-29 0:16 ` Joshua Brindle
2007-08-29 3:45 ` Joshua Brindle
2007-08-29 4:11 ` Joshua Brindle
2007-08-29 4:49 ` Joe Nall
2007-08-29 14:04 ` Joshua Brindle
2007-08-29 15:50 ` Joe Nall
2007-08-29 16:31 ` Joshua Brindle
2007-08-29 12:21 ` Paul Moore
2007-08-29 14:26 ` Joshua Brindle
2007-08-29 14:56 ` Paul Moore
2007-08-29 15:08 ` Joshua Brindle
2007-08-29 16:55 ` Paul Moore
2007-08-28 17:23 ` Darrel Goeddel
2007-08-28 19:07 ` Paul Moore
2007-08-28 16:13 Venkat Yekkirala
2007-08-28 16:32 ` Joe Nall
2007-08-28 19:08 ` Paul Moore
2007-08-28 16:30 Venkat Yekkirala
2007-08-28 17:39 ` Darrel Goeddel
2007-08-28 19:36 ` Paul Moore
2007-08-28 19:26 ` Paul Moore
2007-08-28 18:02 Venkat Yekkirala
2007-08-28 19:47 ` Paul Moore
2007-08-29 15:07 Venkat Yekkirala
2007-08-29 15:29 Venkat Yekkirala
2007-08-29 15:45 ` Stephen Smalley
2007-08-29 16:15 Venkat Yekkirala
2007-08-29 16:41 ` Paul Moore
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=454500.99769.qm@web36612.mail.mud.yahoo.com \
--to=casey@schaufler-ca.com \
--cc=DGoeddel@TrustedCS.com \
--cc=eparis@parisplace.org \
--cc=jmorris@namei.org \
--cc=joe@nall.com \
--cc=kaigai@ak.jp.nec.com \
--cc=paul.moore@hp.com \
--cc=sds@tycho.nsa.gov \
--cc=selinux@tycho.nsa.gov \
/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.