blob: 0a6376519742ef01ccab74a9171aa5cde59c71f7 [file] [log] [blame]
Brendan Gregg12989982016-09-14 08:15:09 -07001Demonstrations of capable, the Linux eBPF/bcc version.
2
3
4capable traces calls to the kernel cap_capable() function, which does security
5capability checks, and prints details for each call. For example:
6
7# ./capable.py
8TIME UID PID COMM CAP NAME AUDIT
922:11:23 114 2676 snmpd 12 CAP_NET_ADMIN 1
1022:11:23 0 6990 run 24 CAP_SYS_RESOURCE 1
1122:11:23 0 7003 chmod 3 CAP_FOWNER 1
1222:11:23 0 7003 chmod 4 CAP_FSETID 1
1322:11:23 0 7005 chmod 4 CAP_FSETID 1
1422:11:23 0 7005 chmod 4 CAP_FSETID 1
1522:11:23 0 7006 chown 4 CAP_FSETID 1
1622:11:23 0 7006 chown 4 CAP_FSETID 1
1722:11:23 0 6990 setuidgid 6 CAP_SETGID 1
1822:11:23 0 6990 setuidgid 6 CAP_SETGID 1
1922:11:23 0 6990 setuidgid 7 CAP_SETUID 1
2022:11:24 0 7013 run 24 CAP_SYS_RESOURCE 1
2122:11:24 0 7026 chmod 3 CAP_FOWNER 1
2222:11:24 0 7026 chmod 4 CAP_FSETID 1
2322:11:24 0 7028 chmod 4 CAP_FSETID 1
2422:11:24 0 7028 chmod 4 CAP_FSETID 1
2522:11:24 0 7029 chown 4 CAP_FSETID 1
2622:11:24 0 7029 chown 4 CAP_FSETID 1
2722:11:24 0 7013 setuidgid 6 CAP_SETGID 1
2822:11:24 0 7013 setuidgid 6 CAP_SETGID 1
2922:11:24 0 7013 setuidgid 7 CAP_SETUID 1
3022:11:25 0 7036 run 24 CAP_SYS_RESOURCE 1
3122:11:25 0 7049 chmod 3 CAP_FOWNER 1
3222:11:25 0 7049 chmod 4 CAP_FSETID 1
3322:11:25 0 7051 chmod 4 CAP_FSETID 1
3422:11:25 0 7051 chmod 4 CAP_FSETID 1
35[...]
36
37This can be useful for general debugging, and also security enforcement:
38determining a whitelist of capabilities an application needs.
39
40The output above includes various capability checks: snmpd checking
41CAP_NET_ADMIN, run checking CAP_SYS_RESOURCES, then some short-lived processes
42checking CAP_FOWNER, CAP_FSETID, etc.
43
44To see what each of these capabilities does, check the capabilities(7) man
45page and the kernel source.
46
47
48Sometimes capable catches itself starting up:
49
50# ./capable.py
51TIME UID PID COMM CAP NAME AUDIT
5222:22:19 0 21949 capable.py 21 CAP_SYS_ADMIN 1
5322:22:19 0 21949 capable.py 21 CAP_SYS_ADMIN 1
5422:22:19 0 21949 capable.py 21 CAP_SYS_ADMIN 1
5522:22:19 0 21949 capable.py 21 CAP_SYS_ADMIN 1
5622:22:19 0 21949 capable.py 21 CAP_SYS_ADMIN 1
5722:22:19 0 21949 capable.py 21 CAP_SYS_ADMIN 1
5822:22:19 0 21952 run 24 CAP_SYS_RESOURCE 1
59[...]
60
61These are capability checks from BPF and perf_events syscalls.
62
63
64USAGE:
65
66# ./capable.py -h
67usage: capable.py [-h] [-v] [-p PID]
68
69Trace security capability checks
70
71optional arguments:
72 -h, --help show this help message and exit
73 -v, --verbose include non-audit checks
74 -p PID, --pid PID trace this PID only
75
76examples:
77 ./capable # trace capability checks
78 ./capable -v # verbose: include non-audit checks
79 ./capable -p 181 # only trace PID 181