tracing overhead

Jörg Zinke

Potsdam University Institute for Computer Science Operating Systems and Distributed Systems

Dresden, 2009/10/29 Outline

1 Introduction

2 System call

3 Related work

4

5 Systrace

6 Performance test

7 Conclusion and future work

Jörg Zinke (Potsdam University) System call tracing overhead Frame 2 of 31 Introduction Introduction

system call tracing is a common used technique for or applications which enforce security policies for debugging purposes the tracing is often done step-by-step or in conjunction with breakpoints for enforcing security policies usually the interception of system calls is required → modify, forbid or allow system calls

Jörg Zinke (Potsdam University) System call tracing overhead Frame 3 of 31 Introduction Introduction

system call tracing is a common used technique for debuggers or applications which enforce security policies for debugging purposes the tracing is often done step-by-step or in conjunction with breakpoints for enforcing security policies usually the interception of system calls is required → modify, forbid or allow system calls

Jörg Zinke (Potsdam University) System call tracing overhead Frame 3 of 31 Introduction Overview Overview

system call interception requires at least a kernel based implementation and an to trace usually, there is another process which triggers the tracing and does some actions before and maybe after the system call in addition the triggering requires some kind of registration at the kernel implementation, at least the PID of the application to trace is required commonly, kernel implementations provide mechanisms for reading processor registers → gives the possibility to modify arguments or even modify the data pointed to by arguments

Jörg Zinke (Potsdam University) System call tracing overhead Frame 4 of 31 Introduction Overview Overview

system call interception requires at least a kernel based implementation and an user space process to trace usually, there is another process which triggers the tracing and does some actions before and maybe after the system call in addition the triggering requires some kind of registration at the kernel implementation, at least the PID of the application to trace is required commonly, kernel implementations provide mechanisms for reading processor registers → gives the possibility to modify arguments or even modify the data pointed to by arguments

Jörg Zinke (Potsdam University) System call tracing overhead Frame 4 of 31 Introduction Overview Overhead

intercepting system calls involves additional overhead additional overhead can be ignored for the purpose of debugging but should be considered for security enforcing applications and other kind of applications

→ determine the additional overhead through measurements

Jörg Zinke (Potsdam University) System call tracing overhead Frame 5 of 31 Introduction Overview Overhead

intercepting system calls involves additional overhead additional overhead can be ignored for the purpose of debugging but should be considered for security enforcing applications and other kind of applications

→ determine the additional overhead through measurements

Jörg Zinke (Potsdam University) System call tracing overhead Frame 5 of 31 Introduction Background Background: server load balancing

Server 1

VIP [public] Server 2 Switch . . Internet Gateway/ . Dispatcher Server n

→ trace socket system calls of processes on backend servers to determine useful metrics and values for load balancing

Jörg Zinke (Potsdam University) System call tracing overhead Frame 6 of 31 Introduction Background Background: server load balancing

Server 1

VIP [public] Server 2 Switch . . Internet Gateway/ . Dispatcher Server n

→ trace socket system calls of processes on backend servers to determine useful metrics and values for load balancing

Jörg Zinke (Potsdam University) System call tracing overhead Frame 6 of 31 System call System call

interface between kernel and user space programs is defined by a set of system calls [Tan01] system calls vary from OS to OS but concepts tend to be similar system calls transfers the control to the OS similar to a function call which enters the kernel

→ system calls are a universal and fundamental mechanism

Jörg Zinke (Potsdam University) System call tracing overhead Frame 7 of 31 System call System call

interface between operating system kernel and user space programs is defined by a set of system calls [Tan01] system calls vary from OS to OS but concepts tend to be similar system calls transfers the control to the OS similar to a function call which enters the kernel

→ system calls are a universal and fundamental mechanism

Jörg Zinke (Potsdam University) System call tracing overhead Frame 7 of 31 System call System call implementation System call implementation

system call tracing implementations are usually use system calls too, for registering of PIDs from user space implementing a system call requires control transfer, often done through interrupts or traps modern architectures provide SYSCALL/SYSRET or SYSENTER/SYSEXIT instructions for fast control transfer [BC05] system call implementations have to take care about restricted rights and access control → e.g. open() has to check whether the file permissions and the owner match the issuing process

