About Us Our Work Employment News & Events
MITRE Remote Access for MITRE Staff and Partners Site Map
  Home > Our Work > Mission Areas > Cybersecurity >

Cybersecurity -- Strengthening Cyber Defense
   
Home
About
Leadership
Thinking
Forward
Contact Us
Focus Areas
Situation
Awareness
Resiliency
Threat-Based
Defense
Partnership
Innovation
Blog:
Cyber Depot
Resource
Center
Research
Standards
Tools
Awareness
& Training
Library
Learn more about MITRE's free mobile app

Events

Corey Kallenberg
Cyber Training:
Introduction to Software Exploits

We've all heard the adage that in order to be effective in defense, you have to think "red:" by thinking like an adversary, you can be a better defender. In cyber defense, by knowing more about how software can be exploited, we can build more secure code to begin with.

Our next interview explores this concept with Corey Kallenberg. Corey developed a 2-day class on exploiting software vulnerabilities. Software often contains subtle flaws that can unwittingly leave us vulnerable to attack. Corey's course describes the process of how these flaws are identified and exploited by attackers.

Editor: We understand, Corey, that in order to learn how to secure code, you're teaching students how to exploit it. How do you package your class for cyber defenders?

Corey Kallenberg: My class, Introduction to Software Exploits, covers the very basics of exploiting memory corruption vulnerabilities. Students start with learning about exploiting vanilla stack corruption vulnerabilities, then build up to learning about how heap allocators work and how overflows on the heap can be exploited. Toward the end of the class I touch on using static source code analysis for finding vulnerabilities and also how to use simple return to libc style payloads to overcome DEP [Data Execution Prevention].

My 3-day intermediate course focuses on finding and exploiting memory corruption bugs in the Windows environment. The course starts off by reintroducing the same concepts that were learned in the introductory course, but from a Windows perspective. This course also places a greater emphasis on bypassing the set of exploit mitigation techniques you are likely to come up against on a modern operating system.

The last portion of the class is dedicated to bug discovery and walks the student through the process of fuzzing, crash analysis, and going from crash to exploit. By the end of the class students are able to fuzz an application for exploitable bugs, then use return-oriented programming and other techniques to exploit those bugs in an environment with DEP and ASLR enabled.

[Ed.]: Could you say a bit more about the process of fuzzing? What's involved?

[CK]: Fuzzing is the process of sending malformed data to an application in an attempt to generate a crash. All of the crashes you discover via this method are indicative of some underlying bug in the application. Some small subset of these bugs will be exploitable, meaning an attacker will be able to leverage them to achieve arbitrary code execution in the context of the vulnerable program.

[Ed.]: Why is it important for cyber defenders to know the information you are teaching?

[CK]: It's important for people who write software to know the process that people who break software use. This gives software engineers a better awareness of vulnerabilities and their implications so that they can write more secure code. I also think it's important for anyone involved in low-level system security to be intimately familiar with this information. If you engage modern exploit mitigations from an attacker perspective, you will have a better understanding of the strengths and weaknesses of those mitigations.

[Ed.]: What are the most popular kinds of software exploits that adversaries are using today?

[CK]: The most popular ones today are web browser exploits (Internet Explorer, Firefox, etc.) and document reader exploits (Adobe Reader, etc.). Both share similar advantages from an attacker perspective. Browsing to a website or opening a business document are common day-to-day operations for most users, so it's relatively easy to trick a vulnerable user into visiting a malicious website or opening a document with a malware payload that will ultimately lead them to being exploited. The other similarity they share is that both classes of applications tend to be large and complex from a programing standpoint. The more code you have, and the more complicated that code is, the more bugs will ultimately end up in the application.

[Ed.]: How are these skills put to use on the job to defend against these types of threats?

[CK]: Anyone who writes code should be aware of the most common scenarios that lead to memory corruption situations that could be used to break their software. Also, anyone involved in reverse engineering payloads (e.g., malicious PDFs) that are used to attack an enterprise would benefit from a greater understanding of how those payloads are constructed to accomplish an attacker's objectives.

[Ed.]: What is one of the more useful applications of this knowledge that you've come across in teaching this to others?

[CK]: I think the most useful and universal skill developed in the course is skillful use of the debugger. I generally think of exploit development and bug hunting as "power debugging." Developing exploits against unusual bugs has taught me to be creative with how a debugger can be used, and I've been able to apply the lessons learned there to improve my performance as a software developer when I am tracking down difficult bugs in my own code. Being good with a debugger is a skill that can be applied to a large number of security scenarios, so I think that students who improve their debugging skills with exploit development will be rewarded with improved performance in other tasks as well.

[Ed.]: What prerequisite knowledge is necessary to get the most out of your course?

[CK]: Proficiency in assembly is an absolute prerequisite to understanding memory corruption vulnerabilities. Xeno Kovah offers a good series of courses on x86 assembly that I recommend all of my students take if they are not already intimately familiar with x86. Other courses that students should consider are Reverse Engineering, Malware Analysis, and Life of Binaries. For more specifics on how these topics relate to each other, see the flow charts on the OST website.

[Ed]: Do you plan on offering any follow-on courses?

[CK]: I plan on offering an "advanced" exploits course sometime in the fall of 2013, but I am still deciding what topics to include in the curriculum. The topics I will include are largely dependent on student interest, so please feel free to contact me if you have recommendations for material you would like covered.

[Ed.]: Sounds like an opportunity to help influence which topics would be covered! I'm sure we'll follow-up with you later this year to see how it will have turned out. Thanks, Corey.

Corey Kallenberg can be contacted using our employee directory



About Corey Kallenberg

Corey Kallenberg is a MITRE researcher who specializes in low-level system security. He is currently using his background in operating system development, firmware security, and trusted computing to investigate BIOS/UEFI security issues. Corey believes teaching a topic to others is the best way to solidify one's own understanding of the topic. Thus, Corey uses his exploits training to both teach others and as a medium for expanding his own expertise.

 
Homeland Security Center Center for Enterprise Modernization Command, Control, Communications and Intelligence Center Center for Advanced Aviation System Development
 
 
 

Solutions That Make a Difference.®
Copyright © 1997-2013, The MITRE Corporation. All rights reserved.
MITRE is a registered trademark of The MITRE Corporation.
Material on this site may be copied and distributed with permission only.

IDG's Computerworld Names MITRE a "Best Place to Work in IT" for Eighth Straight Year The Boston Globe Ranks MITRE Number 6 Top Place to Work Fast Company Names MITRE One of the "World's 50 Most Innovative Companies"
 

Privacy Policy | Contact Us