Eng 211
Eng 211
Requirements
Course_Overview_and_Objectives
Narration
Security is an important component of an application’s quality. To preserve the confidentiality, integrity, and availability of application data,
software applications must be engineered with security in mind from inception through deployment. If you are not thinking about security in the design
phase,
and if you are not driving your application design with security in mind, your application will be less secure in production, and any security efforts you take at
that point will be more expensive.
Use security requirements to focus your design and development efforts on the most important objectives from a security perspective.
During design reviews, keep design best practices in mind and look at the areas where mistakes can have the most security impact.
This will help you identify gaps in your design and mitigate potential risk. Building security in from the start is the best way to create secure software with
minimal disruption to your development process.
In this course, you will learn to integrate security engineering in your development life cycle.
You will also learn to define security requirements and objectives during the requirements phase of your application development.
Security is an important component of an application’s quality. To preserve the confidentiality, integrity, and availability of application data, software
applications must be engineered with security in mind from inception through deployment.
If you are not thinking about security in the design phase, and if you are not driving your application design with security in mind, your application will be
less secure in production, and any security efforts you take at that point will be more expensive.
Use security requirements to focus your design and development efforts on the most important objectives from a security perspective.
Page 1 of 65
How to Create Application Security Design
Requirements
During design reviews, keep design best practices in mind and look at the areas where mistakes can have the most security impact.
This will help you identify gaps in your design and mitigate potential risk. Building security in from the start is the best way to create secure software with
minimal disruption to your development process.
In this course, you will learn to integrate security engineering in your development life cycle. You will also learn to define security requirements and
objectives during the requirements phase of your application development.
On Screen Text
Use security requirements to focus your design and development efforts on the most important objectives from a security
perspective.
During design reviews, keep design best practices in mind and look at the areas where mistakes can have the most security
impact. This will help you identify gaps in your design and mitigate potential risk. Building security in from the start is the best
way to create secure software with minimal disruption to your development process.
Course Objectives:
• Integrate security engineering in your development life cycle.
• Understand how to define security requirements and objectives during the requirements phase of your application
development.
Page 2 of 65
How to Create Application Security Design
Requirements
Module_Overview_and_Objectives
Narration
This module explains the path to security maturity and provides an overview of security engineering.
It also explains how you can adopt a secure development process.
After completing this module, you will be able to apply the application security maturity (ASM) model to your development process,
understand the security-engineering process, and describe the key security-engineering activities you can use to integrate security in your development life
cycle.
Security is an important component of an application’s quality. To preserve the confidentiality, integrity, and availability of application data,
software applications must be engineered with security in mind from inception through deployment. If you are not thinking about security in the design
phase,
and if you are not driving your application design with security in mind, your application will be less secure in production, and any security efforts you take at
that point will be more expensive.
Use security requirements to focus your design and development efforts on the most important objectives from a security perspective.
During design reviews, keep design best practices in mind and look at the areas where mistakes can have the most security impact.
This will help you identify gaps in your design and mitigate potential risk. Building security in from the start is the best way to create secure software with
minimal disruption to your development process.
In this course, you will learn to integrate security engineering in your development life cycle.
You will also learn to define security requirements and objectives during the requirements phase of your application development.
Page 3 of 65
How to Create Application Security Design
Requirements
Security is an important component of an application’s quality. To preserve the confidentiality, integrity, and availability of application data, software
applications must be engineered with security in mind from inception through deployment.
If you are not thinking about security in the design phase, and if you are not driving your application design with security in mind, your application will be
less secure in production, and any security efforts you take at that point will be more expensive.
Use security requirements to focus your design and development efforts on the most important objectives from a security perspective.
During design reviews, keep design best practices in mind and look at the areas where mistakes can have the most security impact.
This will help you identify gaps in your design and mitigate potential risk. Building security in from the start is the best way to create secure software with
minimal disruption to your development process.
In this course, you will learn to integrate security engineering in your development life cycle. You will also learn to define security requirements and
objectives during the requirements phase of your application development.
On Screen Text
Module Objectives
After completing this module, you will be able to:
• Apply the application security maturity (ASM) model to your development process.
• Understand the security-engineering process.
• Describe the key security-engineering activities you can use to integrate security in your development life cycle.
Page 4 of 65
How to Create Application Security Design
Requirements
Understanding_the_ASM_Model
Narration
The application security maturity (ASM) model was developed by collecting information from organizations about their security progress over a ten-year
period.
Results of these inquiries showed that organizations tend to follow a similar path,
which breaks down into three distinct phases.
The first phase is called the Panic Scramble, where organizations realize that they have to do something about software security. This realization typically
occurs when a company has a data breach,
one of their competitors has a data breach, or a new regulation requires compliance in application security.
In response to that panic, organizations invest in tools and technology. So, they mature rapidly on the tools and technology axis, but not on the people and
process axis until they reach an inflection point
and enter the second phase—the Pit of Despair. Here, organizations realize that they do not know how to use their expensive tools. Security teams are
running vulnerability scans,
but developers don’t know how to interpret the results and act on the reports, so they keep finding the same problems over and over. Organizations get
discouraged and tool usage drops.
However, eventually they develop details along the people and process axis, and the organization slowly becomes more mature until they hit the second
inflection point.
Here, they start to put both areas together and then mature very quickly.
Almost every organization follows the same trajectory; however, some are able to progress more quickly while others become mired in the Pit of Despair.
Page 5 of 65
How to Create Application Security Design
Requirements
Organizations do spend on security, but they don’t necessarily spend in the right areas.
Organizations that spend time on testing and assessment before conducting training or making security design or architecture decisions can waste a lot of
time and money.
On Screen Text
Page 6 of 65
How to Create Application Security Design
Requirements
Understanding_the_ASM Model_Continued
Narration
As we just pointed out, companies often invest in tools and technology before they invest in people and processes. After a security incident, they may rush
to invest in a typical set of security tools:
version control systems, source code scanning tools, defect management control systems, test automation systems, web application vulnerability scanning
and application-layer security mitigation (or firewalls).
However, these tools are only effective if appropriate investment is first made in people and processes, so that the tools are well-implemented and well-
utilized.
For example, source code scanning tools can improve security only if the tools are properly integrated into the development lifecycle, and personnel are
trained to correctly interpret results and implement fixes.
The people and process investments that are required are: secure SDLC activities for development teams,
staff training, the use of internal "Red Teams," third-party security reviews, application security audit procedures for all application types, and integration
with IRM, compliance, and governance initiatives.
When technology, people and processes are balanced, application security maturity is reached.
On Screen Text
Page 7 of 65
How to Create Application Security Design
Requirements
• Version Control
• Defect Management
• Test Automation
• Version Control
• Defect Management
• Test Automation
Page 8 of 65
How to Create Application Security Design
Requirements
What_Is_Security_Engineering?
Narration
To keep its information secure, an organization must preserve the confidentiality, integrity, and availability of that information.
Confidentiality means that private data remains private. Integrity means that the data is correct and in the expected form. Availability means that the data
can be accessed when needed.
Software applications must be engineered to support and maintain these three properties when handling information.
Security engineering defines a set of security activities, processes, and policies that can be layered on top of your current development process. It can be
used in waterfall,
iterative, agile or any other process. The goal is to perform the correct activities and employ the right checkpoints at the appropriate points in your process.
A successful approach to security engineering involves explicit security objectives, a good understanding of the threats to your application,
and an iterative approach that allows you to consider security early and improve security over time instead of trying to add it all in at the end.
On Screen Text
Page 9 of 65
How to Create Application Security Design
Requirements
Security engineering defines a set of security activities, processes, and policies that can be layered on top of your current
development process.
An improved secure development process results in more-secure code and reduced risk for your business and your customers.
Page 10 of 65
How to Create Application Security Design
Requirements
Adopting_a_Secure_Development_Life_Cycle_with_Security_Engineering
Narration
Security-engineering activities can be layered into any normal software development process. Whether you use waterfall or agile development
methodology,
you probably already perform many of the core development activities shown in this diagram. To add security engineering, you simply add security activities
at the appropriate times.
For instance, when you would normally determine your functional requirements, you would also determine your security objectives. When you would
normally apply design best practices,
you can perform threat modeling and apply security design best practices as well. You can perform security code review during the development phase,
and penetration testing when the application is ready for it. Finally, before you release the software, perform your security deployment review.
In addition to these specific activities, keep in mind that you should use the security best practices and guidelines through the design, development, and
deployment phases.
To implement security engineering in your development process, you do not need to change your existing process. You just need to augment it with a set of
high-impact security activities.
On Screen Text
To implement security engineering in your development process, you do not need to change your existing process. You just
need to augment it with a set of effective security activities.
Page 11 of 65
How to Create Application Security Design
Requirements
Requirements
and Analysis
and Design
Architecture
Development
Testing
Deployment
Maintenance
Core
Functional Requirements
Technology Requirements
Design Guidelines
Unit Tests
Code Review
Daily Builds
Integration Testing
System Testing
Deployment Review
Security
Security Objectives
Threat Modeling
Security Testing
Page 12 of 65
How to Create Application Security Design
Requirements
Security
Page 13 of 65
How to Create Application Security Design
Requirements
Key_Security_Activities
Narration
Now that you understand how security-engineering activities fit into your development life cycle, let’s look at each activity in more detail.
Identify security objectives to understand your key security issues and scenarios.
Apply security design guidelines to avoid common security design mistakes and learn from past vulnerabilities.
Conduct security architecture and design reviews to identify security problems that can have a multiplier effect in later phases of development.
Create threat models to identify threats, attacks, vulnerabilities, and countermeasures.
Perform security code reviews and penetration tests to uncover vulnerabilities during development and in deployment.
Finally, conduct security deployment reviews to ensure that configuration and deployment problems are found before your application is placed into
production.
On Screen Text
Page 14 of 65
How to Create Application Security Design
Requirements
• Identify security objectives to understand your key security issues and scenarios.
• Apply security design guidelines to avoid common security design mistakes and learn from past vulnerabilities.
• Conduct security architecture and design reviews to identify security problems that can have a multiplier effect in later
phases of development.
• Perform security code reviews and penetration tests to uncover vulnerabilities during development and in deployment.
• Conduct security deployment reviews to ensure that configuration and deployment problems are found before your
application is placed into production.
For more information, see the TEAM Mentor article Integrate Security Activities into the Development Lifecycle.
Page 15 of 65
How to Create Application Security Design
Requirements
Module_Summary
Narration
On Screen Text
Module Summary
1
Page 16 of 65
How to Create Application Security Design
Requirements
The ASM model maps the security choices and decisions that organizations make and where it impacts them. Organizations
do spend on security, but they don’t necessarily spend in the right areas.
Most organizations follow a security path that has three distinct phases:
• Panic Scramble – In this phase, organizations realize that they have to do something about software security, so they invest
in tools and technology.
• Pit of Despair – Here, organizations realize that they don’t know how to use their expensive tools, they get discouraged,
and tool usage drops.
• Security as a Core Business Practice – In this phase, they start to understand not just the tools and technology but also
people and processes, and then mature very quickly.
Security engineering defines a set of security activities, processes, and policies that can be layered on top of your current
development process.
To implement security engineering in your development, you don’t change your existing process; instead, you augment it
with effective security activities.
To implement security engineering successfully:
Describe the key security-engineering activities that you can use to integrate security in your development life
cycle.
The six key security-engineering activities you perform to integrate security in your development life cycle are:
• Identify security objectives.
• Apply security design guidelines.
• Conduct security architecture and design reviews.
• Create threat models.
• Perform security code reviews and penetration tests.
• Conduct security deployment reviews.
Page 17 of 65
How to Create Application Security Design
Requirements
Module_Overview_and_Objectives
Narration
According to the International Data Corporation, it is 15 times more expensive to fix a defect in the testing phase than in the design phase. If you are not
thinking about security in the design phase,
and if you are not driving your application design with security in mind, your application will be less secure in production and any security efforts you take
will be more expensive.
If you make the right design decisions with security in mind, it will have a cascading, positive impact on the rest of your development process.
Building security in from the start is the best way to create secure software with the lowest disruption to your development process.
After completing this module, you will be able to determine your security objectives, apply security design guidelines, and create threat models that identify
threats, attacks, vulnerabilities, and countermeasures.
You will also be able to conduct security architecture and design reviews that help identify potential security problems, and minimize your application’s
attack surface.
Security is an important component of an application’s quality. To preserve the confidentiality, integrity, and availability of application data,
software applications must be engineered with security in mind from inception through deployment. If you are not thinking about security in the design
phase,
and if you are not driving your application design with security in mind, your application will be less secure in production, and any security efforts you take at
that point will be more expensive.
Use security requirements to focus your design and development efforts on the most important objectives from a security perspective.
Page 18 of 65
How to Create Application Security Design
Requirements
During design reviews, keep design best practices in mind and look at the areas where mistakes can have the most security impact.
This will help you identify gaps in your design and mitigate potential risk. Building security in from the start is the best way to create secure software with
minimal disruption to your development process.
In this course, you will learn to integrate security engineering in your development life cycle.
You will also learn to define security requirements and objectives during the requirements phase of your application development.
Security is an important component of an application’s quality. To preserve the confidentiality, integrity, and availability of application data, software
applications must be engineered with security in mind from inception through deployment.
If you are not thinking about security in the design phase, and if you are not driving your application design with security in mind, your application will be
less secure in production, and any security efforts you take at that point will be more expensive.
Use security requirements to focus your design and development efforts on the most important objectives from a security perspective.
During design reviews, keep design best practices in mind and look at the areas where mistakes can have the most security impact.
This will help you identify gaps in your design and mitigate potential risk. Building security in from the start is the best way to create secure software with
minimal disruption to your development process.
In this course, you will learn to integrate security engineering in your development life cycle. You will also learn to define security requirements and
objectives during the requirements phase of your application development.
On Screen Text
Module Objectives
After completing this module, you will be able to:
If you make the right design decisions with security in mind, it will have a cascading, positive impact on the rest of your
development process. Building security in from the start is the best way to create secure software with the lowest disruption
to your development process.
Module Overview
According to the International Data Corporation, it is 15 times more expensive to fix a defect in the testing phase than in the
design phase. If you are not thinking about security in the design phase, and if you are not driving your application design
with security in mind, your application will be less secure in production and any security efforts you take will be more
expensive.
Module Overview
According to the International Data Corporation, it is 15 times more expensive to fix a defect in the testing phase than in the
design phase. If you are not thinking about security in the design phase, and if you are not driving your application design
with security in mind, your application will be less secure in production and any security efforts you take will be more
expensive.
Page 19 of 65
How to Create Application Security Design
Requirements
Page 20 of 65
How to Create Application Security Design
Requirements
Know_Your_Security_Goals_and_Objectives
Narration
Define security objectives at the beginning of the development process to identify goals and constraints that affect the confidentiality, integrity, and
availability of your data and application.
Use your security goals to filter the set of applicable design guidelines, guide threat modeling, scope and guide architecture and design reviews, help set
code review objectives, guide security test planning and execution, and conduct deployment reviews.
If you don’t know what the security goals and objectives are for your application, it is difficult to be successful with any other security activity.
On Screen Text
Page 21 of 65
How to Create Application Security Design
Requirements
If you don’t know what the security goals and objectives are for your application, it is difficult to be successful with any other
security activity at any other phase of the development life cycle.
Page 22 of 65
How to Create Application Security Design
Requirements
The_Discovery_Process
Narration
Determining your security objectives is an iterative process driven by your application requirements, key assets, and usage scenarios.
You can begin identifying your objectives during the requirements phase, but the process will continue during threat modeling, design, and possibly
implementation.
As you move from initial security objectives to architectural and implementation decisions, you will make increasingly specific decisions regarding
application security.
On Screen Text
This discovery process is initially driven by an examination of the application’s requirements and usage scenarios. By the
end of the requirements and analysis phase, you should have a first set of objectives that are not yet tied to design or
implementation details, such as “there will be data that is private”.
During the design phase, additional objectives will surface that are specific to the application architecture and design, such
as “passwords in the database must be hashed”.
Page 23 of 65
How to Create Application Security Design
Requirements
During the implementation phase, you may discover a few additional objectives based upon specific technology or
implementation choices that have an impact on overall application security, such as using a web framework to gain security
features.
Note: Each evolution of the security objectives will impact other security activities.
This discovery process is initially driven by an examination of the application’s requirements and usage scenarios. By the
end of the requirements and analysis phase, you should have a first set of objectives that are not yet tied to design or
implementation details, such as “there will be data that is private”.
During the design phase, additional objectives will surface that are specific to the application architecture and design, such
as “passwords in the database must be hashed”.
During the implementation phase, you may discover a few additional objectives based upon specific technology or
implementation choices that have an impact on overall application security, such as using a web framework to gain security
features.
Note: Each evolution of the security objectives will impact other security activities.
For more information, see the TEAM Mentor article Identify Security Objectives.
Page 24 of 65
How to Create Application Security Design
Requirements
Questions_to_Ask
Narration
A question-driven approach can be an effective way to discover your security objectives.
Objectives will center on tangible or intangible assets you want to protect, compliance requirements, and quality-of-service requirements.
Click each objective category to view a list of questions for that category.
On Screen Text
Questions to Ask
A question-driven approach can be an effective way to discover your security objectives. Objectives will center on tangible or
intangible assets you want to protect, compliance requirements, and quality-of-service requirements.
Click each objective category to view a list of questions for that category.
210
Page 25 of 65
How to Create Application Security Design
Requirements
• Are there corporate values that could be compromised by an attack on this system?
• Is there potential for an attack that may be embarrassing, although not otherwise damaging?
Compliance Requirements
Page 26 of 65
How to Create Application Security Design
Requirements
The_Matrix_Approach
Narration
You can use an access-control matrix to determine additional objectives. This matrix allows you to plot roles in your system and the permissions each role
should have on system assets.
From this matrix, you can use confidentiality, integrity, and availability (CIA) to derive security objectives.
On Screen Text
You can use an access-control matrix to determine additional objectives. The matrix allows you to plot out roles in your
system and the permissions each role should have on system assets. From this matrix, you can use confidentiality, integrity,
and availability (CIA) to derive security objectives.
For more information, see the TEAM Mentor article Use Role-based Authorization.
Page 27 of 65
How to Create Application Security Design
Requirements
Security_Design_Guidelines
Narration
Security guidelines represent proven practices evolved over time to reduce risk. They describe the areas in which poor design can lead to security
vulnerabilities.
You can reduce risk by addressing common vulnerabilities, allowing you to focus on the unique aspects of your design.
Security design guidelines describe the areas in which poor design can lead to security vulnerabilities. Each guideline must be actionable, relevant, and
effective.
On Screen Text
Security guidelines represent proven practices evolved over time to reduce risk. They describe the areas in which poor
design can lead to security vulnerabilities. You can reduce risk by addressing common vulnerabilities, allowing you to focus
on the unique aspects of your design.
Each guideline must meet the qualifications as specified in the adjacent table.
Page 28 of 65
How to Create Application Security Design
Requirements
You can add additional guidelines or refine existing guidelines based on newly discovered vulnerabilities.
For more information, see the TEAM Mentor article Apply Security Design Guidelines.
Page 29 of 65
How to Create Application Security Design
Requirements
Potential_Problems_Due_to_Bad_Design
Narration
Security design guidelines are categorized in a security frame, which describes the areas where poor design can cause security vulnerabilities.
This example of a security frame categorizes common mistakes observed in a web application.
For each of these categories, you can identify examples of problems that can cause an attack.
Click each tab to learn more about the potential problems caused by bad design.
On Screen Text
For each of these categories, you can identify examples of problems that can cause an attack.
Click each tab to learn more about the potential problems caused by bad design.
Page 30 of 65
How to Create Application Security Design
Requirements
10
Input/Data Validation
Insertion of malicious strings in UI or public APIs. These attacks include command execution, cross-site scripting (XSS),
SQL injection, and buffer overflows. Results can range from information disclosure to elevation of privilege and arbitrary
code execution.
Authentication
Authorization
Access to confidential or restricted data, data tampering, and execution of unauthorized operations.
Configuration Management
Unauthorized access to administration interfaces, ability to update configuration data, and unauthorized access to user
accounts and account profiles.
Sensitive Data
Cryptography
Exception Management
Failure to spot the signs of intrusion, inability to prove a user's actions, and difficulties in problem diagnosis.
Page 31 of 65
How to Create Application Security Design
Requirements
Design_Guidelines_Best_Practices
Narration
Now that you are familiar with the common vulnerability categories and common problems in each category, let’s review design best practices that will help
you mitigate potential vulnerabilities.
Using the security frame for a web application as an example, these are a set of high-level guidelines to adhere to in the course of design. Keeping these
practices in mind will help you discover gaps in your design or areas where mistakes are being made.
Click each tab to learn more about the best practices.
On Screen Text
1
0
Page 32 of 65
How to Create Application Security Design
Requirements
Input/Data Validation
Do not trust input; consider centralized input validation. Do not rely on client-side validation. Be careful with canonicalization
issues. Constrain, reject, and sanitize input. Validate for type, length, format, and range.
Authentication
Use strong passwords. Support password expiration periods and account disablement. Do not store credentials (use one-
way hashes with salt). Encrypt communication channels to protect authentication tokens.
Authorization
Use least-privileged accounts. Consider authorization granularity. Enforce separation of privileges. Restrict user access to
system-level resources.
Configuration Management
Use least privileged process and service accounts. Do not store credentials in clear text. Use strong authentication and
authorization on administration interfaces. Secure the communication channel for remote administration.
Sensitive Data
Avoid storing secrets. Encrypt sensitive data over the wire. Secure the communication channel. Provide strong access
controls for sensitive data stores.
Cryptography
Do not develop your own. Use proven and tested platform features. Keep unencrypted data close to the algorithm. Use the
right algorithm and key size. Avoid key management (use DPAPI). Cycle your keys periodically.
Store keys in a restricted location.
Exception Management
Use structured exception handling. Do not reveal sensitive application implementation details. Do not log private data such
as passwords. Consider a centralized exception-management framework.
Identify malicious behavior. Know what good traffic looks like. Audit and log activity through all of the application tiers.
Secure access to log files. Back up and regularly analyze log files.
Page 33 of 65
How to Create Application Security Design
Requirements
What_is_Threat_Modeling?
Narration
Secure software starts with an understanding of the threats that pose a risk to your application.
It is important not to confuse threats with vulnerabilities. Remember that a threat is what an attacker might try to do to a protected resource in the system,
whereas, vulnerability is a specific way that a threat is exploitable based on an unmitigated attack path.
Threat modeling helps you create secure applications. It allows you to enumerate and understand key assets, risks, and potential design vulnerabilities that
exist in your application.
Revise your threat models periodically to account for new threats resulting from new and evolving attack techniques.
On Screen Text
Remember that:
• A Threat is what an attacker might try to do to a protected resource in the system.
• A Vulnerability is a specific way that a threat is exploitable, based on an unmitigated attack path.
Page 34 of 65
How to Create Application Security Design
Requirements
Threat modeling helps you create secure applications. It allows you to enumerate and understand key assets, risks, and
potential design vulnerabilities that exist in your application.
Revise your threat models periodically to account for new threats resulting from new and evolving attack techniques.
Attacker
For more information, see the TEAM Mentor article Create a Threat Model for a Web Application at Design Time.
Mitigation
Threat
Vulnerability
Page 35 of 65
How to Create Application Security Design
Requirements
Benefits_of_Threat_Modeling
Narration
Threat modeling helps you understand application risk, shape your application design to meet your security objectives, identify where more resources are
required to reduce risks, and weigh security decisions against other design goals.
The ultimate goal of a threat model is to improve the security of your application by designing and implementing effective countermeasures to recognized
threats.
Since a threat model helps you understand attack vectors for and the conditions under which an attack may be successful, it is a very useful asset when
planning and conducting a penetration test.
On Screen Text
You can use threat modeling to identify threats and vulnerabilities that are relevant for your application and determine
countermeasures to mitigate vulnerabilities.
Threat modeling also helps you update and improve iteratively when your security objectives change, when your design
changes, and during implementation, testing, and deployment.
Page 36 of 65
How to Create Application Security Design
Requirements
In addition, you can use threat modeling to identify specific considerations such as:
• Legal requirements: SOX, GLBA, HIPAA, SB 1386, and more on the horizon
• Safety requirements
• Contractual requirements or customer needs
Page 37 of 65
How to Create Application Security Design
Requirements
Threat_Modeling_Activity_Overview
Narration
The five major threat modeling steps are shown in this diagram.
In step one, identify your security objectives. Clear objectives help you to focus the threat modeling activity and determine how much effort to spend on
subsequent steps.
In step two, create an application overview. Itemizing your application's important characteristics and actors helps you to identify relevant threats during
step four.
In step three, decompose your application. A detailed understanding of the mechanics of your application makes it easier for you to uncover more relevant
and more detailed threats.
In step four, identify threats. Use details from steps two and three to identify threats relevant to your application scenario and context.
In step five, identify vulnerabilities. Review the layers of your application to identify weaknesses related to your threats. Use vulnerability categories to help
you focus on those areas where mistakes are most often made.
You should progressively refine your threat model by repeatedly performing steps two through five. You can add more detail as you move through your
application development life
cycle and discover more about your application design.
On Screen Text
Page 38 of 65
How to Create Application Security Design
Requirements
The five major threat modeling steps are shown in this diagram. You should progressively refine your threat model by
repeatedly performing steps two through five. You will be able to add more detail as you move through your application
development life cycle and discover more about your application design.
Page 39 of 65
How to Create Application Security Design
Requirements
Threat_Modeling_Activity_Summary_Table
Narration
Each step in the threat modeling process has specific inputs and outputs.
For example, when you are creating an application overview, you will use functional specifications, deployment diagrams, and use cases as input to create
a number of different outputs including an end-to-end deployment scenario,
key user and attack scenarios, the key roles in your system, the technologies involved, and the security mechanisms that are already in place.
The table shown here lists the inputs that you may need at each step of the threat modeling process and the outputs generated when you perform each
step.
On Screen Text
Each step in a threat modeling exercise has specific inputs and outputs.
The table below lists the inputs that you may need at each step of the threat modeling process and the outputs that you
generate when you perform the step.
Page 40 of 65
How to Create Application Security Design
Requirements
Mitigating_Your_Threats
Narration
One of the key goals of the threat model is to produce design-level mitigations for key threats.
When faced with a significant threat, you can choose to redesign your system in a way that eliminates the threat, you could use a mitigating technique to
reduce or eliminate the threat, or you can choose to accept the threat.
This attack tree example describes a number of ways that an attacker can impersonate an authorized user of your system.
Redesigning your system in a way that eliminates this threat is probably not an option; it would require a major modification to usage scenarios.
To diminish the threat, you can apply mitigations to each branch of the attack tree. For example, you can ensure server-side input and data validation to
keep an attacker from bypassing security checks on the client.
You can also encrypt credentials on the network and in memory to keep an attacker from stealing these credentials and reusing them.
On Screen Text
Page 41 of 65
How to Create Application Security Design
Requirements
Narration
Here are some best practices that you should follow while performing threat modeling. First, enumerate assets of value.
Understand what assets matter to you as a business as well as what assets may matter to an attacker—for example, site login credentials.
Then, consider the threats. For each asset, consider the potential threats that could impact the asset. Consider the confidentiality, integrity, and availability
(CIA) for each asset.
For example, login credentials could be stolen or modified, or the login service could be denied to legitimate users.
You can brainstorm attacks. For each threat, consider what attacks could realize the threat—for example, network sniffing and man-in-the-middle.
Next, identify those conditions under which each attack could possibly succeed—for example, clear-text login credentials sent over a public network.
On Screen Text
Page 42 of 65
How to Create Application Security Design
Requirements
Optimizing_Test_Efforts_by_Threat_Modeling
Narration
Threat profiles can serve as a basis for security test planning.
Now that you know your assets, threats, potential attacks, and the conditions under which an attack will be successful, you can use the threat profile to plan
your security testing.
The test plan should focus on the key attack conditions to prove or disprove threats to your system. This ensures that you are testing the areas where the
difficulty of attack is lowest and the impact is highest.
On Screen Text
The test plan should focus on testing the key attack conditions in order to prove or disprove threats to your system. This
ensures that you are testing the areas where the difficulty of attack is lowest and the impact is highest.
Page 43 of 65
How to Create Application Security Design
Requirements
Page 44 of 65
How to Create Application Security Design
Requirements
Architecture_and_Design_Reviews
Narration
The goals of performing an architecture and design review are to analyze application architecture and design from a security perspective, and to expose
high-risk design decisions that have been made.
During design review, don’t rely solely on the use of design documentation. Use a combination of design documents, architecture experts, and discussion to
achieve the best results.
On Screen Text
During design review, don’t rely solely on the use of design documentation. Use a combination of design documents,
architecture experts, and discussion to achieve the best results.
For more information, see the TEAM Mentor article Conduct Security Architecture And Design Reviews.
Page 45 of 65
How to Create Application Security Design
Requirements
Applying_Vulnerability_Categories_and_Best_Practices
Narration
When performing architecture and design reviews, you should organize your reviews by common application vulnerability categories and look at the areas
in which mistakes are most often made and can have the most security impact.
For each vulnerability category, keep best practices in mind. Guidelines and best practices will help you discover gaps in your design or areas where
mistakes are being made. Don’t repeat the mistakes of the past.
On Screen Text
To view an example of common vulnerability categories observed in web applications, click here.
For each vulnerability category, keep best practices in mind. Guidelines and best practices will help you discover gaps in
your design or areas where mistakes are being made. Don’t repeat the mistakes of the past.
Page 46 of 65
How to Create Application Security Design
Requirements
Architecture_and_Design_Review_Checklists
Narration
From these best practices, you can derive a set of checklists that make it much easier to review the design of your system.
Each vulnerability category should have its own set of potential problems that you can check against. These checklists represent areas where mistakes are
most often made.
A checklist driven approach will ensure consistent high-quality reviews over time and will give you confidence you are achieving a high degree of coverage.
As you perform your reviews,
the checklists can grow based on additional issues you find and knowledge you acquire along the way. You can also add checklist items that are unique to
your application and its security architecture.
Here is an example of an input and data validation checklist for a web application.
On Screen Text
Page 47 of 65
How to Create Application Security Design
Requirements
A checklist driven approach will ensure consistent high-quality reviews over time and will give you confidence you are
achieving a high degree of coverage. As you perform your reviews, the checklists can grow based on additional issues you
find and knowledge you pick up along the way. You can also add checklist items that are unique to your application and its
security architecture.
❑ All entry points and trust boundaries are identified by the design.
❑ Input validation is applied whenever input is received from outside the current trust boundary.
❑ The input validation strategy that the application adopted is modular and consistent.
❑ The validation approach is to constrain, reject, and then sanitize input. (Looking for known, valid, and safe input is much easier than
looking for known malicious or dangerous input.)
❑ Input file names and file paths are avoided where possible.
❑ The design applies defense in depth to the input validation strategy by providing input validation across tiers.
❑ All entry points and trust boundaries are identified by the design.
❑ Input validation is applied whenever input is received from outside the current trust boundary.
❑ The input validation strategy that the application adopted is modular and consistent.
❑ The validation approach is to constrain, reject, and then sanitize input. (Looking for known, valid, and safe input is much easier than
looking for known malicious or dangerous input.)
❑ Input file names and file paths are avoided where possible.
Page 48 of 65
How to Create Application Security Design
Requirements
❑ The design applies defense in depth to the input validation strategy by providing input validation across tiers.
Page 49 of 65
How to Create Application Security Design
Requirements
Architecture_and_Design_Review_Techniques
Narration
A question-driven approach helps you expose the highest-risk design decisions, and the security frame helps you focus on the areas that reveal common
mistakes.
To conduct an architecture and design review, create a list of questions about the security of each of the following three application components.
First, review the design of your application in relation to the target deployment environment and the associated security policies..
Next, review the critical areas in your application, such as authentication, authorization, input/data validation, exception management, and other areas.
Finally, walk through the logical tiers of your application, and evaluate security choices within your presentation, business, and data access layers
On Screen Text
To conduct an architecture and design review, create a list of questions about the security of each of the following three
application components.
Application
Page 50 of 65
How to Create Application Security Design
Requirements
Deployment and
Layer-By-Layer
Security Frame
Host
Network
Presentation
Business
Data
Input Validation
Session Management
Authentication
Cryptography
Configuration Mgmt
Exception Management
Sensitive Data
Authorization
Parameter Manipulation
Infrastructure
Review the design of your application in relation to the target deployment environment and the associated security policies.
Deployment and
Infrastructure
x
Walk through the logical tiers of your application, and evaluate security choices within your presentation, business, and data
access layers.
Layer-By-Layer
Analysis
x
Review the critical areas in your application, such as authentication, authorization, input/data validation, exception
management, and other areas.
Security Frame
Page 51 of 65
How to Create Application Security Design
Requirements
Page 52 of 65
How to Create Application Security Design
Requirements
What_Is_Your_Application's_Attack_Surface
Narration
Your system’s attack surface represents the number of entry points you expose to a potential attacker. The fewer entry points, the less chance of an
attacker finding a vulnerability in your code.
No matter how hard you work to improve the security of your software, vulnerabilities, both known and unknown,
will still exist in your system. Attack surface reduction is an exercise in risk reduction, as you lower your attack surface you reduce the risk of a high impact
exploit in your system.
Consider two examples. First, imagine you are in charge of securing Notepad. The attack surface is small, a remote attacker can do very little to impact
your users.
Even if vulnerabilities exist in your code, chances are very small that you will be exploited.
Now, imagine that you are in charge of securing Internet Explorer. The attack surface is huge and a remote attacker can attack in numerous ways to impact
your users.
Security is an important component of an application’s quality. To preserve the confidentiality, integrity, and availability of application data,
software applications must be engineered with security in mind from inception through deployment. If you are not thinking about security in the design
phase,
and if you are not driving your application design with security in mind, your application will be less secure in production, and any security efforts you take at
that point will be more expensive.
Use security requirements to focus your design and development efforts on the most important objectives from a security perspective.
During design reviews, keep design best practices in mind and look at the areas where mistakes can have the most security impact.
Page 53 of 65
How to Create Application Security Design
Requirements
This will help you identify gaps in your design and mitigate potential risk. Building security in from the start is the best way to create secure software with
minimal disruption to your development process.
In this course, you will learn to integrate security engineering in your development life cycle.
You will also learn to define security requirements and objectives during the requirements phase of your application development.
Security is an important component of an application’s quality. To preserve the confidentiality, integrity, and availability of application data, software
applications must be engineered with security in mind from inception through deployment.
If you are not thinking about security in the design phase, and if you are not driving your application design with security in mind, your application will be
less secure in production, and any security efforts you take at that point will be more expensive.
Use security requirements to focus your design and development efforts on the most important objectives from a security perspective.
During design reviews, keep design best practices in mind and look at the areas where mistakes can have the most security impact.
This will help you identify gaps in your design and mitigate potential risk. Building security in from the start is the best way to create secure software with
minimal disruption to your development process.
In this course, you will learn to integrate security engineering in your development life cycle. You will also learn to define security requirements and
objectives during the requirements phase of your application development.
On Screen Text
• User interfaces
• Web services
• Direct database access
• Network channels
• Pipes
• Files
• APIs
The entire collection of entry points in a product is called its attack surface. This attack surface defines the ways in which
malicious users can attack a software system. The attack surface is not limited to local resources. For example, the channels
used to communicate with remote resources provide additional vectors for attack.
When an application has a big attack surface, you have to spend more time to ensure that the code is conservative,
defensive, and of excellent quality.
Page 54 of 65
How to Create Application Security Design
Requirements
Attack_Surface_and_Entry_Points
Narration
When you consider how to reduce your attack surface, keep in mind that your attack surface is tightly linked to the entry points your application exposes.
Each entry point represents an avenue of attack you need to guard, multiplying the possibility of an exploit.
Attackers are guaranteed to go after your entry points first when looking for an exploit. The standard attack strategy is to identify entry points and then
leverage exploit code against each entry point in turn.
Attackers will try to exploit your application or reach backend components that are exposed behind your application. If none of this works, attackers may
attempt denial of service attacks that prevent legitimate users from accessing your system.
To reduce your risk, you need to reduce the number of entry points and then test what’s left for exposed vulnerabilities.
By doing this, you not only make the attacker’s job more difficult, you also make your testing job easier.
When measuring your attack surface, you can start with architecture documents, deployment diagrams, and other specifications. However,
keep in mind that the most dangerous aspects of your attack surface may be the functionality that is undocumented and not widely known.
To find these hidden entry points, you may need to examine code and run diagnostic tools on your application to determine all of the entry points your
application is exposing.
Security is an important component of an application’s quality. To preserve the confidentiality, integrity, and availability of application data,
software applications must be engineered with security in mind from inception through deployment. If you are not thinking about security in the design
phase,
and if you are not driving your application design with security in mind, your application will be less secure in production, and any security efforts you take at
that point will be more expensive.
Page 55 of 65
How to Create Application Security Design
Requirements
Use security requirements to focus your design and development efforts on the most important objectives from a security perspective.
During design reviews, keep design best practices in mind and look at the areas where mistakes can have the most security impact.
This will help you identify gaps in your design and mitigate potential risk. Building security in from the start is the best way to create secure software with
minimal disruption to your development process.
In this course, you will learn to integrate security engineering in your development life cycle.
You will also learn to define security requirements and objectives during the requirements phase of your application development.
Security is an important component of an application’s quality. To preserve the confidentiality, integrity, and availability of application data, software
applications must be engineered with security in mind from inception through deployment.
If you are not thinking about security in the design phase, and if you are not driving your application design with security in mind, your application will be
less secure in production, and any security efforts you take at that point will be more expensive.
Use security requirements to focus your design and development efforts on the most important objectives from a security perspective.
During design reviews, keep design best practices in mind and look at the areas where mistakes can have the most security impact.
This will help you identify gaps in your design and mitigate potential risk. Building security in from the start is the best way to create secure software with
minimal disruption to your development process.
In this course, you will learn to integrate security engineering in your development life cycle. You will also learn to define security requirements and
objectives during the requirements phase of your application development.
On Screen Text
Therefore, in your software, you need to understand the attack surface and reduce it as much as possible. You’ll need to test
against the attack surface to identify exposed vulnerabilities.
You should map your attack surface with architecture and design documents, with code reviews, and by using diagnostic
tools. You should also identify the undocumented entry points such as temporary files, pipes, network communication,
registry keys, and embeddable code.
Page 56 of 65
How to Create Application Security Design
Requirements
The_Attack_Surface_Reduction_Process
Narration
So, how do you reduce the attack surface? Begin by identifying and understanding all of the entry points that make up the attack surface.
You can do this by enumerating all of the interfaces, protocols, and code execution paths as well as understanding the trust levels required to access each
entry point.
For each entry point, you must consider the importance of the feature that it enables. For features that are not important to a vast majority of the users, turn
the feature off, disable it by default, or don’t install it by default;
make your users take explicit action to enable that feature. Any vulnerabilities related to that feature will affect a smaller percentage of your user base.
Next, consider which types of users need access to each feature, and then restrict its use to those classes. For example,
don’t make the feature remotely accessible by default, allow anonymous access, or have it run with more privilege than required.
You can also reduce the attack surface by restricting access to a product feature and managing how users can obtain and use that access.
Without a conscious focus on this aspect of your software design and implementation, you are guaranteed to have a larger attack surface than necessary
and, as a result, a higher risk of an attacker exploiting your system.
On Screen Text
Page 57 of 65
How to Create Application Security Design
Requirements
Remember that attack surface reduction is as important as writing the code correctly.
Access Denied
Page 58 of 65
How to Create Application Security Design
Requirements
It's_Not_Just_About_Turning_Stuff_Off
Narration
Keep in mind that reducing attack surface is not as simple as flipping a binary switch. You need to manage how your software exposes its features and
reduce access to the minimum required to meet your specifications and usage scenarios.
You need to manage how your software exposes its features and reduce access to the minimum required to meet your specifications and usage scenarios.
On Screen Text
Keep in mind that reducing attack surface is not as simple as flipping a binary switch. You need to manage how your
software exposes its features and reduce access to the minimum required to meet your specifications and usage scenarios.
Page 59 of 65
How to Create Application Security Design
Requirements
Reducing_Your_Attack_Surface_Best_Practices
Narration
Define and reduce the attack surface early in your development cycle. When designing your application,
you can include a section in the design outlining what the attack surface will look like and then use that as foundation for future attack surface measurement
and reduction efforts.
You can reduce the amount of code that is included in your application or runs by default. An exploit that runs in deprecated code can be just as dangerous
as one that runs in commonly used code paths.
If you don’t need the code, remove it. Each line of code adds additional risk.
Reduce the number of access points accessible to untrusted users. Once you’ve cataloged your entry points, determine which of them need to be accessed
by untrusted users.
For example, you can restrict access to network endpoints used by your application to the local subnet or IP range. You can also limit access to network
endpoints by using authentication.
Reduce privileges to limit damage potential. For example, if your code doesn’t need access to system resources, remove the privilege.
By reducing the privileges of your running code, you are reducing the potential impact if an attacker finds a vulnerability.
You can raise the authorization bar on anonymous code paths in order to limit the number of users that can access potentially risky code paths.
Security is an important component of an application’s quality. To preserve the confidentiality, integrity, and availability of application data,
software applications must be engineered with security in mind from inception through deployment. If you are not thinking about security in the design
phase,
Page 60 of 65
How to Create Application Security Design
Requirements
and if you are not driving your application design with security in mind, your application will be less secure in production, and any security efforts you take at
that point will be more expensive.
Use security requirements to focus your design and development efforts on the most important objectives from a security perspective.
During design reviews, keep design best practices in mind and look at the areas where mistakes can have the most security impact.
This will help you identify gaps in your design and mitigate potential risk. Building security in from the start is the best way to create secure software with
minimal disruption to your development process.
In this course, you will learn to integrate security engineering in your development life cycle.
You will also learn to define security requirements and objectives during the requirements phase of your application development.
Security is an important component of an application’s quality. To preserve the confidentiality, integrity, and availability of application data, software
applications must be engineered with security in mind from inception through deployment.
If you are not thinking about security in the design phase, and if you are not driving your application design with security in mind, your application will be
less secure in production, and any security efforts you take at that point will be more expensive.
Use security requirements to focus your design and development efforts on the most important objectives from a security perspective.
During design reviews, keep design best practices in mind and look at the areas where mistakes can have the most security impact.
This will help you identify gaps in your design and mitigate potential risk. Building security in from the start is the best way to create secure software with
minimal disruption to your development process.
In this course, you will learn to integrate security engineering in your development life cycle. You will also learn to define security requirements and
objectives during the requirements phase of your application development.
On Screen Text
You can use the following key techniques to reduce your attack surface:
• Restrict access to network endpoints used by your application to the local subnet or IP range.
• Limit access to network endpoints by using authentication.
Page 61 of 65
How to Create Application Security Design
Requirements
Module Summary
Narration
On Screen Text
Module Summary
1
Page 62 of 65
How to Create Application Security Design
Requirements
You define security objectives at the beginning of the development process to identify goals and constraints that affect the
confidentiality, integrity, and availability of your data and application. You can begin identifying your objectives during the
requirements phase, but the process continues during threat modeling, design, and possibly implementation.
A question-driven approach can be an effective way to determine your objectives. Objectives will center on tangible or
intangible assets you want to protect, compliance requirements, and quality-of-service requirements. You can also use a
subject-object matrix to determine additional objectives.
Security design guidelines describe the areas in which poor design can lead to security vulnerabilities. Each guideline must
be actionable, relevant, and impactful.
Security design guidelines are categorized in a security frame, which describes the areas where poor design can cause
security vulnerabilities. For each of these categories, you can identify examples of problems that can cause an attack.
Create threat models that identify threats, attacks, vulnerabilities, and countermeasures.
Threat modeling helps you understand application risk, shape your application design to meet your security objectives,
identify where more resources are required to reduce risks, and weigh security decisions against other design goals.
Progressively refine your threat model by performing steps 2 through 5 repeatedly. Each step in a threat modeling exercise
has specific inputs and outputs. Once you’ve identified the key threats to your application, you can decide how to handle
each threat.
Conduct security architecture and design reviews that help identify potential security problems.
An architecture and design review help you analyze application architecture and design from a security perspective and
expose high-risk design decisions. When performing architecture and design reviews, organize your reviews by common
application vulnerability categories, and for each vulnerability category, keep best practices in mind. From the best practices,
you can derive a set of checklists that make it much easier to review the design of your system.
Page 63 of 65
How to Create Application Security Design
Requirements
Your system’s attack surface represents the number of entry points you expose to a potential attacker. To reduce your attack
surface, you reduce the entry points and then test those points for exposed vulnerabilities. You can do this by enumerating
all of the interfaces, protocols, and code execution paths as well as understanding the trust levels required to access each
entry point.
Keep in mind that reducing attack surface is not as simple as flipping a binary switch. You need to manage how your
software exposes its features and reduce access to the minimum required to meet your specifications and usage scenarios.
You should define and reduce the attack surface early in your development cycle.
Page 64 of 65
How to Create Application Security Design
Requirements
TEAM_Mentor_eKnowledge
Narration
On Screen Text
TEAM Mentor is an interactive Application Security eKnowledge base with thousands of articles on how to prevent
vulnerabilities during application development. Use TEAM Mentor to find guidance for implementing the application security
controls that are relevant to your particular application in your development language. With optional plugins to the most
popular Static and Dynamic code analysis tools, TEAM Mentor provides users with quick and easy access to comprehensive
security guidance that is accurate and relevant to specific code security questions. Integrating security scanning and
guidance into a development workflow ultimately results in quicker production of more secure and stable applications.
Page 65 of 65