Home | History | Annotate | Download | only in tools
      1 Demonstrations of capable, the Linux eBPF/bcc version.
      2 
      3 
      4 capable traces calls to the kernel cap_capable() function, which does security
      5 capability checks, and prints details for each call. For example:
      6 
      7 # ./capable.py 
      8 TIME      UID    PID    COMM             CAP  NAME                 AUDIT
      9 22:11:23  114    2676   snmpd            12   CAP_NET_ADMIN        1
     10 22:11:23  0      6990   run              24   CAP_SYS_RESOURCE     1
     11 22:11:23  0      7003   chmod            3    CAP_FOWNER           1
     12 22:11:23  0      7003   chmod            4    CAP_FSETID           1
     13 22:11:23  0      7005   chmod            4    CAP_FSETID           1
     14 22:11:23  0      7005   chmod            4    CAP_FSETID           1
     15 22:11:23  0      7006   chown            4    CAP_FSETID           1
     16 22:11:23  0      7006   chown            4    CAP_FSETID           1
     17 22:11:23  0      6990   setuidgid        6    CAP_SETGID           1
     18 22:11:23  0      6990   setuidgid        6    CAP_SETGID           1
     19 22:11:23  0      6990   setuidgid        7    CAP_SETUID           1
     20 22:11:24  0      7013   run              24   CAP_SYS_RESOURCE     1
     21 22:11:24  0      7026   chmod            3    CAP_FOWNER           1
     22 22:11:24  0      7026   chmod            4    CAP_FSETID           1
     23 22:11:24  0      7028   chmod            4    CAP_FSETID           1
     24 22:11:24  0      7028   chmod            4    CAP_FSETID           1
     25 22:11:24  0      7029   chown            4    CAP_FSETID           1
     26 22:11:24  0      7029   chown            4    CAP_FSETID           1
     27 22:11:24  0      7013   setuidgid        6    CAP_SETGID           1
     28 22:11:24  0      7013   setuidgid        6    CAP_SETGID           1
     29 22:11:24  0      7013   setuidgid        7    CAP_SETUID           1
     30 22:11:25  0      7036   run              24   CAP_SYS_RESOURCE     1
     31 22:11:25  0      7049   chmod            3    CAP_FOWNER           1
     32 22:11:25  0      7049   chmod            4    CAP_FSETID           1
     33 22:11:25  0      7051   chmod            4    CAP_FSETID           1
     34 22:11:25  0      7051   chmod            4    CAP_FSETID           1
     35 [...]
     36 
     37 This can be useful for general debugging, and also security enforcement:
     38 determining a whitelist of capabilities an application needs.
     39 
     40 The output above includes various capability checks: snmpd checking
     41 CAP_NET_ADMIN, run checking CAP_SYS_RESOURCES, then some short-lived processes
     42 checking CAP_FOWNER, CAP_FSETID, etc.
     43 
     44 To see what each of these capabilities does, check the capabilities(7) man
     45 page and the kernel source.
     46 
     47 
     48 Sometimes capable catches itself starting up:
     49 
     50 # ./capable.py 
     51 TIME      UID    PID    COMM             CAP  NAME                 AUDIT
     52 22:22:19  0      21949  capable.py       21   CAP_SYS_ADMIN        1
     53 22:22:19  0      21949  capable.py       21   CAP_SYS_ADMIN        1
     54 22:22:19  0      21949  capable.py       21   CAP_SYS_ADMIN        1
     55 22:22:19  0      21949  capable.py       21   CAP_SYS_ADMIN        1
     56 22:22:19  0      21949  capable.py       21   CAP_SYS_ADMIN        1
     57 22:22:19  0      21949  capable.py       21   CAP_SYS_ADMIN        1
     58 22:22:19  0      21952  run              24   CAP_SYS_RESOURCE     1
     59 [...]
     60 
     61 These are capability checks from BPF and perf_events syscalls.
     62 
     63 
     64 USAGE:
     65 
     66 # ./capable.py -h
     67 usage: capable.py [-h] [-v] [-p PID]
     68 
     69 Trace security capability checks
     70 
     71 optional 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 
     76 examples:
     77     ./capable             # trace capability checks
     78     ./capable -v          # verbose: include non-audit checks
     79     ./capable -p 181      # only trace PID 181
     80