Security Plus - Chapter 6 Flashcards
Software development Lifecycle (SDLC)
The steps in a model for software development by mapping software creation from an idea to requirements gathering and analysis to design, coding, testing, and rollout. Once in production, it includes user training, maintenance and decommissioning at the end of life.
SDLC Phases
Planning
Requirements definition
Design
Coding - Includes Unit testing
Testing - Includes User Acceptance testing
Training and Transition
Operations and Maintenance
Decommissioning
SDLC Planning Phase
Initial investigations into whether the effort should occur are conducted.
SDLC Requirements Definition Phase
The development team will begin discussions with customers to determine what the desired functionality is, what the current application or system does and doesn’t do, and what improvements are desired.
SDLC Design Phase
Determining the design for functionality, architecture, integration points and techniques, dataflows, business processes, and other elements that have design implications.
SDLC Testing Phasae
Testing of the systems or applications by internal users, customers and other stakeholders. This phase also includes User Acceptance testing to ensure that the users of the software are satisfied with it’s functionality.
SDLC Coding Phase
Perform the actions of coding for the application or system. This could include unit testing which involves testing small sections of the code to ensure it is written properly.
SDLC Training and Transition Phase
Ensuring that end users are trained on the software and the software has entered general use. Includes patching, updating, minor modifications, and other daily support work.
SDLC Decommissioning
When a system or application reaches the end of its life by obsolescence or a new version of the software is built to replace this version.
Network Environments
Development
Testing
Staging
Production
Development Environment
Used for development or builders to perform coding and workflow development to limit access to production
Testing Environment
Where software and systems are tested can be tested without impacting the Production environment.
Staging Environment
A transition environment of code that has successfully cleared testing to be deployed into production.
Production Environment
This environment hosts all of the software, patches, and other changes to code that has been approved for use by the clients.
DevOps
Combines the software development and IT operations with the goal of optimizing the SDLC.
Toolchains
Utilizes processes and applications that assist with coding, building, testing, packaging, releasing, configuring, and monitoring software within DevOps.
DevSecOps
Utilizes processes and applications that assist with coding, building, testing, packaging, releasing, configuring, monitoring, threat analysis, communication, providing feedback, and ongoing improvement to software and processes.
Continuous Integration
A development practice that consistently (and on an ongoing basis) checks code into a shared repository to enable the use of automation and scripting to implement automated courses of action that result in continuous delivery of code.
Continuous Deployment
Rolls out tested changes into production automatically as soon as they have been tested.
Continuous Validation
Automated security testing of the code that ensures the code is continually functioning appropriately and no new vulnerabilities are discovered.
Open Worldwide Application Security Project (OWASP)
A broad community of developers and security practitioners which hosts many community developed standards, guides, and best practice documents as well as a multitude of open-source tools.
OWASP Secure Coding Practices
Define Security Requirements - Implement security throughout the development process.
Leverage Security Framework - Pre-existing security capabilities can make securing applications easier.
Secure Database Access - Prebuild SQL queries to prevent injection and configure database for secure access.
Encode and Escape Data - Remove special characters.
Validate All Inputs - Treat user input as untrusted and filter appropriately.
Implement Digital Identity - Use multi-factor authentication, secure password storage, and session handling.
Enforce Access Controls - Require all requests to go through access control checks, deny by default, and apply the principle of least privilege.
Protect Data Everywhere - Use encryption in transit, and at rest.
Implement Security Logging and Monitoring - This helps detect problems and allows investigation after the fact.
Handle All Errors and Exceptions - Errors should not provide sensitive data, and applications should be tested to ensure that they handle problems gracefully.
Application Program Interfaces (API)
Interfaces between clients and servers or applications and operating systems that define how the client should ask for information from the server and how the server will respond.
Code Analysis and Testing
It is important to analyze code to understand what the code is doing, how it performs that task, and where flaws may occur in the program. This is performed through static or dynamic code analysis and with testing methods like fuzzing. Once code is deployed, regression testing is performed to ensure the fixes put in place didn’t create new security issues.
Static Code Analysis
Known environment testing reviews the code to understand how the program is written and what the code is intended to do.
Dynamic Code Analysis
Reviews the code through the execution of the code while providing it with input to test the software.
Fuzzing
Involves sending invalid or random data to an application to test its ability to handle unexpected data. The application is monitored to determine if it crashes, fails, or responds in an incorrect manner. Focuses on identifying simple problems with the application.
Injection Vulnerabilities
Among the primary mechanisms that attackers use to break through a web application and gain access to systems supporting that application.
SQL Injection
Web applications often receive input from users and use it to compose a database query that provides results that are sent back to a user. The attacker sends an unusual looking request to the web server and monitors the results of the request.
Blind Content Based SQL Injection
The attacker sends input to the web application that tests whether the application is interpreting injected code, before attempting an attack.
Blind Timing Based SQL Injection
When an attacker uses the amount of time it requires to process a query as a channel for retrieving information from a database. Longer delays in returning information usually means there is a possible attack vector available to exploit.
Code Injection Attacks
These attacks seek to insert attacker-written code into the legitimate code created by a web application developer. These attacks can be seen through other developer-based code in:
LDAP - Lightweight Directory Access Protocol attack
XML - Extensible Markup Language attack
DLL - Dynamic Linked Library attack
HTML - Cross Site Scripting attack (XSS)