Felderer 2016
Felderer 2016
Contents
1. Introduction 2
2. Software Testing 3
3. Security Engineering 6
3.1 Basic Concepts 6
3.2 Secure Software Development Life Cycle 9
4. Security Testing 10
4.1 Basic Concepts 10
4.2 Security Testing in the Secure Software Development Life cycle 14
5. Security Testing Techniques 16
5.1 Model-Based Security Testing 16
5.2 Code-Based Testing and Static Analysis 21
5.3 Penetration Testing and Dynamic Analysis 24
5.4 Security Regression Testing 27
6. Application of Security Testing Techniques 31
6.1 Selection Criteria for Security Testing Approaches 31
6.2 A Three-Tiered Business Application 33
7. Summary 40
Acknowledgments 41
References 41
About the Authors 49
Abstract
Identifying vulnerabilities and ensuring security functionality by security testing is a
widely applied measure to evaluate and improve the security of software. Due to
the openness of modern software-based systems, applying appropriate security testing
techniques is of growing importance and essential to perform effective and efficient
security testing. Therefore, an overview of actual security testing techniques is of high
value both for researchers to evaluate and refine the techniques and for practitioners to
apply and disseminate them. This chapter fulfills this need and provides an overview of
recent security testing techniques. For this purpose, it first summarize the required
background of testing and security engineering. Then, basics and recent developments
of security testing techniques applied during the secure software development life
cycle, ie, model-based security testing, code-based testing and static analysis, penetra-
tion testing and dynamic analysis, as well as security regression testing are discussed.
Finally, the security testing techniques are illustrated by adopting them for an example
three-tiered web-based business application.
1. INTRODUCTION
Modern IT systems based on concepts like cloud computing,
location-based services, or social networking are permanently connected
to other systems and handle sensitive data. These interconnected systems
are subject to security attacks that may result in security incidents with high
severity affecting the technical infrastructure or its environment. Exploited
security vulnerabilities can cause drastic costs, eg, due to downtimes or the
modification of data. A high proportion of all software security incidents is
caused by attackers who exploit known vulnerabilities [1]. An important,
effective, and widely applied measure to improve the security of software
are security testing techniques which identify vulnerabilities and ensure
security functionality.
Software testing is concerned with evaluation of software products and
related artifacts to determine that they satisfy specified requirements, to
demonstrate that they are fit for purpose and to detect defects. Security test-
ing verifies and validates software system requirements related to security
properties like confidentiality, integrity, availability, authentication, autho-
rization, and nonrepudiation. Sometimes security properties come as classi-
cal functional requirements, eg, “user accounts are disabled after three
unsuccessful login attempts” which approximates one part of an authoriza-
tion property and is aligned with the software quality standard ISO/IEC
9126 [2] defining security as functional quality characteristic. However, it
seems desirable that security testing directly targets the above security prop-
erties, as opposed to taking the detour of functional tests of security mech-
anisms. This view is supported by the ISO/IEC 25010 [3] standard that
revises ISO/IEC 9126 and introduces Security as a new quality characteristic
which is not included in the characteristic functionality any more.
Web application security vulnerabilities such as Cross-Site Scripting or
SQL Injection, which can adequately be addressed by security testing tech-
niques, are acknowledged problems [4] with thousands of vulnerabilities
reported each year [5]. Furthermore, surveys as published by the National
Institute of Standards and Technology [6] show high cost of insecure
Security Testing: A Survey 3
2. SOFTWARE TESTING
According to the classic definition in software engineering [7], software
testing consists of the dynamic verification that a program provides expected
behaviors on a finite set of test cases, a so called test suite, suitably selected from
the usually infinite execution domain. This dynamic notion of testing, so
called dynamic testing, evaluates software by observing its execution [8].
The executed system is called system under test (SUT). More general notions
of testing [9] consist of all life cycle activities, both static and dynamic,
concerned with evaluation of software products and related artifacts to
determine that they satisfy specified requirements, to demonstrate that
they are fit for purpose and to detect defects. This definition also takes
static testing into account, which checks software development artifact
4 Michael Felderer et al.
Objective
Nonfunctional Scope
System
Integration
Functional
Component
Accessibility
White-box Black-box
Figure 1 Testing dimensions objective, scope, and accessibility.
modifications have not caused side effects and that the SUT still complies
with the specified requirements [16].
In terms of accessibility of test design artifacts, we can classifying testing
methods into white- and black-box testing. In white-box testing, test cases
are derived based on information about how the software has been designed
or coded [7]. In black-box testing, test cases rely only on the input/output
behavior of the software. This classification is especially relevant for security
testing, as black-box testing, where no or only basic information about the
system under test is provided, enables to mimic external attacks from
hackers. In classical software testing, a related classification of test design
techniques [17] distinguishes between structure-based testing techniques (ie,
deriving test cases from internal descriptions like implementation code),
specification-based testing techniques (ie, deriving test cases from external
descriptions of software like specifications), and experience-based testing tech-
niques (ie, deriving test cases based on knowledge, skills, and background
of testers).
The process of testing comprises the core activities test planning, design,
implementation, execution, and evaluation [9]. According to Refs. [18] and
[9], test planning is the activity of establishing or updating a test plan. A test
plan includes the test objectives, test scope, and test methods as well as the
resources, and schedule of intended test activities. It identifies, amongst
6 Michael Felderer et al.
others, features to be tested and exit criteria defining conditions for when to
stop testing. Coverage criteria aligned with the tested feature types and the
applied test design techniques are typical exit criteria. Once the test plan has
been established, test control begins. It is an ongoing activity in which the
actual progress is compared against the plan which often results in concrete
measures. During the test design phase the general testing objectives defined
in the test plan are transformed into tangible test conditions and abstract test
cases. For test derivation, specific test design techniques can be applied,
which can according to ISO/IEC/IEEE 29119 [17] be classified into
specification-based, structure-based, and experience-based techniques. Test
implementation comprises tasks to make the abstract test cases executable. This
includes tasks like preparing test harnesses and test data, providing logging
support or writing test scripts which are necessary to enable the automated
execution of test cases. In the test execution phase, the test cases are then exe-
cuted and all relevant details of the execution are logged and monitored.
In manual test execution, testing is guided by a human, and in automated
testing by a specialized application. Finally, in the test evaluation phase
the exit criteria are evaluated and the logged test results are summarized
in a test report.
In model-based testing (MBT), manually selected algorithms automatically
and systematically generate test cases from a set of models of the system under
test or its environment [19]. Whereas test automation replaces manual test
execution with automated test scripts, MBT replaces manual test designs
with automated test designs and test generation.
3. SECURITY ENGINEERING
In this section, we cover basic concepts of security engineering as well
as an overview of the secure software development life cycle.
protects the asset. A vulnerability either means that (1) the responsible secu-
rity mechanism is completely missing, or (2) the security mechanism is in
place but is implemented in a faulty way.
An exploit is a concrete malicious input that makes use of the vulnerability
in the system under test (SUT) and violates the property of an asset. Vulner-
abilities can often be exploited in different ways. One concrete exploit
selects a specific asset and a specific property, and makes use of the vulner-
ability to violate the property for the selected asset.
A threat is the potential cause of an unwanted incident that harms or
reduces the value of an asset. For instance, a threat may be a hacker, power
outages, or malicious insiders. An attack is defined by the steps a malicious or
inadvertently incorrectly behaving entity performs to the end of turning a
threat into an actual corruption of an asset’s properties. This is usually done
by exploiting a vulnerability.
Security aspects can be considered on the network, operating system, and
application level. Each level has its own security threats and corresponding
security requirements to deal with them. Typical threats on the network
level are distributed denial-of-service or network intrusion. On the operat-
ing system level, all types of malware cause threats. Finally, on the applica-
tion level threats typical threats are related to access control or are application
type specific like Cross-Site Scripting in case of web applications. All levels
of security can be subject to tests.
Security testing simulates attacks and employs other kinds of penetration
testing attempting to compromise the security of a system by playing the role
of a hacker trying to attack the system and exploit its vulnerabilities [21].
Security testing requires specific expertise which makes it difficult and hard
to automate [22]. By identifying risks in the system and creating tests driven
by those risks, security vulnerability testing can focus on parts of a system
implementation in which an attack is likely to succeed.
Risks are often used as a guiding factor to define security test processes.
For instance, Potter and McGraw [22] consider the process steps creating
security misuse cases, listing normative security requirements, performing
architectural risk analysis, building risk-based security test plans, wielding
static analysis tools, performing security tests, performing penetration testing
in the final environment, and cleaning up after security breaches. Also the
Open Source Security Testing Methodology Manual (OSSTMM) [23]
and the OWASP Testing Guide [10] take risks into account for their pro-
posed security testing activities.
Security Testing: A Survey 9
4. SECURITY TESTING
In this section, we cover basic concepts of security testing and the inte-
gration of security testing in the secure software development life cycle.
System
Intended-specified as implemented
system functionality
negative requirements. Testing routinely misses hidden action and the result
is dangerous side effect behaviors that ship with a software. Fig. 2 illustrates
this side effect nature of most software vulnerabilities that security testing has
to cope with [30].
The circle represents an application’s intended functionality including
security mechanisms, which is usually defined by the requirements specifi-
cation. The amorphous shape superimposed on the circle represents the
application’s actual, implemented functionality. In an ideal system, the
coded application would completely overlap with its specification, but in
practice, this is hardly ever the case. The areas of the circle that the coded
application does not cover represents typical functional faults (ie, behavior
that was implemented incorrectly and does not conform to the specifica-
tion), especially also in security mechanisms. Areas that fall outside of the
circular region represent unindented and potentially dangerous functional-
ity, where most security vulnerabilities lay. The mismatch between specifi-
cation and implementation shown in Fig. 2 leading to faults in security
mechanisms and vulnerabilities can be reduced by taking security and espe-
cially security testing aspects into account early and in all phases of the soft-
ware development life cycle as discussed in Section 4.2.
14 Michael Felderer et al.
10–15%
10–35%
10–15% Analysis
Design
Development
Deployment
Maintenance
15–35%
15–35%
Figure 3 Proportion of test effort in secure software development life cycle according
to Ref. [10].
Security Testing: A Survey 15
static analysis is based on source and byte code created during development.
Penetration testing and dynamic analysis is based on running systems, either in a
test or production environment. Finally, security regression testing is performed
during maintenance. We also apply this classification to structure the discus-
sion of security testing techniques in the following section.
test model and the test selection criteria are defined, a set of test cases is gen-
erated from the test model as determined by the chosen test selection criteria.
Test generation is typically performed automatically. The generated test
cases are traces of the model and thus in general at a higher level than the
events or actions of an SUT. Therefore, the generated test cases are further
refined to a more concrete level or adapted to the SUT to support their auto-
mated execution.
Model-based security testing. Model-based security testing (MBST) is an
MBT approach that validates software system requirements related to secu-
rity properties. It combines security properties like confidentiality, integrity,
availability, authentication, authorization, and nonrepudiation with a model
of the SUT and identifies whether the specified or intended security features
hold in the model.
Both MBT and MBST have in common, that the input artifact is a model
and not the SUT. Therefore the abstraction gap between the model and the
SUT has to be addressed. In particular, an identified (security) issue at the
model level does not automatically confirm an (security) issue at the
SUT. Therefore an additional step is needed to map an abstract test case
to an executable test case that can be executed on the SUT.
Selection criteria: “Good” test cases. Arguably, “good” test cases detect
potential, rather than actual, defects with good cost effectiveness [35].
Potential defects need to be described by defect hypotheses. In order to turn
these hypotheses into operational adequacy criteria [36], they need to be
captured by some form of explicit defect model [35, 37, 38]. One form
of defect is a fault, understood as the root cause of an incorrect system state
(error) or incorrect system output (failure). As we show below, vulnerabil-
ities can be understood as faults.
In addition to explicit models of (the functionality of ) the system under
test, model-based security testing usually makes use of one or more of the
three following models for test selection: properties, vulnerabilities, and
attackers. Models of an attacker encode an attacker’s behavior: the data they
need, the different steps they take, the way they craft exploits. Attacker
models can be seen as models of the environment of a system under test,
and knowledge about a targeted vulnerability usually is left implicit. In con-
trast, models of vulnerabilities explicitly encode weaknesses in a system or a
model of the system. In this sense, they can be seen as faults that are used
for the generation of “good” test case generation (see above). Finally, prop-
erties describe desired characteristics of a model, or an implementation, and
they include confidentiality, availability, integrity, and so on. Models of
18 Michael Felderer et al.
properties are needed to describe the properties of an asset that are supposed
not to be violated: they describe what exactly the security tester targets, and
what an exploit is supposed to exploit.
It is noteworthy that all forms of security testing, model-based or not,
always work with an implicit or explicit hypothesis about a potential
vulnerability.
Vulnerabilities as Faults. Frequently, as a reaction to known relevant
threats, assets are protected by explicit security mechanisms. Mechanisms
include input sanitization, Address Space Layout Randomization (ASLR),
encryption of password files, but also intrusion detection systems and access
control components. Mechanisms are components of a system and can
always be syntactically recognized: there is a piece of code (the mechanism)
that is supposed to protect the asset; or there is no such piece of code.
A vulnerability is a special kind of fault with security implications. It is
defined as the absence of a correctly functioning mechanism. This can mean
both (1) that there is no mechanism at all (eg, no input sanitization takes
place which can lead to buffer overflows or SQL Injections) and (2) that
the mechanism does not work correctly, ie, is partially or incorrectly
implemented, for instance, if an access control policy is faulty.
Security testing can then be understood in three seemingly different
ways: (1) to test if specific security properties of an asset can be violated
(properties and property models); (2) to test the functionality of a mechanism
(attacker models); and (3) to directly try to exploit a vulnerability (vulnerabil-
ity models). The boundaries are blurred, however: With the above definition
of vulnerabilities as the absence of effectively working defense mechanisms,
and the observation that attacker models always involve implicit or explicit
hypotheses on vulnerabilities, activities (2) and (3) are close to identical. In
practice, they only differ in terms of the perspective that the tester takes:
the mechanism or the vulnerability. Because the above definition also binds
vulnerabilities to—possibly unspecified—assets, the goal of activities (2) and
(3) always is activity (1). It hence seems hard to provide a crisp conceptual
distinction between the three activities of (1) testing security properties, (2)
testing security mechanisms, and (3) testing for vulnerabilities.
Classification of model-based (security) testing. Several publications have been
published that propose taxonomies and classifications of existing MBT [32,
33] and MBST approaches [39, 40]. We will focus on the classification pro-
posed by Schieferdecker et al. [40] considering different perspectives used in
securing a system. The authors claim that MBST needs to be based on dif-
ferent types of models and distinguish three types of input models for security
Security Testing: A Survey 19
test generation, ie, architectural and functional models, threat, fault and risk models,
as well as weakness and vulnerability models. Architectural and functional models
of the SUT are concerned with security requirements and their implementa-
tion. They focus on the expected system behavior. Threat, fault and
risk models focus on what can go wrong, and concentrate on causes and
consequences of system failures, weaknesses or vulnerabilities. Weakness
and vulnerability models describe weaknesses or vulnerabilities by themselves.
In the following, we exemplary describe selected approaches, that make
use of different models according to the classification of Schieferdecker et al.
mapping from these browser actions to executable API calls to make them
operational in a browser. Finally, a test execution engine executes the
operationalized test cases on the SUT to verify, if the implementation of
the model suffers from the same vulnerability as reported by the model
checker at the abstract level.
detect vulnerabilities at early stages of the development life cycle where fix-
ing of vulnerabilities is comparatively cheap [50]. In Microsoft’s SDL [26],
SAST is part of the implementation phase to highlight that this technique
should be applied as soon as the first line of code is written. Note that in this
section, we only discuss purely static approaches, ie, approaches that do not
require an executable test system. Thus, we discuss hybrid approaches, ie,
approaches that combine static analysis with dynamic testing (such as con-
colic testing) in Section 5.3.
Code reviews can either be done manually or automated. The latter is
often called static code analysis (SCA) or Static Application Security Testing
(SAST). Moreover, we can either analyze the source code (ie, the code that
was written by a developer) of the program or the compiled source code (ie,
binaries or byte-code). As they are closely related, we discuss them not sep-
arately. From a software vendor’s perspective who is aiming at building
secure software, the analysis on the source code is preferred over a binary
analysis, as the source code analysis is more precise and can provide detailed
recommendations to developers on how to fix a vulnerability on the source
code level.
survey on static analysis methods, we refer the reader elsewhere [51, 58].
Moreover, we discuss further static analysis techniques in the context of a
small case study in Section 6.
Besides the fact that SAST tools can be applied very early in the software
development life cycle as well as the fact that source code analysis can pro-
vide detailed fix recommendations, SAST has one additional advantages
over most dynamic security testing techniques: SAST tools can analyze all
control flows of a program. Therefore, SAST tools achieve, compared to
dynamic test approaches, a significant higher coverage of the program under
test and, thus, produce a significant lower false negative rate. Thus, SAST is a
very effective method [59] for detecting programming related vulnerabilities
early in the software development life cycle.
Additional discovery
Reporting
2. Discovery: This phase consists of a steps. First, all accessible external inter-
faces of the system under test are systematically discovered and enumer-
ated. This set of interfaces constitutes the system’s initial attack surface.
The second part of the discovery phase is vulnerability analysis, in which
the applicable vulnerability classes that match the interface are identified
(eg, Cross-Site Scripting for HTTP services or SQL Injection for appli-
cations with database back end). In a commercial penetration test, this
phase also includes the check if any of the found components is suscep-
tible to publicly documented vulnerabilities which is contained in pre-
compiled vulnerability databases.
3. Attack: Finally, the identified interfaces are tested through a series of
attack attempts. In these attacks, the testers actively attempts to compro-
mise the system via sending attack payloads. In case of success, the found
security vulnerabilities are exploited in order to gain further information
about the system, widen the access privileges of the tester and find further
system components, which might expose additional interfaces. This
expanded attack surface is fed back into the discovery phase, for further
processing.
4. Reporting: The reporting phase occurs simultaneously with the other
three phases of the penetration test and documents all findings along with
their estimated severeness.
and analyses the application’s responses for indicators if the attack was suc-
cessful and, if this is not the case, hints how to alter the attack in the subse-
quent tries. Bau et al. [4] as well as Adam et al. [61] provide overviews of
recent commercial and academic black-box vulnerability scanners.
5.3.4 Fuzzing
Fuzzing or fuzz testing is a dynamic testing technique that is based on the idea
of feeding random data to a program “until it crashes.” It was pioneered in
the late 1980s by Barton Miller at the University of Wisconsin [65]. Since
then, fuzz testing has been proven to be an effective technique for finding
vulnerabilities in software. While the first fuzz testing approaches where
purely based on randomly generated test data (random fuzzing), advances
Security Testing: A Survey 27
1000
800
#Cross-site scripting
#Buffer errors
600 #Cross-site request forgery
#SQL injection
#Information leak / disclosure
400
200
0
2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014
Figure 6 Number of entires in the common vulnerabilities and exposures (CVE) index by category.
Security Testing: A Survey 33
• Performance and resource utilization: different tools and methods require dif-
ferent computing power and different manual efforts.
• Costs for licenses, maintenance, and support: to use security testing tools effi-
ciently in a large enterprise, they need to be integrated into, eg, bug
tracking or reporting solutions—often they provide their own server
applications for this. Thus, buying a security testing tool is usually not
a one-time effort—it requires regular maintenance and support.
• Quality of results: different tools that implement the same security testing
technique provide a different quality level (eg, in terms of fix recommen-
dations or false positives rates).
• Supported technologies: security testing tools usually only support a limited
number of technologies (eg, programming languages, interfaces, or build
systems). If these tools support multiple technologies, they do not nec-
essary support all of them with the same quality. For example, a source
analysis tool that supports Java and C might work well for Java but not as
well for C.
In the following, we focus on the first two aspects: the attack surface and the
application type. These two aspects are, from a security perspective the first
ones to consider for selecting the best combinations of security testing
approaches for a specific application type (product). In a subsequent step,
the other factors need to be considered for selecting a specific tool that fits
the needs of the actual development as well as the resource and time
constraints.
w
a
Fig. 7 illustrates this example architecture where the dotted vertical lines
mark the trust boundaries of the application.
channels, the access control of all tiers, as well as to keep the systems up to
date by patching known vulnerabilities. Testing the security of the commu-
nication channels includes approaches that check the correct validation of
SSL/TLS certificates (eg, Frankencerts [139]) as well as protocol fuzzers such
as SNOOZE [140] or SECFUZZ [141]. For testing the correct access con-
trol, various model-based approaches (eg, [142–144]) haven been applied to
case studies of different size. Finally, tools like Nessus [145] that rather easily
allow to scan networks for applications with known vulnerabilities and, thus,
applications that need to be updated or patched.
7. SUMMARY
In this chapter, we provided an overview of recent security testing
techniques and their practical application in context of a three-tiered busi-
ness application. For this purpose, we first summarized the required back-
ground on software testing and security engineering. Testing consists of
static and dynamic life cycle activities concerned with evaluation of software
products and related artifacts. It can be performed on the component, inte-
gration, and system level. With regard to accessibility of test design artifacts
white-box testing (ie, deriving test cases based on design and code informa-
tion) as well as black-box testing (ie, relying only on input/output behavior
of software) can be distinguished. Security testing validates software system
requirements related to security properties of assets that include confidenti-
ality, integrity, availability, authentication, authorization, and nonre-
pudiation. Security requirements can be positive and functional, explicitly
defining the expected security functionality of a security mechanism, or
negative and nonfunctional, specifying what the application should not
do. Due to the negative nature of many security requirements and the
resulting broad range of subordinate requirements, it is essential to take test-
ing into account in all phases of the secure software development life cycle
(ie, analysis, design, development, deployment as well as maintenance) and
to combine different security testing techniques.
For a detailed discussion of security testing techniques in this chapter, we
therefore classified them according to their test basis within the secure soft-
ware development life cycle into four different types: (1) model-based security
testing is grounded on requirements and design models created during the
analysis and design phase, (2) code-based testing and static analysis on source
and byte code created during development, (3) penetration testing and dynamic
analysis on running systems, either in a test or production environment, as
Security Testing: A Survey 41
ACKNOWLEDGMENTS
The work was supported in part by the research projects QE LaB—Living Models for Open
Systems (FFG 822740) and MOBSTECO (FWF P 26194-N15).
REFERENCES
[1] I. Schieferdecker, J. Grossmann, M. Schneider, Model-based security testing,
in: Proceedings 7th Workshop on Model-Based Testing, 2012.
[2] ISO/IEC, ISO/IEC 9126-1:2001 software engineering—product quality—Part 1:
quality model, 2001.
[3] ISO/IEC, ISO/IEC 25010:2011 systems and software engineering—systems and
software quality requirements and evaluation (SQuaRE)—system and software quality
models 2011.
[4] J. Bau, E. Bursztein, D. Gupta, J. Mitchell, State of the art: automated black-box web
application vulnerability testing, in: 2010 IEEE Symposium on Security and Privacy
(SP), IEEE, 2010, pp. 332–345.
[5] MITRE, Common vulnerabilities and exposures, http://cve.mitre.org.
[6] NIST, The economic impacts of inadequate infrastructure for software testing, 2002
(available at www.nist.gov/director/planning/upload/report02-3.pdf [accessed April
7, 2015]).
[7] P. Bourque, R. Dupuis (Eds.), Guide to the Software Engineering Body of Knowledge
Version 3.0 SWEBOK, IEEE, 2014, http://www.computer.org/web/swebok.
[8] P. Ammann, J. Offutt, Introduction to Software Testing, Cambridge University Press,
Cambridge, UK, 2008.
42 Michael Felderer et al.
[9] ISTQB, Standard glossary of terms used in software testing. Version 2.2, Tech. Rep.,
ISTQB 2012.
[10] OWASP Foundation, OWASP Testing Guide v4, https://www.owasp.org/index.
php/OWASP_Testing_Project (accessed March 11, 2015).
[11] G. Tian-yang, S. Yin-sheng, F. You-yuan, Research on software security testing,
World Acad. Sci. Eng. Technol. 69 (2010) 647–651.
[12] R. Bachmann, A.D. Brucker, Developing secure software: a holistic approach to
security testing, Datenschutz und Datensicherheit (DuD) 38 (4) (2014) 257–261.
[13] ISO/IEC, Information technology—open systems interconnection—conformance
testing methodology and framework, 1994 (international ISO/IEC multi-part
standard No. 9646).
[14] M. Utting, B. Legeard, Practical Model-Based Testing: A Tools Approach, Morgan
Kaufmann Publishers Inc., San Francisco, CA, 2007, ISBN 0123725011.
[15] J. Zander, I. Schieferdecker, P.J. Mosterman, Model-Based Testing for Embedded
Systems, vol. 13, CRC Press, 2012.
[16] IEEE, IEEE standard glossary of software engineering terminology, Institute of
Electronical and Electronics Engineers, Washington, DC, 1990 (IEEE Std 610121990).
[17] ISO, ISO/IEC/IEEE 29119 software testing, 2013 (available at http://www.
softwaretestingstandard.org/ [accessed April 7, 2015]).
[18] IEEE, IEEE standard for software and system test documentation, 2008 (IEEE Std 829-
2008).
[19] I. Schieferdecker, Model-based testing, IEEE Softw. 29 (1) (2012) 14–18.
[20] Committee on National Security Systems, National Information Assurance Glossary,
Tech. Rep. 4009, Committee on National Security Systems, 2010.
[21] B. Arkin, S. Stender, G. McGraw, Software penetration testing, IEEE Secur. Priv. 3 (1)
(2005) 84–87.
[22] B. Potter, G. McGraw, Software security testing, IEEE Secur. Priv. 2 (5) (2004)
81–85.
[23] P. Herzog, The open source security testing methodology manual 3, 2010, http://
www.isecom.org/research/osstmm.html (accessed April 11, 2015).
[24] M.S. Lund, B. Solhaug, K. Stolen, Model-Driven Risk Analysis, Springer, 2011.
[25] D. Verdon, G. McGraw, Risk analysis in software design, IEEE Secur. Priv. 2 (4)
(2004) 79–84.
[26] M. Howard, S. Lipner, The Security Development Lifecycle: SDL: A Process for
Developing Demonstrably More Secure Software, Microsoft Press, 2006, ISBN
0735622140.
[27] OWASP, OpepSAMM, http://www.opensamm.org/ (accessed March 30, 2015).
[28] B. Potter, G. McGraw, Software security testing, IEEE Secur. Priv. 2 (5) (2004) 81–85.
[29] H. Shahriar, M. Zulkernine, Automatic testing of program security vulnerabilities,
in: 33rd Annual IEEE International Computer Software and Applications Conference,
2009, COMPSAC’09, vol. 2, IEEE, 2009, pp. 550–555.
[30] H.H. Thompson, Why security testing is hard, IEEE Secur. Priv. 1 (4) (2003) 83–86.
[31] OWASP Foundation, OWASP Code Review Guide v1.1, https://www.owasp.org/
index.php/Category:OWASP_Code_Review_Project (accessed March 11, 2015).
[32] A.C. Dias-Neto, G.H. Travassos, A picture from the model-based testing area: con-
cepts, techniques, and challenges, Adv. Comput. 80 (2010) 45–120.
[33] M. Utting, A. Pretschner, B. Legeard, A taxonomy of model-based testing approaches,
Softw. Test. Verif. Reliab. 22 (2) (2012) 297312.
[34] W. Grieskamp, N. Kicillof, K. Stobie, V. Braberman, Model-based quality assurance
of protocol documentation: tools and methodology, Softw. Test. Verif. Reliab. 21 (1)
(2011) 55–71.
[35] A. Pretschner, Defect-based testing, in: Dependable Software Systems Engineering, IOS
Press, 2015, http://www.iospress.nl/book/dependable-software-systems-engineering/.
Security Testing: A Survey 43
[36] H. Zhu, P.A.V. Hall, J.H.R. May, Software unit test coverage and adequacy, ACM
Comput. Surv. 29 (4) (1997) 366–427, ISSN 0360-0300.
[37] L.J. Morell, A theory of fault-based testing, IEEE Trans. Softw. Eng. 16 (8) (1990)
844–857, ISSN 0098-5589.
[38] A. Pretschner, D. Holling, R. Eschbach, M. Gemmar, A generic fault model for
quality assurance, in: A. Moreira, B. Schätz, J. Gray, A. Vallecillo, P. Clarke (Eds.),
Model-Driven Engineering Languages and Systems, Lecture Notes in Computer
Science, vol. 8107, Springer, Berlin, ISBN 978-3-642-41532-6, 2013, pp. 87–103.
[39] M. Felderer, B. Agreiter, P. Zech, R. Breu, A classification for model-based security
testing, in: The Third International Conference on Advances in System Testing and
Validation Lifecycle (VALID 2011), 2011, pp. 109–114.
[40] I. Schieferdecker, J. Grossmann, M. Schneider, Model-based security testing,
in: Proceedings 7th Workshop on Model-Based Testing, 2012.
[41] M. Büchler, J. Oudinet, A. Pretschner, Semi-automatic security testing of web
applications from a secure model, in: 2012 IEEE Sixth International Conference on
Software Security and Reliability (SERE), IEEE, 2012, pp. 253–262.
[42] T. Mouelhi, F. Fleurey, B. Baudry, Y. Traon, A model-based framework for security
policy specification, deployment and testing, in: Proceedings of the 11th International
Conference on Model Driven Engineering Languages and Systems, MoDELS ’08,
Toulouse, France, Springer, Berlin, ISBN 978-3-540-87874-2, 2008, pp. 537–552.
[43] P. Gerrard, N. Thompson, Risk-Based e-Business Testing, Artech House Publishers,
2002.
[44] M. Felderer, I. Schieferdecker, A taxonomy of risk-based testing, Int. J. Softw. Tools
Technol. Transf. 16 (5) (2014) 559–568.
[45] M.-F. Wendland, M. Kranz, I. Schieferdecker, A systematic approach to risk-based
testing using risk-annotated requirements models, in: The Seventh International
Conference on Software Engineering Advances, ICSEA 2012, 2012, pp. 636–642.
[46] J. Grossmann, M. Schneider, J. Viehmann, M.-F. Wendland, Combining risk analysis
and security testing, in: Leveraging Applications of Formal Methods, Verification and
Validation. Specialized Techniques and Applications, Springer, 2014, pp. 322–336.
[47] J. Botella, B. Legeard, F. Peureux, A. Vernotte, Risk-based vulnerability testing
using security test patterns, in: Leveraging Applications of Formal Methods, Veri-
fication and Validation. Specialized Techniques and Applications, Springer, 2014,
pp. 337–352.
[48] P. Zech, M. Felderer, B. Katt, R. Breu, Security test generation by answer set
programming, in: 2014 Eighth International Conference on Software Security and
Reliability, IEEE, 2014, pp. 88–97.
[49] P. Zech, M. Felderer, R. Breu, Security risk analysis by logic programming, in: Risk
Assessment and Risk-Driven Testing, Springer, 2014, pp. 38–48.
[50] M.P. Gallaher, B.M. Kropp, The economic impacts of inadequate infrastructure for
software testing, Tech. Rep. Planning Report 02-03, National Institute of
Standards & Technology 2002.
[51] B. Chess, J. West, Secure Programming with Static Analysis, first ed., Addison-Wesley
Professional, Boston, MA, 2007, ISBN 9780321424778.
[52] A. Bessey, K. Block, B. Chelf, A. Chou, B. Fulton, S. Hallem, C. Henri-Gros,
A. Kamsky, S. McPeak, D. Engler, A few billion lines of code later: using static analysis
to find bugs in the real world, Commun. ACM 53 (2010) 66–75, ISSN 0001-0782.
[53] A.D. Brucker, U. Sodan, Deploying static application security testing on a large scale,
in: S. Katzenbeisser, V. Lotz, E. Weippl (Eds.), GI Sicherheit 2014, Lecture Notes in
Informatics, vol. 228, GI, ISBN 978-3-88579-622-0, 2014, pp. 91–101.
[54] N. Ayewah, D. Hovemeyer, J.D. Morgenthaler, J. Penix, W. Pugh, Experiences using
static analysis to find bugs, IEEE Softw. 25 (2008) 22–29 (special issue on software
development tools, September/October (25:5)).
44 Michael Felderer et al.
[55] V.B. Livshits, M.S. Lam, Finding security errors in java programs with static analysis,
in: Proceedings of the 14th Usenix Security Symposium, 2005, pp. 271–286.
[56] D. Evans, Static detection of dynamic memory errors, SIGPLAN Not. 31 (1996)
44–53, ISSN 0362-1340.
[57] B. Chess, G. McGraw, Static analysis for security, IEEE Secur. Priv. 2 (6) (2004)
76–79, ISSN 1540-7993.
[58] M. Pistoia, S. Chandra, S.J. Fink, E. Yahav, A survey of static analysis methods
for identifying security vulnerabilities in software systems, IBM Syst. J. 46 (2)
(2007) 265–288, ISSN 0018-8670.
[59] R. Scandariato, J. Walden, W. Joosen, Static analysis versus penetration testing: a
controlled experiment, in: Proceedings of the 24th IEEE International Symposium
on Software Reliability Engineering, IEEE, 2013, pp. 1–10.
[60] K. Scarfone, M. Souppaya, A. Cody, A. Orebaugh, Technical guide to information
security testing and assessment, Special Publication 800-115, National Institute of
Standards and Technology (NIST) 2008.
[61] A. Doupe, M. Cova, G. Vigna, Why Johnny can’t pentest: an analysis of black-box
Web vulnerability scanners, in: DIMVA 2010, 2010.
[62] M. Johns, Code injection vulnerabilities in web applications—Exemplified at cross-site
scripting, Ph.D. thesis, University of Passau, 2009.
[63] W.G. Halfond, J. Viegas, A. Orso, A classification of SQL-injection attacks and coun-
termeasures, in: Proceedings of the IEEE International Symposium on Secure Software
Engineering, IEEE, 2006, pp. 65–81.
[64] J. Grossman, R. Hansen, P. Petkov, A. Rager, Cross Site Scripting Attacks: XSS
Exploits and Defense, Syngress, 2007 (Seth Fogie).
[65] B.P. Miller, L. Fredriksen, B. So, An empirical study of the reliability of UNIX
utilities, Commun. ACM 33 (12) (1990) 32–44, ISSN 0001-0782.
[66] S. Rawat, L. Mounier, Offset-aware mutation based fuzzing for buffer overflow
vulnerabilities: few preliminary results, in: Fourth International IEEE Conference
on Software Testing, Verification and Validation, ICST 2012, Berlin, Germany,
21-25 March, 2011 Workshop Proceedings, 2011, pp. 531–533.
[67] F. Duchene, S. Rawat, J. Richier, R. Groz, KameleonFuzz: evolutionary fuzzing for
black-box XSS detection, in: Fourth ACM Conference on Data and Application
Security and Privacy, CODASPY’14, San Antonio, TX, USA, March 03-05, 2014,
2014, pp. 37–48.
[68] D. Yang, Y. Zhang, Q. Liu, BlendFuzz: a model-based framework for fuzz testing
programs with grammatical inputs, in: 11th IEEE International Conference on Trust,
Security and Privacy in Computing and Communications, TrustCom 2012, Liver-
pool, United Kingdom, June 25-27, 2012, 2012, pp. 1070–1076.
[69] J. Zhao, Y. Wen, G. Zhao, H-Fuzzing: a new heuristic method for fuzzing data
generation, in: Proceedings of the 8th IFIP International Conference Network and
Parallel Computing NPC 2011, Changsha, China, October 21-23, 2011, 2011,
pp. 32–43.
[70] P. Godefroid, M.Y. Levin, D.A. Molnar, Automated whitebox fuzz testing,
in: Proceedings of the Network and Distributed System Security Symposium, NDSS
2008, San Diego, California, USA, 10th February-13th February 2008, The Internet
Society, 2008.
[71] P. Godefroid, M.Y. Levin, D.A. Molnar, SAGE: whitebox fuzzing for security testing,
Commun. ACM 55 (3) (2012) 40–44.
[72] S. Bekrar, C. Bekrar, R. Groz, L. Mounier, A taint based approach for smart fuzzing,
in: 2012 IEEE Fifth International Conference on Software Testing, Verification and
Validation, Montreal, QC, Canada, April 17-21, 2012, 2012, pp. 818–825.
Security Testing: A Survey 45
[73] H.J. Abdelnur, R. State, O. Festor, Advanced fuzzing in the VoIP space, J. Comput.
Virol. 6 (1) (2010) 57–64.
[74] M.M. Lehman, Software’s future: managing evolution, IEEE Softw. 15 (1) (1998)
40–44.
[75] M. Felderer, B. Katt, P. Kalb, J. Jürjens, M. Ochoa, F. Paci, L.M.S. Tran, T.T. Tun,
K. Yskout, R. Scandariato, F. Piessens, D. Vanoverberghe, E. Fourneret, M. Gander,
B. Solhaug, R. Breu, Evolution of security engineering artifacts: a state of the art
survey, Int. J. Secur. Softw. Eng. 5 (4) (2014) 48–97.
[76] M. Felderer, E. Fourneret, A systematic classification of security regression testing
approaches, Int. J. Softw. Tools Technol. Transf. (2015) 1–15.
[77] H.K.N. Leung, L. White, Insights into regression testing (software testing),
in: Proceedings Conference on Software Maintenance 1989, IEEE, 1989, pp. 60–69.
[78] S. Yoo, M. Harman, Regression testing minimisation, selection and prioritisation: a
survey, Softw. Test. Verif. Reliab. 1 (1) (2010) 121–141.
[79] E. Fourneret, J. Cantenot, F. Bouquet, B. Legeard, J. Botella, SeTGaM: generalized
technique for regression testing based on UML/OCL models, in: 2014 Eighth
International Conference on Software Security and Reliability (SERE), 2014,
pp. 147–156.
[80] G. Tóth, G. Kőszegi, Z. Hornák, Case study: automated security testing on the
trusted computing platform, in: Proceedings of the 1st European Workshop on System
Security, EUROSEC ’08, Glasgow, Scotland, ACM, ISBN 978-1-60558-119-4,
2008, pp. 35–39.
[81] T. He, X. Jing, L. Kunmei, Z. Ying, Research on strong-association rule based
web application vulnerability detection, in: 2nd IEEE International Conference on
Computer Science and Information Technology, 2009, ICCSIT 2009, 2009,
pp. 237–241.
[82] B.J. Garvin, M.B. Cohen, M.B. Dwyer, Using feature locality: can we leverage history
to avoid failures during reconfiguration? in: Proceedings of the 8th Workshop on
Assurances for Self-adaptive Systems, ASAS ’11, Szeged, Hungary, ACM, ISBN
978-1-4503-0853-3, 2011, pp. 24–33.
[83] Y.-C. Huang, K.-L. Peng, C.-Y. Huang, A history-based cost-cognizant test case
prioritization technique in regression testing, J. Syst. Softw. 85 (3) (2012) 626–637, ISSN
0164-1212, http://www.sciencedirect.com/science/article/pii/S0164121211002780
(novel approaches in the design and implementation of systems/software architecture).
[84] Y.T. Yu, M.F. Lau, Fault-based test suite prioritization for specification-based testing,
Inf. Softw. Technol. 54 (2) (2012) 179–202, http://www.sciencedirect.com/science/
article/pii/S0950584911001947.
[85] N. Viennot, S. Nair, J. Nieh, Transparent mutable replay for multicore debugging
and patch validation, in: Proceedings of the Eighteenth International Conference
on Architectural Support for Programming Languages and Operating Systems,
ASPLOS ’13, Houston, Texas, USA, ACM, 2013, pp. 127–138.
[86] M. Felderer, B. Agreiter, R. Breu, Evolution of security requirements tests for service-
centric systems, in: Engineering Secure Software and Systems: Third International
Symposium, ESSoS 2011, Springer, 2011, pp. 181–194.
[87] M. Kassab, O. Ormandjieva, M. Daneva, Relational-model based change manage-
ment for non-functional requirements: approach and experiment, in: 2011 Fifth
International Conference on Research Challenges in Information Science (RCIS),
2011, pp. 1–9.
[88] M. Anisetti, C.A. Ardagna, E. Damiani, A low-cost security certification scheme for
evolving services, in: 2012 IEEE 19th International Conference on Web Services
(ICWS), 2012, pp. 122–129.
46 Michael Felderer et al.
[89] C. Huang, J. Sun, X. Wang, Y. Si, Selective regression test for access control system
employing RBAC, in: J.H. Park, H.-H. Chen, M. Atiquzzaman, C. Lee, T.-h. Kim,
S.-S. Yeo (Eds.), Advances in Information Security and Assurance, Lecture Notes in
Computer Science, vol. 5576, Springer, Berlin, ISBN 978-3-642-02616-4, 2009,
pp. 70–79.
[90] J. Hwang, T. Xie, D. El Kateb, T. Mouelhi, Y. Le Traon, Selection of regression system
tests for security policy evolution, in: Proceedings of the 27th IEEE/ACM International
Conference on Automated Software Engineering, ACM, 2012, pp. 266–269.
[91] M. Vetterling, G. Wimmel, A. Wisspeintner, Secure systems development based on
the common criteria: the PalME project, in: Proceedings of the 10th ACM SIGSOFT
Symposium on Foundations of Software Engineering, SIGSOFT ’02/FSE-10,
Charleston, South Carolina, USA, ACM, 2002, pp. 129–138.
[92] M. Bruno, G. Canfora, M. Penta, G. Esposito, V. Mazza, Using test cases as contract
to ensure service compliance across releases, in: B. Benatallah, F. Casati, P. Traverso
(Eds.), Service-Oriented Computing—ICSOC 2005, Lecture Notes in Computer
Science, vol. 3826, Springer, Berlin, ISBN 978-3-540-30817-1, 2005, pp. 87–100.
[93] V. Kongsli, Towards agile security in web applications, in: Companion to the 21st ACM
SIGPLAN Symposium on Object-Oriented Programming Systems, Languages, and
Applications, OOPSLA ’06, Portland, Oregon, USA, ACM, New York, NY, ISBN
1-59593-491-X, 2006, pp. 805–808.
[94] D. Qi, A. Roychoudhury, Z. Liang, K. Vaswani, DARWIN: an approach to
debugging evolving programs, ACM Trans. Softw. Eng. Methodol. 21 (3) (2012)
19:1–19:29.
[95] ISO/IEC, ISO/IEC 15408-1:2009 information technology—security techniques—
evaluation criteria for IT security—part 1: introduction and general model, 2009.
[96] N. Bjørner, K. Jayaraman, Checking cloud contracts in Microsoft Azure,
in: Proceedings of the 11th International Conference Distributed Computing and
Internet Technology ICDCIT 2015, Bhubaneswar, India, February 5-8, 2015,
2015, pp. 21–32.
[97] A.D. Brucker, L. Brügger, B. Wolff, Formal Firewall Conformance Testing: An
Application of Test and Proof Techniques, Softw. Test. Verif. Reliab. 25 (1) (2015)
34–71.
[98] Y.-W. Huang, F. Yu, C. Hang, C.-H. Tsai, D.-T. Lee, S.-Y. Kuo, Securing
web application code by static analysis and runtime protection, in: International
Conference on the World Wide Web (WWW), WWW ’04, New York, NY,
USA, ACM, New York, NY, ISBN 1-58113-844-X, 2004, pp. 40–52.
[99] J.S. Foster, M. Fähndrich, A. Aiken, A theory of type qualifiers, SIGPLAN Not. 34 (5)
(1999).
[100] J.S. Foster, T. Terauchi, A. Aiken, Flow-sensitive type qualifiers, SIGPLAN Not.
37 (5) (2002).
[101] N. Jovanovic, C. Kruegel, E. Kirda, Pixy: a static analysis tool for detecting web
application vulnerabilities (short paper), in: IEEE Symposium on Security and Privacy,
SP ’06, IEEE Computer Society, Washington, DC, ISBN 0-7695-2574-1, 2006,
pp. 258–263.
[102] N. Jovanovic, C. Kruegel, E. Kirda, Precise alias analysis for static detection of web
application vulnerabilities, in: Workshop on Programming languages and analysis
for security, PLAS ’06, Ottawa, Ontario, Canada, ACM, New York, NY, ISBN
1-59593-374-3, 2006, pp. 27–36.
[103] Y. Xie, A. Aiken, Static detection of security vulnerabilities in scripting languages,
in: USENIX Security Symposium, vol. 15, 2006, pp. 179–192.
Security Testing: A Survey 47
[121] M. Martin, M.S. Lam, Automatic generation of XSS and SQL injection attacks with
goal-directed model checking, in: USENIX Security Symposium, SEC’08, San Jose,
CA, USENIX Association, Berkeley, CA, 2008, pp. 31–43.
[122] A. Kieyzun, P.J. Guo, K. Jayaraman, M.D. Ernst, Automatic creation of SQL
injection and cross-site scripting attacks, in: ICSE ’09, IEEE Computer Society,
Washington, DC, ISBN 978-1-4244-3453-4, 2009, pp. 199–209.
[123] A. Klein, DOM Based Cross Site Scripting or XSS of the Third Kind, 2005, http://
www.webappsec.org/projects/articles/071105.shtml.
[124] S. Lekies, B. Stock, M. Johns, 25 million flows later-large-scale detection of DOM-
based XSS, in: ACM Conference on Computer and Communications Security
(CCS), 2013.
[125] P. Saxena, S. Hanna, P. Poosankam, D. Song, FLAX: systematic discovery of client-
side validation vulnerabilities in rich web applications, in: ISOC-NDSS, The Internet
Society, 2010.
[126] G. McGraw, Software Security: Building Security In, Addison-Wesley Professional,
2006, ISBN 0321356705.
[127] O. Tripp, M. Pistoia, S.J. Fink, M. Sridharan, O. Weisman, TAJ: effective taint analysis
of web applications, SIGPLAN Not. 44 (2009) 87–97, ISSN 0362-1340.
[128] B. Monate, J. Signoles, Slicing for security of code, in: TRUST, 2008, pp. 133–142.
[129] WALA, T. J. Watson Libraries for Analysis, http://wala.sf.net.
[130] L. Hubert, N. Barre, F. Besson, D. Demange, T.P. Jensen, V. Monfort, D. Pichardie,
T. Turpin, Sawja: static analysis workshop for Java, in: FoVeOOS, 2010, pp. 92–106.
[131] I. Haller, A. Slowinska, M. Neugschwandtner, H. Bos, Dowsing for overflows: a
guided fuzzer to find buffer boundary violations, in: Proceedings of the 22nd USENIX
Conference on Security, SEC’13, Washington, DC, USENIX Association, Berkeley,
CA, ISBN 978-1-931971-03-4, 2013, pp. 49–64.
[132] S.B. Mazzone, M. Pagnozzi, A. Fattori, A. Reina, A. Lanzi, D. Bruschi, Improving
Mac OS X security through gray box fuzzing technique, in: Proceedings of the
Seventh European Workshop on System Security, EuroSec ’14, Amsterdam, The
Netherlands, ACM, New York, NY, ISBN 978-1-4503-2715-2, 2014, pp. 2:1–2:6.
[133] M. Woo, S.K. Cha, S. Gottlieb, D. Brumley, Scheduling black-box mutational fuzzing,
in: Proceedings of the 2013 ACM SIGSAC Conference on Computer & Communica-
tions Security, CCS ’13, Berlin, Germany, ACM, New York, NY, ISBN 978-1-4503-
2477-9, 2013, pp. 511–522.
[134] A. Lanzi, L. Martignoni, M. Monga, R. Paleari, A smart fuzzer for x86 executables,
in: Third International Workshop on Software Engineering for Secure Systems,
2007, SESS ’07: ICSE Workshops 2007, 2007, pp. 7–7.
[135] G. Buehrer, B.W. Weide, P.A.G. Sivilotti, Using parse tree validation to prevent SQL
injection attacks, in: Proceedings of the 5th International Workshop on Software Engi-
neering and Middleware, SEM ’05, Lisbon, Portugal, ACM, New York, NY, ISBN
1-59593-205-4, 2005, pp. 106–113.
[136] D. Appelt, C.D. Nguyen, L.C. Briand, N. Alshahwan, Automated testing for SQL
injection vulnerabilities: an input mutation approach, in: Proceedings of the 2014
International Symposium on Software Testing and Analysis, ISSTA 2014, San Jose,
CA, USA, ACM, New York, NY, ISBN 978-1-4503-2645-2, 2014, pp. 259–269.
[137] J. Wang, P. Zhang, L. Zhang, H. Zhu, X. Ye, A model-based fuzzing approach for DBMS,
in: 2013 8th International Conference on Communications and Networking in China
(CHINACOM), IEEE Computer Society, Los Alamitos, CA, 2013, pp. 426–431.
[138] R. Garcia, Case study: experiences on SQL language fuzz testing, in: Proceedings
of the Second International Workshop on Testing Database Systems, DBTest ’09,
Providence, Rhode Island, ACM, New York, NY, ISBN 978-1-60558-706-6,
2009, pp. 3:1–3:6.
Security Testing: A Survey 49