Jörg Zinke (Potsdam University) System call tracing overhead Frame 8 of 31 System call System call implementation System call implementation

system call tracing implementations are usually use system calls too, for registering of PIDs from user space implementing a system call requires control transfer, often done through interrupts or traps modern architectures provide SYSCALL/SYSRET or SYSENTER/SYSEXIT instructions for fast control transfer [BC05] system call implementations have to take care about restricted rights and access control → e.g. open() has to check whether the file permissions and the owner match the issuing process

Jörg Zinke (Potsdam University) System call tracing overhead Frame 8 of 31 System call System call interception System call interception

Three approaches for system call interception mentioned in [Pet97]:

1 kernel based system call interception implemented through a modified system kernel

2 using a modified system library to replace the default system calls (maybe using shared libraries and preload mechanisms)

3 using a trace process and a debugging interface like ptrace or systrace for system call interception of applications

Jörg Zinke (Potsdam University) System call tracing overhead Frame 9 of 31 System call Focus Focus

→ focus on stable implementations of the third approach in standard kernels on and OpenBSD, namely ptrace and systrace → microbenchmarks to determine overhead, issued through context switches between traced process and application → kernel tracer like are out of scope caused by background of server load balancing

Jörg Zinke (Potsdam University) System call tracing overhead Frame 10 of 31 System call Focus Focus

→ focus on stable implementations of the third approach in standard kernels on Linux and OpenBSD, namely ptrace and systrace → microbenchmarks to determine overhead, issued through context switches between traced process and application → kernel tracer like ktrace are out of scope caused by background of server load balancing

Jörg Zinke (Potsdam University) System call tracing overhead Frame 10 of 31 System call Focus Focus

→ focus on stable implementations of the third approach in standard kernels on Linux and OpenBSD, namely ptrace and systrace → microbenchmarks to determine overhead, issued through context switches between traced process and application → kernel tracer like ktrace are out of scope caused by background of server load balancing

Jörg Zinke (Potsdam University) System call tracing overhead Frame 10 of 31 System call Focus Focus

→ focus on stable implementations of the third approach in standard kernels on Linux and OpenBSD, namely ptrace and systrace → microbenchmarks to determine overhead, issued through context switches between traced process and application → kernel tracer like ktrace are out of scope caused by background of server load balancing

Jörg Zinke (Potsdam University) System call tracing overhead Frame 10 of 31 Related work Usage of system call tracing Debugging applications using system call tracing

well known GDB based on frysk DTrace on Solaris based on ptrace (FreeBSD/SunOS/System V)

→ various commonly used applications for debugging and tracing other processes are available

Jörg Zinke (Potsdam University) System call tracing overhead Frame 11 of 31 Related work Usage of system call tracing Debugging applications using system call tracing

well known GDB ftrace based on frysk DTrace on Solaris strace based on ptrace truss (FreeBSD/SunOS/System V)

→ various commonly used applications for debugging and tracing other processes are available

Jörg Zinke (Potsdam University) System call tracing overhead Frame 11 of 31 Related work Usage of system call tracing Security applications using system call tracing

AppArmor SELinux grsecurity systrace

→ various commonly used applications to limit application access and achieve Mandatory Access Control (MAC) are available

Jörg Zinke (Potsdam University) System call tracing overhead Frame 12 of 31 Related work Usage of system call tracing Security applications using system call tracing

AppArmor SELinux grsecurity systrace

→ various commonly used applications to limit application access and achieve Mandatory Access Control (MAC) are available

Jörg Zinke (Potsdam University) System call tracing overhead Frame 12 of 31 Related work Performance studies Performance system call interception

The performance overhead of a system call interception can be split into the following two parts [Chu]: cost of system call interception, for example passing control to the tracing process at every system call of the traced process cost of the analysis performed by the tracing process, for example determining whether the reported request for kernel service should be allowed every time the tracing process get invoked

