Re: [PATCH v1 0/3] Introduce CAP_SYS_PERFMON capability for secure Perf users groups

Stephen Smalley
2019-12-12T14:24:17Z

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.