SSE Module I
SSE Module I
Module I:
Security Issues in Software Development
Dr G.VENKATESWARA Rao
Professor
Dept. of CSE
GIT,GITAM University
Introduction to Software Engineering
• Software is a program or set of programs containing instructions that provide desired
functionality. And Engineering is the process of designing and building something
that serves a particular purpose and finds a cost-effective solution to problems.
• Software Engineering is mainly used for large projects based on software systems
rather than single programs or applications. The main goal of software Engineering is
to develop software application for improving the quality, budget and time efficiency.
Software Engineering ensures that the software that has to built should be
consistent, correct, also on budget, on time and within the required requirements.
There are Four main Attributes of Software Engineering:-
• Efficiency
• Reliability
• Robustness
• Maintainability
Dual Role of Software:
1. As a product –
• Managers and software engineers should treat all software faults and
weaknesses as potentially exploitable. Reducing exploitable
weaknesses begins with the specification of software security
requirements, along with considering requirements that may have been
overlooked. Software that includes security requirements (such as
security constraints on process behaviors and the handling of inputs,
and resistance to and tolerance of intentional failures) is more likely to
be engineered to remain dependable and secure in the face of an
attack. In addition, exercising misuse/abuse cases that anticipate
abnormal and unexpected behavior can aid in gaining a better
understanding of how to create secure and reliable software
Figure 1-6 Software development life cycle with defined security touchpoints
Defining Properties of Secure Software
• Before we can determine the security characteristics of software and
look for ways to effectively measure and improve them, we must first
define the properties by which these characteristics can be described.
These properties consist of (1) a set of core properties whose
presence (or absence) are the ground truth that makes software
secure (or not) and (2) a set of influential properties that do not
directly make software secure but do make it possible to characterize
how secure software is.
Core Properties of Secure Software
• Confidentiality. The software must ensure that any of its characteristics (including its
relationships with its execution environment and its users), its managed assets,
and/or its content are obscured or hidden from unauthorized entities. This remains
appropriate for cases such as open-source software; its characteristics and content
are available to the public (authorized entities in this case), yet it still must maintain
confidentiality of its managed assets.
• Integrity. The software and its managed assets must be resistant and resilient to
subversion. Subversion is achieved through unauthorized modifications to the
software code, managed assets, configuration, or behavior by authorized entities, or
any modifications by unauthorized entities. Such modifications may include
overwriting, corruption, tampering, destruction, insertion of unintended (including
malicious) logic, or deletion. Integrity must be preserved both during the software’s
development and during its execution.
• Availability. The software must be operational and accessible to its intended,
authorized users (humans and processes) whenever it is needed. At the same time,
its functionality and privileges must be inaccessible to unauthorized users (humans
and processes) at all times.
Two additional properties commonly associated with human users are
required in software entities that act as users (e.g., proxy agents, Web
services, peer processes):
• Accountability. All security-relevant actions of the software-as-user
must be recorded and tracked, with attribution of responsibility. This
tracking must be possible both while and after the recorded actions
occur. The audit-related language in the security policy for the
software system should indicate which actions are considered
“security relevant.”
• Non-repudiation. This property pertains to the ability to prevent the
software-as-user from disproving or denying responsibility for actions
it has performed. It ensures that the accountability property cannot
be subverted or circumvented.
Influential Properties of Secure Software
• Some properties of software, although they do not directly make
software secure, nevertheless make it possible to characterize how
secure software is
• These influential properties are further influenced by the size, complexity,
and traceability of the software. Much of the activity of software security
engineering focuses on addressing these properties and thus targets the
core
Dependability and Security
• In simplest terms, dependability is the property of software that ensures
that the software always operates as intended. It is not surprising that
security as a property of software and dependability as a property of
software share a number of subordinate properties (or attributes). The
most obvious, to security practitioners, are availability and integrity. in
“Basic Concepts and Taxonomy of Dependable and Secure Computing,” a
number of other properties are shared by dependability and security,
including reliability, safety, survivability, maintainability, and fault tolerance
security properties themselves.
Correctness and Security
• From the standpoint of quality, correctness is a critical attribute of
software that should be consistently demonstrated under all
anticipated operating conditions. Security requires that the attribute
of correctness be maintained under unanticipated conditions as well.
One of the mechanisms most commonly used to attack the security of
software seeks to cause the software’s correctness to be violated by
forcing it into unanticipated operating conditions, often through
unexpected input or exploitation of environmental assumptions.
“Small” Faults, Big Consequences
• There is a conventional wisdom espoused by many software
engineers that says vulnerabilities which fall within a specified range
of speculated impact (“size”) can be tolerated and allowed to remain
in the software. This belief is based on the underlying assumption that
small faults have small consequences. In terms of defects with
security implications, however, this conventional wisdom is wrong.
Nancy Leveson suggests that vulnerabilities in large softwareintensive
systems with significant human interaction will increasingly result
from multiple minor defects, each insignificant by itself, thereby
collectively placing the system into a vulnerable state
Predictability and Security
• Predictability means that the software’s functionality, properties, and behaviors
will always be what they are expected to be as long as the conditions under which
the software operates (i.e., its environment, the inputs it receives) are also
predictable. For dependable software, this means the software will never deviate
from correct operation under anticipated conditions. Software security extends
predictability to the software’s operation under unanticipated conditions—
specifically, under conditions in which attackers attempt to exploit faults in the
software or its environment. In such circumstances, it is important to have
confidence in precisely how the software will behave when faced with misuse or
attack. The best way to ensure predictability of software under unanticipated
conditions is to minimize the presence of vulnerabilities and other weaknesses, to
prevent the insertion of malicious logic, and to isolate the software to the
greatest extent possible from unanticipated environmental conditions.
Reliability, Safety, and Security
• The focus of reliability for software is on preserving predictable, correct
execution despite the presence of unintentional defects and other
weaknesses and unpredictable environment state changes. Software
that is highly reliable is often referred to as high-confidence software
(implying that a high level of assurance of that reliability exists) or fault-
tolerant software (implying that fault tolerance techniques were used to
achieve the high level of reliability). Software safety depends on
reliability and typically has very real and significant implications if the
property is not met. The consequences, if reliability is not preserved in a
safety-critical system, can be catastrophic: Human life may be lost, or the
sustainability of the environment may be compromised.
Size, Complexity, Traceability, and Security
• Software that satisfies its requirements through simple functions that are
implemented in the smallest amount of code that is practical, with process
flows and data flows that are easily followed, will be easier to comprehend and
maintain. The fewer the dependencies in the software, the easier it will be to
implement effective failure detection and to reduce the attack surface. Size and
complexity should be not only properties of the software’s implementation, but
also properties of its design, as they will make it easier for reviewers to discover
design flaws that could be manifested as exploitable weaknesses in the
implementation. Traceability will enable the same reviewers to ensure that the
design satisfies the specified security requirements and that the
implementation does not deviate from the secure design. Moreover,
traceability provides a firm basis on which to define security test cases.
How to Influence the Security Properties of
Software
• Once you understand the properties that determine the security of software,
the challenge becomes acting effectively to influence those properties in a
positive way. The ability of a software development team to manipulate the
security properties of software resolves to a balance between engaging in
defensive action and thinking like an attacker. The primary perspective is that of
a defender, where the team works to build into the software appropriate
security features and characteristics to make the software more resistant to
attack and to minimize the inherent weaknesses in the software that may make
it more vulnerable to attack. The balancing perspective is that of the attacker,
where the team strives to understand the exact nature of the threat that the
software is likely to face so as to focus defensive efforts on areas of highest risk.
These two perspectives, working in combination, guide the actions taken to
make software more secure.
The Defensive Perspective
• Assuming the defensive perspective involves looking at the software from the
inside out. It requires analyzing the software for vulnerabilities and
opportunities for the security of the software to be compromised through
inadvertent misuse and, more importantly, through malicious attack and
abuse. Doing so requires the software development team to perform the
following steps:
1. Address expected issues through the application of appropriate security
architecture and features
2. Address unexpected issues through the avoidance, removal, and mitigation of
weaknesses that could lead to security vulnerabilities
3. Continually strive to improve and strengthen the attack resistance, tolerance,
and resilience of the software in everything they do
Addressing the Expected: Security
Architecture and Features
• When most people think of making software secure, they think in
terms of the architecture and functionality of security features.
Security features and functionality alone are insufficient to ensure
software security, but they are a necessary facet to consider., security
features aim to address expected security issues with software such
as authentication, authorization, access control, permissions,
privileges, and cryptography. Security architecture is the overall
framework that holds these security functionalities together and
provides the set of interfaces that integrates them with the broader
software architecture.
Addressing the Unexpected: Avoiding,
Removing, and Mitigating Weaknesses
• Many activities and practices are available across the life cycle of
software systems that can help reduce and mitigate weaknesses
present in software. These activities and practices can typically be
categorized into two approaches: application defense and software
security.
Application Defense