Re: RFC: https://bugzilla.redhat.com/show_bug.cgi?id=1174405

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

 



On Sat, Jan 10, 2015 at 11:49:29AM -0500, Stephen Smalley wrote:
> This behavior has a) always been present in SELinux, b) documented in
> the original SELinux technical report and the LSM-based SELinux
> technical report, and c) discussed plenty of times before.  So you're
> free to disagree but it isn't new or hidden from view.  It was viewed
> as logically inconsistent and not useful to impose a restriction upon
> bind(2) to a port number in the local port range when such port
> numbers have no security semantics and can be obtained by any process
> that can create a socket just by connecting (TCP) or sending (UDP) on
> that socket.  At that time, the ipv4 code will cheerfully assign an
> available port number out of that local port range to the socket if it
> is unbound.  If you truly want to control port numbers in that range,
> it is not a mere matter of removing the exemption from the
> selinux_socket_bind hook but also introducing a new LSM hook inside
> the ipv4 code to keep trying until it finds a port number that is
> allowed.  The potential overhead of applying such checking could be
> non-trivial and would show up on connect() and sendto()/sendmsg()
> calls.  You are free to submit a patch to do exactly that, with
> performance measurements if you wish.

I can live with this "logical inconsistency", and other "gotchas" but i would prefer that tools/libraries like sesearch would some how communicate this.
It may be documented, and discussed but besides a handful of kernel coders and a few others, i bet not many are aware of this inconsistency, and other gotchas
If the tools would some how show that there is a special case, then policy authors would not be left totally in the dark but how would one implement that...

> 
> On Sat, Jan 10, 2015 at 4:56 AM, Dominick Grift <dac.override@xxxxxxxxx> wrote:
> > On Fri, 2015-01-09 at 22:02 -0500, Paul Moore wrote:
> >> I think there is a point of clarification that may help put everyone at
> >> ease... SELinux provides two permissions relevant to socket bind()
> >> operations, bind and name_bind. The name_bind operation controls the
> >> socket's ability to bind to a specific port, while the bind operation
> >> controls the ability of a domain to bind a socket.  Those of you who wish
> >> to restrict a domain from performing a socket bind() operation, regardless
> >> of the port, would likely find your answer with the socket:bind permission.
> >>
> >
> > Good to know but the socket bind access vector is checked on the domain
> > type and not on the port type
> >
> > Thus is you have a process with a requirement to bind a socket to a port
> > < ephemeral, then it is automatically also able listen on ports >=
> > ephemeral from an selinux pov
> >
> > Although this is good to know and in rare cases may be useful, it is in
> > my view indeed still a consolation prize at best
> >
> >> --
> >> paul moore
> >> www.paul-moore.com
> >>
> >>
> >>
> >> On January 9, 2015 5:24:22 PM eric gisse <jowr.pi@xxxxxxxxx> wrote:
> >>
> >> > I disagree.
> >> >
> >> > I've had to have technical discussions justifying my belief that
> >> > certain common things should be available to all domains such as
> >> > /dev/urandom and more recently /proc/sys/vm/overcommit_memory.
> >> >
> >> > Discussions around those reasonable defaults basically rotate around
> >> > the philsophical notion of least privilege.
> >> >
> >> > So seeing there's an entire swath of ports that programs can bind to
> >> > by default is crazytalk and blows that notion out of the water.
> >> >
> >> > Further, it is bad policy.
> >> >
> >> > Consider sshd, or any other daemon that does nothing but bind to a
> >> > port and listen for connections.
> >> >
> >> > It does not need the ability to bind to to anything other than its'
> >> > daemon port, not even epheremal ports. Yet it can, regardless of
> >> > policy considerations. Which is the underlying point here.
> >> >
> >> > If someone gains access to a server through a compromised service,
> >> > they can bind a backdoor to that epheremal range or at least exfil
> >> > data.
> >> >
> >> > This is bad, bad, bad and rather surprising because until it was
> >> > pointed out by this thread I would not have considered it possible due
> >> > to the...vehemence... in which least privilege has been upheld.
> >> >
> >> >
> >> >
> >> >
> >> > On Fri, Jan 9, 2015 at 3:52 PM, Stephen Smalley
> >> > <stephen.smalley@xxxxxxxxx> wrote:
> >> > > Ports in the local port range can be auto-assigned by the kernel to
> >> > > unbound sockets on first use.  So it makes no sense to control them,
> >> > > and there isn't even an LSM hook in the place where such auto-port
> >> > > selection occurs.  Controlling binding to ports is only useful when
> >> > > the port number is a "name" (i.e. a well-defined value that is
> >> > > expected to correspond to a specific service), to prevent spoofing of
> >> > > security-relevant services like sshd.
> >> > >
> >> > > On Fri, Jan 9, 2015 at 4:05 PM, Dominick Grift <dac.override@xxxxxxxxx>
> >> > wrote:
> >> > >> https://bugzilla.redhat.com/show_bug.cgi?id=1174405
> >> > >>
> >> > >> This is a inconsistency in SELinux
> >> > >>
> >> > >>
> >> > >>
> >> > >> _______________________________________________
> >> > >> Selinux mailing list
> >> > >> Selinux@xxxxxxxxxxxxx
> >> > >> To unsubscribe, send email to Selinux-leave@xxxxxxxxxxxxx.
> >> > >> To get help, send an email containing "help" to
> >> > Selinux-request@xxxxxxxxxxxxx.
> >> > > _______________________________________________
> >> > > Selinux mailing list
> >> > > Selinux@xxxxxxxxxxxxx
> >> > > To unsubscribe, send email to Selinux-leave@xxxxxxxxxxxxx.
> >> > > To get help, send an email containing "help" to
> >> > Selinux-request@xxxxxxxxxxxxx.
> >> > _______________________________________________
> >> > Selinux mailing list
> >> > Selinux@xxxxxxxxxxxxx
> >> > To unsubscribe, send email to Selinux-leave@xxxxxxxxxxxxx.
> >> > To get help, send an email containing "help" to Selinux-request@xxxxxxxxxxxxx.
> >>
> >>
> >> _______________________________________________
> >> Selinux mailing list
> >> Selinux@xxxxxxxxxxxxx
> >> To unsubscribe, send email to Selinux-leave@xxxxxxxxxxxxx.
> >> To get help, send an email containing "help" to Selinux-request@xxxxxxxxxxxxx.
> >
> >

-- 
Dominick Grift

Attachment: pgpoyyFxODlgG.pgp
Description: PGP signature

_______________________________________________
Selinux mailing list
Selinux@xxxxxxxxxxxxx
To unsubscribe, send email to Selinux-leave@xxxxxxxxxxxxx.
To get help, send an email containing "help" to Selinux-request@xxxxxxxxxxxxx.

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

  Powered by Linux