Skip to contentSkip to conversation

perhaps obvious question: auditd and setuid/setgid?

DISCUSSION John Jasen 3 participants 5 messages Sep 2, 2015 – Sep 4, 2015

lore
Share & tools
lore

John Jasen

author
#0 lore raw

I'm currently testing auditd with rules for setuid or setgid binaries on the system.

I currently maintain the list via find, and pushing the results to a audit.rules file.

I'm hoping there's a cleaner way, perhaps by triggering on the appropriate syscall -- but have not discovered it.

Is there an easier method?

#1 lore raw
Quoted 10 lines

I'm currently testing auditd with rules for setuid or setgid binaries on the system.

I currently maintain the list via find, and pushing the results to a audit.rules file.

I'm hoping there's a cleaner way, perhaps by triggering on the appropriate syscall -- but have not discovered it.

Is there an easier method?

The find method is what I use (though I push it to a file in rules.d and then run augenrules, which for RHEL5/6 I just stole from RHEL7). Using find to generate these rules is actually in the text of, IIRC, at least one of the RHEL STIGs (6, draft of 7, possibly both), though not quite as automated as the way I do it.

--Ray

author
#2 lore raw

I was specifically wondering if I was missing the appropriate syscall for the use of setuid or setgid.

Quoted 1 line

From a brief examination and test, this appears to not be the case?

Quoted 18 lines · On 09/02/2015 10:32 PM, [email protected] wrote:
Quoted 10 lines

I'm currently testing auditd with rules for setuid or setgid binaries on the system.

I currently maintain the list via find, and pushing the results to a audit.rules file.

I'm hoping there's a cleaner way, perhaps by triggering on the appropriate syscall -- but have not discovered it.

Is there an easier method?

The find method is what I use (though I push it to a file in rules.d and then run augenrules, which for RHEL5/6 I just stole from RHEL7). Using find to generate these rules is actually in the text of, IIRC, at least one of the RHEL STIGs (6, draft of 7, possibly both), though not quite as automated as the way I do it.

--Ray

#3 lore raw
Quoted 4 lines · John Jasen

I was specifically wondering if I was missing the appropriate syscall for the use of setuid or setgid.

From a brief examination and test, this appears to not be the case?

There are a couple ways to do this. One is using the find method. However, that does not take into account file system based capabilities. In the lab I taught this week, the rules generator also included this:

filecap /bin 2>/dev/null | awk '{ printf "-a always,exit -F path=%s -F perm=x - F auid>=1000 -F auid!=4294967295 -F key=privileged\n", $1 }' >> priv.rules

filecap /sbin 2>/dev/null | awk '{ printf "-a always,exit -F path=%s -F perm=x -F auid>=1000 -F auid!=4294967295 -F key=privileged\n", $1 }' >> priv.rules

filecap /usr/bin 2>/dev/null | awk '{ printf "-a always,exit -F path=%s -F perm=x -F auid>=1000 -F auid!=4294967295 -F key=privileged\n", $1 }' >> priv.rules

filecap /usr/sbin 2>/dev/null | awk '{ printf "-a always,exit -F path=%s -F perm=x -F auid>=1000 -F auid!=4294967295 -F key=privileged\n", $1 }' >> priv.rules

But, if all you want is setuid, then you can use a rule like this instead of file watches:

-a always,exit -F arch=b64 -S execve -C uid!=euid -F euid=0

-Steve

Quoted 24 lines · On 09/02/2015 10:32 PM, [email protected] wrote:
Quoted 11 lines
Quoted 10 lines

I'm currently testing auditd with rules for setuid or setgid binaries on the system.

I currently maintain the list via find, and pushing the results to a audit.rules file.

I'm hoping there's a cleaner way, perhaps by triggering on the appropriate syscall -- but have not discovered it.

Is there an easier method?

Quoted 7 lines

The find method is what I use (though I push it to a file in rules.d and then run augenrules, which for RHEL5/6 I just stole from RHEL7). Using find to generate these rules is actually in the text of, IIRC, at least one of the RHEL STIGs (6, draft of 7, possibly both), though not quite as automated as the way I do it.

--Ray

--
Linux-audit mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/linux-audit

author
#4 lore raw
Quoted 9 lines · Steve Grubb
Quoted 4 lines · John Jasen

I was specifically wondering if I was missing the appropriate syscall for the use of setuid or setgid.

From a brief examination and test, this appears to not be the case?

There are a couple ways to do this. One is using the find method. However, that does not take into account file system based capabilities. In the lab I taught this week, the rules generator also included this:

<snipped> filecap examples to add LINUX_CAP executables to audit.rules.

Huh .... I did not think of that.

Quoted 4 lines

But, if all you want is setuid, then you can use a rule like this instead of file watches:

-a always,exit -F arch=b64 -S execve -C uid!=euid -F euid=0

Perfect! Thanks.

For future generations googling for answers, I did the following:

-a always,exit -F arch=x86_64 -S execve -C uid!=euid -F key=execpriv -a always,exit -F arch=x86_64 -S execve -C gid!=egid -F key=execpriv

I didn't pursue the last match, -F euid=0, as there may be cases where you wish to audit setuid usage, but the binary is not setuid to root.