Language-based security
![]() | This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
|
Language-based security (LBS) is a set of techniques that may be used to strengthen the security of applications on a high level by using the properties of programming languages. LBS is considered to enforce computer security on an application-level, making it able to prevent vulnerabilities which traditional operating-system security is unable to handle.
Applications are typically specified and implemented in programming languages and to protect against the attacks, flaws and bugs an application’s source code might be vulnerable to, there is a need for application-level security; security evaluating the applications behavior with respect to the programming language. This area is generally known as language-based security.
Motivation
The use of large software systems, such as SCADA, is taking place all around the world[1] and computer systems constitute the core of many infrastructures. The society relies greatly on infrastructure such as water, energy, communication and transportation, which again all rely on fully functionally working computer systems. There are well known examples of when critical systems fails due to bugs or errors in the software, and the consequences the absence of the infrastructure causes.[2][3]
Traditionally, the mechanisms used to control the correct behavior of software are implemented at the operating-system level. The operating system enforces security on several possible security breaches such as memory-access violations, stack overflow violations, the launching of programs with excessive privileges and many others. This is a crucial part of security in computer systems, but by securing the behavior of software on a more specific level, even stronger security can be achieved. Enforcement done by the operating system is performed on low level code, or machine code. Since most programs are written in a programming language, a lot of the properties of the behavior of the software are lost on compilation and are significantly more difficult to recover when evaluating the machine code. By evaluating the source code, the software before compilation, the theory and implementation of the programming language can also be considered, and stronger security can be achieved.
Objective of LBS
By using LBS, the security of software can be increased in several areas, depending on the techniques used. Common programming errors such as allowing buffer overflows and illegal information flows to occur can be detected and disallowed in the software used by the consumer. It is also desirable to provide some proof to the consumer about the security properties of the software, making the consumer able to trust the software without having to receive the source code and self checking it for errors.
When source code, written in a specific programming language, is compiled to machine code, the compiler is likely to perform several operations. Lexical analysis, preprocessing, parsing, semantic analysis, code generation, and code optimization are all commonly used among compilers. These operations are done specifically to each programming language and by analyzing the source code and using the theory and implementation of the language, the compiler will attempt to correctly translate the high-level code into low-level code, still achieving the desired behavior of the program.
During compilation of programs written in a type-safe language, such as Java, the source code must type-check successfully before compilation. If the type-check fails, the compilation will not take place, and the source code needs to be modified. This means that, given a correct compiler, any code compiled from a successfully type-checked source program should be clear of invalid-assignment errors. This is information which can be of value to the code consumer, as it provides some degree of guarantee of the program not crashing due to some specific error.
A goal of LBS is to ensure the presence of certain properties of the source code corresponding to the safety policy of the software. When gathering the necessary information to check for these properties and to compile the program it is desirable to handle the information like a certificate and make it available to the code consumer. By doing so, the consumer has some degree of guarantee that the software behaves accordingly to some desired property.
The figure above illustrates how certification and verification of low-level code could be established by the use of a certifying compiler. The supplier obtains the advantage of not having to reveal the source code to let consumers trust the program, and the consumer is left with the easy job, compared to evaluating and compiling the source code, of verifying the certificate and only needs a limited trusted code base containing of the compiler and the verifier.
Techniques
![]() | This section is empty. You can help by adding to it. (December 2014) |
Papers
- "Language based security", Dexter Kozen, Cornell University
- "Language-based security - A research manifesto for a Dagstuhl Seminar, 2003"
Books
- "Secure information flow: definition, enforcement, and preservation through compilation", G. Barthe, B. Grégoire, A. Matos,T. Rezk, 2011
References
- ^ "Can we learn from SCADA security incidents?" (PDF). www.oas.org. enisa.
- ^ "Air Traffic Control System Failed". www.computerworld.com. Retrieved 12 May 2014.
- ^ "Software Bug Contributed to Blackout". www.securityfocus.com. Retrieved 11 February 2004.
This article has not been added to any content categories. Please help out by adding categories to it so that it can be listed with similar articles. (December 2014) |