WHY BE RUGGED?
The rate at which software is being embedded into “things” is exploding. Manufacturers in the appliance, automotive, consumer electronics, and medical device industries are rapidly expanding
the use of embedded devices powered by software, making smarter products and adding new features and capabilities. To meet the growing demand for software and to keep up with rapidly changing business and consumer trends, developers are under pressure to write and reuse more code than ever, to deliver newer and better features, and to do it all faster. This evolution dramatically impacts the reliability, safety and security requirements for software- it needs to be Rugged, like never before.
WHAT IT MEANS TO BE RUGGED:
A few years back Joshua Corman, David Rice and Jeff Williams delivered the Rugged Manifesto in a presentation on Rugged Software Development at the SANS Application Security Summit.
The Rugged Manifesto
I am rugged and, more importantly, my code is rugged.
I recognize that software has become a foundation of our modern world.
I recognize the awesome responsibility that comes with this foundational role.
I recognize that my code will be used in ways I cannot anticipate, in ways it was not designed, and for longer than it was ever intended.
I recognize that my code will be attacked by talented and persistent adversaries who threaten our physical, economic and national security.
I recognize these things – and I choose to be rugged.
I am rugged because I refuse to be a source of vulnerability or weakness.
I am rugged because I assure my code will support its mission.
I am rugged because my code can face these challenges and persist in spite of them.
I am rugged, not because it is easy, but because it is necessary and I am up for the challenge
Their concept of “Rugged” describes software development organizations, which have a culture of rapidly evolving their ability to create available, survivable, defensible, secure, and resilient software.
A key tenant of this philosophy is “that negative and reactive approaches to application security cannot scale and are doomed to fail.” And that fixing holes without establishing strong defenses against the threats that matter does not make sense. Yet most organizations today use penetration testing or automated tools as their sole source of assurance. These organizations are not learning from their mistakes, they simply patch over the symptoms and continue introducing the same vulnerabilities over and over again.”
Rugged By Design
Addressing the cause and not the symptoms is supported and strengthened by the use of a structured code analysis process. Although incorporating security features such as encryption and password protection will help to safeguard access to devices and data, such features are insufficient when the application code contains defects that render it vulnerable. So while architects strive for more secure features and designs, the best approach for securing embedded is to find and address coding issues at an early stage and then deliver high-quality, defect-free code. To do this, developers need tools that can help them ensure that the code they write is free from known weaknesses and follows proven guidelines and standards.
Static code analysis tools, integrated into a developer’s integrated development environment (IDE) and incorporated into a team's existing workflow, enable the early and automated detection of key security issues and vulnerabilities. A process in which developers run frequent analytics on their code (either on the desktop or via a server-based model) provides developers with the quick feedback they need to make corrections as the code is being written. This approach not only enables developers to find vulnerabilities, it also provides guidance on how to correct coding errors to prevent defects. As a result, developers can immediately take corrective action to deliver code that is more secure and more reliable.
With static analysis tools, developers can detect security problems at the early stages of software projects before code is compiled, executed, or tested, and capitalize on the opportunity to improve the quality and security of the software they write for embedded devices.
Performing checks to ensure their software complies with CWE guidelines and CERT standards gives developers an objective measure of their work. The checks also provide managers and organizations a means of documenting that their software complies with established security standards and requirements.
Static analysis reduces the number of iterations needed to produce software, cuts testing and development costs, speeds development, and enables the delivery of more secure software.
WILL YOU CHOOSE TO BE RUGGED?
Everyday more and more lives depend on your software- can you afford not to be rugged?
And remember, just because you follow rigorous quality assurance procedures and may even be using static analysis testing you may still have security vulnerablites. For more information on developing software that is both safe and secure check out DEVELOPING SECURE EMBEDDED SOFTWARE: QUALITY DOESN’T EQUAL SECURITY and start getting rugged !