Hey you there, did you know that forty percent of all data breaches are due to web application vulnerabilities? That means the very software your team is building is likely to be the vector to getting your data pwnd. Still feeling skeptical? You should google Heartland’s 2008 breach, eBay’s XSS vulnerability, or Time Warner’s password leak. I’ll wait.
Done? Pretty scary, isn’t it?
Great, But How Do You Get Your Developers Thinking About Security?
The discipline of bullet-proofing your code against application vulnerabilities is called Secure Coding. You want this fancy secure coding to up your AppSec game, but what if your R&D organization lacks the skills? You hired smart people, they can learn it, but they need to want to. They need to feel it. So how do you get your team stoked on security awareness (besides telling them to stop writing their passwords on post-it notes)?
The first thing you do is put together a rip-roaring slide deck with the top ten security flaws and a snazzy background and get them to read the heck out of it. Developers love slide decks.
Hmm, That didn’t work.
If only there were a better way, more engaging way. And there is. Did you learn to code just by reading about Java? No way. You started working on coding examples to get the hang of it, right? Maybe you even got your code katas or koans on so you could motivate yourself. Why not do the same to cultivate some security awareness love?
AppSec enthusiasts commonly compete in Capture The Flag contests. No, not this. Not this either. There are a couple of CTF formats out there, but the Jeopardy format is the one that best suits the needs of introductory training. This format is made up of a ladder of increasingly difficult puzzles. The ladder works like this:
- Look at the puzzle, in this case a flawed web application. Since we’re interested in secure coding, look at the source code the app.
- Throw what you can against it.
- If you succeed in exploiting a flaw in the app, you should get it to cough up the key to the next level. That’s called the loot.
- Use said loot to unlock the next level.
- Lather. Rinse. Repeat until you are the first one to loot the final level.
- Stand on table and celebrate your victory.
You might be thinking, “This is great advice but how do I get me one of those CTF contests?” We thought the same thing. We didn’t have time to wait for someone else to put together a competition, and we wanted to make inroads on secure coding training in a more controlled environment. What to do?
What We Did
Some of us had competed in the Stripe 2.0 CTF like, 37.5 computer years ago (that’s roughly 4 years ago in people years). Fortunately, the good people at Stripe open-sourced those very same web app puzzles. Yea! But they had languished untouched in the backwaters of github. Boo!
After some studious digital archeology in the form of ancient version management, we resuscitated the puzzles. Once we had the puzzles in hand, we used veewee to roll a VirtualBox (VBox) compatible VM with some scripting magic to auto-generate the loot values. In this VM, each puzzle was set up to run sandboxed away from the casual user, but still gave them access to the source code.
How Can You Do the Same?
If you’ve read this far, you might be ready to introduce some CTF-based training to your organization. You might still be thinking, “This is great and all, but how do I get me one of those CTFs?” Scroll no further, true believer. We have open-sourced all the material you need to conduct your own CTF training right here in this very github:
In the next post, I will explain how we developed an introductory secure coding training session around this vm and provide advice on how you can do it too. Now, go get that flag!