Open source software has revolutionized the way developers build applications, offering a treasure trove of pre-built software "legos" that dramatically boost productivity and accelerate innovation. By leveraging the collective expertise of a global community, developers can create complex, feature-rich applications in a fraction of the time it would take to build everything from scratch. However, this incredible power comes with a significant caveat: the open source model introduces risk.
Organizations inherit both the good and bad parts of the OSS source code they don't own. This double-edged sword of open source software necessitates a careful balance between harnessing its productivity benefits and managing the risks. A comprehensive OSS security program is the industry standard best practice for managing the risk of open source software within an organization's software supply chain.
Learn the container security best practices to reduce the risk of software supply chain attacks.
What is open source software security?
Open source software security is the ecosystem of security tools (some of it being OSS!) that have developed to compensate for the inherent risk of OSS development. The security of the OSS environment was founded on the idea that "given enough eyeballs, all bugs are shallow". The reality of OSS is that the majority of it is written and maintained by single contributors. The percentage of open source software that passes the qualifier of "enough eyeballs" is miniscule.
Does that mean open source software isn't secure? Fortunately, no. The OSS community still produces secure software but an entire ecosystem of tools ensure that this is verified—not only trusted implicitly.
What is the difference between closed source and open source software security?
The primary difference between open source software security and closed source software security is how much control you have over the source code. Open source code is public and can have many contributors that are not employees of your organization while proprietary source code is written exclusively by employees of your organization. The threat models required to manage risk for each of these software development methods are informed by these differences.
Due to the fact that open source software is publicly accessible and can be contributed to by a diverse, often anonymous community, its threat model must account for the possibility of malicious code contributions, unintentional vulnerabilities introduced by inexperienced developers, and potential exploitation of disclosed vulnerabilities before patches are applied. This model emphasizes continuous monitoring, rigorous code review processes, and active community engagement to mitigate risks.
In contrast, proprietary software's threat model centers around insider threats, such as disgruntled employees or lapses in secure coding practices, and focuses heavily on internal access controls, security audits, and maintaining strict development protocols.
The need for external threat intelligence is also greater in OSS, as the public nature of the code makes it a target for attackers seeking to exploit weaknesses, while proprietary software relies on obscurity and controlled access as a first line of defense against potential breaches.
What are the risks of using open source software?
- Vulnerability exploitation of your application
- The bargain that is struck when utilizing OSS is your organization gives up significant amounts of control of the quality of the software. When you use OSS you inherit both good AND bad (read: insecure) code. Any known or latent vulnerabilities in the software become your problem.
- Access to source code increases the risk of vulnerabilities being discovered by threat actors
- OSS development is unique in that both the defenders and the attackers have direct access to the source code. This gives the threat actors a leg up. They don't have to break through perimeter defenses before they get access to source code that they can then analyze for vulnerabilities.
- Increased maintenance costs for DevSecOps function
- Adopting OSS into an engineering organization is another function that requires management. Data has to be collected about the OSS that is embedded in your applications. That data has to be stored and made available in case of the event of a security incident. These maintenance costs are typically incurred by the DevOps and Security teams.
- OSS license legal exposure
- OSS licenses are mostly permissive for use within commercial applications but a non-trivial subset are not, or worse they are highly adversarial when used by a commercial enterprise. Organizations that don't manage this risk increase the potential for legal action to be taken against them.
How serious are the risks associated with the use of open source software?
Current estimates are that 70-90% of modern applications are composed of open source software. This means that only 10-30% of applications developed by organizations are written by developers employed by the organization. Without having significant visibility into the security of OSS, organization's are handing over the keys to the castle to the community and hoping for the best.
Not only is OSS a significant footprint in modern application composition but its growth is accelerating. This means the associated risks are growing just as fast. This is part of the reason we see an acceleration in the frequency of software supply chain attacks. Organizations that aren't addressing these realities are getting caught on their back foot when zero-days are announced like the recent XZ utils backdoor.
Why are SBOMs important to open source software security?
Software Bills of Materials (SBOMs) serve as the foundation of software supply chain security by providing a comprehensive "ingredient list" of all components within an application. This transparency is crucial in today's software landscape, where modern applications are a complex web of mostly open source software dependencies that can harbor hidden vulnerabilities.
SBOMs enable organizations to quickly identify and respond to security threats, as demonstrated during incidents like Log4Shell, where companies with centralized SBOM repositories were able to locate vulnerable components in hours rather than days. By offering a clear view of an application's composition, SBOMs form the bedrock upon which other software supply chain security measures can be effectively built and validated.
The importance of SBOMs in open source software security cannot be overstated. Open source projects often involve numerous contributors and dependencies, making it challenging to maintain a clear picture of all components and their potential vulnerabilities. By implementing SBOMs, organizations can proactively manage risks associated with open source software, ensure regulatory compliance, and build trust with customers and partners.
SBOMs enable quick responses to newly discovered vulnerabilities, facilitate automated vulnerability management, and support higher-level security abstractions like cryptographically signed images or source code. In essence, SBOMs provide the critical knowledge needed to navigate the complex world of open source dependencies by enabling us to channel our inner GI Joe—"knowing is half the battle" in software supply chain security.
Best practices for securing open source software?
Open source software has become an integral part of modern development practices, offering numerous benefits such as cost-effectiveness, flexibility, and community-driven innovation. However, with these advantages come unique security challenges. To mitigate risks and ensure the safety of your open source components, consider implementing the following best practices:
1. Model Security Scans as Unit Tests
Re-branding security checks as another type of unit test helps developers orient to DevSecOps principles. This approach helps developers re-imagine security as an integral part of their workflow rather than a separate, post-development concern. By modeling security checks as unit tests, you can:
- Catch vulnerabilities earlier in the development process
- Reduce the time between vulnerability detection and remediation
- Empower developers to take ownership of security issues
- Create a more seamless integration between development and security teams
Remember, the goal is to make security an integral part of the development process, not a bottleneck. By treating security checks as unit tests, you can achieve a balance between rapid development and robust security practices.
2. Review Code Quality
Assessing the quality of open source code is crucial for identifying potential vulnerabilities and ensuring overall software reliability. Consider the following steps:
- Conduct thorough code reviews, either manually or using automated tools
- Look for adherence to coding standards and best practices
- Look for projects developed with secure-by-default principles
- Evaluate the overall architecture and design patterns used
Remember, high-quality code is generally more secure and easier to maintain.
3. Assess Overall Project Health
A vibrant, active community and committed maintainers are crucial indicators of a well-maintained open source project. When evaluating a project's health and security:
- Examine community involvement:
- Check the number of contributors and frequency of contributions
- Review the project's popularity metrics (e.g., GitHub stars, forks, watchers)
- Assess the quality and frequency of discussions in forums or mailing lists
- Evaluate maintainer(s) commitment:
- Check the frequency of commits, releases, and security updates
- Check for active engagement between maintainers and contributors
- Review the time taken to address reported bugs and vulnerabilities
- Look for a clear roadmap or future development plans
4. Maintain a Software Dependency Inventory
Keeping track of your open source dependencies is crucial for managing security risks. To create and maintain an effective inventory:
- Use tools like Syft or Anchore SBOM to automatically scan your application source code for OSS dependencies
- Include both direct and transitive dependencies in your scans
- Generate a Software Bill of Materials (SBOM) from the dependency scan
- Your dependency scanner should also do this for you
- Store your SBOMs in a central location that can be searched and analyzed
- Scan your entire DevSecOps pipeline regularly (ideally every build and deploy)
An up-to-date inventory allows for quicker responses to newly discovered vulnerabilities.
5. Implement Vulnerability Scanning
Regular vulnerability scanning helps identify known security issues in your open source components. To effectively scan for vulnerabilities:
- Use tools like Grype or Anchore Secure to automatically scan your SBOMs for vulnerabilities
- Automate vulnerability scanning tools directly into your CI/CD pipeline
- At minimum implement vulnerability scanning as containers are built
- Ideally scan container registries, container orchestrators and even each time a new dependency is added during design
- Set up alerts for newly discovered vulnerabilities in your dependencies
- Establish a process for addressing identified vulnerabilities promptly
6. Implement Version Control Best Practices
Version control practices are crucial for securing all DevSecOps pipelines that utilize open source software:
- Implement branch protection rules to prevent unauthorized changes
- Require code reviews and approvals before merging changes
- Use signed commits to verify the authenticity of contributions
By implementing these best practices, you can significantly enhance the security of your software development pipeline and reduce the risk intrinsic to open source software. By doing this you will be able to have your cake (productivity boost of OSS) and eat it too (without the inherent risk).
How do I integrate open source software security into my development process?
DIY a comprehensive OSS security system
We've written about the steps to build a OSS security system from scratch in a previous blog post—below is the TL;DR:
- Integrate dependency scanning, SBOM generation and vulnerability scanning into your DevSecOps pipeline
- Implement a data pipeline to manage the influx of security metadata
- Use automated policy-as-code "security tests" to provide rapid feedback to developers
- Automate remediation recommendations to reduce cognitive load on developers
Outsource OSS security to a turnkey vendor
Modern software composition analysis (SCA) tools, like Anchore Enterprise, are purpose built to provide you with a comprehensive OSS security system out-of-the-box. All of the same features of DIY but without the hassle of building while maintaining your current manual process.
- Anchore SBOM: comprehensive dependency scanning, SBOM generation and management
- Anchore Secure: vulnerability scanning and management
- Anchore Enforce: automated security enforcement and compliance
Whether you want to scale an understaffed security to increase their reach across your organization or free your team up to focus on different priorities, the buy versus build opportunity cost is a straightforward decision.
Next Steps
Hopefully, you now have a strong understanding of the risks associated with adopting open source software. If you're looking to continue your exploration into the intricacies of software supply chain security, Anchore has a catalog of deep dive content on our website. If you'd prefer to get your hands dirty, we also offer a 15-day free trial of Anchore Enterprise.
Learn about the role that SBOMs for the security of your organization in this white paper.