Jörg Zinke (Potsdam University) System call tracing overhead Frame 13 of 31 Related work Performance studies Performance studies systrace

Command Real User System find /usr/src/ >/dev/null 30 0.2 0.3 systrace find /usr/src/ >/dev/null 42 1.2 3.8 gzip -9 test.bin 2.0 1.7 0.1 systrace gzip -9 test.bin 1.9 1.6 0.1

Table: Systrace overhead from [Pro02].

Jörg Zinke (Potsdam University) System call tracing overhead Frame 14 of 31 Related work Performance studies Other approaches

reducing the overhead of ptrace through subsets of system calls (policies) utrace and uprobe as replacement for ptrace lbox framework (more efficient than ptrace or systrace)

→ shortcomings in performance and overhead of ptrace and systrace require maybe completely different approaches

Jörg Zinke (Potsdam University) System call tracing overhead Frame 15 of 31 Related work Performance studies Other approaches

reducing the overhead of ptrace through subsets of system calls (policies) utrace and uprobe as replacement for ptrace lbox framework (more efficient than ptrace or systrace)

→ shortcomings in performance and overhead of ptrace and systrace require maybe completely different approaches

Jörg Zinke (Potsdam University) System call tracing overhead Frame 15 of 31 Ptrace Ptrace

ptrace system call and kernel implementation is available on Linux and OpenBSD and on various further operating systems the system call itself is not part of the POSIX standard both implementations, Linux and OpenBSD are similar, but the OpenBSD implementations lacks support of features like PTRACE_SYSCALL (only PTRACE_SINGLESTEP)

→ only the Linux implementation is considered in the following

Jörg Zinke (Potsdam University) System call tracing overhead Frame 16 of 31 Ptrace Ptrace

ptrace system call and kernel implementation is available on Linux and OpenBSD and on various further operating systems the system call itself is not part of the POSIX standard both implementations, Linux and OpenBSD are similar, but the OpenBSD implementations lacks support of features like PTRACE_SYSCALL (only PTRACE_SINGLESTEP)

→ only the Linux implementation is considered in the following

Jörg Zinke (Potsdam University) System call tracing overhead Frame 16 of 31 Ptrace Ptrace sequence Ptrace sequence

attach and detach via PTRACE_ATTACH and PTRACE_DETACH system call arguments attach means: tracing application becomes parent of the traced process detach restores original parent

→ main idea is: attach to another process identified by PID, start tracing and detach later

Jörg Zinke (Potsdam University) System call tracing overhead Frame 17 of 31 Ptrace Ptrace sequence Ptrace sequence

attach and detach via PTRACE_ATTACH and PTRACE_DETACH system call arguments attach means: tracing application becomes parent of the traced process detach restores original parent

→ main idea is: attach to another process identified by PID, start tracing and detach later

Jörg Zinke (Potsdam University) System call tracing overhead Frame 17 of 31 Ptrace Ptrace capabilities and options Ptrace capabilities and options

traced process stops on monitored event (system calls or single step) and sends SIGCHLD its parent a process can not be traced by two processes at the same time CAP_SYS_PTRACE capability flag is required to trace every process in system except without capability flag set only processes of the same owner are allowed to trace

→ tracing parent can read registers and data from the stopped traced process memory

Jörg Zinke (Potsdam University) System call tracing overhead Frame 18 of 31 Ptrace Ptrace capabilities and options Ptrace capabilities and options

traced process stops on monitored event (system calls or single step) and sends SIGCHLD signal its parent a process can not be traced by two processes at the same time CAP_SYS_PTRACE capability flag is required to trace every process in system except init without capability flag set only processes of the same owner are allowed to trace

→ tracing parent can read registers and data from the stopped traced process memory

Jörg Zinke (Potsdam University) System call tracing overhead Frame 18 of 31 Ptrace Ptrace drawbacks Ptrace drawbacks

ptrace does not allow monitoring of specific system calls, instead just all system calls are monitored → incurring at least two context switches per traced system call blocks the traced process on every system call it makes, therefore the tracing process needs to continue the child each time it is blocked considering that a tracing process might monitor more than one process, the overhead on the tracing process increases

