All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steve Grubb <sgrubb@redhat.com>
To: burn@swtf.dyndns.org
Cc: linux-audit@redhat.com
Subject: Re: New draft standards
Date: Sun, 27 Dec 2015 10:06:29 -0500	[thread overview]
Message-ID: <2221771.1qUNZOCjO5@x2> (raw)
In-Reply-To: <1451176259.3232.99.camel@swtf.swtf.dyndns.org>

On Sunday, December 27, 2015 11:30:59 AM Burn Alting wrote:
> I'll start with the statement I am happy to enhance the audit capability
> of Linux in any way (read that as a direct offer to help).

Thanks!

> > I'm somewhat interested in this. I'm just not sure where the best place to
> > do  all this is. Should it be in ausearch? Should it be in auditd? Should
> > it be in the remote logging plugin? Should audit utilities be modified to
> > accept this new form of input?
> 
> I've concentrated on ausearch as this is the only tool that
> comprehensively parses all existing audit records, both well formed and
> incorrectly formed. As you know auparse() has difficulties with
> mal-formed events.

Its main problem is dealing with interlaced records. The kernel does not 
serialize the audit stream. Whatever thread/process is executing at the moment 
can trigger a multi-part or single line event. For example:

type=SYSCALL msg=audit(1396522853.933:313): arch=c000003e syscall=313 
success=yes exit=0 a0=0 a1=41a396 a2=0 a3=0 items=1348 ppid=1263 pid=1264 
auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 
ses=4294967295 tty=(none) comm="modprobe" exe="/usr/bin/kmod" 
subj=system_u:system_r:insmod_t:s0 key="module-load"
type=LOGIN msg=audit(1396522854.227:460): pid=1523 uid=0 old auid=4294967295 
new auid=4325 old ses=4294967295 new ses=1 res=1
type=PATH msg=audit(1396522853.933:313): item=0 name=(null) inode=165 
dev=00:06 mode=040755 ouid=0 ogid=0 rdev=00:00 
obj=system_u:object_r:debugfs_t:s0 nametype=PARENT
type=PATH msg=audit(1396522853.933:313): item=1 name=(null) inode=11206 
dev=00:06 mode=040755 ouid=0 ogid=0 rdev=00:00 
obj=system_u:object_r:debugfs_t:s0 nametype=CREATE
type=LOGIN msg=audit(1396522854.315:461): pid=1518 uid=0 old auid=4294967295 
new auid=4325 old ses=4294967295 new ses=1 res=1
type=PATH msg=audit(1396522853.933:313): item=2 name=(null) inode=11206 
dev=00:06 mode=040755 ouid=0 ogid=0 rdev=00:00 
obj=system_u:object_r:debugfs_t:s0 nametype=PARENT

That should be 3 events.


> Ausearch also has the benefit of not effecting real time performance - I'd not
> like auditd have to wait on an external DNS service to timeout when
> attempting to resolve an 'addr' field.

Yeah, I'm thinking about just breaking down the SOCKADDR record into src/dst 
ip and src/dst port and then leaving it as that for now.

 
> Whatever is done, the code needs to be modular so that any utility, be
> it ausearch, auditd or an audispd plugin, or an independent auparse()
> based utility can make use of it.
> 
> Perhaps to address the higher level audit needs, we can provide an
> additional output format to my proposed changes for 'interpretive
> formatting' to be that of 'descriptive statements'. This would be
> similar to Windows auditing when it allows one to include 'Display
> Information' field which provides a 'human readable' description of the
> event data.

I'm not familiar with Windows auditing, but yeah.
 
> Perhaps the thrust should be
> a. address performance

I might have this solved. I'll send a separate email.

> b. ensure auparse() can better deal with mal-formed events

This would be a big contribution to the project.

> c. provide interpretative formatting

Yes. I think this a good order that has the right things in the right 
priority. There is one other issue that I need to tackle at some point. The 
auparse library does a lot of string manipulation. As such it winds up doing a 
lot of strtok/malloc/free. I'd like to see this run faster somehow. Perhaps 
moving to ustr could help. Or maybe having a list of pointers/lengths to avoid 
malloc/free. But auparse needs a performance boost, too.

-Steve

  reply	other threads:[~2015-12-27 15:06 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-08 19:22 New draft standards Steve Grubb
2015-12-08 19:58 ` Paul Moore
2015-12-08 20:25   ` Steve Grubb
2015-12-09  0:28     ` Paul Moore
2015-12-09  1:43       ` Burn Alting
2015-12-10 22:49         ` Steve Grubb
2015-12-10 22:59           ` Paul Moore
2015-12-15  5:11             ` Richard Guy Briggs
2015-12-10  4:35       ` Steve Grubb
2015-12-10 16:50         ` Paul Moore
2015-12-10 17:40         ` F Rafi
2015-12-14 15:34           ` Steve Grubb
2015-12-14 16:38             ` Joe Wulf
2015-12-14 17:01               ` Kevin.Dienst
2015-12-14 22:12                 ` Burn Alting
2015-12-15 13:46                   ` Steve Grubb
2015-12-18  5:12                     ` Burn Alting
2015-12-23 22:44                       ` Burn Alting
2015-12-26 16:38                         ` Steve Grubb
2015-12-27  0:30                           ` Burn Alting
2015-12-27 15:06                             ` Steve Grubb [this message]
2015-12-28  7:24                               ` Burn Alting
2015-12-29 19:28             ` LC Bruzenak
2015-12-08 20:49 ` Richard Guy Briggs
2015-12-08 21:28   ` Steve Grubb

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2221771.1qUNZOCjO5@x2 \
    --to=sgrubb@redhat.com \
    --cc=burn@swtf.dyndns.org \
    --cc=linux-audit@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.