Fundamentals of Application Security
Fundamentals of Application Security
07/01/2015
Introduction
Introduction
What is security?
What is software security?
Cost of Security Defects
Threat Terminology
Module Summary
OWASP
OWASP
Introduction to OWASP
SQL Injection
Key Concepts of SQL Injection
Preventing SQL Injection
Security Misconfiguration
Security Misconfiguration
Security Misconfiguration: Dynamic Threat Environment
Mitigating Security Misconfiguration: Repeatable Hardening
Security Principles
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
1 / 57
07/01/2015
Security Principles
Structural Security
Principle of Least Privilege
Test Everything
Module Summary
Authentication
Authentication
Authentication Considerations
Authorization
Authorization Considerations
Authorization Considerations
Module Summary
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
2 / 57
07/01/2015
Introduction
Introduction
Module Overview
This module will help you understand the importance of designing
and maintaining software security throughout the software
development lifecycle. You will learn the fundamentals of secure
software design, how to align security decisions with corporate
policies and strategies, and how software security failures can lead
to meaningful business risks.
Module Objectives
After completing this module you will be able to:
Understand the importance of software security.
Understand the cost of security defects.
Understand threat and risk management terminology.
Distinguish between types of attackers and their motivations.
This module will help you understand the importance of designing and maintaining software
Narration: security throughout the software development lifecycle. You will learn the fundamentals of
secure software design, how to align security decisions with corporate policies and strategies,
and how software security failures can lead to meaningful business risks. The module defines
threat terminology and helps you understand how threats are evaluated using threat modeling
techniques. Also demonstrated are guidelines on identifying attacks and understanding the
attackers motivations. Finally, the module explains why a consistent assessment methodology
is required to ensure secure software implementations.
What is security?
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
3 / 57
07/01/2015
What is security?
Information security seeks to protect the confidentiality, integrity, and availability of protected
Narration: information and systems. These three principles of information security are called the CIA
triad. Confidentiality means that private or proprietary information is protected from
unauthorized disclosure.
Integrity refers to the need to protect information from being modified or deleted by
unauthorized users.
Maintaining availability of protected systems ensures that information and business functions
will be reliably accessible.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
4 / 57
07/01/2015
The cost of removing a security vulnerability increases exponentially as one progresses along
the software development lifecycle. Industry studies have shown that the total cost of removing
a security vulnerability during testing is less than 2 percent of the cost of removing it after
deployment. Removing a defect even earlier, during design, is far cheaper than removing it
during testing.
The longer it takes to find a security bug, the more money is spent fixing it. Imagine that a
Narration: security bug is found in a piece of popular desktop software; it would be expensive to fix. There
is the immediate damage to the reputation of the software vendor and customers could incur
losses as a result of active exploitation. The vendor must make a patch, warn all their
customers, and provide them with the patch. The patch must be tested and deployed. If you
are interested in reducing your total cost of securing your application, make it a point to
discover security vulnerabilities as quickly as possible in your application. Do not wait until your
customer discovers a vulnerability, or falls victim to a security breach, before you fix it.
Threat Terminology
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
5 / 57
07/01/2015
Module Summary
Understand
the
importance
of software
security
Understand
the cost of
security
defects
Understand
threat and
risk
management
terminology
Distinguish
between
types of
attackers
and their
motivations
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
6 / 57
07/01/2015
Most people tend to think of security as a network problem. Their answer is to protect the
boundary of a system using firewalls and antivirus software.
The truth is that security is a software problem and network insecurities usually result from
flaws in applications running on the system or poor configurations.
It is estimated that over 70 percent of attacks against a companys network are at the
Application Layer, not at the system or network layer.
Most people tend to think of security as a network problem and the common answer to
Narration: security questions is to protect the boundary of a system with firewalls and Antivirus software.
However, in reality, security is a software problem. Most insecurities, including network
insecurities, result from flaws in applications running on the system or because of poor
configurations.
According to Gartner, over 70 percent of attacks on a companys network are at the
Application Layer, not at the system or network layer.
Network security does little to protect sites from an application-layer attack. For example, a
properly constructed and encrypted SSL Web request bypasses the firewall and is completely
unseen by a Network Intrusion Detection System. With that said, if attackers gain access
through the application layer, they can bypass most of the intrusion detection, hide behind SSL,
and enter an application database directly. Therefore, the general hack method is that an
attacker will attempt to penetrate the layer thats appropriate for the asset theyre trying to
hack.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
7 / 57
07/01/2015
Functional Testing:
Functional testing verifies that the application does what it is supposed to do.
It includes applying inputs to verify correct outputs.
Functional testers ask "What is the software supposed to do?"
Security Testing:
Security testing involves verifying that the application does not do what it is not supposed to
do.
It includes applying inputs and verifying that no bad things occur.
Security testers ask "What is the software not supposed to do?"
Development teams have been performing functional testing for decades and the process is
Narration: pretty well entrenched. Usually, we have a test plan that tells us what the application is
supposed to do.
Say, for example, our test plan tells us to apply input A and that the application should
generate output B. As a functional tester, thats what we doapply A, watch for B and when
we see it, we mark the test case as passed. What we are doing here is verifying that the
application did what it was supposed to do. But this is both too much and not enough for
security testing. Its too much because security testers dont bother with what the application
is supposed to do. Its not enough because we should also be concerned with what the
application is not supposed to do!
In other words, when we apply input A, we should not care about output B that is supposed to
occur. Instead, we should try to verify that a vulnerable output C does not occur. So unlike
functional testing, security testing anticipates and tests for insecure behaviors.
Security Bugs
Security bugs are much harder to spot than
functional bugsthey often have no visible (to the
human eye) behavior.
To find security bugs:
Think about side effects and what sensitive data
might be exposed to.
Think backwardsthat is, instead of thinking
what should happen, we need to think about what
shouldnt happen.
When testing for security bugs, keep in mind that these types of bugs can be much harder to
Narration: spot than a functional bug. They are often the result of side effects or the interactions of
multiple bugs that result in an exploitable outcome. Security testing requires you to think first
about the possible threats to an application, the undesirable outcomes, and then progress
from the threat to the attacks that could realize that threat.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
8 / 57
07/01/2015
All software will have bugs, even the best developers make mistakes. Some of these bugs will
inevitably result in security vulnerabilities. Factor time into your projects to think specifically
about security. If you conduct assessments of security early, find security bugs before its too
late, you may save a lot of time and money.
Even the best developers make mistakes. Practically speaking, all software has bugs, and some
Narration: of those bugs, regardless of the security controls used, will result in a security vulnerability that
may cause harm to your users or data. It is a common fallacy that security features will protect
against all security problems. A security feature is typically designed to protect against one
specific attack such as encryption protecting against eavesdropping. Encryption cannot protect
against SQL injection, buffer overflows, and other very common vulnerabilities.
Consider vulnerability assessments as a benefit to application development. U.S. $1 spent up
front on vulnerability assessment saves U.S. $10 during development and U.S. $100 after
release. Finding vulnerability in your design means that you have the opportunity to redesign
more securely. However, if you find vulnerabilities during the development phase, you need to
spend time and money on changing the design, which will have a cascading impact on your
implementation. If you find vulnerabilities during testing or after the software has been
released, you need to change the design and rewrite code to close the vulnerabilities.
Releasing a patch may result in the resolution of a known security vulnerability but even patches
can have bugs. When deciding to patch, evaluate the risk of introducing new bugs and new
vulnerabilities against the damage caused by the vulnerability you are patching.
When you do patch a vulnerability, take the time to understand the root cause. Otherwise, you
may patch a symptom and have to continue re-patching as attackers discover workarounds and
related vulnerabilities.
Whether you are modifying, fixing, or patching code, all maintenance tasks must be evaluated
Narration: for risk so that maintaining your application does not introduce security flaws that were not
there prior to maintenance. Patches can fix security vulnerabilities and other bugs, and can
improve the usability or performance of your application. Though meant to fix problems,
poorly designed patches can sometimes introduce new problems.
When deploying a patch, bear in mind that patches only fix symptoms of known problems.
Patches prevent an attacker from using a known attack vector. There may be other problems
in your software that you do not know about yet. In addition, patches do not always address
the root cause of problems and may actually introduce new functional or security bugs.
Internal Threats
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
9 / 57
07/01/2015
Internal Threats
Insider attacks are a threat that needs to be considered when developing your application:
Attackers may already be inside the defended perimeter.
29 percent of all distinguishable attacks are from insiders.
Internal attackers have far more access to data and systems than outsiders.
The clueless and careless insiders also may bring external threats inside.
Need to consider internal threats in your solution design.
Internal systems are not always safer from attack than external systems.
Internal sources of threats cannot be ignored because its estimated that 29 percent of all
Narration: attacks are conducted by insiderseither intentionally or by executing viruses unintentionally.
Often attackers bounce the attack off of an internal user through XSS or a Trojan horse
program so the risk is almost as high as the external threat.
Insiders have far more access to data and systems than an external attacker and as a result
they can cause much more damage. They can directly steal data from the data store and
transport that data out of the organization. Common methods for transporting data are small
USB flash memory devices or sending the outbound data encrypted as an SSL transaction using
the fast network bandwidth. The data can even be chunked into small files to not set off the
suspicious of data leakage products on a network.
Clueless insiders can also bring external threats inside by using an infected laptop, clicking an email with a virus, and by browsing malicious sites that can attack your systems.
Consider internal threats in your solution design, treat all users as potentially hostile, and treat
internal data feeds to an application as not trusted. Remember that even the most trusted
user can be a hacker!
Module Summary
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
10 / 57
07/01/2015
Module Summary
Describe
common
security
misconceptions
Explain how to
avoid common
security
misconceptions
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
11 / 57
07/01/2015
OWASP
OWASP
Module Overview
Open Web Application Security Project (OWASP) is an open-source
application security project. This module will help you understand
what OWASP is all about.
Module Objectives
After completing this module you will be able to:
Understand OWASP and its importance.
Name each of the OWASP top 10 vulnerabilities.
Understand the basics of the vulnerabilities and their impact.
This module will help you understand what Open Web Application Security Project (OWASP) is.
Narration: First, you will be introduced to what OWASP stands for and why it is important in the software
development lifecycle. Then, this module will provide details about the top 10 vulnerabilities
listed under OWASP and describe how these vulnerabilities can evolve over time as new
attacks are discovered. By the end of this module, you will know about the basics of
vulnerabilities and their impact on application software.
Introduction to OWASP
Open Web Application Security Project (OWASP)
OWASP was founded in 2003 and focuses on improving the security of Web application software.
OWASP is an open-source Web application security project. Members of this project include a
variety of security experts from around the world who have shared their expertise to produce a
list of the most critical Web application security flaws.
OWASP Top 10 is a document created for Web application security, which highlights the 10 most
important Web application vulnerabilities.
Note: The official OWASP Web site is www.owasp.org.
A popular trend, which started originally with the SANS Institute, is for organizations to publish
Narration: annual Top 10 lists of each years most common security vulnerabilities. Since 2003, the Open
Web Application Security Project (OWASP.org) has published such a list for Web application
security. The Open Web Application Security Project (OWASP) is a worldwide free and open
community focused on improving the security of Web applications.
Security experts from around the world gather to share their expertise with each other and
come up with the top 10 security vulnerabilities of the year. These vulnerabilities, collated as
the OWASP Top Ten, provide a powerful awareness document for Web application security and
represent a broad consensus about the most critical Web application security flaws. Therefore,
adopting the OWASP Top Ten is an effective first step towards changing the software
development culture within your organization into one that produces more secure code.
SQL Injection
Key Concepts of SQL Injection
SQL injection is a software vulnerability that occurs when data entered by users is sent to
the SQL interpreter as a part of an SQL query.
SQL injection exploits security vulnerabilities at the database layer. By exploiting the SQL
injection flaw, attackers can create, read, modify, or delete sensitive data.
Attackers provide specially crafted input data to the SQL interpreter and trick the
interpreter to execute unintended commands.
SQL injection is a software vulnerability that occurs when data entered by users is sent
Narration: to the SQL interpreter as a part of an SQL query. SQL injection exploits security
vulnerabilities at the database layer. By exploiting the SQL injection flaw, attackers can
create, read, modify, or delete sensitive data.
Attackers utilize this vulnerability by providing specially crafted input data to the SQL
interpreter in such a manner that the interpreter is not able to distinguish between the
intended commands and the attackers specially crafted data. The interpreter is tricked
into executing unintended commands.
12 / 57
07/01/2015
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
13 / 57
07/01/2015
Impact of XSS
By exploiting XSS vulnerabilities, an attacker can perform malicious actions, such as:
Hijack an account
Spread Web worms
Access browser history and clipboard contents
Control the browser remotely
Scan and exploit intranet appliances and applications
Note: In an attack exploiting XSS vulnerabilities, anything that can be scripted, can be used
to attack a user.
When attackers succeed in exploiting XSS vulnerabilities, they can gain access to
Narration: account credentials. They can also spread Web worms or access the users computer
and view the users browser history or control the browser remotely. After gaining
control to the victims system, attackers can also analyze and use other intranet
applications.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
14 / 57
07/01/2015
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
15 / 57
07/01/2015
Session hijacking is the alteration of session data to impersonate the session data of
another user, taking over the users session. Session hijacking can be done in several
ways:
Attacker intercepts the communication between the client and server and steals a valid
session ID.
Attacker tries to steal session information from the cookies stored in the users
computer.
Guess a predictable session ID.
The Web is inherently connectionless and stateless and developers rely on data sent to
Narration: the client and returned with each new request to track the users session. Improper
handling of such information can lead to an attack where an attacker alters session
data and impersonates the session data of another user, hijacking the users session.
After attackers know where this information is stored, they simply alter the information
in such a way that the server will view it as the valid session of another user whose
session is hijacked.
Session hijacking can be done in several ways. For example, an attacker can intercept
the communication between a client and a server and steals a valid session ID.
Alternatively, an attacker can try to steal session information from the cookies stored
on the users computer. Finally, if session IDs are predictable an attacker could guess a
valid one.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
16 / 57
07/01/2015
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
17 / 57
07/01/2015
Directory Traversals
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
18 / 57
07/01/2015
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
19 / 57
07/01/2015
CSRF is a malicious attack where the attacker exploits the users Web browser to execute
undesired actions on behalf of the user. These actions include:
Transferring funds
Changing passwords
Purchasing items using online shopping
Cross-Site Request Forgery (CSRF) is a malicious attack that tricks the users Web
Narration: browser to perform undesired actions so that they appear as if an authorized user is
performing those actions.
For example, if an attacker is able to modify the content viewed by a users browser,
perhaps with a hostile Web site, when the user is checking an online bank account, the
attacker can change the users transaction password to control the users actions and
transfer funds to the attackers account.
CSRF attackers use the functionalities of the victims browser against them.
When a user accesses a Web site and logs on to his account, the users credentials are
stored within the Web sites cookie.
The Web browser automatically associates the cookie with the actions the user performs
on the Web site.
Since the user was authenticated by the Web site, if an attacker exploits the CSRF
vulnerability at this stage, the Web application is not able to distinguish between a valid
action performed by the user or a malicious action initiated by an attacker.
To exploit CSRF vulnerability, the attacker uses the functionality of the victims Web
Narration: browser. When the victim is accessing a Web site using his login ID and password, the
victims credentials are automatically saved to the Web sites cookie. The Web browser
will always associate the user with this cookie whenever the user performs any action
on this Web site.
Since the user was authenticated by the Web site, if an attacker exploits the CSRF
vulnerability at this stage, the Web application is not able to distinguish between a valid
action performed by the user or a malicious action initiated by an attacker.
Preventing CSRF
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
20 / 57
07/01/2015
Preventing CSRF
The most common defense is to append challenge tokens to each request. These
challenge tokens must be associated with the users session.
Advantages of using challenge tokens are:
Attackers will not be able to provide a valid token of their own to utilize within the
attack.
Developers can ensure that the request is valid and not coming from a source other
than the user.
The most common method to prevent CSRF attacks is to append challenge tokens to
Narration: each request and associate them with the users session. By including a challenge token
with each request, the developer can ensure that the request is valid and not coming
from another source other than the user.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
21 / 57
07/01/2015
Security Misconfiguration
Security Misconfiguration
After you deploy your Web application online,
it undoubtedly will encounter a number of
attacks. To prevent these attacks from being
successful, you need to follow sound
operational practices related to security.
Inadequate operational practices can lead to
security compromises using exploits of security
features or of known vulnerabilities. Improper
permissions may allow malicious users to
perform actions they shouldnt.
Misconfiguration Types
Missing patches: Patches, hotfixes, service
packs, and updates contain the latest security
fixes and need to be applied when they are
available.
Misconfigured or disabled security features:
If a security feature is disabled or not
configured, it cannot provide protection.
Default accounts: Default accounts may
allow a malicious user to automatically login
with the credentials published in product
documentation.
Unnecessary/unused services or features:
These represent an increased risk for security
problems. Bugs exist even in the best-written
code, By disabling or removing unused and
unnecessary services, code, and libraries, you
limit the amount of code that needs to be
maintained and patched. When in doubt, turn
features off, and turn them back on only if you
need them. Of course, verify all changes and
removals before putting them in production.
Administrative back doors: Administrative
back doors are known as front doors in the
hacking community. Its absolutely critical to
secure these administrative endpoints given
what they are: the keys to the kingdom. Do not
rely on a malicious user overlooking the
functionality; it can always be discovered.
Security through obscurity is no security at all.
Parts of the Stack Vulnerable to
Misconfiguration
OS
Environment/Platform
Web or Application Server
Database Server
Application(s)
Components and Libraries
Services
Narration: After you deploy your Web application online, it undoubtedly will encounter a number
of attacks. To prevent these attacks from being successful, you need to follow sound
operational practices related to security.
Inadequate operational practices can lead to security compromises using exploits of
security features or of known vulnerabilities. Improper permissions may allow malicious
users to perform actions they shouldnt.
A few misconfiguration types, such as missing patches, misconfigured or disabled
security features, default accounts, unnecessary or unused services or features, and
administrative backdoors, can render a Web application vulnerable to attacks.
These security misconfigurations can happen in any part of your system.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
22 / 57
07/01/2015
Narration: Threats change constantly, and without processes that can adapt as quickly as the
threats, you cannot maintain a secure environment. A repeatable process is required to
constantly reevaluate the environment and address new or growing threats.
The process should include updating the environment with changes like adding or
removing network segments and changing configuration.
You may need to deploy new products or functionality to deal with a threat that did not
exist when the application was released. In addition, you should have a regular process
to apply the latest service packs, patches, hotfixes, and updates to all of your software,
from top to bottom.
In addition, your development, test, and staging environments should precisely match
the production environment.
For example, a Nasdaq breach in February of 2011, after investigation by FBI and the
secret service, was narrowed down to unpatched Windows systems and poor firewall
configurations. While the core trading systems most likely remained intact, it could not
be determined how much proprietary and client information was stolen. Unpatched
systems could have been prevented by Nasdaq avoiding downtime as a result of
investigations, loss of revenue and loss of customer trust. Especially in this tough
competitive market, there is no reason to be faced with the same issues as Nasdaq.
GlobalSign, a leading digital certificate provider, was also breached late in 2011 as a
result of an unpatched piece of open source software. Although fortunately the
companies root certificate that is used to sign other digital certificates was not
compromised, GlobalSign had to halt certificate issuance for 9 days, face additional
audits and most importantly lost its public trust due to the breach.
GlobalSign states that the particular open source code was not on the list of software to
be updated. It is important to keep an accurate inventory of all systems and software
they run. You cannot protect what you dont know you have.
23 / 57
07/01/2015
Narration: A well-defined process provides your first line of protection against a dynamic threat
environment. A regular, repeatable hardening process is required to make sure your
environment is protected against the latest threats.
Research each component of your application stack, and subscribe to security and
patch bulletin mailing lists and news groups where updates are announced. Use the
information discovered in your research to apply updates or configure your system to
mitigate new, unpatched vulnerabilities.
Next, you should review and document all settings and configurations, paying close
attention to security features. Make sure you document any changes.
Finally, repeat the process at regular intervals, and every time a deployment or
configuration changes.
Remember to frequently review all enabled features, even though you did this when
you deployed the product. Installers often turn on features you dont need, and service
packs and even administrators may enable feature youre not aware of.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
24 / 57
07/01/2015
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
25 / 57
07/01/2015
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
26 / 57
07/01/2015
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
27 / 57
07/01/2015
SSL and TLS are commonly used to secure the channel between a browser and a Web
server.
It is application independent.
It allows protocols like HTTP, FTP, and Telnet to be layered transparently on top of it.
SSL supports a variety of cryptographic algorithms.
SSL/TLS is commonly used to secure the channel between a browser and a Web server.
Narration: It is application independent and allows protocols like HTTP, FTP, and Telnet to be
layered transparently on top of it.
SSL supports a variety of cryptographic algorithms. For example, during the
"handshaking" process, it uses the RSA public-key cryptosystem, and after the keys are
exchanged, it uses a number of ciphers including RC2, RC4, IDEA, DES, and triple-DES.
IPSec provides a transport level secure communication solution that can be used to secure
the data sent between two computers.
It is mostly used in Virtual Private Networks (VPNs).
It ensures confidentiality and authentication of all network traffic at the IP level.
Other features of IPSec are as follows:
It can provide some security services in the background with no impact on user or the
developer.
It does not provide user-level authentication.
It uses the philosophy that only the OS configuration needs to change and not
individual applications.
IPSec, which is mostly used in Virtual Private Networks (VPNs), provides a transport
Narration: level secure communication solution that can be used to secure the data sent between
two computers. It ensures confidentiality and authentication of all network traffic at
the IP level.
Another benefit of IPSec is that it can provide some security services in the background
with no impact on user or the developer. Also, it does not provide user-level
authentication and uses the philosophy that only the OS configuration needs to change
and not the individual applications.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
28 / 57
07/01/2015
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
29 / 57
07/01/2015
Narration: To help protect against unvalidated redirects, never use internal transfer methods
without first authorizing the client to the target URL. In general, it is far easier to use a
redirect method, which will issue a 302 response to the client and ask the client to
make another request for the target URL. At that point, it will be like any other request
for the target.
Wherever possible, restrict the usage of your forward functionality to some set of
authorized users, instead of all unauthorized users. Sometimes the hardest part of
mitigating unvalidated redirects and forwards is finding them. Scanning the Web logs
can be very helpful to finding this code. Look for HTTP status codes in the 300 series:
301, 302, 303, and 307.
Avoid redirects altogether, or redirect to a static location or a static set of locations
wherever possible. When redirecting to a parameter, validate the parameter to make
sure that it is an expected redirect.
Use table indirection to turn a dynamic set of potential choices into a table of valid keys.
Limit your forward to pass control of another page in your own Web site.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
30 / 57
07/01/2015
Narration: You can use the table indirection technique to mitigate unvalidated redirects and
forwards. If you have a set of valid locations that the client is allowed to redirect to,
consider using table indirection. Keep a table of the allowed URIs, and then allow the
client to specify the keys into the table only and not the actual URI itself. When the key
is returned, look up the URI in the table and then redirect to that location.
In the example on the screen, a redirection scheme for logging that takes a relative
path directly becomes a system that uses a redirect key instead. The key value will
either exist in the table or it wont, and a malicious user has little control over the
redirect destination.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
31 / 57
07/01/2015
Malware
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
32 / 57
07/01/2015
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
33 / 57
07/01/2015
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
34 / 57
07/01/2015
Module Summary
Understand
OWASP and
its
importance
Name each of
the OWASP
top 10
vulnerabilities
Understand
the basics of
the
vulnerabilities
and their
impact
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
35 / 57
07/01/2015
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
36 / 57
07/01/2015
Security Principles
Security Principles
Module Overview
This module will help you understand key security principles and
recognize the importance of incorporating these principles within
your software development lifecycle.
Module Objectives
After completing this module you will be able to:
Understand and incorporate key security principles.
Define Layered Security / Defense in Depth.
Define segmentation.
Define structural security.
This module will help you understand key security principles and the importance of
Narration: incorporating these principles within your software development lifecycle. The module will first
introduce you to incorporating security into your software development process. Then, it will
introduce defense in depth as a strategy to protect information technology resources and
data. This module will further describe different ways to segment data, the importance of
structural security in an organization, and various principles of information security. Finally, the
module will help you recognize the need to test for security vulnerabilities.
Structural Security
Structural security is security that has been baked into the very foundation of an applications
architecture.
Apply simple, structural security, whenever possible.
General examples include concrete building material.
Technical examples include a hardened server or an environment with unused features and
services removed.
Structural security is the very foundation of an applications architecture. For example, using
Narration: concrete as a building material gives a structural security benefit against the threat of fire.
Another example might be including only one entrance or exit in an airport parking lot to
monitor cars. Often, incorporating structural security makes an application simpler and easier
to maintain albeit sometimes at the expense of features.
One good example of employing structural security in software is turning off unused services
and removing unnecessary files from a host operating system. This minimizes the attack
surface and exposes less functionality that may be attacked.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
37 / 57
07/01/2015
To help maintain security, all entities (people, processes, devices) should be assigned the
fewest privileges consistent with their assigned duties and functions.
Definition
Each user, program, and program component operates using the fewest privileges required for
proper functionality.
Rationale
Limits damage from an accident, an error, or an attack.
Reduces interactions among privileged programs.
Limits successful attackers to only assume the authority associated with the compromised
account.
Examples
Users get only the privileges they require to do their job.
Administrators only login with admin privileges when they absolutely need it.
Applications only open files with the specific permissions that are required.
A basic principle in information security says that entities, such as people, processes, and
Narration: devices, should be assigned the fewest privileges consistent with their assigned duties and
functions. For example, the restrictive "need-to-know" approach denies access to all resources
by default, then explicitly grants privileges as they are needed. Applying this principle to a
corporate network would result in all data being off-limits except to specific users or groups.
In contrast, a less-restrictive strategy opens all systems and closes access as required. For
example, allowing employees access to all systems except human resources and accounting,
which is limited to employees in those departments. This is not an ideal approach as it requires
the blacklist to be regularly updated any time new users are added, otherwise those users may
be implicitly granted access that they should not have.
Abiding by the principle of least privilege limits the damage from an accident, an error, or an
attack and reduces interactions among privileged programs. Successful attackers can only
assume the authority associated with the compromised account.
Some common examples of least privilege include giving users only the privileges they require
to do their job, implementing a policy that requires administrators to only log in with admin
privileges when they absolutely need it, and allowing applications to only open files that
contain the required permissions.
Test Everything
It is important to perform security testing to catch improper design and coding practices that may
have been missed earlier in your development process:
Never assume that security controls are effective until you can validate them with thorough
testing.
Most security vulnerabilities will not be discovered during normal application use.
Allocate time for dedicated security testing within your project timeline.
Always test applications and application components, both in isolation and in the environment
where the application is deployed.
Since many vulnerabilities are caused by mistaken assumptions by programmers or by mistakes
Narration: in the code, it is important to test all code for security vulnerabilities. An application or
application component should not be assumed to be secure until security controls have been
thoroughly tested.
Typical application use cases or traditional feature testing will not find most security
vulnerabilities. Security testing must be performed in order to find security vulnerabilities, so it
is important to allocate dedicated time for security testing during the testing phase of the
software development cycle.
It is important to test for security vulnerabilities both in isolation and in the environment the
application is designed to run in. It is common for a security vulnerability to be exploitable only
when the application is interacting with the operating system and other backend services.
Module Summary
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
38 / 57
07/01/2015
Module Summary
Understand
and
incorporate
key security
principles
Define
Layered
Security /
Defense in
Depth
Define
segmentation
Define segmentation
Segmentation is the practice of separating data from logic, segmenting
data by privilege, and segmenting applications from environment to
improve security. A common example of segmenting data from logic is
housing data in a database on a non-publicly accessible system and
configuring the Web root of your Web server on a partition separate from
the operating system installation.
The other way of segmenting data is by privilege. Segmenting data by
privilege separates data by the authorization level required to access it.
Database tables, Web folders, and configuration files are potential areas
where privilege based segmentation could be applied.
An application can also be segmented from its environment. This confines
the application to a safe space where its access to system resources is
tightly constrained.
You may click each objective above in order to learn more.
Click here to go over this section again.
Define
structural
security
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
39 / 57
07/01/2015
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
40 / 57
07/01/2015
Authentication
Authentication
The authentication process verifies the identity of an entity. The entity could be a
computer or a computer user. Trust is established based on the quality of your
authentication implementation and the strength of the entity-provided credentials.
Common authentication mechanisms include:
Passwords
X.509 Certificates
Kerberos Tickets
Smart Cards
Tokens
Biometrics
Forming goals is not enough to ensure software security. You also need to have various
Narration: technical controls to manage security threats. That is why authentication,
authorization, and access control are present in many types of applications.
Authentication verifies the identity of a computer or a computer user. Commonly, the
authentication process involves entering and verifying a username and a password.
However, authentication can also include other methods of identity verification such as
smart cards, retina scans, voice recognition, or fingerprints.
There are different types of authentication such as basic authentication, digest
authentication, form-based authentication, smart card, biometrics, and digital
certificates. Trusting a particular authentication method is based on the quality of
implementation and the strength of credentials.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
41 / 57
07/01/2015
Authentication Considerations
Authentication Considerations
Any authentication method could have weaknesses.
Authentication mechanisms are often the first target of an attack.
Implementing Authentication
Use two-factor authentication for added security.
Define and test all authentication information for valid format and length.
All authentication methods have weaknesses and can be breached because of poor
Narration: implementation. Security vulnerabilities can occur in implementations that include passwords,
certificates, or even biometrics.
The authentication process is often attacked first because even an unauthenticated user can
access the login page of your application.
To strengthen the authentication process, you can use two-factor authentication. Two-factor
authentication provides added security by simultaneously using two different factors to verify
users. In two-factor authentication, a user must know something unique and posses something
unique. For example, knowing a password and possessing a hard token to login to a system.
Authorization
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
42 / 57
07/01/2015
Authorization
Authorization Considerations
Authorization Considerations
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
43 / 57
07/01/2015
Authorization Considerations
Authorization Considerations
Use access controls to structurally harden your environment. Keep in mind that thoughtful
segmentation will facilitate authorization.
Use the principle of least privilege and grant each entity the minimum privileges required
for proper business functionality.
Scrutinize integration with other components. Define responsibility and examine
implementation carefully.
Ask yourself, What type of access does my application need?
Log files
Configuration files
Database tables
Access controls help you structurally strengthen your environment. By appropriately
Narration: setting access control permissions on your resources, you can reduce the amount of
damage an attacker can inflict when exploiting a vulnerability.
Use access controls to structurally harden your environment. Thoughtful segmentation
will facilitate authorization.
Use access controls to implement the principle of least privilege. The principle of least
privilege states that you should grant the minimum privileges to the users and roles in
your application so that they can accomplish appropriate tasks but are not allowed to
do any more. For instance, you may lock down the account that accesses your database
so that it only has permissions to read from specific tables rather than have the ability
to read, write, and delete any table in the database. If an attacker is able to exploit a
vulnerability, such as SQL injection, on your application, access controls on the database
will limit the amount of damage that is possible.
Scrutinize integration with other components. Define responsibilities and examine
implementation carefully.
Before designing access controls, analyze the type of access required by each of the
roles in your applications.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
44 / 57
07/01/2015
Module Summary
Explain the
importance of
the CIA triad
Explain the
purpose of
authentication
and
authorization
Explain the
importance of
error and
exception
handling
Explain the
purpose of
monitoring
and logging
Explain the
purpose of
cryptography
and
encryption
Describe
database
authentication
and controls
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
45 / 57
and controls
07/01/2015
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
46 / 57
07/01/2015
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
47 / 57
07/01/2015
Categorizing Threats
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
48 / 57
07/01/2015
Categorizing Threats
Properly categorizing threats will enable you to identify effective countermeasures to be
integrated in your softwares design. A popular method for categorizing threats is the STRIDE
approach. STRIDE was developed by Microsoft to classify threats identified while threat
modeling. Each type of threat in STRIDE maps to a security property that each software should
have to defend against the threat.
The provided table defines these threat types and security properties to help you understand
how they relate to each other.
Threat
Security Property
Spoofing Identity
The action of assuming the
identity of another user,
component, or system.
Authentication
The ability of a system to verify the identity of a user,
component, or system.
Integrity
The property of data that has not changed. Note: a
system can take two approaches to ensure integrity:
enforcing proper access control or tamper-detection.
Repudiation
The act of denying being the
author of a given action.
Non-repudiation
The ability of a system to ensure that all actions are
accounted for and can be traced back to their authors.
Information Disclosure
The action of viewing
confidential data without
proper authorization.
Confidentiality
The property of data that is not viewed by unauthorized
parties.
Denial of Service
The act of preventing a system
from functioning in accordance
with its intended purpose.
Availability
The property of data that is accessible to legitimate
parties whenever they need it to be.
Threats can be categorized based on the goals and purposes of the attacks. Properly
Narration: categorizing threats will enable you to identify effective countermeasures to be integrated in
your softwares design. STRIDE is the most common method used for categorizing threats. This
method was developed by Microsoft to classify threats identified while threat modeling. Each
type of threat in STRIDE is linked to a security property that software should have to defend
against the threat.
The provided table defines these threat types and security properties to help you understand
how they relate to each other.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
49 / 57
07/01/2015
High (3)
Damage
Potential
How much
damage
would be
caused if the
threat was
realized?
Medium (2)
Low (1)
Leaking trivial
information.
The attacker is
able to access
information
that they are
not authorized
for, but the
information is
not particularly
sensitive.
Exploitability
How easy is it
to launch an
attack?
By a novice
programmer.
A novice
programmer
could craft an
attack in a
short time.
By a skilled programmer.
A skilled programmer could make
the attack, then repeat the steps.
By an expert.
The attack
requires an
extremely skilled
person and indepth
knowledge
every time to
exploit.
Affected users
How large is
the
population
of affected
users?
All users.
All users, in
the default
configuration,
key
customers.
Some users.
For example, only some users that
have a specific non-default
configuration are affected.
Very small
percentage of
users.
For example,
users that use
an obscure
feature of the
software.
Discoverability
How easy is it
for attackers
to find the
vulnerability?
Published
information
explains the
attack.
For example,
the
vulnerability is
found in the
most
commonly
used feature
and is very
noticeable.
bug is
The vulnerability is in a seldom-used The
obscure.
part of the product.
It is unlikely that
Only a few users should come
users will work
across it. It would take some
out damage
thinking to see malicious use.
potential.
After categorizing threats, you should prioritize them because it is not possible to address all
Narration: threats at once. The DREAD methodology helps you to quantify the risk introduced by threats
or vulnerabilities your organization has identified. DREAD allows you to assign a risk rating to
threats by considering the D, R, E, A, and D risk components of a threat. These components
are first rated individually and then their ratings are added together to rate each threats
overall risk.
The provided table shows an example on how to establish such a rating system.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
50 / 57
07/01/2015
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
51 / 57
07/01/2015
52 / 57
07/01/2015
Module Summary
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
53 / 57
07/01/2015
Module Summary
Identify the
root causes of
software
vulnerabilities
Comprehend
activities that
reduce
software
security risk
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
54 / 57
07/01/2015
Hacking: The
Art of
Exploitation
The Art of
Software
Security
Assessment:
Identifying
and
Preventing
Software
Vulnerabilities
Security
Engineering:
A Guide to
Building
Dependable
Distributed
Systems
Writing
Secure Code:
Practical
Strategies and
Proven
Techniques
for Building
Secure
Applications
in a
Networked
World
Rather than merely showing how to run existing exploits, author Jon Erickson
explains how arcane hacking techniques actually work. To share the art and
science of hacking in a way that is accessible to everyone, this book introduces
the fundamentals of C programming from a hacker's perspective. The included
LiveCD provides a complete Linux programming and debugging environment
all without modifying your current operating system. Use it to follow along with
the book's examples as you fill gaps in your knowledge and explore hacking
techniques on your own. Get your hands dirty debugging code, overflowing
buffers, hijacking network communications, bypassing protections, exploiting
cryptographic weaknesses, and perhaps even inventing new exploits.
This book is comprehensive and carefully researched. It makes it clear just how
difficult it is to protect information systems from corruption, eavesdropping,
unauthorized use, and general malice. Better, Ross Anderson offers a lot of
thoughts on how information can be made more secure (though probably not
absolutely secure, at least not forever) with the help of both technologies and
management strategies. His work makes fascinating reading and will no doubt
inspire considerable doubt in anyone with information to gather, protect, or
make decisions about.
This book describes how to harden your applications throughout the entire
development process from designing secure applications to writing robust
code that can withstand repeated attacks to testing applications for security
flaws. Easily digested chapters reveal proven principles, strategies, and coding
techniques. The authors two battle-scarred veterans who have solved some of
the industrys toughest security problems provide sample code in several
languages.
Narration: Various books are available that define and explain the field of application security. These books show
testers and developers how they can develop secure code and prevent security vulnerabilities.
Click each tab to learn more about details of available books.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
55 / 57
07/01/2015
19 Deadly
Sins of
Software
Security:
Programming
Flaws and
How to Fix
Them
The Security
Development
Lifecycle
This essential book for all software developers, regardless of platform, language,
or type of application, outlines the 19 deadly sins of software security and
shows how to fix each one. Best-selling authors Michael Howard and David
LeBlanc, who teach Microsoft employees how to write secure code, have
partnered with John Viega, the man who uncovered the 19 deadly programming
sins to write this much-needed book.
The software industry has been struggling with how to create and release
software that is more security-enhanced and reliable; the Security Development
Lifecycle (SDL) provides a methodology that works. Adapted from Microsofts
standard development process, SDL is a critical way to help reduce the number
of security defects in code at every stage of the development process, from
design to release. In addition to a brief history of the methodology, this book
details each stage of the SDL methodology and discusses its implementation
across a range of Microsoft software, including Microsoft Windows Server
2003, Microsoft SQL Server 2000 Service Pack 3, and Microsoft Exchange Server
2003 Service Pack 1, to help measurably improve security features.
Coauthored by Michael Howard and Steve Lipner, you get direct access to
insights from Microsofts security team and lessons that are repeatable and
applicable to software development processes worldwide, whether on a smallscale or large-scale. This book includes a CD featuring videos of developer
training classes.
How to Break
Software
Security
How to Break
Web
Software:
Functional
and Security
Testing of
Web
Applications
and Web
Services
This book is for software testers and developers. It presents testing techniques
that expose security holes caused by software dependencies, data-dependent
weaknesses in software, application design flaws, and implementation-related
vulnerabilities. The book is an industry bestseller and required reading for
security testers in many large software development houses. Over 40
universities refer to this book for developing courses on software security and
testing.
eknowledge Solutions
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
56 / 57
07/01/2015
eknowledge Solutions
TeamMentor OWASP Edition provides detailed information on OWASP Top 10 application security topics
in a web reference format designed to help you put what you've learned into daily practice. To view the
security guidance articles, please browse to owasp.teammentor.net. Security Innovation has donated
this to the OWASP community for free use by all.
TeamMentor Enterprise Edition provides a complete application security reference with more than ten
times the information of the TeamMentor OWASP Edition. To view the security guidance articles; please
browse to teammentor.net.
Narration: TeamMentor OWASP Edition provides detailed information on OWASP Top 10 application security
topics in a web reference format designed to help you put what you've learned into daily practice.
Security Innovation has donated this to the OWASP community for free use by all.
TeamMentor Enterprise Edition provides a complete application security reference with more than
ten times the information of the TeamMentor OWASP Edition.
https://sony.absorbtraining.com/courses/clients/317/Courses/Sony/fund_of_appli_security_for_sony_170513/CourseFiles/print.htm#
57 / 57