Re: Clarification of labeled IPsec checks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Monday, May 06, 2013 09:50:04 AM Christopher J. PeBenito wrote:
> On 05/03/13 15:20, Paul Moore wrote:
> > On Friday, May 03, 2013 03:11:48 PM Christopher J. PeBenito wrote:
> >> I'm doing some spring cleaning on refpolicy, cleaning out some old
> >> unused/unnecessary networking permissions.  I'm trying to make sure I
> >> have the permissions checks straight, since labeled networking isn't
> >> common use.
> >> 
> >>  For labeled IPsec, we have the following permissions (assuming all
> >>  policy
> >> 
> >> capabilities are on--assume maximum checks):
> >> 
> >> netif: ingress/egress
> >> node: sendto/recvfrom
> >> peer: recv
> >> association: sendto/recvfrom
> >> 
> >> I'm told that association perms are checked in the following cases:
> >> 
> >> sendto: when a packet leaves the box (legacy only) and when a SA/flow is
> >> checked recvfrom: when an incoming packet is queued on a socket (legacy
> >> only)
> >> 
> >> Does "legacy only" mean the checks will eventually go away, or is it for
> >> a legacy IPsec configuration?
> > 
> > In this case "legacy" refers to a SELinux policy that doesn't have the
> > netpeer policy capability enabled.
> 
> So with the capability on, you can only get a sendto check for association,
> never recvfrom?

It might be worthwhile for you to look at the code, all the answers you're 
looking for are in there ...

The association:recvfrom check happens in selinux_xfrm_sock_rcv_skb() which is 
now a legacy function/hook.  The association:sendto check happens in 
selinux_xfrm_postroute_last() and selinux_xfrm_state_pol_flow_match(); the 
XFRM postroute hook is a legacy function and the flow_match hook is not.

The legacy XFRM sock_rcv_skb() hook is replaced by the peer:recv check in 
selinux_socket_sock_rcv_skb().  The legacy XFRM postroute hook is replaced by 
the checks in selinux_ip_postroute().

> Wouldn't it make more sense to have a peer send permission instead, going
> forward?

Huh?  Why?  To replace the association:sendto check in the XFRM 
pol_flow_match() hook?  I don't think so, there isn't any "peer" checking 
happening there, just matching SAs/policies.

Did you mean something else?  Or am I misunderstanding you?

> That way we can have the something more expected (send/recv for the same
> class), rather than peer:recv and association:sendto which seems confusing.

I think you may be misunderstanding the association:sendto check that is 
happening in the pol_flow_match() hook.  This is probably compounded a bit by 
the poor name for the permission, but it was has been there forever and 
unfortunately it isn't likely to change anytime soon ...

> > It has been a while since we introduced the netpeer policy capability so I
> > imagine we could start a process of deprecating policies that don't enable
> > it. We could dump a warning message if someone loads a policy with the
> > netpeer capability disabled and then after a few releases (how many?) we
> > could remove the legacy bits from the kernel and reject policies which
> > don't have the netpeer capability set.
> 
> The common case obviously is no labeling, and in that case, there wouldn't
> be checks.  So I suspect this wouldn't have any real problems.  My guess is
> systems that use this wouldn't be changing their OS very often, and when
> they do, it would be major jumps (e.g. RHEL6 to RHEL7), so they'd be
> anticipating changes like this.

Yeah, I agree.  I'll throw together a deprecation patch and toss it out so we 
can have a bit more of a discussion on this.

-- 
paul moore
security and virtualization @ redhat


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




[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux