Network


Latest external collaboration on country level. Dive into details by clicking on the dots.

Hotspot


Dive into the research topics where Pieter Philippaerts is active.

Publication


Featured researches published by Pieter Philippaerts.


nasa formal methods | 2011

VeriFast: a powerful, sound, predictable, fast verifier for C and java

Bart Jacobs; Jan Smans; Pieter Philippaerts; Frédéric Vogels; Willem Penninckx; Frank Piessens

VeriFast is a prototype verification tool for single-threaded and multithreaded C and Java programs. In this paper, we first describe the basic symbolic execution approach in some formal detail. Then we zoom in on two technical aspects: the approach to permission accounting, including fractional permissions, precise predicates, and counting permissions; and the approach to lemma function termination in the presence of dynamically-bound lemma function calls. Finally, we describe three ongoing efforts: application to JavaCard programs, integration of shape analysis, and application to Linux device drivers.


european workshop on system security | 2009

Breaking the memory secrecy assumption

Raoul Strackx; Yves Younan; Pieter Philippaerts; Frank Piessens; Sven Lachmund; Thomas Walter

Many countermeasures exist that attempt to protect against buffer overflow attacks on applications written in C and C++. The most widely deployed countermeasures rely on artificially introducing randomness in the memory image of the application. StackGuard and similar systems, for instance, will insert a random value before the return address on the stack, and Address Space Layout Randomization (ASLR) will make the location of stack and/or heap less predictable for an attacker. A critical assumption in these probabilistic countermeasures is that attackers cannot read the contents of memory. In this paper we show that this assumption is not always justified. We identify a new class of vulnerabilities -- buffer overreads -- that occur in practice and that can be exploited to read parts of the memory contents of a process running a vulnerable application. We describe in detail how to exploit an application protected by both ASLR and stack canaries, if the application contains both a buffer overread and a buffer overflow vulnerability. We also provide a detailed discussion of how this vulnerability affects other, less widely deployed probabilistic countermeasures such as memory obfuscation and instruction set randomization.


Information Security Technical Report | 2008

Security-by-contract on the .NET platform

Lieven Desmet; Wouter Joosen; Fabio Massacci; Pieter Philippaerts; Frank Piessens; Ida Siahaan; Dries Vanoverberghe

Over the last few years, the success of GPS-enabled PDAs has finally instigated a breakthrough of mobile devices. Many people now already have a device that can connect to the Internet and run untrusted code, typically a cell-phone or PDA. Having such a large interconnected and powerful computing base presents some new security issues. In order to counter new threats, the traditional security architectures need to be overhauled to support a new and more flexible way of securely executing mobile code. This article describes the concept of security-by-contract (SxC) and its implementation on the .NET platform. This new model allows users to guarantee that an untrusted application remains within the boundaries of acceptable behavior, as defined by the user herself. A number of different techniques will be presented that can be employed to enforce this behavior. In order to support the SxC paradigm, some new steps can be introduced in the application development process. In addition to building an application, developers can create an application contract and securely bind this contract to the application. The application deployment process supports legacy applications developed without such contracts, but it can support more advanced enforcement technologies for those applications that are SxC-aware.


computer and communications security | 2010

PAriCheck: an efficient pointer arithmetic checker for C programs

Yves Younan; Pieter Philippaerts; Lorenzo Cavallaro; R. Sekar; Frank Piessens; Wouter Joosen

Buffer overflows are still a significant problem in programs written in C and C++. In this paper we present a bounds checker, called PAriCheck, that inserts dynamic runtime checks to ensure that attackers are not able to abuse buffer overflow vulnerabilities. The main approach is based on checking pointer arithmetic rather than pointer dereferences when performing bounds checks. The checks are performed by assigning a unique label to each object and ensuring that the label is associated with each memory location that the object inhabits. Whenever pointer arithmetic occurs, the label of the base location is compared to the label of the resulting arithmetic. If the labels differ, an out-of-bounds calculation has occurred. Benchmarks show that PAriCheck has a very low performance overhead compared to similar bounds checkers. This paper demonstrates that using bounds checkers for programs or parts of programs running on high-security production systems is a realistic possibility.


workshop on computer security architecture | 2007

A flexible security architecture to support third-party applications on mobile devices

Lieven Desmet; Wouter Joosen; Fabio Massacci; Katsiaryna Naliuka; Pieter Philippaerts; Frank Piessens; Dries Vanoverberghe

The problem of supporting the secure execution of potentially malicious third-party applications has received a considerable amount of attention in the past decade. In this paper we describe a security architecture for mobile devices that supports the flexible integration of a variety of advanced technologies for such secure execution of applications, including run-time monitoring, static verification and proof-carrying code. The architecture also supports the execution of legacy applications that have not been developed to take advantage of our architecture, though it can provide better performance and additional services for applications that are architecture-aware.The proposed architecture has been implemented on a Windows Mobile device with the .NET Compact Framework. It offers a substantial security benefit compared to the standard (state-of-practice) security architecture of such devices, even for legacy applications.


Electronic Notes in Theoretical Computer Science | 2009

The S3MS.NET Run Time Monitor

Lieven Desmet; Wouter Joosen; Fabio Massacci; Katsiaryna Naliuka; Pieter Philippaerts; Frank Piessens; Dries Vanoverberghe

