hi Nikolay,

hopefully my e-mail is not too confusing, but I've played a little bit
with linux auditd logs today and checked their format. At least on my
laptop, it appears that the messages are always consecutive. In other
words, the messages with the same timestamp and eventID (the value
that is present in the msg=audit(...) field) are not interleaved with
messages that have different timestamps and eventIDs. I'm not sure you
have the same situation, but if your auditd logs share the same
property I have observed, I would not write event correlation rules
for joining lines together, but would do it with multiline patterns.

One possible strategy is the following: 1) normalize multiline auditd
messages into single-line messages, so that for each (timestamp,
eventID) tuple there is only one line, 2) write the rest of your rules
for the single line format

Let me illustrate this strategy with the following simple rules:

# normalize multiline auditd events
# join two last lines in the input buffer if their timestamps and
event ID's are identical
# (note that this rule will keep joining lines in sec input buffer
until a line appears
# that has different timestamp and/or event ID)
# Please note that the backreference construct \2 refers to data
previously matched
# by ([\d:.]+)

type=Single
ptype=RegExp2
pattern=^(type=\w+ msg=audit\(([\d:.]+)\):.*)\n(type=\w+ msg=audit\(\2\).*)
context=!AUDIT
desc=join two last lines if input buffer if their ID's are identical
action=rewrite 2 $1 $3

# normalize multiline auditd events
# after we have seen a line that has different timestamp and/or event ID,
# generate a synthetic event from all lines that have been joined previously

type=Single
ptype=RegExp2
pattern=^(type=\w+ msg=audit\([\d:.]+\):.+)\n
context=!AUDIT
desc=generate a synthetic event for normalized auditd message
action=cevent AUDIT 0 $1

# a simplistic example rule for processing normalized auditd events

type=Single
ptype=RegExp
pattern=^type=SYSCALL .* syscall=(?<syscall>\d+) .* type=CWD .*
cwd="(?<cwd>.+?)" type=PATH .* name="(?<name>.+?)" (?:inode|objtype)=
context=AUDIT
desc=process the normalized audit event
action=write test.log $+{syscall} $+{cwd} $+{name}


Apart from the above strategy, you could just write couple of Regexp4
and RegExp5 rules for handling all combinations of event sequences,
provided that the number of such combinations is reasonable. Please
make sure you are using backreferences to match the repeated
occurrence of the same timestamp and event ID, in order to match
multiple lines that indeed belong together. If you are worried about
performance, I would suggest to benchmark both approaches against your
input data (let sec run for a while and check its CPU consumption with
the SIGUSR1 signal).

Last note -- if messages that represent the same auditd event are
*not* consecutive and other lines can randomly appear in between these
messages, the above techniques will not work, and augmenting my
previous suggestion with one PairWithWindow rule might be a better
option.

kind regards,
risto

2016-11-18 22:53 GMT+02:00 Nikolay Srebniuk
<nikolay.srebn...@tonicforhealth.com>:
> Hi Risto,
>
> thank you for previous help and my apologize for disturbing you.
>
> I had thought I understand how to build new correlation for EXECVE messages.
> But I have faced again with next problem.
>
> I'm receiving these messages in order: SYSCALL, EXECVE, CWD and PATH.
>
> Depends on activity these message can arrive in such tuples:
>
> 1. SYSCALL, EXECVE, CWD and PATH.
>
> For example:
>
> type=SYSCALL msg=audit(1479314721.962:46624): arch=c000003e syscall=59
> success=yes exit=0 a0=1d69a20 a1=1d69eb0 a2=1d71f00 a3=7fffe789d4a0 items=2
> ppid=25160 pid=25161 auid=1003 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0
> sgid=0 fsgid=0 tty=pts1 ses=12 comm="file" exe="/usr/bin/file" key=(null)
> type=EXECVE msg=audit(1479314721.962:46624): argc=3 a0="file" a1="-b"
> a2="audit/audit.log"
> type=CWD msg=audit(1479314721.962:46624):  cwd="/var/log"
> type=PATH msg=audit(1479314721.962:46624): item=0 name="/bin/file"
> inode=25305623 dev=ca:01 mode=0100755 ouid=0 ogid=0 rdev=00:00
> objtype=NORMAL
> type=PATH msg=audit(1479314721.962:46624): item=1
> name="/lib64/ld-linux-x86-64.so.2" inode=1813292 dev=ca:01 mode=0100755
> ouid=0 ogid=0 rdev=00:00 objtype=NORMAL
>
> From message type=EXECVE need to extract field argc and all fields which
> start with A.
> Field argc indicate how mach arguments are described next
> FieldŃ– a[0-9]{1,} has arguments quoted in "".
>
> 2. SYSCALL, CWD and PATH (PATH with field item=1 is preferred) .
>
> For example:
>
> type=SYSCALL msg=audit(1479314815.075:46733): arch=c000003e syscall=2
> success=yes exit=4 a0=1e804e0 a1=200c2 a2=180 a3=3 items=2 ppid=16576
> pid=25277 auid=1003 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0
> tty=pts3 ses=16 comm="vi" exe="/usr/bin/vi" key=(null)
> type=CWD msg=audit(1479314815.075:46733):  cwd="/etc/default"
> type=PATH msg=audit(1479314815.075:46733): item=0 name="/etc/sec/"
> inode=37805 dev=ca:01 mode=040755 ouid=0 ogid=0 rdev=00:00 objtype=PARENT
> type=PATH msg=audit(1479314815.075:46733): item=1
> name="/etc/sec/.auditd-sec.conf.swp" inode=37853 dev=ca:01 mode=0100600
> ouid=0 ogid=0 rdev=00:00 objtype=CREATE
>
> So I can't find way to make my config working in this way. The way I think
> to resolve this task:
>
> 1. Wait for 2 messages: SYSCALL and EXECVE. If it matches then produce new
> event SYSCALL + EXECVE. If not then it produces only SYSCALL
>
> 2. Correlate ( SYSCALL+EXECVE or single SYSCALL ) with CWD event and produce
> event
>
> 3. Correlate ( SYSCALL+EXECVE + CWD | SYSCALL + CWD) with PATH event and
> send to socket.
>
>
> I have tried these rule types: PAIR, SINGLE, but no luck
>
> P.S. My previous EventGroup works well but makes some CPU load. Thats why I
> want to compare workload for Pair rule types without Contexts and with
> minimum varmaps
>
> Wbr,
> Nikolay
>
> ------------------------------------------------------------------------------
>
> _______________________________________________
> Simple-evcorr-users mailing list
> Simple-evcorr-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users
>

------------------------------------------------------------------------------
_______________________________________________
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users

Reply via email to