What You Will Learn
The Internet of Things (IoT) has taken over. Everywhere we look we see more systems coming online, from routers to refrigerators. But as these systems become more and more integrated into our home and business networks, how does their security posture keep up with their increasing popularity? The Advanced Reduced instruction set computing Machines architecture (ARM) introduced a new family of computer processors that provide a robust platform that is ideal for running a wide variety of small, specialized systems.
Unfortunately, the rapid expansion of new devices coming to market, along with accelerated development lifecycles, mean that security is often an afterthought. The security posture of many IoT devices is further restricted due to hardware limitations and the need to maintain low production costs.
Now more than ever, there is a demand for highly skilled security professionals who understand IoT vulnerabilities and ARM exploitation. However, the complexity of exploit development and the difficulty of acquiring and analyzing the software that runs on IoT systems can create intimidating barriers to those wanting to enter this field.
SEC661: ARM Exploit Development is designed to break down those barriers. It has been built from the ground up to give students a solid foundation in exploit development on the ARM platform. The course starts by going over the fundamentals of the architecture and some basic ARM assembly. Initial emphasis is placed on key data structures and how they work together so that students gain a better understanding of why certain vulnerabilities occur.
Students are provided with the tools they need to set up and work in an ARM environment. From there, we go through several hands-on labs that explore memory corruption vulnerabilities and show how to craft custom input in order to gain control of execution. We will also cover common exploit mitigations and techniques for bypassing them. Finally, students will demonstrate their understanding of the core concepts taught in this highly technical course by crafting their own exploits against two emulated ARM routers.
You will learn:
- Techniques for running ARM in an emulated environment
- The fundamentals of ARM assembly
- How to write ARM exploits to leverage stack-based buffer overflows
- Exploit mitigations and common workarounds
- How to work with ARM shellcode
- Return Oriented Programming (ROP)
- How to exploit IoT devices in ARM
- 64-bit ARM exploit development
Syllabus (12 CPEs)Download PDF
Section one kicks off with an overview of ARM and how it differentiates itself from other architectures. Next, we dive into some common ARM assembly instructions and show how they interact with the system. With emulation, we are able to work directly in an environment where we can debug ARM programs and step through them one instruction at a time. We take an in-depth look at the stack and how it can be abused by vulnerabilities that allow an attacker to gain control of execution. We build upon this knowledge by writing our own ARM exploits for a couple of different scenarios. We close out section one by looking at different types of exploit mitigations and how they have changed the game for attackers.
- Working with ARM (Tools and Techniques)
- Debugging ARM
- Exploiting Stack Overflows
- Overview of the ARM architecture and how it affects us as both consumers and security professionals
- Cross-compiling ARM binaries and how the different steps of the build process are relevant to exploit development
- Format and common patterns in ARM assembly
- Tools and techniques for emulating ARM
- ARM analysis and debugging
- The Stack and how this important data structure is used and abused by exploit developers
- Stack Overflows, leveraging stack-based memory corruption in order to gain control of execution
- Exploit Mitigations and how they can be bypassed
We begin section two by looking at some ARM shellcode under the hood. We go over bad characters and different scenarios that might require modifying and reassembling shellcode. From there, we shift our focus to the Internet of Things (IoT) and start by extracting some firmware. We then analyze a Netgear exploit that was recently disclosed in 2020. Return-Oriented Programming (ROP) is covered in detail and we show how to find gadgets and build custom ROP chains. We then examine how this type of exploit can be used against an emulated Dlink router. Finally, we go over the differences between 32-bit and 64-bit ARM, stepping through some 64-bit ARM shellcode and using it to exploit a buffer overflow.
- Firmware Extraction
- Netgear Exploit
- Dlink Exploit
- 64-bit ARM
- How shellcode works and how to modify it for custom exploits
- Common techniques for acquiring and analyzing firmware images
- In-depth analysis of a real world IoT exploit against Netgear devices
- How Return-Oriented Programming works, searching for gadgets and creating custom ROP chains
- In-depth breakdown of a vulnerability and exploit used to attack an emulated Dlink router.
- Similarities and differences of 64-bit ARM and leveraging what weve learned on this platform
- Familiarity with some type of assembly language is recommended. We will cover some of the basics in class, but any assembly experience would be a great head start.
- Working knowledge of the C programming language
- Familiarity with the Linux operating system, including navigating the file system and running basic commands, as well as using a console-based editor such as vim or nano.
- Ability to edit and run basic Python scripts
Important! Bring your own system configured according to these instructions!
A properly configured system is required to fully participate in this course. If you do not carefully read and follow these instructions, you will likely leave the class unsatisfied because you will not be able to participate in hands-on exercises that are essential to this course. Therefore, we strongly urge you to arrive with a system meeting all the requirements specified for the course.
It is critical that you back-up your system before class. It is also strongly advised that you do not bring a system storing any sensitive data.
System Hardware Requirements
CPU: Your systems processor must be a 64-bit Intel i5 or i7 2.0 GHz processor or higher. Your CPU and OS must support a 64-bit guest virtual machine.
- BIOS: Intels VT (VT-x) hardware virtualization technology should be enabled in your systems BIOS or UEFI settings. You must be able to access your systems BIOS throughout the class. If your BIOS is password-protected, you must have the password.
- USB: At least one available USB 3.0 Type-A port is required for copying large data files from the USB 3.0 drives we provide in class. The USB port must not be locked in hardware or software. Some newer laptops may have only the smaller Type-C ports. In this case, you will need to bring a USB Type-C to Type-A adapter.
- RAM: 16 GB RAM is required for the best experience. To verify on Windows 10, press Windows key + I" to open Settings, then click System, then About. Your RAM information will be toward the bottom of the page. To verify on a Mac, click the Apple logo at the top left-hand corner of your display and then click About this Mac.
- Hard Drive Free Space: 100 GB of FREE space on the hard drive is critical to host the VMs and additional files we distribute. SSD drives are also highly recommended, as they allow virtual machines to run much faster than mechanical hard drives.
- Operating System: Any operating system (Windows, macOS, or Linux) that can run VMware Workstation Player/Pro or VMware Fusion. Those who use a Linux host must be able to access the ExFAT partitions using the appropriate kernel or FUSE modules.
Additional Hardware Requirements
The requirements below are in addition to baseline requirements provided above. Prior to the start of class, you must install virtualization software and meet additional hardware and software requirements as described below. If you do not carefully read and follow these instructions, you will leave the class unsatisfied because you will not be able to participate in hands-on exercises that are essential to this course.
Additional Software Requirements
- 7-Zip: The Virtual Machine zip files can be very large (50 GB+) and some archive tools, even the built in Windows tools have been know to fail. 7-Zip is known to work.
VMware Workstation or Fusion: Please note: VMware Workstation or Fusion is mandatory. VMware Player will not meet this requirement. You must have the ability to take virtual machine snapshots, and you cannot do this with VMware Player.
VirtualBox is not supported and may interfere with our labs. It should not be installed on a system you are planning to use for this class. If you do not own a licensed copy of VMware Workstation or Fusion, you can download a free 30-day trial copy from VMware. VMware will send you a time-limited serial number if you register for the trial at their Web site.
- Credential Guard: If your host computer is running Windows, Credential Guard may interfere with the ability to run VMs. It is important that you start up VMWare prior to class and confirm that virtual machines can run. It is required that Credential Guard is turned off prior to coming to class.
System Configuration Settings
- Local Admin: Some of the tools used in the course will require local admin access. This is absolutely required. If your company will not permit this access for the duration of the course, then you should make arrangements to bring a different system.
If you have additional questions about the laptop specifications, please contact firstname.lastname@example.org.
"If you have been looking to get into exploit development or are looking to grow and solidify your skills, this course was designed for you. ARM is taking the world by storm. With billions of new devices being introduced each year, understanding the fundamentals of security vulnerabilities in ARM and how they can be exploited is a valuable skill that will continue to be in high demand for years to come. My goal in writing this course is to ignite the passion within you and equip you with the skills you need to take you to the next level." - John deGruyter