<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Ensuring threat-model assumptions by using static code analyses</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Johannes</forename><surname>Geismann</surname></persName>
							<affiliation key="aff0">
								<orgName type="department">Department of Computer Science</orgName>
								<orgName type="institution" key="instit1">Heinz Nixdorf Institute</orgName>
								<orgName type="institution" key="instit2">Paderborn University</orgName>
								<address>
									<addrLine>Fürstenallee 11</addrLine>
									<postCode>33102</postCode>
									<settlement>Paderborn</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Bastian</forename><surname>Haverkamp</surname></persName>
							<affiliation key="aff0">
								<orgName type="department">Department of Computer Science</orgName>
								<orgName type="institution" key="instit1">Heinz Nixdorf Institute</orgName>
								<orgName type="institution" key="instit2">Paderborn University</orgName>
								<address>
									<addrLine>Fürstenallee 11</addrLine>
									<postCode>33102</postCode>
									<settlement>Paderborn</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Eric</forename><surname>Bodden</surname></persName>
							<affiliation key="aff0">
								<orgName type="department">Department of Computer Science</orgName>
								<orgName type="institution" key="instit1">Heinz Nixdorf Institute</orgName>
								<orgName type="institution" key="instit2">Paderborn University</orgName>
								<address>
									<addrLine>Fürstenallee 11</addrLine>
									<postCode>33102</postCode>
									<settlement>Paderborn</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
							<affiliation key="aff1">
								<orgName type="institution">Fraunhofer IEM</orgName>
								<address>
									<addrLine>Zukunftsmeile 1</addrLine>
									<postCode>33102</postCode>
									<settlement>Paderborn</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Ensuring threat-model assumptions by using static code analyses</title>
					</analytic>
					<monogr>
						<idno type="ISSN">1613-0073</idno>
					</monogr>
					<idno type="MD5">1AD33853B81CEC70BDFF88080105BF02</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T05:38+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<textClass>
				<keywords>
					<term>Threat-modeling</term>
					<term>Security</term>
					<term>Component-based</term>
					<term>Static Code Analyses</term>
					<term>Security-by-design</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>In the past years, the security of information systems has become more and more important. Threat modeling techniques are applied during the design phase of the development, helping to find potential threats as early as possible. However, assumptions made at this development step are often not considered in later steps or are not validated correctly, particularly not during the concrete implementation of the system. To overcome this problem, we present cards, a security modeling approach on the architectural level which utilizes code analyses to validate assumptions made during the threat modeling phase. cards helps ensure a correct implementation but also allows one to determine which effect code vulnerabilities can have on the overall architecture, as described through models. We implemented cards based on the Eclipse Modeling Framework, for Java-based system implementations. We evaluated cards based on the CoCoME case study to show its efficacy. The evaluation showed that cards can ease the validation of assumptions made during threat modeling and reduce the overall analysis effort.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1.">Introduction</head><p>Security is an essential property when developing modern software-intensive systems. To ensure high security, it is important to consider security not only during the implementation but already when designing the system. Especially dataflows are of high interest because confidential data resembles important assets for every information system, and also because attacker-controlled inputs need to be properly filtered before they are used. For this reason, one uses threat modeling approaches to reason about potential threats and corresponding countermeasures in early development steps <ref type="bibr" target="#b0">[1]</ref>.</p><p>Current approaches, however, are limited because of the lack of full traceability from threat model to the system artifacts. In particular, due to a missing connection of threat model artifacts and the implementation, this implementation often differs from the specifications made during threat modeling <ref type="bibr" target="#b1">[2]</ref>. Hence, assumptions made during the design or in the threat model are not correctly implemented or not even implemented at all, which leaves the security state of the actual system unclear.</p><p>Static code analyses can help to validate these assump-</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>2ND INTERNATIONAL WORKSHOP ON MODEL-DRIVEN ENGINEERING FOR SOFTWARE ARCHITECTURE (MDE4SA 2021),</head><p>September 13th 2021, Virtual (originally Växjö, Sweden) johannes.geismann@upb.de (J. Geismann); bastihav@mail.upb.de (B. Haverkamp); eric.bodden@upb.de (E. Bodden) 0000-0003-2015-2047 (J. Geismann); 0000-0002-1189-6290 (B. Haverkamp); 0000-0003-3470-3647 (E. Bodden) tions and are used to ensure that specific dataflows are prevented. For example, when paying in the super market, such an assumption on the implementation of the cash desk could be that customer credit card information is only sent to system parts that have permission to process it. Especially for large-scale systems this becomes a challenge because large code bases have to be analyzed. Additionally, such systems consist of several subsystems that are possibly developed by different parties. Distributed systems, micro-services and "serverless" architectures are just some prominent examples.</p><p>Particularly in these areas, model-based approaches are promising for threat modeling and security by design <ref type="bibr" target="#b3">[3]</ref>. However, most approaches are either fully model-driven approaches that are quite heavy-weight and usually hardly adaptable, e.g, UMLsec <ref type="bibr" target="#b4">[4]</ref> or SEED <ref type="bibr" target="#b5">[5]</ref>, or light-weight approaches such as STRIDE <ref type="bibr" target="#b0">[1]</ref> that only take threat modeling into account but do not consider the connection to the implemented system. To make threat modeling more effective for distributed systems, the following challenges need to be met.</p><p>Security requirements are usually defined by several disciplines and, therefore, should be specified on the architectural or system level such that they can be discussed independently from-and in the best case already before-the implementation phase. Countermeasures defined during such a threat modeling phase are usually assumptions made about the implementation. Hence, all assumptions made on the architectural level have to be made explicit in the model and have to be correctly refined into source code <ref type="bibr" target="#b1">[2]</ref>. Because this is a tedious and error-prone task, one must validate these assumptions on the source code level. An additional challenge is that the implemented system is usually not completely under the control of one development team. Static code analyses are a suitable solution to this end because they validate such assumptions on the source code and can be defined for a specific subsystem regardless of who is responsible for the implementation. However, if static code analyses are used, the results are most useful if fed back to the architecture and threat model. Unfortunately, current solutions fall short in this regard.</p><p>We see two main concepts as essential here: Connection to the source code and making the requirements and assumptions made during threat modeling explicit. To address these challenges, we have developed cards (Component-based Assumptions and Restrictions for Dataflow Specifications), a security modeling approach for dataflows in distributed systems. It provides a new DSL which operates on a generic component model and, therefore, can be adapted for existing component-based approaches. cards can be used to specify security requirements for dataflows, as well as assumptions made to fulfill these restrictions on the architectural level. cards further illustrates how static code analyses can be used to validate the assumptions on the code level.</p><p>In particular, this paper makes the following original contributions:</p><p>• cards: a concept and a domain-specific language for the specification of dataflow restrictions and assumptions on the architectural level, • an analyzer checking the system for dataflow violations, • a concept for generating the corresponding static code analyses, and • an implementation of these concepts based on the Eclipse modeling framework and Sirius, providing a textual as well as graphical syntax.</p><p>This paper is structured as follows: In Section 2, we provide an overview of cards, describe our concept for security restrictions and assumptions, explain our model analyses on and the generation of code analyses. In Section 3, we describe the implementation of the prototype and present the evaluation of cards in Section 4. Section 5 compares cards with related approaches and Section 6 concludes this paper.</p><p>The source code for our implementation can be found on https://github.com/secure-software-engineering/cards</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.">CARDS: Security Modeling and Validation</head><p>Effective threat modeling requires four basic steps: (1) Finding security-relevant systems parts and functions, (2) Finding potential threats with regard to these parts, (3) Risk-assessment, i.e., prioritizing the threats, and (4) implementing appropriate countermeasures. While threat modeling in general targets all kind of threats, cards focuses on dataflow-specific threats. We designed cards in such a way that it's concepts can be applied to existing development processes. Figure <ref type="figure" target="#fig_0">1</ref> shows an overview of the main steps. At first, the system designer creates a component model describing the basic architecture of the system (1). This step is not necessarily part of cards since an existing architectural model could also be adapted for the application of cards. Based on the component model, security and domain experts specify security-relevant information, e.g., confidential data. Also, security restrictions and security assumptions are specified explicitly. Security restrictions describe security requirements for specific data types of the system, e.g., data from the credit card reader are always sanitized before being sent to other components of the system. Dataflow-specific security requirements for the system can be refined to security restrictions. A security assumption makes an assumption to the implementation explicit, e.g., that confidential data will never be send to an external entity. Following this, a restriction describes global requirements the system should satisfy, an assumption contrarily describes what the designer assumes to be implemented for each component. The concept of both (1) and ( <ref type="formula">2</ref>) are described in more detail in Section 2.1.</p><p>Next, the system can be analyzed whether all security restrictions are satisfied assuming that all assumptions will be implemented correctly <ref type="bibr" target="#b3">(3)</ref>. If a violated restriction is found, the security experts may add additional assumptions to mitigate this security issue and re-apply the analysis until all restrictions are satisfied. The as- sumptions can be useful for the actual implementation of the system giving the developers guidelines for the implementation. Concepts for the analyses and potential use-cases in the development are explained in Section 2.2. Finally, cards uses generated static code analyses to validate if all assumptions are implemented correctly <ref type="bibr" target="#b4">(4)</ref>. For this, we provide in Section 2.3 a concept for how the assumptions can be mapped to static code analyses automatically. If all generated analyses pass and no violation is found on source code, the restrictions made to the system can be seen as satisfied on code-level, too.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Component</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.1.">Specifying Restrictions and Assumptions</head><p>In this section, we explain our concepts of restrictions, assumptions, and all concepts required. We developed a DSL for specifying security-relevant information of the system, security restrictions, and security assumptions. Since it is essential to refer to the actual system model, this DSL refers to a component model. For demonstration purposes, we are using a generic component model which is described in Section 2.1.1. However, since we use a generic component model, we see our concepts not restricted to one component model but adaptable to other component models. After that, we describe in Section 2.1.2 how security-relevant information can be formalized. Finally, we explain our concept of restrictions and assumptions in more detail and describe our DSL for this step.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.1.1.">Component Model</head><p>For demonstration purposes, we are using a generic component model. We therefore expect that our concepts can be applied to most other component-based system specifications as well. Figure <ref type="figure" target="#fig_1">2</ref>  </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.1.2.">Security-relevant Information</head><p>Based on the component model, cards utilizes several security-relevant pieces of information that can be specified within our DSL. In the following, we give a short overview of the supported language features and their purpose.</p><p>DataTypes are representing the security-relevant data. They are the data assets of the system because they represent the data that should be protected. We only consider data that are relevant for the analyses. DataTypes can have attributes for labels, e.g, to mark a datatype as external user input, a security level, and a type which can be interesting when mapping to the actual source code base. Listing 1 shows an excerpt of the example where three data types are defined (lines 1-5). Data Groups are used to combine several Data-Types, e.g., all data describing parts of credit card information. DataGroups are mainly used when defining Restrictions and Assumptions. In Listing 1, the data types CreditCardNumber and CreditCardPIN are grouped (cf. line 11).</p><p>Component Groups are used similarly to combine components that have something in common, e.g., (un)trusted components.</p><p>Component Kinds can be used to categorize components, e.g., to mark components as external entities, datastores, or processes (similar to DFD threat modeling) <ref type="bibr" target="#b0">[1]</ref>. Data Sources describe which components are the sources for a specific DataType. In Listing sanitizer is defined that should sanitize all confidential credit card information, e.g., by replacing it with asterisks. Security Level can be used to assign a specific level of security or trust to components.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.1.3.">Dataflow Restrictions and Assumptions</head><p>In the following, we describe our concepts for security restrictions and corresponding assumptions and how cards supports the security engineer specifying these. Essentially, restrictions formally describe security requirements regarding the dataflow within the system. Assumptions are used to describe countermeasures that are assumed to be in place in the source code.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Specifying Restrictions</head><p>Restrictions are used to formally describe security requirements for the data types specified as assets. In essence, the security engineer has to describe a security policy for each data type describing which component is allowed to access the data. Basically, there are two options: 1. Globally allow all components to access a data type and define exceptions that are not allowed to access the data type (deny-listing approach) and 2. globally prevent components from accessing the data type and define exceptions describing components that are allowed to access the data type (allow-listing approach).</p><p>Corresponding to this, we distinguish between two kinds of restrictions, so-called Allow-Restrictions and Prevent-Restrictions. For each datatype, the security engineer has to specify such a restriction. One restriction may cover more than one data type. Listing 2 shows an example of a specified restriction. In particular, we define a prevent restriction describing, that the data types CreditCardPin and CreditCardNumber should only be accessed by the components CardReader, Bank, and CashDeskPC by combining the prevent restriction and a component refinement. Beside component refinements, restrictions cards also supports refinements for component parts and component groups. Without any knowledge of the concrete behavior of the components, this Listing 2: Example of a restriction using cardsspecification. restrictions could not be validated. The security engineer can therefore specify assumptions of the implemented behavior which must be met to achieve the restriction. We next explain how to specify such assumptions in cards.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Specifying Assumptions</head><p>An assumption describes a required behavior of a component. cards provides different kinds of assumptions. At first, we distinguish between two major kinds of assumptions: neverOutassumptions and sanitzer-assumptions. A neverOut-assumption specifies that a context element will never leak the given data type, e.g., that a component will never send private data to another component. A sanitizerassumption specifies that a context element will always sanitize the data before leaking it using a specific sanitizer, e.g., replacing some digits with asterisks when sending credit card information to the printer. We support three different context elements: components, ports, and flows within a component. Assumptions for component parts are not useful because all parts of a specific component type will have the same implementation. In the example in Listing 3, we show four different assumptions: 1. an assumption that the (composite) component CashDesk will never leak the credit card info (line 3). 2. an assumption that the pcLightDisplay port will never leak the credit card info (line 6). 3. an assumption that the pcCashBoxPort port will never leak the credit card info (line 7). 4. an assumption that the component CashDeskPc port will always sanitize dataflows of credit card info from pcCardReaderPort to pcPrinterPort, using the sanitizer CCSanitizer (line 10).</p><p>cards provides an analysis to check whether the specified restriction is satisfied on model level if all assumptions are implemented correctly. This analysis is ex-plained in the next section. Section 2.3 describes our concept how the correct implementation of the assumptions can be validated using static code analyses.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.2.">Analysis and Reporting</head><p>cards provides model-based analyses checking whether all specified restrictions are satisfied and if all security assumptions have been implemented correctly. This analysis should be part of the threat modeling activity during system design and is also useful to find effects in the system's architecture when a problem in the actual implementation is found. The analysis can help security experts to find unintended dataflows and to specify requirements for the implementation of a component by creating security assumptions. Besides the analysis, cards also provides several reporting features to assist the security experts by exporting the analysis results in useful formats. In this section, we describe how our analysis works at first and how the results can be reported afterward.</p><p>In cards, we apply a two-step analysis. First, for each component, all possible paths through the model are determined. Second, for each component and component parts respectively, all data types are determined that might reach this component. For the first analysis, we treat the component model as a directed graph where components are the nodes and port connectors are the edges. Conceptually, the analysis is as a basic depth-first search. The output of the analysis is a mapping from components to all (longest) paths through the model, i.e., for each component, we store which components it could directly or indirectly communicate with. In the second analysis, for every component, a set of available data types is determined, i.e., data types that could possibly be accessed by this component. In the beginning, the set of available data types of all components that are a source for a data type are set to these data types. Next, the analysis recursively propagates data types through the system. The analysis iterates through the paths and, for each step in the path, adds all currently available data types to an output set which is again propagated to the next component in the path. In this step, we evaluate given assumptions of the component to alter the set of available data. If a sanitizer-assumption is specified for this component and datatype, we add a flag to the data type that it becomes sanitized by this component. If a neverOut-assumption is specified, the data type is removed from the output set. The output of this analysis is a mapping of components to pairs of lists of paths and data types, which are received on these paths. The advantage of this two-step analysis is that the result does not only show available data for each component but also which path is the source for a given datatype.</p><p>To find violations of restrictions, we check for each restriction if data types of the defined restriction are illegally accessible at a component. Based on the analysis results, we can compare the list of available data types and the list of data types specified in the restriction. If a violation is found, it is essential to report it to the engineers properly. For this, cards provides different report features, e.g., visual feedback in the graphical editors, exported HTML and JSON reports, and an export to attack-defense graphs <ref type="bibr" target="#b6">[6]</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.3.">Using Code Analyses for Validation</head><p>When all violations of dataflow restrictions are eliminated by specifying assumptions, these assumptions must also be met through correctly implemented source code.</p><p>To validate this, we propose to use static code analysis (cf.</p><p>Step 4 in Figure <ref type="figure" target="#fig_0">1</ref>). We provide a general concept for creating static code analyses for the given model assumptions. Since these analyses base on a common structure, it is reasonable to generate them and, thus, automating this step. However, to generate the analysis, some manual prerequisites must be met, i.e., a connection between the model and the code base has to be created. In the following, we explain how we propose to create such a connection first and how the analyses can be generated automatically in a second step.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.3.1.">Connection to Source Code</head><p>For connecting the (secured) component model to a given code base, we propose to use a so-called mapping model. This mapping model is used to describe the connections between model artifacts and parts of the source code. All required mappings are shown in Table <ref type="table">1</ref>. All mappings have to specify the model element, class and a method. Since creating all mappings by hand is a tedious task, we provide a source code generator that generates source code skeletons for a given composite component and also creates an appropriate mapping model containing all required mappings. As proof of concept, we implemented a generator for Java which is explained in Section 3 in more detail. Supporting the engineers in creating a mapping model for an existing code base is not in the scope of this paper but we see potential by applying semi-automatic approaches like done by Peldszus et al. <ref type="bibr" target="#b7">[7]</ref>. However, both the mapping model itself and the generator are conceptually not restricted to one programming language but can be easily adapted for other programming languages.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.3.2.">Generating Static Analyses</head><p>After creating the mapping model, we use this information to create a suitable static code analysis. Since we tend to analyze the flow of information, we use a taint analysis to validate the flow of data through the program.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Table 1</head><p>Mappings defined in the mapping model.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Model Element Description Component</head><p>In general, a component is mapped to a class. However, this mapping is also used to specify a method that describes the main entry point of the component, e.g., a method that executes the behavior of the component.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Port</head><p>This mapping is used to specify a method for writing to or reading from a component port. We therefore distinguish between IN-port mappings and OUT-port mappings. If an INOUT-port is used, both mappings have to be specified.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Data Source</head><p>This mapping is used to specify a method that returns a specific data type if a component is specified as a source for a data type.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Sanitizer</head><p>This mapping is used to specify a method that executes the sanitization of a data type.</p><p>Instead of generating full analyses, we use the information stored in assumptions and the mapping model to configure taint analyses provided by mature frameworks such as Boomerang <ref type="bibr" target="#b8">[8,</ref><ref type="bibr" target="#b9">9]</ref>. Since assumptions are always specified for a specific component, the analyses are restricted to the corresponding implementation for this component as well. In general, both the read-messages for all IN-ports of the component that receive a specific datatype and (if the component is a source) the source-method for data type are potential sources for the taint analysis. Similarly, all OUT-ports are potential sinks for the taint analysis. In the following, we describe how a taint analysis can be specified for each assumption based on our models.</p><p>We assume that the mapping model is fully specified and, therefore, provides methods for reading a data type from a IN-port, writing a data type to an OUT-port, sanitizing data types for each sanitizer, and for executing the component's behavior. The last method can be used as an entry-point for the code analyses. If not specified, all public accessible methods have to be considered as potential entry points, e.g., public methods in Java. Methods for ports and sanitizer are used to configure the taint analyses. Both methods for reading IN-ports of all ports that are capable of handling the data type to be analyzed, and a method if the component is a source for the data type are considered as sources for in taint analysis. Correspondingly, methods for OUT-ports are considered as sinks in the taint analysis. In the case of a flow assumption that explicitly defines a flow from one to another port, only methods for these two ports are considered.</p><p>When generating the analyses, we can reduce the search space by considering the information of the component model. In particular, we only take methods for ports into account that are capable of handling the data types under investigation. For example, let us assume that the component of the card reader (cf. Listing 1) is connected to the cash desk. When analyzing the implementation of the cash desk on the flow of credit card information, it is sufficient to take the port of this connection as a source for the credit card information.</p><p>After executing the analyses, the result shows if the assumptions are correctly implemented in the given implementation. An advantage is that not all analyses have to be re-evaluated if the source code for a component changes but only the analyses that are relevant for this component. Also, the security engineer can use this information to either consider this fact in the security model, e.g., by adding additional assumptions to other components, or by contacting the developer of the components that do not comply with the assumptions.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">Implementation</head><p>We implemented a prototype of our DSL and analyses using the Eclipse Modeling Framework (EMF). We chose to add a textual representation of the DSL using Xtext <ref type="bibr" target="#b10">[10]</ref> and implemented a graphical editor using Sirius <ref type="bibr" target="#b11">[11]</ref>.</p><p>The source code for our implementation can be found on https://github.com/secure-software-engineering/cards</p><p>In the following, we describe all parts of our implementation shortly.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Textual and Graphical Editor</head><p>The graphical editor for cards was implemented using Sirius. Figure <ref type="figure" target="#fig_2">3</ref> shows an example of the graphical editor. In addition, we provide a textual editor implemented using the Xtext framework. All changes made to the model in the graphical editor are also reflected on the underlying Xtext model. Hence, developers can switch at any time to the representation they prefer. Using the graphical editor, we can easily model systems or create representations for existing models. The diagram representation can be analyzed using Sirius' own tool to verify diagrams, which invokes our analyses, using EMF validation and are shown in the model and the Eclipse problems view.</p><p>Analyses The analysis explained in Section 2.2 is implemented as a basic depth-first search. We treat the model as a directed graph and recursively propagate data types, which a component is source for, over outgoing edges. Output of this analysis is a mapping from components to all paths through the model. The assumption analysis explained in Section 2.2 iterates through the paths determines the processed data per component. The output of this analysis is a mapping of components to pairs of lists of paths and data types, which are received on these paths. To resolve restrictions, we check for each restriction, if data types of the defined restriction are illegally accessible at a component.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Mapping Model</head><p>As explained in 2.3, we created a mapping model, which maps model parts to Java code to ease the generation of static code analyses. This mapping is implemented as a EMF model. Empty mappings for new model parts are automatically added to this model when using our graphical editor suite. Instead of providing an additional DSL for the mapping model, we provide a properties view for relevant parts of the model in our graphical editor, where mappings can be edited.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Generation of Glue Code</head><p>Using the Xtend framework, we implemented a code generation, whose output can serve as glue code for Java implementations of a given model. Components are implemented as Java threads and all connections and mappings between component parts are implemented using the observer pattern. Communication is restricted to strings, but can be extended to arbitrary objects. Similar to our DSL, composite components handle the inter-component communication by instantiating connections. Additionally, all assumptions are added as documentation for the developer using Java annotations. Upon code generation, the mapping model is also created automatically.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Static Code Analyses</head><p>Based on the concepts described in Section 2.3.2, we generate the configuration code for the static code analysis automatically using the Xtend framework. The generator takes the component model and the mapping model as input. All assumptions can be validated using taint analysis. Since we are focusing on Java code in our implementation, we decided to use the established analysis framework Boomerang <ref type="bibr" target="#b9">[9,</ref><ref type="bibr" target="#b8">8]</ref> for the specification and execution of the taint analyses. We generate the required taint analyses for each assumption. The generator can be adapted to any other framework that enables the specification and execution of taint analyses. This also allows one to use different languages for the implementation of the system's components.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.">Case Study</head><p>We evaluated cards using a case study based on CoCoME <ref type="bibr" target="#b12">[12]</ref>. CoCoME is an established example for component modeling commonly used in research. The example system is a model of a store which is part of an enterprise. An enterprise consists of a server, client and several stores, each store consists of a server, client and several cash desks. A cash desk consists of a bar code scanner, a card reader, a cash box, a printer and a light display, all of which are connected to a cash desk pc, which also connects to a bank. Figure <ref type="figure" target="#fig_2">3</ref> shows the component model using our graphical editor. For our evaluation, we chose to base our model on CoCoME's first proposed use case, the sale. A sale is an interaction between a customer and a cashier. We model the complete cash desk, a bank and the store infrastructure. We adapted the data types provided in the reference implementation of CoCoME <ref type="bibr" target="#b13">[13]</ref>, as they are not part of the original definition. We used the case study as a proof of concept of cards itself. For our example, we defined a restriction that the credit card number and pin may only be accessed by the card reader, bank and cash desk pc. In the real world, the credit card number may be printed if partly replaced with asterisks, so a sanitization is a sensible approach.</p><p>Using the provided models of CoCoME, this restriction is not directly clear, as dataflows are not part of their modeling. With cards, we can already provide a formal restriction for this use case. Listing 2 shows the textual representation of this restriction. Upon validating the model, our analyses provide the developer with feedback that the current model violates the restriction because the credit card information may be accessed at every component, including the printer. To address this violation, we chose to define several dataflow assumptions for our model. Listing 3 shows a representation of the assumptions we made to resolve the violations. In particular, we assume that the credit card information will never be leaked to the light display, cash box and anything outside the cash desk component. Additionally, dataflows between pcCardReaderPort and pcPrinterPort of the cash desk pc component will be sanitized using the CCSanitizer. With these assumptions in place, the analysis does not show any violations for the restriction. Developers might find major security flaws in their architecture based on restriction violations, which may lead to architectural refactorings that resolve the violation. We used cards to generated a Java project for the cash desk application and implemented the behavior code for the relevant components based on the documentation of CoCoME. Also, the corresponding mapping model and the static code analyses were created automatically.</p><p>For the evaluation of the analyses, we created two versions of the implementation: one version violating the assumptions which should therefore lead to a report by the analysis, and one version that respects the dataflow assumptions, e.g. by preventing dataflows or using the desired sanitizer. The analyses were able to find the incorrect dataflows. However, it showed that in the current implementation false positives might get reported if one specifies different policies for data of the same port. To solve this problem, the developer needs to either adjust the implementation making sure that the data are filtered and correctly sanitized, or the result is fed back into the The evaluation showed one major advantage of the approach. When the source of one component changes, only the analyses for this component have to be re-evaluated instead of analyzing the whole source code again. For example, assuming that the implementation of the component CashDeskPC changes, only the analyses for this component have to be executed. If the implementation of other components changes, no re-evaluation is required. Especially for large-scale systems, this compositional approach can help to reduce the overall time for threat modeling and risk analysis.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.">Related Work</head><p>There are two major areas to which cards is related: Threat Modeling and Model-based security testing. Threat modeling because cards enables threat modeling and analyses based on the created threat model. Security testing since cards aims to automate validating the implemented security assumptions.</p><p>Threat Modeling For threat modeling, often dataflow diagram based approaches are applied because of the simplicity and technology-agnostic modeling <ref type="bibr" target="#b1">[2]</ref>. Most prominent examples are the STRIDE approach <ref type="bibr" target="#b14">[14]</ref> or LINDDUNN <ref type="bibr" target="#b15">[15]</ref> for privacy-focused threat modeling. cards is related to these approaches since it also utilizes an architectural description of the system. However, in contrast, cards focuses on seamless threat modeling by combining threat modeling and analyses on the actual implementation. Currently, cards does support finding known threats automatically but we plan to implement this in future work.</p><p>Several approaches enhanced the use of data-flow diagrams to improve threat modeling and risk analysis.</p><p>Extended dataflow diagrams Berger et al. present an approach using extended DFDs <ref type="bibr" target="#b16">[16]</ref> which are a more formal version of classical dataflow diagrams. Since these DFDs allow for formal analyses and hierarchical system specification, it allows for more precise threat modeling. In contrast, we base our threat modeling approach on established modeling artifacts enabling the integration of our concepts into existing approaches. Peldszus et al. <ref type="bibr" target="#b17">[17]</ref> providing an approach that aims at the connection from dataflow diagrams to source code and is therefore also highly related to our approach. This approach enables more precise threat modeling because the actual implementation is respected in the threat model. In contrast, cards focuses on a top-down approach enabling early analyses without a code-base.</p><p>Also, model-driven and model-based security grew to a large research area in the last years <ref type="bibr" target="#b18">[18]</ref>. An overview of approaches in general can be found in the mapping study by Nguyen et al. <ref type="bibr" target="#b19">[19]</ref>. Several approaches integrate security modeling into existing modeling approaches, e.g. SEED <ref type="bibr" target="#b5">[5]</ref> or UMLsec <ref type="bibr" target="#b4">[4]</ref>. SEED <ref type="bibr" target="#b5">[5]</ref> is an approach that aims at building a bridge between embedded system experts and security experts. In SEED, security experts can define security solutions that can be used during the system design and to validate the system based on the integrated security solutions. In contrast, cards focuses on the definition of assumptions at design time and the validation on source code level instead of defining concrete security solutions that are integrated into the system design. UMLsec <ref type="bibr" target="#b4">[4]</ref> provides a UML profile providing modeling concepts and analyses for security-relevant system properties. In contrast to UMLsec, cards focuses on the connection of design-time assumptions and the source code implementation, leaving model-driven concepts like concrete behavior modeling out.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Model-based Security Testing</head><p>Following the classifications discussed in a survey by Felderer et. al <ref type="bibr" target="#b20">[20]</ref>, for security testing two principal approaches are distinguished in general: Testing to find vulnerabilities and unknown threats in the system and testing if the security mechanisms are implemented correctly <ref type="bibr" target="#b21">[21]</ref>. The first category does not fit to cards since we are using threat modeling techniques to define security requirements and threats in the initial steps but cards does not contribute to finding new threats or vulnerabilities by itself.</p><p>Following Schieferdecker et al. <ref type="bibr" target="#b22">[22]</ref>, models that are used for model-based security testing can be categorized into three major categories: First, Architectural and functional models which "are concerned with system requirements regarding the general behavior and setup of a software-based system" <ref type="bibr" target="#b22">[22]</ref>. Second, Threat, fault and risk models that "focus on what can go wrong" <ref type="bibr" target="#b22">[22]</ref> and are used to determine potential threats, corresponding risk factors, and their relationships, e.g., STRIDE <ref type="bibr" target="#b0">[1]</ref>. Third, Weakness and vulnerabilities models describing "the weakness and vulnerabilities itself" <ref type="bibr" target="#b22">[22]</ref>, e.g., models referring to CVE or CWE but also catalogs for generating threat lists like in the Microsoft Threat Modeling Tool <ref type="bibr" target="#b0">[1]</ref>. cards provides a combination of the approaches of the first and second category because it utilizes architectural models for describing a secure system architecture but also concepts and analyses for reasoning about dataflow threats in the system. In contrast to existing approaches cards combines a light-weighted threat modeling approach on abstract design models with concrete analyses on the implemented system and, therefore, enables seamless threat modeling of a system. Providing vulnerability and attack catalogs or the integration of CVEs is currently not supported and left for future work.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6.">Conclusion</head><p>Modern information systems require development techniques that ensure security-by-design. Especially, dataflows within a system are of high interest since data is often a sensitive asset of the system. The early creation of a threat model but also the seamless integration of the threat model into all development steps of the system are essential to this extent. In this paper, we have presented cards, a model-based threat modeling approach for dataflows in distributed systems. We discussed our concepts based on a generic component model. cards allows to formally specify security requirements for sensitive data of the system and to validate these requirements on architectural level by defining assumptions for the system's components that need to be fulfilled in the implementation. For this, we provide a DSL that allows defining both requirements and assumptions for a componentbased system specification. Using this systematic ap-proach helps designers identify required dataflow rules for the implementation at early development steps. These rules (assumptions) can be useful in different ways: On the one hand, when implementing a new system, they can be used as requirements for the later implementation. On the other hand, they can be used to validate if an already implemented system does comply with the security assumptions.</p><p>Furthermore, we provide a concept of how these assumptions can be expressed by static code analyses, allowing to automatically validate the assumptions on a given implementation. The advantage of this modular approach compared to approaches that validate security requirements is that assumptions are defined componentwise and, therefore, only the code for affected components has to be analyzed. This is especially important if the source code for only one component changes and the requirements has to be re-evaluated. Also, connecting a threat model on the architectural level with concrete analyses on the source code level helps feed back analysis results into the threat model. This simplifies reasoning about the effects of the analysis results.</p><p>We provide a prototypical implementation of cards containing a graphical and textual editor for component model and our DSL for describing assumptions and restrictions and evaluated our concepts based on a use case of the CoCoME case study. To ease the process of connecting threat model and code, we provide a generator to Java code that automatically creates a mapping model describing the connections from model elements to dedicated Java methods. For existing system implementations, the approach is currently limited in efficacy because the mapping model that connects the component model used for threat modeling and the source code has to be created manually. However, we see potential to automate this step in future work. We also plan to extend the approach by taking the kind and security level of data types and components into account when analyzing the model. This would enable the security engineers to apply concepts of DFD-threat modeling (like in STRIDE) on the component model and to search for required restrictions and corresponding assumptions automatically.</p><p>We see cards as a promising combination of lightweighted threat modeling and concrete security analyses on source code which can help system developers to create more secure large-scaled distributed systems.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Figure 1 :</head><label>1</label><figDesc>Figure 1: Overview and main process steps of cards.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Figure 2 :</head><label>2</label><figDesc>Figure 2: Overview of the used generic component model.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Figure 3 :</head><label>3</label><figDesc>Figure 3: Component diagram based on the CoCoME case study.</figDesc><graphic coords="8,89.29,84.19,416.70,142.92" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_1"><head></head><label></label><figDesc>1, the component CardReader is marked as source for the types CredietCardPin and CreditCard-</figDesc><table><row><cell>dataTypes {</cell></row><row><cell>DataType BarCode { },</cell></row><row><cell>DataType CreditCardNumber {securityLevel 3 },</cell></row><row><cell>DataType CreditCardPin {securityLevel 4 }</cell></row><row><cell>}</cell></row><row><cell>components {</cell></row><row><cell>AtomicComponent CardReader {</cell></row><row><cell>ports { INOUTPort cardReaderPort ( )}</cell></row><row><cell>sourceOf { CreditCardPin,CreditCardNumber }}</cell></row><row><cell>}</cell></row><row><cell>Groups {DataGroup CreditCardInfo {CreditCardPin,</cell></row><row><cell>CreditCardNumber}}</cell></row><row><cell>Sanitizer {CCSanitizer}</cell></row><row><cell>Number.</cell></row></table><note>Sanitzers are used to modify data making them secure for further use, e.g., escaping bad characters. At this stage, a sanitizer is only on conceptual level and can be used in the security assumptions (cf. Section 2.1.3). In the example, a Listing 1: Example code of a cards-specification.</note></figure>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<author>
			<persName><forename type="first">A</forename><surname>Shostack</surname></persName>
		</author>
		<title level="m">Threat Modeling: Designing for Security</title>
				<meeting><address><addrLine>Indianapolis, USA</addrLine></address></meeting>
		<imprint>
			<publisher>John Wiley and Sons</publisher>
			<date type="published" when="2014">2014</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Security threat modeling: Are data flow diagrams enough?</title>
		<author>
			<persName><forename type="first">L</forename><surname>Sion</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Yskout</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Van Landuyt</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Van Den Berghe</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Joosen</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IEEE/ACM 42nd</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<monogr>
		<title level="m">International Conference on Software Engineering-Workshops</title>
				<imprint>
			<publisher>IEEE/ACM</publisher>
			<date type="published" when="2020">2020</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">An extensive systematic review on the Model-Driven Development of secure systems</title>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">H</forename><surname>Nguyen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Kramer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Klein</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Le</surname></persName>
		</author>
		<idno type="DOI">10.1016/j.infsof.2015.08.006</idno>
	</analytic>
	<monogr>
		<title level="j">Information and Software Technology</title>
		<imprint>
			<biblScope unit="volume">68</biblScope>
			<biblScope unit="page" from="62" to="81" />
			<date type="published" when="2015">2015</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Umlsec: Extending uml for secure systems development</title>
		<author>
			<persName><forename type="first">J</forename><surname>Jürjens</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">UML 2002 -The Unified Modeling Language</title>
				<editor>
			<persName><forename type="first">J.-M</forename><surname>Jézéquel</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">H</forename><surname>Hussmann</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">S</forename><surname>Cook</surname></persName>
		</editor>
		<meeting><address><addrLine>Berlin Heidelberg; Berlin, Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2002">2002</date>
			<biblScope unit="page" from="412" to="425" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Integrating security mechanisms into embedded systems by domain-specific modelling</title>
		<author>
			<persName><forename type="first">M</forename><surname>Vasilevskaya</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><forename type="middle">A</forename><surname>Gunawan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Nadjm-Tehrani</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Herrmann</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Security and Communication Networks</title>
		<imprint>
			<biblScope unit="volume">7</biblScope>
			<biblScope unit="page" from="2815" to="2832" />
			<date type="published" when="2014">2014</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">DAG-based attack and defense modeling: Don&apos;t miss the forest for the attack trees</title>
		<author>
			<persName><forename type="first">B</forename><surname>Kordy</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Piètre-Cambacédès</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Schweitzer</surname></persName>
		</author>
		<idno type="DOI">10.1016/j.cosrev.2014.07.001</idno>
		<idno type="arXiv">arXiv:1303.7397v1</idno>
	</analytic>
	<monogr>
		<title level="j">Computer Science Review</title>
		<imprint>
			<biblScope unit="volume">13</biblScope>
			<biblScope unit="issue">14</biblScope>
			<biblScope unit="page" from="1" to="38" />
			<date type="published" when="2014">2014</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<monogr>
		<author>
			<persName><forename type="first">S</forename><surname>Peldszus</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Tuma</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Strüber</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Jürjens</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename></persName>
		</author>
		<title level="m">Scandariato, Secure Data-Flow Compliance Checks between Models and Code based on Automated Mappings</title>
				<imprint>
			<date type="published" when="2019">2019</date>
		</imprint>
	</monogr>
	<note>MODELS2019, i</note>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Context-, flow-, and field-sensitive data-flow analysis using synchronized pushdown systems</title>
		<author>
			<persName><forename type="first">J</forename><surname>Späth</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Ali</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Bodden</surname></persName>
		</author>
		<idno type="DOI">10.1145/3290361</idno>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the ACM SIGPLAN Symposium on Principles of Programming Languages</title>
				<meeting>the ACM SIGPLAN Symposium on Principles of Programming Languages</meeting>
		<imprint>
			<date type="published" when="2019">2019</date>
			<biblScope unit="volume">3</biblScope>
			<biblScope unit="page">29</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Boomerang: Demand-driven flow-and context-sensitive pointer analysis for Java</title>
		<author>
			<persName><forename type="first">J</forename><surname>Späth</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><forename type="middle">N Q</forename><surname>Do</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Ali</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Bodden</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">European Conference on Object-Oriented Programming (ECOOP)</title>
				<imprint>
			<date type="published" when="2016">2016</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<monogr>
		<ptr target="ac-cessed" />
		<title level="m">Xtext</title>
				<imprint>
			<date type="published" when="2020-12">Dec-2020</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<monogr>
		<title/>
		<author>
			<persName><surname>Sirius</surname></persName>
		</author>
		<ptr target="ac-cessed" />
		<imprint>
			<date type="published" when="2020-12">Dec-2020</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">Cocome-the common component modeling example</title>
		<author>
			<persName><forename type="first">S</forename><surname>Herold</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Klus</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Welsch</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Deiters</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Rausch</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Reussner</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Krogmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Koziolek</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Mirandola</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Hummel</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">The Common Component Modeling Example</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2008">2008</date>
			<biblScope unit="page" from="16" to="53" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<monogr>
		<ptr target="https://cocome.org" />
		<title level="m">Cocome -the common component modelling example webpage</title>
				<imprint>
			<date type="published" when="2020-12">Dec-2020</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<monogr>
		<author>
			<persName><forename type="first">A</forename><surname>Shostack</surname></persName>
		</author>
		<title level="m">Threat modeling : designing for security</title>
				<meeting><address><addrLine>Indianapolis, Ind.</addrLine></address></meeting>
		<imprint>
			<publisher>Wiley</publisher>
			<date type="published" when="2014">2014</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">A privacy threat analysis framework: supporting the elicitation and fulfillment of privacy requirements</title>
		<author>
			<persName><forename type="first">M</forename><surname>Deng</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Wuyts</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Scandariato</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Preneel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Joosen</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Requirements Engineering</title>
		<imprint>
			<biblScope unit="volume">16</biblScope>
			<biblScope unit="page" from="3" to="32" />
			<date type="published" when="2011">2011</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">Automatically extracting threats from extended data flow diagrams</title>
		<author>
			<persName><forename type="first">B</forename><forename type="middle">J</forename><surname>Berger</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Sohr</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Koschke</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Engineering Secure Software and Systems</title>
				<editor>
			<persName><forename type="first">J</forename><surname>Caballero</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">E</forename><surname>Bodden</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">E</forename><surname>Athanasopoulos</surname></persName>
		</editor>
		<meeting><address><addrLine>Cham</addrLine></address></meeting>
		<imprint>
			<publisher>Springer International Publishing</publisher>
			<date type="published" when="2016">2016</date>
			<biblScope unit="page" from="56" to="71" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">Model-based security analysis of feature-oriented software product lines</title>
		<author>
			<persName><forename type="first">S</forename><surname>Peldszus</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Strüber</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Jürjens</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 17th ACM SIGPLAN International Conference on Generative Programming: Concepts and Experiences</title>
				<meeting>the 17th ACM SIGPLAN International Conference on Generative Programming: Concepts and Experiences</meeting>
		<imprint>
			<date type="published" when="2018">2018</date>
			<biblScope unit="page" from="93" to="106" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<analytic>
		<title level="a" type="main">Engineering security into distributed systems: A survey of methodologies</title>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">V</forename><surname>Uzunov</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><forename type="middle">B</forename><surname>Fernandez</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Falkner</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">J. UCS</title>
		<imprint>
			<biblScope unit="volume">18</biblScope>
			<biblScope unit="page" from="2920" to="3006" />
			<date type="published" when="2012">2012</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<analytic>
		<title level="a" type="main">Model-based security engineering for cyber-physical systems: A systematic mapping study</title>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">H</forename><surname>Nguyen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Ali</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Yue</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Information and Software Technology</title>
		<imprint>
			<biblScope unit="volume">83</biblScope>
			<biblScope unit="page" from="116" to="135" />
			<date type="published" when="2017">2017</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<analytic>
		<title level="a" type="main">Model-based security testing: a taxonomy and systematic classification</title>
		<author>
			<persName><forename type="first">M</forename><surname>Felderer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Zech</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Breu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Büchler</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Pretschner</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Software Testing, Verification and Reliability</title>
		<imprint>
			<biblScope unit="volume">26</biblScope>
			<biblScope unit="page" from="119" to="148" />
			<date type="published" when="2016">2016</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b21">
	<analytic>
		<title level="a" type="main">Research on software security testing</title>
		<author>
			<persName><forename type="first">G</forename><surname>Tian-Yang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Yin-Sheng</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">World Academy of science, engineering and Technology</title>
		<imprint>
			<biblScope unit="volume">70</biblScope>
			<biblScope unit="page" from="647" to="651" />
			<date type="published" when="2010">2010</date>
		</imprint>
	</monogr>
	<note>You-yuan</note>
</biblStruct>

<biblStruct xml:id="b22">
	<analytic>
		<title level="a" type="main">Model-based security testing</title>
		<author>
			<persName><forename type="first">I</forename><surname>Schieferdecker</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Grossmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">A</forename><surname>Schneider</surname></persName>
		</author>
		<idno type="DOI">10.4204/EPTCS.80.1</idno>
	</analytic>
	<monogr>
		<title level="m">Proceedings 7th Workshop on Model-Based Testing, MBT 2012</title>
				<editor>
			<persName><forename type="first">A</forename><forename type="middle">K</forename><surname>Petrenko</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">H</forename><surname>Schlingloff</surname></persName>
		</editor>
		<meeting>7th Workshop on Model-Based Testing, MBT 2012<address><addrLine>Tallinn, Estonia; ETAPS, Tallinn, Estonia</addrLine></address></meeting>
		<imprint>
			<publisher>EPTCS</publisher>
			<date type="published" when="2012-03-25">25 March 2012. 2012</date>
			<biblScope unit="volume">80</biblScope>
			<biblScope unit="page" from="1" to="12" />
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
