ShiftLeft with minimal effort
Why is SDLC security essential?
With the inclusion of more systems and tools, the software development life cycle (SDLC) escalates in complexity. Concurrently, cyber threats within this realm are increasing, with perpetrators seeking the most vulnerable points within the pipeline to exploit and thereby access sensitive information, disrupt services, implant harmful files, and more.
Over the past three years, there have been numerous instances of large corporations suffering from significant cyber attacks and information leaks due to weaknesses in their development life cycle. In some instances, the repercussions were not limited to the company but extended to its clients and users. Recent examples include:
- SolarWinds
- Travis
- Codecov
- AstraZeneca
- Toyota
To preclude such occurrences, it is crucial for companies to fortify their SDLC processes. This begins with understanding the potential threats associated with SDLC, then implementing the appropriate security tools, methodologies, and processes to counter them.
Although this might appear straightforward, it often necessitates substantial financial investment for acquiring the necessary tools and the personnel required to administer and uphold them.
This article seeks to illustrate how to construct a secure SDLC with minimal financial expenditure by utilizing open-source tools. While not every suggestion may be suitable for all companies or circumstances, it should assist many organizations in comprehending SDLC threats and how to implement some of the proposed solutions.
SDLC (Software Development Life Cycle) Prior to discussing threats, protections, and tools, it is beneficial to review the fundamentals of a standard, uncomplicated SDLC process:
Typical SDLC process
The diagram above represents a simple SDLC process. However, let’s dissect it further:
- Design — This phase outlines the expected features and operations, including screen layouts, business rules, process diagrams, pseudocode, and other deliverables. Any security concerns and requirements should also be addressed during this stage.
- Code — In this phase, developers create the code necessary to construct the application as delineated in the design.
- Tests — The resulting software undergoes comprehensive testing, encompassing unit testing, code quality, integration testing, and security tests.
- Deploy — Upon completion of the testing phase, the application progresses to production. Ideally, this transition occurs automatically (generally as part of CI/CD), though companies in highly regulated industries or with lower maturity may require manual approvals.
- Operate — Once the application is in the production stage and being utilized by customers, continuous monitoring is crucial to ensure that necessary adjustments and corrections can be made to prevent harmful activity.
In most organizations, the SDLC may encompass additional, smaller or larger intermediary steps. However, for the purposes of this article, the primary focus will be on the five key stages outlined above.
SDLC Risks Risks
- Design — The absence of security controls integrated into the application during its development cycle contributes to an unsafe design.
- Compliance — Certain regulations (HIPPA, PCI, etc.) stipulate specific security policies and processes. Non-compliance with these requirements may result in fines, sanctions, and security breaches.
- Insecure Code — Code written without considering security or adhering to security best practices can lead to various weaknesses and subsequent security incidents. The OWASP Top 10 project provides further information on significant risks related to unsafe code.
- Infrastructure as Code (IaC) — IaC refers to the management and provision of infrastructure via code rather than manual processes. Neglecting IaC security can lead to severe consequences, such as exposure of sensitive data to unauthorized users, data leakage, unauthorized access to business-critical assets and resources, and an expanded attack surface.
- Vulnerable third-party frameworks — These can include known vulnerabilities, inherited vulnerabilities from other libraries (dependencies), recurring vulnerabilities due to library versioning, and zero-day vulnerabilities.
- Secrets and keys — Secrets, keys, passwords, etc., hardcoded into the source code. Misconfiguration — Insecure system configuration risks arise from flaws in the security settings, configurations, and hardening of various systems across the pipeline (e.g., SCM, CI, Artifact repository), often providing easy targets for attackers looking to establish a foothold in an environment.
- Vulnerable containers — Risks associated with vulnerable containers include improperly configured privilege assignments, malware in container images, the use of outdated and vulnerable container images, etc.
- APIs — APIs, by their very nature, expose application logic and sensitive data such as Personally Identifiable Information (PII). Therefore, vulnerable APIs can enable attackers to access PII and sensitive data or carry out other malicious activities.
Each of the risks mentioned above poses a significant threat to our application and business operations. The consequences of exploiting vulnerabilities in each SDLC stage can be devastating and potentially result in financial losses, reputational harm, unhappy clients, class actions, stock price impact, and more.