Jörg Zinke (Potsdam University) System call tracing overhead Frame 19 of 31 Systrace Systrace

developed by Niels Provos term systrace refers to the application as well as to the system call and the according kernel implementation available for various operating systems, uses different kernel implementations depending on the operating system, for example, the systrace application uses ptrace on Linux

→ focus on the kernel based systrace implementation which is available in the OpenBSD Kernel

Jörg Zinke (Potsdam University) System call tracing overhead Frame 20 of 31 Systrace Systrace

developed by Niels Provos term systrace refers to the application as well as to the system call and the according kernel implementation available for various operating systems, uses different kernel implementations depending on the operating system, for example, the systrace application uses ptrace on Linux

→ focus on the kernel based systrace implementation which is available in the OpenBSD Kernel

Jörg Zinke (Potsdam University) System call tracing overhead Frame 20 of 31 Systrace Systrace sequence Systrace sequence

enforce policies on system calls user space process controls behavior through pseudo-device /dev/systrace and an based interface the ioctl interface together with the defined systrace messages achieve various tracing operations (similar to ptrace), like STRIOCIO for copying data in/out of the process being traced

→ systrace attaches to another process identified by PID first, start tracing them and detach later (similar to ptrace)

Jörg Zinke (Potsdam University) System call tracing overhead Frame 21 of 31 Systrace Systrace sequence Systrace sequence

enforce policies on system calls user space process controls behavior through pseudo-device /dev/systrace and an ioctl based interface the ioctl interface together with the defined systrace messages achieve various tracing operations (similar to ptrace), like STRIOCIO for copying data in/out of the process being traced

→ systrace attaches to another process identified by PID first, start tracing them and detach later (similar to ptrace)

Jörg Zinke (Potsdam University) System call tracing overhead Frame 21 of 31 Systrace Systrace policies Systrace policies

three policies can be assigned to system calls SYSTR_POLICY_PERMIT - immediately allow the system call SYSTR_POLICY_NEVER - forbids the system call SYSTR_POLICY_ASK - sends a message of the type SYSTR_MSG_ASK and puts the process to sleep until the according answer

→ besides the flexibility of systrace policies, they should be fast since basic policies SYSTR_POLICY_PERMIT and SYSTR_POLICY_NEVER are handled in kernel without asking user space (fast path)

Jörg Zinke (Potsdam University) System call tracing overhead Frame 22 of 31 Systrace Systrace policies Systrace policies

three policies can be assigned to system calls SYSTR_POLICY_PERMIT - immediately allow the system call SYSTR_POLICY_NEVER - forbids the system call SYSTR_POLICY_ASK - sends a message of the type SYSTR_MSG_ASK and puts the process to sleep until the according answer

→ besides the flexibility of systrace policies, they should be fast since basic policies SYSTR_POLICY_PERMIT and SYSTR_POLICY_NEVER are handled in kernel without asking user space (fast path)

Jörg Zinke (Potsdam University) System call tracing overhead Frame 22 of 31 Performance test Measurement environment Measurement environment

Dual Core Xeon 1.86 GHz in a dual-boot configuration running CentOS 5.2 for ptrace measurements and OpenBSD 4.3 for the systrace measurements all measurements gather the number of CPU cycles through the rdtsc register and all are repeated 51 times explictly to avoid cache effects the median is used to calculate the result from the 51 repetitions to obviate distortions

Jörg Zinke (Potsdam University) System call tracing overhead Frame 23 of 31 Performance test Measurement experiments Measurement experiments

first the number of CPU Cycles for the three single plain system calls open(), write() and close() are measured then the measurements are done again while tracing these system calls additional measurements are done for all three system calls in a sequence and again with an invalid file descriptor

Jörg Zinke (Potsdam University) System call tracing overhead Frame 24 of 31 Performance test Measurement Results Plain system calls

30000

25000

20000

15000 invalid valid file descriptor Cycles

10000

5000

0 open write close open write close

Figure: System calls with and without valid file descriptors.

