On Tuesday, July 16, 2019 12:00:05 PM EDT Casey Schaufler wrote:
 On 7/15/2019 3:55 PM, Steve Grubb wrote:
 > On Monday, July 15, 2019 5:28:56 PM EDT Paul Moore wrote:
 >> On Mon, Jul 15, 2019 at 3:37 PM Casey Schaufler <casey(a)schaufler-ca.com>
 > 
 > wrote:
 >>> On 7/15/2019 12:04 PM, Richard Guy Briggs wrote:
 >>>> On 2019-07-13 11:08, Steve Grubb wrote:
 >>>>> Hello,
 >>>>> 
 >>>>> On Friday, July 12, 2019 12:33:55 PM EDT Casey Schaufler wrote:
 >>>>>> Which of these options would be preferred for audit records
 >>>>>> when there are multiple active security modules?
 >>>>> 
 >>>>> I'd like to start out with what is the underlying problem that
 >>>>> results
 >>>>> in this? For example, we have pam. It has multiple modules each
 >>>>> having
 >>>>> a vote. If a module votes no, then we need to know who voted no and
 >>>>> maybe why. We normally do not need to know who voted yes.
 >>>>> 
 >>>>> So, in a stacked situation, shouldn't each module make its own
event,
 >>>>> if required, just like pam? And then log the attributes as it knows
 >>>>> them? Also, what model is being used? Does first module voting no
end
 >>>>> access voting? Or does each module get a vote even if one has
already
 >>>>> said no?
 >>>>> 
 >>>>> Also, we try to keep LSM subsystems separated by record type
numbers.
 >>>>> So, apparmour and selinux events are entirely different record
 >>>>> numbers
 >>>>> and formats. Combining everything into one record is going to be
 >>>>> problematic for reporting.
 >>>> 
 >>>> I was wrestling with the options below and was uncomfortable with all
 >>>> of them because none of them was guaranteed not to break existing
 >>>> parsers.
 >>> 
 >>> I too, am uncomfortable regarding record parsing.
 > 
 > The record parsing for this is good as long as we are smart about it. We
 > have to be able to do searches on subject and object labels. By default,
 > ausearch uses strstr() to find a fragment of a label. That would still
 > work the same with multiple labels if done right.
 > 
 >> If you can find me someone who is happy and comfortable with the
 >> current state of the audit record and/or formatting I would love to
 >> see them :)
 >> 
 >>>> Steve's answer is the obvious one, ideally allocating a seperate
range
 >>>> to each LSM with each message type having its own well defined format.
 >>> 
 >>> It doesn't address the issue of success records, or records
 >>> generated outside the security modules.
 >> 
 >> Yes, exactly.  The individual LSM will presumably will continue to
 >> generate their own audit records as they do today and I would imagine
 >> that the subject and object fields could remain as they do today for
 >> the LSM specific records.
 >> 
 >> The trick is the other records which are not LSM specific but still
 >> want to include subject and/or object information.  Unfortunately we
 >> are stuck with some tough limitations given the current audit record
 >> format and Steve's audit userspace tools;
 > 
 > Not really. We just need to approach the problem thinking about how to
 > make it work based on how things currently work. For example Casey had a
 > list of possible formats. Like this one:
 > 
 > Option 3:
 >         lsms=selinux,apparmor subj=x:y:z:s:c subj=a
 > 
 > I'd suggest something almost like that. The first field could be a map to
 > decipher the labels. Then we could have a comma separated list of labels.
 > 
 > lsms=selinux,apparmor subj=x:y:z:s:c,a
 
 Unless there's an objection I will use this format with
 a slight modification. Smack allows commas in labels, so
 using a bare comma can lead to ambiguity.
 
 lsms=smack,apparmor subj="TS/Alpha,Beta","a"
 
 It's more code change than some of the other options,
 but if it has the best chance of working with user space
 I'm game. 
Quoting has a specific meaning in audit fields. So, we really shouldn't do 
that. We can simply pick another field delimiter. I really don't care which it 
is as long as its illegal for use in a label. For example, we use 
#define AUDIT_KEY_SEPARATOR 0x01
to separate key fields. We can pick almost anything. (exclamation mark, semi-
colon, hash, plus symbol, tilde, 0x02, whatever) But it will need to be 
documented and put into the API so that everyone is aware of the convention.
-Steve