176e7fd84SAlexey Budankov.. _perf_security: 276e7fd84SAlexey Budankov 3902a8dccSAlexey BudankovPerf events and tool security 476e7fd84SAlexey Budankov============================= 576e7fd84SAlexey Budankov 676e7fd84SAlexey BudankovOverview 776e7fd84SAlexey Budankov-------- 876e7fd84SAlexey Budankov 9e85a198eSAlexey BudankovUsage of Performance Counters for Linux (perf_events) [1]_ , [2]_ , [3]_ 10e85a198eSAlexey Budankovcan impose a considerable risk of leaking sensitive data accessed by 11e85a198eSAlexey Budankovmonitored processes. The data leakage is possible both in scenarios of 12e85a198eSAlexey Budankovdirect usage of perf_events system call API [2]_ and over data files 13e85a198eSAlexey Budankovgenerated by Perf tool user mode utility (Perf) [3]_ , [4]_ . The risk 14e85a198eSAlexey Budankovdepends on the nature of data that perf_events performance monitoring 15e85a198eSAlexey Budankovunits (PMU) [2]_ and Perf collect and expose for performance analysis. 16e85a198eSAlexey BudankovCollected system and performance data may be split into several 17e85a198eSAlexey Budankovcategories: 1868570ca0SAlexey Budankov 19e85a198eSAlexey Budankov1. System hardware and software configuration data, for example: a CPU 20e85a198eSAlexey Budankov model and its cache configuration, an amount of available memory and 21e85a198eSAlexey Budankov its topology, used kernel and Perf versions, performance monitoring 22e85a198eSAlexey Budankov setup including experiment time, events configuration, Perf command 23e85a198eSAlexey Budankov line parameters, etc. 2468570ca0SAlexey Budankov 25e85a198eSAlexey Budankov2. User and kernel module paths and their load addresses with sizes, 26e85a198eSAlexey Budankov process and thread names with their PIDs and TIDs, timestamps for 27e85a198eSAlexey Budankov captured hardware and software events. 2868570ca0SAlexey Budankov 29e85a198eSAlexey Budankov3. Content of kernel software counters (e.g., for context switches, page 30e85a198eSAlexey Budankov faults, CPU migrations), architectural hardware performance counters 31e85a198eSAlexey Budankov (PMC) [8]_ and machine specific registers (MSR) [9]_ that provide 32e85a198eSAlexey Budankov execution metrics for various monitored parts of the system (e.g., 33e85a198eSAlexey Budankov memory controller (IMC), interconnect (QPI/UPI) or peripheral (PCIe) 34e85a198eSAlexey Budankov uncore counters) without direct attribution to any execution context 35e85a198eSAlexey Budankov state. 3668570ca0SAlexey Budankov 37e85a198eSAlexey Budankov4. Content of architectural execution context registers (e.g., RIP, RSP, 38e85a198eSAlexey Budankov RBP on x86_64), process user and kernel space memory addresses and 39e85a198eSAlexey Budankov data, content of various architectural MSRs that capture data from 40e85a198eSAlexey Budankov this category. 4168570ca0SAlexey Budankov 42e85a198eSAlexey BudankovData that belong to the fourth category can potentially contain 43e85a198eSAlexey Budankovsensitive process data. If PMUs in some monitoring modes capture values 44e85a198eSAlexey Budankovof execution context registers or data from process memory then access 45902a8dccSAlexey Budankovto such monitoring modes requires to be ordered and secured properly. 46902a8dccSAlexey BudankovSo, perf_events performance monitoring and observability operations are 47902a8dccSAlexey Budankovthe subject for security access control management [5]_ . 4876e7fd84SAlexey Budankov 49902a8dccSAlexey Budankovperf_events access control 5076e7fd84SAlexey Budankov------------------------------- 5176e7fd84SAlexey Budankov 52e85a198eSAlexey BudankovTo perform security checks, the Linux implementation splits processes 53e85a198eSAlexey Budankovinto two categories [6]_ : a) privileged processes (whose effective user 54e85a198eSAlexey BudankovID is 0, referred to as superuser or root), and b) unprivileged 55e85a198eSAlexey Budankovprocesses (whose effective UID is nonzero). Privileged processes bypass 56e85a198eSAlexey Budankovall kernel security permission checks so perf_events performance 57e85a198eSAlexey Budankovmonitoring is fully available to privileged processes without access, 58e85a198eSAlexey Budankovscope and resource restrictions. 5976e7fd84SAlexey Budankov 60e85a198eSAlexey BudankovUnprivileged processes are subject to a full security permission check 61e85a198eSAlexey Budankovbased on the process's credentials [5]_ (usually: effective UID, 62e85a198eSAlexey Budankoveffective GID, and supplementary group list). 6376e7fd84SAlexey Budankov 64e85a198eSAlexey BudankovLinux divides the privileges traditionally associated with superuser 65e85a198eSAlexey Budankovinto distinct units, known as capabilities [6]_ , which can be 66e85a198eSAlexey Budankovindependently enabled and disabled on per-thread basis for processes and 67e85a198eSAlexey Budankovfiles of unprivileged users. 6876e7fd84SAlexey Budankov 69902a8dccSAlexey BudankovUnprivileged processes with enabled CAP_PERFMON capability are treated 70e85a198eSAlexey Budankovas privileged processes with respect to perf_events performance 71902a8dccSAlexey Budankovmonitoring and observability operations, thus, bypass *scope* permissions 72902a8dccSAlexey Budankovchecks in the kernel. CAP_PERFMON implements the principle of least 73902a8dccSAlexey Budankovprivilege [13]_ (POSIX 1003.1e: 2.2.2.39) for performance monitoring and 74902a8dccSAlexey Budankovobservability operations in the kernel and provides a secure approach to 75*a15cb2c1SColin Ian Kingperformance monitoring and observability in the system. 7676e7fd84SAlexey Budankov 77902a8dccSAlexey BudankovFor backward compatibility reasons the access to perf_events monitoring and 78902a8dccSAlexey Budankovobservability operations is also open for CAP_SYS_ADMIN privileged 79902a8dccSAlexey Budankovprocesses but CAP_SYS_ADMIN usage for secure monitoring and observability 80902a8dccSAlexey Budankovuse cases is discouraged with respect to the CAP_PERFMON capability. 81902a8dccSAlexey BudankovIf system audit records [14]_ for a process using perf_events system call 82902a8dccSAlexey BudankovAPI contain denial records of acquiring both CAP_PERFMON and CAP_SYS_ADMIN 83902a8dccSAlexey Budankovcapabilities then providing the process with CAP_PERFMON capability singly 84902a8dccSAlexey Budankovis recommended as the preferred secure approach to resolve double access 85902a8dccSAlexey Budankovdenial logging related to usage of performance monitoring and observability. 86902a8dccSAlexey Budankov 874cb3fb1cSAlexey BudankovPrior Linux v5.9 unprivileged processes using perf_events system call 884cb3fb1cSAlexey Budankovare also subject for PTRACE_MODE_READ_REALCREDS ptrace access mode check 894cb3fb1cSAlexey Budankov[7]_ , whose outcome determines whether monitoring is permitted. 904cb3fb1cSAlexey BudankovSo unprivileged processes provided with CAP_SYS_PTRACE capability are 914cb3fb1cSAlexey Budankoveffectively permitted to pass the check. Starting from Linux v5.9 924cb3fb1cSAlexey BudankovCAP_SYS_PTRACE capability is not required and CAP_PERFMON is enough to 934cb3fb1cSAlexey Budankovbe provided for processes to make performance monitoring and observability 944cb3fb1cSAlexey Budankovoperations. 9576e7fd84SAlexey Budankov 96e85a198eSAlexey BudankovOther capabilities being granted to unprivileged processes can 97e85a198eSAlexey Budankoveffectively enable capturing of additional data required for later 98e85a198eSAlexey Budankovperformance analysis of monitored processes or a system. For example, 99e85a198eSAlexey BudankovCAP_SYSLOG capability permits reading kernel space memory addresses from 100e85a198eSAlexey Budankov/proc/kallsyms file. 10176e7fd84SAlexey Budankov 102902a8dccSAlexey BudankovPrivileged Perf users groups 103e152c7b7SAlexey Budankov--------------------------------- 104e152c7b7SAlexey Budankov 1051dd88c19SAlexey BudankovMechanisms of capabilities, privileged capability-dumb files [6]_, 1061dd88c19SAlexey Budankovfile system ACLs [10]_ and sudo [15]_ utility can be used to create 1071dd88c19SAlexey Budankovdedicated groups of privileged Perf users who are permitted to execute 1081dd88c19SAlexey Budankovperformance monitoring and observability without limits. The following 1091dd88c19SAlexey Budankovsteps can be taken to create such groups of privileged Perf users. 110e152c7b7SAlexey Budankov 111e85a198eSAlexey Budankov1. Create perf_users group of privileged Perf users, assign perf_users 112e85a198eSAlexey Budankov group to Perf tool executable and limit access to the executable for 113e85a198eSAlexey Budankov other users in the system who are not in the perf_users group: 114e152c7b7SAlexey Budankov 115e152c7b7SAlexey Budankov:: 116e152c7b7SAlexey Budankov 117e152c7b7SAlexey Budankov # groupadd perf_users 118e152c7b7SAlexey Budankov # ls -alhF 119e152c7b7SAlexey Budankov -rwxr-xr-x 2 root root 11M Oct 19 15:12 perf 120e152c7b7SAlexey Budankov # chgrp perf_users perf 121e152c7b7SAlexey Budankov # ls -alhF 122e152c7b7SAlexey Budankov -rwxr-xr-x 2 root perf_users 11M Oct 19 15:12 perf 123e152c7b7SAlexey Budankov # chmod o-rwx perf 124e152c7b7SAlexey Budankov # ls -alhF 125e152c7b7SAlexey Budankov -rwxr-x--- 2 root perf_users 11M Oct 19 15:12 perf 126e152c7b7SAlexey Budankov 127e85a198eSAlexey Budankov2. Assign the required capabilities to the Perf tool executable file and 128902a8dccSAlexey Budankov enable members of perf_users group with monitoring and observability 129e85a198eSAlexey Budankov privileges [6]_ : 130e152c7b7SAlexey Budankov 131e152c7b7SAlexey Budankov:: 132e152c7b7SAlexey Budankov 133902a8dccSAlexey Budankov # setcap "cap_perfmon,cap_sys_ptrace,cap_syslog=ep" perf 134902a8dccSAlexey Budankov # setcap -v "cap_perfmon,cap_sys_ptrace,cap_syslog=ep" perf 135e152c7b7SAlexey Budankov perf: OK 136e152c7b7SAlexey Budankov # getcap perf 137902a8dccSAlexey Budankov perf = cap_sys_ptrace,cap_syslog,cap_perfmon+ep 138902a8dccSAlexey Budankov 1391dd88c19SAlexey BudankovIf the libcap [16]_ installed doesn't yet support "cap_perfmon", use "38" instead, 140902a8dccSAlexey Budankovi.e.: 141902a8dccSAlexey Budankov 142902a8dccSAlexey Budankov:: 143902a8dccSAlexey Budankov 144902a8dccSAlexey Budankov # setcap "38,cap_ipc_lock,cap_sys_ptrace,cap_syslog=ep" perf 145902a8dccSAlexey Budankov 146902a8dccSAlexey BudankovNote that you may need to have 'cap_ipc_lock' in the mix for tools such as 147902a8dccSAlexey Budankov'perf top', alternatively use 'perf top -m N', to reduce the memory that 148902a8dccSAlexey Budankovit uses for the perf ring buffer, see the memory allocation section below. 149902a8dccSAlexey Budankov 150902a8dccSAlexey BudankovUsing a libcap without support for CAP_PERFMON will make cap_get_flag(caps, 38, 151902a8dccSAlexey BudankovCAP_EFFECTIVE, &val) fail, which will lead the default event to be 'cycles:u', 152902a8dccSAlexey Budankovso as a workaround explicitly ask for the 'cycles' event, i.e.: 153902a8dccSAlexey Budankov 154902a8dccSAlexey Budankov:: 155902a8dccSAlexey Budankov 156902a8dccSAlexey Budankov # perf top -e cycles 157902a8dccSAlexey Budankov 158902a8dccSAlexey BudankovTo get kernel and user samples with a perf binary with just CAP_PERFMON. 159e152c7b7SAlexey Budankov 160e85a198eSAlexey BudankovAs a result, members of perf_users group are capable of conducting 161902a8dccSAlexey Budankovperformance monitoring and observability by using functionality of the 162902a8dccSAlexey Budankovconfigured Perf tool executable that, when executes, passes perf_events 163902a8dccSAlexey Budankovsubsystem scope checks. 164e152c7b7SAlexey Budankov 1651dd88c19SAlexey BudankovIn case Perf tool executable can't be assigned required capabilities (e.g. 1661dd88c19SAlexey Budankovfile system is mounted with nosuid option or extended attributes are 1671dd88c19SAlexey Budankovnot supported by the file system) then creation of the capabilities 1681dd88c19SAlexey Budankovprivileged environment, naturally shell, is possible. The shell provides 1691dd88c19SAlexey Budankovinherent processes with CAP_PERFMON and other required capabilities so that 1701dd88c19SAlexey Budankovperformance monitoring and observability operations are available in the 1711dd88c19SAlexey Budankovenvironment without limits. Access to the environment can be open via sudo 1721dd88c19SAlexey Budankovutility for members of perf_users group only. In order to create such 1731dd88c19SAlexey Budankovenvironment: 1741dd88c19SAlexey Budankov 1751dd88c19SAlexey Budankov1. Create shell script that uses capsh utility [16]_ to assign CAP_PERFMON 1761dd88c19SAlexey Budankov and other required capabilities into ambient capability set of the shell 1771dd88c19SAlexey Budankov process, lock the process security bits after enabling SECBIT_NO_SETUID_FIXUP, 1781dd88c19SAlexey Budankov SECBIT_NOROOT and SECBIT_NO_CAP_AMBIENT_RAISE bits and then change 1791dd88c19SAlexey Budankov the process identity to sudo caller of the script who should essentially 1801dd88c19SAlexey Budankov be a member of perf_users group: 1811dd88c19SAlexey Budankov 1821dd88c19SAlexey Budankov:: 1831dd88c19SAlexey Budankov 1841dd88c19SAlexey Budankov # ls -alh /usr/local/bin/perf.shell 1851dd88c19SAlexey Budankov -rwxr-xr-x. 1 root root 83 Oct 13 23:57 /usr/local/bin/perf.shell 1861dd88c19SAlexey Budankov # cat /usr/local/bin/perf.shell 1871dd88c19SAlexey Budankov exec /usr/sbin/capsh --iab=^cap_perfmon --secbits=239 --user=$SUDO_USER -- -l 1881dd88c19SAlexey Budankov 1891dd88c19SAlexey Budankov2. Extend sudo policy at /etc/sudoers file with a rule for perf_users group: 1901dd88c19SAlexey Budankov 1911dd88c19SAlexey Budankov:: 1921dd88c19SAlexey Budankov 1931dd88c19SAlexey Budankov # grep perf_users /etc/sudoers 1941dd88c19SAlexey Budankov %perf_users ALL=/usr/local/bin/perf.shell 1951dd88c19SAlexey Budankov 1961dd88c19SAlexey Budankov3. Check that members of perf_users group have access to the privileged 1971dd88c19SAlexey Budankov shell and have CAP_PERFMON and other required capabilities enabled 1981dd88c19SAlexey Budankov in permitted, effective and ambient capability sets of an inherent process: 1991dd88c19SAlexey Budankov 2001dd88c19SAlexey Budankov:: 2011dd88c19SAlexey Budankov 2021dd88c19SAlexey Budankov $ id 2031dd88c19SAlexey Budankov uid=1003(capsh_test) gid=1004(capsh_test) groups=1004(capsh_test),1000(perf_users) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 2041dd88c19SAlexey Budankov $ sudo perf.shell 2051dd88c19SAlexey Budankov [sudo] password for capsh_test: 2061dd88c19SAlexey Budankov $ grep Cap /proc/self/status 2071dd88c19SAlexey Budankov CapInh: 0000004000000000 2081dd88c19SAlexey Budankov CapPrm: 0000004000000000 2091dd88c19SAlexey Budankov CapEff: 0000004000000000 2101dd88c19SAlexey Budankov CapBnd: 000000ffffffffff 2111dd88c19SAlexey Budankov CapAmb: 0000004000000000 2121dd88c19SAlexey Budankov $ capsh --decode=0000004000000000 2131dd88c19SAlexey Budankov 0x0000004000000000=cap_perfmon 2141dd88c19SAlexey Budankov 2151dd88c19SAlexey BudankovAs a result, members of perf_users group have access to the privileged 2161dd88c19SAlexey Budankovenvironment where they can use tools employing performance monitoring APIs 2171dd88c19SAlexey Budankovgoverned by CAP_PERFMON Linux capability. 2181dd88c19SAlexey Budankov 219e85a198eSAlexey BudankovThis specific access control management is only available to superuser 220e85a198eSAlexey Budankovor root running processes with CAP_SETPCAP, CAP_SETFCAP [6]_ 221e85a198eSAlexey Budankovcapabilities. 222e152c7b7SAlexey Budankov 223902a8dccSAlexey BudankovUnprivileged users 22476e7fd84SAlexey Budankov----------------------------------- 22576e7fd84SAlexey Budankov 226902a8dccSAlexey Budankovperf_events *scope* and *access* control for unprivileged processes 227e85a198eSAlexey Budankovis governed by perf_event_paranoid [2]_ setting: 22876e7fd84SAlexey Budankov 22976e7fd84SAlexey Budankov-1: 230e85a198eSAlexey Budankov Impose no *scope* and *access* restrictions on using perf_events 231e85a198eSAlexey Budankov performance monitoring. Per-user per-cpu perf_event_mlock_kb [2]_ 232e85a198eSAlexey Budankov locking limit is ignored when allocating memory buffers for storing 233e85a198eSAlexey Budankov performance data. This is the least secure mode since allowed 234e85a198eSAlexey Budankov monitored *scope* is maximized and no perf_events specific limits 235e85a198eSAlexey Budankov are imposed on *resources* allocated for performance monitoring. 23676e7fd84SAlexey Budankov 23776e7fd84SAlexey Budankov>=0: 23876e7fd84SAlexey Budankov *scope* includes per-process and system wide performance monitoring 239e85a198eSAlexey Budankov but excludes raw tracepoints and ftrace function tracepoints 240e85a198eSAlexey Budankov monitoring. CPU and system events happened when executing either in 241e85a198eSAlexey Budankov user or in kernel space can be monitored and captured for later 242e85a198eSAlexey Budankov analysis. Per-user per-cpu perf_event_mlock_kb locking limit is 243e85a198eSAlexey Budankov imposed but ignored for unprivileged processes with CAP_IPC_LOCK 244e85a198eSAlexey Budankov [6]_ capability. 24576e7fd84SAlexey Budankov 24676e7fd84SAlexey Budankov>=1: 247e85a198eSAlexey Budankov *scope* includes per-process performance monitoring only and 248e85a198eSAlexey Budankov excludes system wide performance monitoring. CPU and system events 249e85a198eSAlexey Budankov happened when executing either in user or in kernel space can be 250e85a198eSAlexey Budankov monitored and captured for later analysis. Per-user per-cpu 251e85a198eSAlexey Budankov perf_event_mlock_kb locking limit is imposed but ignored for 252e85a198eSAlexey Budankov unprivileged processes with CAP_IPC_LOCK capability. 25376e7fd84SAlexey Budankov 25476e7fd84SAlexey Budankov>=2: 255e85a198eSAlexey Budankov *scope* includes per-process performance monitoring only. CPU and 256e85a198eSAlexey Budankov system events happened when executing in user space only can be 257e85a198eSAlexey Budankov monitored and captured for later analysis. Per-user per-cpu 258e85a198eSAlexey Budankov perf_event_mlock_kb locking limit is imposed but ignored for 259e85a198eSAlexey Budankov unprivileged processes with CAP_IPC_LOCK capability. 26076e7fd84SAlexey Budankov 261902a8dccSAlexey BudankovResource control 2629d87bbaeSAlexey Budankov--------------------------------- 2639d87bbaeSAlexey Budankov 2649d87bbaeSAlexey BudankovOpen file descriptors 2659d87bbaeSAlexey Budankov+++++++++++++++++++++ 2669d87bbaeSAlexey Budankov 267e85a198eSAlexey BudankovThe perf_events system call API [2]_ allocates file descriptors for 268e85a198eSAlexey Budankovevery configured PMU event. Open file descriptors are a per-process 269e85a198eSAlexey Budankovaccountable resource governed by the RLIMIT_NOFILE [11]_ limit 270e85a198eSAlexey Budankov(ulimit -n), which is usually derived from the login shell process. When 271e85a198eSAlexey Budankovconfiguring Perf collection for a long list of events on a large server 272e85a198eSAlexey Budankovsystem, this limit can be easily hit preventing required monitoring 273e85a198eSAlexey Budankovconfiguration. RLIMIT_NOFILE limit can be increased on per-user basis 274e85a198eSAlexey Budankovmodifying content of the limits.conf file [12]_ . Ordinarily, a Perf 275e85a198eSAlexey Budankovsampling session (perf record) requires an amount of open perf_event 276e85a198eSAlexey Budankovfile descriptors that is not less than the number of monitored events 277e85a198eSAlexey Budankovmultiplied by the number of monitored CPUs. 2789d87bbaeSAlexey Budankov 2799d87bbaeSAlexey BudankovMemory allocation 2809d87bbaeSAlexey Budankov+++++++++++++++++ 2819d87bbaeSAlexey Budankov 282e85a198eSAlexey BudankovThe amount of memory available to user processes for capturing 283e85a198eSAlexey Budankovperformance monitoring data is governed by the perf_event_mlock_kb [2]_ 284e85a198eSAlexey Budankovsetting. This perf_event specific resource setting defines overall 285e85a198eSAlexey Budankovper-cpu limits of memory allowed for mapping by the user processes to 286e85a198eSAlexey Budankovexecute performance monitoring. The setting essentially extends the 287e85a198eSAlexey BudankovRLIMIT_MEMLOCK [11]_ limit, but only for memory regions mapped 288e85a198eSAlexey Budankovspecifically for capturing monitored performance events and related data. 2899d87bbaeSAlexey Budankov 290e85a198eSAlexey BudankovFor example, if a machine has eight cores and perf_event_mlock_kb limit 291e85a198eSAlexey Budankovis set to 516 KiB, then a user process is provided with 516 KiB * 8 = 292e85a198eSAlexey Budankov4128 KiB of memory above the RLIMIT_MEMLOCK limit (ulimit -l) for 293e85a198eSAlexey Budankovperf_event mmap buffers. In particular, this means that, if the user 294e85a198eSAlexey Budankovwants to start two or more performance monitoring processes, the user is 295e85a198eSAlexey Budankovrequired to manually distribute the available 4128 KiB between the 296e85a198eSAlexey Budankovmonitoring processes, for example, using the --mmap-pages Perf record 297e85a198eSAlexey Budankovmode option. Otherwise, the first started performance monitoring process 298e85a198eSAlexey Budankovallocates all available 4128 KiB and the other processes will fail to 299e85a198eSAlexey Budankovproceed due to the lack of memory. 3009d87bbaeSAlexey Budankov 301e85a198eSAlexey BudankovRLIMIT_MEMLOCK and perf_event_mlock_kb resource constraints are ignored 302e85a198eSAlexey Budankovfor processes with the CAP_IPC_LOCK capability. Thus, perf_events/Perf 303e85a198eSAlexey Budankovprivileged users can be provided with memory above the constraints for 304e85a198eSAlexey Budankovperf_events/Perf performance monitoring purpose by providing the Perf 305e85a198eSAlexey Budankovexecutable with CAP_IPC_LOCK capability. 3069d87bbaeSAlexey Budankov 30776e7fd84SAlexey BudankovBibliography 30876e7fd84SAlexey Budankov------------ 30976e7fd84SAlexey Budankov 31076e7fd84SAlexey Budankov.. [1] `<https://lwn.net/Articles/337493/>`_ 31176e7fd84SAlexey Budankov.. [2] `<http://man7.org/linux/man-pages/man2/perf_event_open.2.html>`_ 31276e7fd84SAlexey Budankov.. [3] `<http://web.eece.maine.edu/~vweaver/projects/perf_events/>`_ 31376e7fd84SAlexey Budankov.. [4] `<https://perf.wiki.kernel.org/index.php/Main_Page>`_ 31476e7fd84SAlexey Budankov.. [5] `<https://www.kernel.org/doc/html/latest/security/credentials.html>`_ 31576e7fd84SAlexey Budankov.. [6] `<http://man7.org/linux/man-pages/man7/capabilities.7.html>`_ 31676e7fd84SAlexey Budankov.. [7] `<http://man7.org/linux/man-pages/man2/ptrace.2.html>`_ 31768570ca0SAlexey Budankov.. [8] `<https://en.wikipedia.org/wiki/Hardware_performance_counter>`_ 31868570ca0SAlexey Budankov.. [9] `<https://en.wikipedia.org/wiki/Model-specific_register>`_ 319e152c7b7SAlexey Budankov.. [10] `<http://man7.org/linux/man-pages/man5/acl.5.html>`_ 3209d87bbaeSAlexey Budankov.. [11] `<http://man7.org/linux/man-pages/man2/getrlimit.2.html>`_ 3219d87bbaeSAlexey Budankov.. [12] `<http://man7.org/linux/man-pages/man5/limits.conf.5.html>`_ 322902a8dccSAlexey Budankov.. [13] `<https://sites.google.com/site/fullycapable>`_ 323902a8dccSAlexey Budankov.. [14] `<http://man7.org/linux/man-pages/man8/auditd.8.html>`_ 3241dd88c19SAlexey Budankov.. [15] `<https://man7.org/linux/man-pages/man8/sudo.8.html>`_ 3251dd88c19SAlexey Budankov.. [16] `<https://git.kernel.org/pub/scm/libs/libcap/libcap.git/>`_ 326