On Tue, Jul 16, 2019 at 5:46 PM Steve Grubb <sgrubb(a)redhat.com> wrote:
On Tuesday, July 16, 2019 5:25:21 PM EDT Paul Moore wrote:
...
> Agreed. While I'm not going to be on a specific Linux
release, I do
> believe that at some point in the future the LSM stacking work is
> going to land in Linus' tree. Perhaps you'll never see it Steve, but
> we need to prepare the code to handle it when it happens.
And I agree with that. I'm saying that if we push it all in subj= then it is
not a big penalty.
I'm going to disagree on that quite severely. As I mentioned
previously there isn't an easy or sane way to delimit between the
different LSM labels which means sorting out the multiplexed "subj"
field is going to be a post processing nightmare.
It saves major breakage. Every single event is required to
have a subj= field if its a MAC system.
All of the options we've discussed still record the LSM credentials in
the audit record; no one is talking about *not* recording the LSM
credentials. What we are discussing is *how* they are recorded.
By changing it to lsm_subj= it changes
the layout of every single event. And it make more to parse. And searching
the labels is worse because it has to iterate over a list of *_subj to match
it. This will hurt performance because it is for every single event.
I can almost guarantee that looking for subj/subj_X is going to be
much easier than safely parsing a multiplexed subj field. Not to
mention the multiplexed approach is just awful to read compared to
some of the other suggestions.
> For my own sanity, here is a quick summary of the constraints as
I
> currently see them, please feel free to add/disagree:
>
> * We can't have multiple "subj" fields in a single audit record.
> * The different LSMs all have different label formats and allowed
> characters. Further, a given label format may not be unique for a
> given LSM; for example, Smack could be configured with a subset of
> SELinux labels.
> * Steve's audit tools appear to require a "subj" and "obj"
fields for
> LSM information or else they break into tiny little pieces.
It changes all knowledge of where to look for things. And considering
considering that events could be aggregated from systems of different ages/
distributions, audit userspace will always have to be backwards compatible.
The subj_X approach is still backwards compatible, the difference is
that old versions of the tools get a "?" for the LSM creds which is a
rather sane way of indicating something is different. The multiplexed
approach would result in effectively garbage for the LSM creds unless
the higher layers of audit tooling are updated to understand the new
multiplexed format *and* *continuously* *updated* as new LSMs are
stacked because you need to understand each LSMs label format if you
are going to safely parse the multiplexed format. With the subj_X
approach the higher layer tooling simply needs to look for subj_X
fields when it sees "subj=?", and then it can safely extract/parse
each LSM's label without needing to understand or inspect the labels
themselves.
> What if we preserved the existing subj/obj fields in the case
where
> there is only one "major" LSM (SELinux, Smack, AppArmor, etc.):
>
> subj=<lsm_label>
>
> ... and in the case of multiple major LSMs we set the subj value to
> "?" and introduce new subj_X fields (as necessary) as discussed above:
>
> subj=? subj_smack=<smack_label> subj_selinux=<selinux_label> ...
>
> ... I believe that Steve's old/existing userspace tools would simply
> report "?"/unknown LSM credentials where new multi-LSM tools could
> report the multiple different labels.
Common Criteria as well as other standards require subject labels to be
searchable. So, changing behavior based on how many modules will still cause
problems with performance because I'll always have to assume it could be
either way and try both.
Once again, I believe that the subj_X approach is going to be faster
than safely parsing the multiplexed format.
--
paul moore
www.paul-moore.com