Re: [RFC PATCH 1/1] libselinux: Revise userspace AVC avc_log() for auditable events.

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

 



On 9/15/20 9:34 AM, Stephen Smalley wrote:
On Tue, Sep 15, 2020 at 9:11 AM Chris PeBenito
<chpebeni@xxxxxxxxxxxxxxxxxxx> wrote:

I put up a PR for dbus-broker to revise its auditing:

https://github.com/bus1/dbus-broker/pull/240

Steve Grubb mentioned that there wasn't much useful info in terms of the audit
message itself, since it isn't key:value pairs.

Does that matter since it is all just stuffed as a string value for
the msg= field?

I'm looking to revise the avc_log() messages for SELINUX_ERROR,
SELINUX_SETENFORCE, and SELINUX_POLICYLOAD messages such that they
more closely reseble the kernel audits.

*This patch is _incomplete*; I implemented a few changes to get early feedback
on the direction I'm taking.  What seems potentially contentious is the
'lsm=selinux_uavc' and op= choices.

Yes, I don't see the point of using a different lsm= value than just
"selinux"; the fact that it is a userspace event should get reflected
in some other way, right?

Fair point. It's reflected in USER_MAC_POLICY_LOAD instead of MAC_POLICY_LOAD, as an example.


diff --git a/libselinux/src/avc_internal.c b/libselinux/src/avc_internal.c
index 572b2159..35ea59b6 100644
--- a/libselinux/src/avc_internal.c
+++ b/libselinux/src/avc_internal.c
@@ -59,14 +59,14 @@ int avc_process_setenforce(int enforcing)
         int rc = 0;

         avc_log(SELINUX_SETENFORCE,
-               "%s:  received setenforce notice (enforcing=%d)\n",
+               "%s:  op=setenforce lsm=selinux_uavc enforcing=%d res=1",
                 avc_prefix, enforcing);
         if (avc_setenforce)
                 goto out;
         avc_enforcing = enforcing;
         if (avc_enforcing && (rc = avc_ss_reset(0)) < 0) {
                 avc_log(SELINUX_ERROR,
-                       "%s:  cache reset returned %d (errno %d)\n",
+                       "%s:  op=cache_reset lsm=selinux_uavc rc=%d errno=%d res=0",
                         avc_prefix, rc, errno);

If we do this at all, I would think the op= would still be setenforce
and this would just be an error for it.

At this point we already audited success for the setenforce operation. Wouldn't it be confusing to have a op=setenforce res=1 and then immediately op=setenforce res=0?

Looking at the kernel, we aren't even checking avc_ss_reset() for
failure and none of the kernel avc callbacks ever return an error.

I'm not deeply familiar with the AVC intricacies. If the cache fails to clear, then there could be wrong cache entries, no? If so, I would argue that it's worthy of an audit. If not, then I agree that it's not auditable.


@@ -157,7 +157,7 @@ static int avc_netlink_receive(void *buf, unsigned buflen, int blocking)
                 return -1;
         }
         else if (rc < 1) {
-               avc_log(SELINUX_ERROR, "%s:  netlink poll: error %d\n",
+               avc_log(SELINUX_ERROR, "%s:  op=netlink_poll lsm=selinux_uavc errno=%d res=0",
                         avc_prefix, errno);
                 return rc;
         }

Not sure what to do with these; arguably they aren't audit events at
all, just error logging.

Perhaps the question is: are any of SELINUX_ERROR actually auditable? If so, it would seem the answer is to either add another log level for auditable errors. If not, then the few UAVC users that audit SELINUX_ERROR need to be fixed. Alternatively we could change these non-auditable SELINUX_ERRORs to SELINUX_WARNING, since admins can't do much about these in most (all?) cases.


Maybe we should add a log callback function to libselinux that UAVC users could optionally use. It would audit where appropriate and otherwise syslog/stderr the message. That would provide an upgrade path for consistent auditing while still allowing UAVC users the option to handle the log callback another way when desired. A another option would be to introduce a new callback specifically for auditing.

--
Chris PeBenito



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

  Powered by Linux