Jörg Zinke (Potsdam University) System call tracing overhead Frame 25 of 31 Performance test Measurement Results Flapping effect

250000

200000

150000

write 100000 Cycles

50000

0 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 Rounds

Figure: Flapping for write() and ptrace with invalid file descriptor.

Jörg Zinke (Potsdam University) System call tracing overhead Frame 26 of 31 Performance test Measurement Results Overhead with valid file descriptors

350000 1146%

300000

250000

200000 671% 1579% overhead ptrace (wc) 2664% overhead ptrace (bc) 150000 overhead systrace Cycles

100000 338%

546% 434%434% 50000 372% 570% 206% 500%

0 open write close open write close

Figure: Overhead for ptrace and systrace with valid file descriptors.

Jörg Zinke (Potsdam University) System call tracing overhead Frame 27 of 31 Performance test Measurement Results Overhead with invalid file descripors

250000 1392%

200000

1726% 3586% 3844% 150000 overhead ptrace (wc) overhead ptrace (bc) 671% overhead systrace Cycles 100000 543%

562% 50000 976% 384% 794% 630% 660%

0 open write close open write close

Figure: Overhead for ptrace and systrace with invalid file descriptors.

Jörg Zinke (Potsdam University) System call tracing overhead Frame 28 of 31 Conclusion and future work Conclusion and future work

system call interception through systrace or ptrace is considered as slow a sequence of system calls is faster than all involved single system calls ptrace interface measurements show some strange flapping results, which are in the worst case scenario slower then the competitor measurements from systrace policy concept of systrace is considered to be faster and more flexible than ptrace overhead looks dramatically high

→ can be considered as negligible small for the sake of improved security and flexibility → further macrobenchmarks measurements in the field of self-adapting server load balancing have shown that the overhead can not be considered as negligible small therefore

Jörg Zinke (Potsdam University) System call tracing overhead Frame 29 of 31 Conclusion and future work Conclusion and future work

system call interception through systrace or ptrace is considered as slow a sequence of system calls is faster than all involved single system calls ptrace interface measurements show some strange flapping results, which are in the worst case scenario slower then the competitor measurements from systrace policy concept of systrace is considered to be faster and more flexible than ptrace overhead looks dramatically high

→ can be considered as negligible small for the sake of improved security and flexibility → further macrobenchmarks measurements in the field of self-adapting server load balancing have shown that the overhead can not be considered as negligible small therefore

Jörg Zinke (Potsdam University) System call tracing overhead Frame 29 of 31 Conclusion and future work Conclusion and future work

system call interception through systrace or ptrace is considered as slow a sequence of system calls is faster than all involved single system calls ptrace interface measurements show some strange flapping results, which are in the worst case scenario slower then the competitor measurements from systrace policy concept of systrace is considered to be faster and more flexible than ptrace overhead looks dramatically high

→ can be considered as negligible small for the sake of improved security and flexibility → further macrobenchmarks measurements in the field of self-adapting server load balancing have shown that the overhead can not be considered as negligible small therefore

Jörg Zinke (Potsdam University) System call tracing overhead Frame 29 of 31 Literature LiteratureI

Daniel Bovet and Marco Cesati. Understanding The Linux Kernel. Oreilly & Associates Inc, 3rd edition, 2005. Simon P. Chung. On the (Im)Practicality of System-Call-Based IDSs. http://www.cs.utexas.edu/users/phchung/publication.html. Accessed 09/04. Stefan Petri. Lastausgleich und Fehlertoleranz in Workstation-Clustern. Shaker Verlag, May 1997.

Jörg Zinke (Potsdam University) System call tracing overhead Frame 30 of 31 Literature LiteratureII

Niels Provos. Systrace Interactive Policy Generation for System Calls. http://www.citi.umich.edu/u/provos/papers/systrace-lsm/, July 2002. Libre Meeting, Bordeaux, France, accessed 09/04. Andrew S. Tanenbaum. Modern Operating Systems. Prentice Hall, 2001.

Jörg Zinke (Potsdam University) System call tracing overhead Frame 31 of 31