Ioan Popovici
Chief Software Engineer
Having a job that requires deep technical involvement in a prolific forest of software projects certainly has its challenges. I don’t really want to emphasize the challenges, as I want to talk about one of its advantages: being exposed to issues regarding secure software development in our current era.
Understanding these four basic dimensions of developing secure software is key to starting building security into the software development lifecycle.
Dimension Zero: Speaking the same language
The top repetitive problem that I found in my experience, regardless of the maturity of the software development team, is the heterogeneous understanding of security. This happens at all levels of a software development team: from stakeholders, project managers to developers, testers and ultimately users.
It’s not that there is a different understanding of security between those groups. That would be easy to fix. It’s that inside each group there are different understandings of the same key concepts about security.
As you can expect, this cannot be good. You cannot even start talking about a secure product if everybody has a different idea of what that means.
So how can a team move within this uncertain Dimension Zero? As complicated as this might seem, the solution is straightforward: build expertise inside the team and train the team in security.
How should a final resolution look like at the end of this dimension? You should have put in place a framework for security that lives besides your development lifecycle, like Security Development Lifecycle (SDL) from Microsoft for example. Microsoft SDL is a pretty good resource to start with while keeping the learning loop active during the development process.
Dimension One: Keeping everybody involved.
Let’s assume that a minor security issue appears during
Well… no!
Why would you ask, right!? This looks counterintuitive, especially because “build expertise inside the team and train the team in security” was one of the “dimension zero”’s to go with advice.
Primarily because that is how you start losing the homogeneity you got when tackling Dimension Zero. Furthermore, there will always be poles of security expertise, especially in large teams, you want to have the best expertise when solving a security issue.
Dimension Two: Technical
Here’s a funny fact: we can’t take the developers out of the equation. No matter how hard we try. Security training for developers must include a lot of technical details, and you must never forget about:
- Basics of secure coding.
(E.g. never do stack/buffer overflows, understand privilege separation, sandboxing, cryptography, and …unfortunately many more topics) - Know your platform. Always stay connected with the security aspects of the platform you are developing on and for.
(E.g. if you are a .NET developer, always know its vulnerabilities) - Know the security aspects of your environment.
(E.g. if you develop a web application, you should be no stranger of XSRF)
This list can go forever, but the important aspect is never to forget about the technical knowledge that the developers need to be expsosed on.
Dimension Three: Don’t freak out.
You will conclude that you cannot have a secure solution within the budget you have. This can happen multiple times during a project’s development. That is usually a sign that you got the threat model wrong. Probably you assumed an omnipresent and omnipotent attacker. [We all know you can’t protect from the “Chupacabra”, so you shouldn’t pay a home visit.]
This kind of an attacker doesn’t exist… yet. So, don’t worry too much about it, focus on the critical aspects that need to be secured, and you’ll restore the balance with the budget in no time.
Instead of a sum up of the 4 security dimensions of software development, I wish you happy secure coding and leave you a short-but-important reading list:
- Microsoft Security Development Lifecycle
- The Trustworthy Computing Security Development Lifecycle
- Keep up to date with vulnerabilities https://cve.mitre.org/
- OWASP recommendations for different platforms https://www.owasp.org/