CSE 270: Software Testing - Reading Material

5.6 Security Testing

Introduction

Security testing is a huge topic in software testing today. With the prevalence of data breaches, cyber attacks and other malicious actors trying to profit off of criminal activity, it is more important than ever that software is carefully examined for security defects. Effective security testing typically requires specialized training in ethical hacking techniques. Understanding security testing well can lead to a lucrative career in the security industry. Let’s start with an overview of the various types of security testing and how they are conducted.

Types of Security Testing

Each testing type plays a valuable role in ensuring a comprehensive and robust security posture for software systems. The combination of these approaches helps organizations build resilient and secure applications while effectively addressing potential security risks.

Categorizing Security Risks using the Common Weakness Enumeration

The Common Weakness Enumeration (CWE) is a community-driven initiative that originated from collaborative efforts between the MITRE Corporation and various cybersecurity organizations. Its development started in 2005 to address the need for a standardized language to identify and categorize software weaknesses and vulnerabilities

Key Components and Structure

CWE is structured around the following key components:

Software testers can use the Common Weakness Enumeration (CWE) to enhance their testing efforts and contribute to the overall security of the software they are testing.

Staying Up-To-Date on Common Threats using the OWASP Top Ten

The OWASP (Open Web Application Security Project) Top Ten is a regularly updated list that originated from the collaborative efforts of security professionals worldwide within the OWASP community. The project was initiated in 2003 to raise awareness about the most critical security risks affecting web applications. The OWASP Top Ten is updated periodically to reflect the evolving threat landscape in web application security.

The most current OWASP Top Ten list can be found at the URL https://owasp.org/www-project-top-ten/

The OWASP Top Ten serves several purposes and is widely used in the cybersecurity community:

Relationship with CWE

While both the OWASP Top Ten and CWE (Common Weakness Enumeration) address security issues in software, they have different scopes and objectives. The OWASP Top Ten focuses specifically on web application security risks and provides a concise, prioritized list. In contrast, CWE is a more comprehensive catalog that covers a broader range of software weaknesses beyond web applications.

The relationship between OWASP Top Ten and CWE lies in the fact that the OWASP Top Ten often references CWE identifiers for specific vulnerabilities. This linkage allows for a more detailed understanding of the underlying weaknesses associated with each item on the OWASP list. CWE provides a more extensive framework for categorizing and describing these weaknesses.

By learning the OWASP Top Ten, software testers can contribute to building more secure web applications, align their efforts with industry-recognized security priorities, and foster a proactive approach to identifying and mitigating common security risks.

Memory Safety in Programming Languages

Memory safety is an important aspect of programming language design and refers to a language's ability to prevent certain types of memory-related errors, such as buffer overflows, use-after-free, and dangling pointers. A memory-safe language helps mitigate vulnerabilities and enhances the overall security and stability of software.

Memory-Safe Languages:

Several programming languages are designed with memory safety features, including:

Memory-Unsafe Languages:

Certain commonly used programming languages lack built-in memory safety features, making them prone to memory-related vulnerabilities. Notable examples include:

Common Memory-Related Issues:

Understanding memory safety and adopting memory-safe languages or practices is helpful for building secure and robust software, reducing the likelihood of memory-related vulnerabilities that can be exploited by malicious actors.