This paper describes the S3MS.NET run time monitor, a tool that can enforce security policies expressed in a variety of policy languages for .NET desktop or mobile applications. The tool consists of two major parts: a bytecode inliner that rewrites .NET assemblies to insert calls to a policy decision point, and a policy compiler that compiles source policies to executable policy decision points. The tool supports both singlethreaded and multithreaded applications, and is sufficiently mature to be used on real-world applications. This paper describes the overall functionality and architecture of the tool, discusses its strengths and weaknesses, and reports on our experience with using the tool on case studies as well as in teaching.


Science of Computer Programming | 2014

Software verification with VeriFast: Industrial case studies

Pieter Philippaerts; Jan Tobias Mühlberg; Willem Penninckx; Jan Smans; Bart Jacobs; Frank Piessens

In this article, we present a series of four industrial case studies in software verification. We applied VeriFast, a sound and modular software verifier based on separation logic, to two Java Card smart card applets, a Linux device driver, and an embedded Linux network management component, the latter two written in C. Our case studies have been carefully selected so as to evaluate the industrial applicability of VeriFast. We focus on proving the absence of safety violations, e.g., that the programs do not perform illegal operations such as dividing by zero or illegal memory accesses. Yet, given the sensitive application environment of our case studies, these safety properties typically have security implications. In this article we give a detailed description of the VeriFast approach to software verification based on two of the above case studies, one in Java and one in C. Finally, we draw conclusions on the overall feasibility of using VeriFast to verify software components in industrial domains that have stringent requirements on reliability and security.


international conference on detection of intrusions and malware and vulnerability assessment | 2011

Code pointer masking: hardening applications against code injection attacks

Pieter Philippaerts; Yves Younan; Stijn Muylle; Frank Piessens; Sven Lachmund; Thomas Walter

In this paper we present an efficient countermeasure against code injection attacks. Our countermeasure does not rely on secret values such as stack canaries and protects against attacks that are not addressed by state-of-the-art countermeasures of similar performance. By enforcing the correct semantics of code pointers, we thwart attacks that modify code pointers to divert the applications control flow. We have implemented a prototype of our solution in a C-compiler for Linux. The evaluation shows that the overhead of using our countermeasure is small and the security benefits are substantial.


ACM Transactions on Information and System Security | 2013

CPM: Masking Code Pointers to Prevent Code Injection Attacks

Pieter Philippaerts; Yves Younan; Stijn Muylle; Frank Piessens; Sven Lachmund; Thomas Walter

Code Pointer Masking (CPM) is a novel countermeasure against code injection attacks on native code. By enforcing the correct semantics of code pointers, CPM thwarts attacks that modify code pointers to divert the application’s control flow. It does not rely on secret values such as stack canaries and protects against attacks that are not addressed by state-of-the-art countermeasures of similar performance. This article reports on two prototype implementations on very distinct processor architectures, showing that the idea behind CPM is portable. The evaluation also shows that the overhead of using our countermeasure is very small and the security benefits are substantial.


Journal of Computer Virology and Hacking Techniques | 2011

Filter-resistant code injection on ARM

Yves Younan; Pieter Philippaerts; Frank Piessens; Wouter Joosen; Sven Lachmund; Thomas Walter

Code injection attacks are one of the most powerful and important classes of attacks on software. In these attacks, the attacker sends malicious input to a software application, where it is stored in memory. The malicious input is chosen in such a way that its representation in memory is also a valid representation of a machine code program that performs actions chosen by the attacker. The attacker then triggers a bug in the application to divert the control flow to this injected machine code. A typical action of the injected code is to launch a command interpreter shell, and hence the malicious input is often called shellcode. Attacks are usually performed against network facing applications, and such applications often perform validations or encodings on input. Hence, a typical hurdle for attackers, is that the shellcode has to pass one or more filtering methods before it is stored in the vulnerable application’s memory space. Clearly, for a code injection attack to succeed, the malicious input must survive such validations and transformations. Alphanumeric input (consisting only of letters and digits) is typically very robust for this purpose: it passes most filters and is untouched by most transformations. This paper studies the power of alphanumeric shellcode on the ARM architecture. It shows that the subset of ARM machine code programs that (when interpreted as data) consist only of alphanumerical characters is a Turing complete subset. This is a non-trivial result, as the number of instructions that consist only of alphanumeric characters is very limited. To craft useful exploit code (and to achieve Turing completeness), several tricks are needed, including the use of self-modifying code.

Collaboration


Dive into the Pieter Philippaerts's collaboration.

Top Co-Authors

Avatar

Frank Piessens

Katholieke Universiteit Leuven

View shared research outputs
Top Co-Authors

Avatar

Yves Younan

Katholieke Universiteit Leuven

View shared research outputs
Top Co-Authors

Avatar

Wouter Joosen

Katholieke Universiteit Leuven

View shared research outputs
Top Co-Authors

Avatar

Lieven Desmet

Katholieke Universiteit Leuven

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar

Bert Vandenberghe

Katholieke Universiteit Leuven

View shared research outputs
Top Co-Authors

Avatar

David Geerts

Katholieke Universiteit Leuven

View shared research outputs
Top Co-Authors

Avatar

Dries Vanoverberghe

Katholieke Universiteit Leuven

View shared research outputs
Top Co-Authors

Avatar

Jasper Vanhoof

Katholieke Universiteit Leuven

View shared research outputs
Top Co-Authors

Avatar

Patrick De Mazière

Katholieke Universiteit Leuven

View shared research outputs
Researchain Logo
Decentralizing Knowledge