Re: [PATCH v1 0/3] Introduce CAP_SYS_PERFMON capability for secure Perf users groups
From: Stephen Smalley
Date: Thu Dec 12 2019 - 09:24:18 EST
On 12/11/19 3:36 PM, Andi Kleen wrote:
In this circumstances CAP_SYS_PERFMON looks like smart balanced advancement that
trade-offs between perf_events subsystem extensions, required level of control
and configurability of perf_events, existing users adoption effort, and it brings
security hardening benefits of decreasing attack surface for the existing users
and use cases.
I'm not 100% opposed to CAP_SYS_PERFMON. I am 100% opposed to new capabilities
that have a single use. Surely there are other CAP_SYS_ADMIN users that [cs]ould
be converted to CAP_SYS_PERFMON as well. If there is a class of system performance
privileged operations, say a dozen or so, you may have a viable argument.
perf events is not a single use. It has a bazillion of sub functionalities,
including hardware tracing, software tracing, pmu counters, software counters,
uncore counters, break points and various other stuff in its PMU drivers.
See it more as a whole quite heterogenous driver subsystem.
I guess CAP_SYS_PERFMON is not a good name because perf is much more
than just Perfmon. Perhaps call it CAP_SYS_PERF_EVENTS
That seems misleading since it isn't being checked for all perf_events
operations IIUC (CAP_SYS_ADMIN is still required for some?) and it is
even more specialized than CAP_SYS_PERFMON, making it less likely that
we could ever use this capability as a check for other kernel
performance monitoring facilities beyond perf_events.
I'm not as opposed to fine-grained capabilities as Casey is but I do
recognize that there are a limited number of available bits (although we
do have a fair number of unused ones currently given the extension to
64-bits) and that it would be easy to consume them all if we allocated
one for every kernel feature. That said, this might be a sufficiently
important use case to justify it.
Obviously I'd encourage you to consider leveraging SELinux as well but I
understand that you are looking for a solution that doesn't depend on a
distro using a particular LSM or a particular policy. I will note that
SELinux doesn't suffer from the limited bits problem because one can
always define a new SELinux security class with its own access vector
permissions bitmap, as has been done for the recently added LSM/SELinux
perf_event hooks.
I don't know who actually gets to decide when/if a new capability is
allocated. Maybe Serge and/or James as capabilities and LSM maintainers.
I have no objections to these patches from a SELinux POV.