A contemporary Android powered smartphone is a posh {hardware} system: Android OS runs on a multi-core CPU – additionally referred to as an Application Processor (AP). And the AP is one in every of many such processors of a System On Chip (SoC). Other processors on the SoC carry out varied specialised duties — resembling safety features, picture & video processing, and most significantly mobile communications. The processor performing mobile communications is also known as the baseband. For the needs of this weblog, we check with the software program that runs on all these different processors as “Firmware”.
Securing the Android Platform requires going past the confines of the Application Processor (AP). Android’s defense-in-depth technique additionally applies to the firmware working on bare-metal environments in these microcontrollers, as they’re a crucial a part of the assault floor of a tool.
A well-liked assault vector inside the safety analysis group
As the safety of the Android Platform has been steadily improved, some safety researchers have shifted their focus in direction of different components of the software program stack, together with firmware. Over the final decade there have been quite a few publications, talks, Pwn2Own contest winners, and CVEs concentrating on exploitation of vulnerabilities in firmware working in these secondary processors. Bugs remotely exploitable over the air (eg. WiFi and mobile baseband bugs) are of specific concern and, subsequently, are common inside the safety analysis group. These sorts of bugs even have their very own categorization in well-known third celebration exploit marketplaces.
Regardless of whether or not it’s distant code execution inside the WiFi SoC or inside the mobile baseband, a frequent and resonating theme has been the constant lack of exploit mitigations in firmware. Conveniently, Android has vital experience in enabling exploit mitigations throughout crucial assault surfaces.
Applying years price of classes discovered in techniques hardening
Over the previous few years, we’ve successfully enabled compiler-based mitigations in Android — on the AP — which add further layers of protection throughout the platform, making it tougher to construct reproducible exploits and to forestall sure sorts of bugs from turning into vulnerabilities. Building on prime of those successes and classes discovered, we’re making use of the identical ideas to hardening the safety of firmware that runs outdoors of Android per se, straight on the bare-metal {hardware}.
In specific, we’re working with our ecosystem companions in a number of areas aimed toward hardening the safety of firmware that interacts with Android:
Bare-metal help
Compiler-based sanitizers don’t have any runtime necessities in trapping mode, which gives a significant layer of safety we would like: it causes this system to abort execution when detecting undefined conduct. As a end result, reminiscence corruption vulnerabilities that will in any other case be exploitable are actually stopped completely. To support builders in testing, troubleshooting, and producing bug stories on debug builds, each minimal and full diagnostics modes could be enabled, which require defining and linking the requisite runtime handlers.
Most Control Flow Integrity (CFI) schemes additionally work for bare-metal targets in trapping mode. LLVM’s1 CFI throughout shared libraries scheme (cross-DSO) is the exception because it requires a runtime to be outlined for the goal. Shadow Call Stack, an AArch64-only function, has a runtime element which initializes the shadow stack. LLVM doesn’t present this runtime for any goal, so bare-metal customers would want to outline that runtime to make use of it.
The problem
Enabling exploit mitigations in firmware working on naked steel targets isn’t any straightforward feat. While the AP (Application Processor) hosts a robust working system (Linux) with comparatively considerable CPU and reminiscence assets, naked steel targets are sometimes severely resource-constrained, and are tuned to run a really particular set of features. Any perturbation in compute and/or reminiscence consumption launched by enabling, for instance, compiler-based sanitizers, might have a big impression in performance, efficiency, and stability.
Therefore, it’s crucial to optimize how and the place exploit mitigations are turned on. The purpose is to maximise impression — harden probably the most uncovered assault floor — whereas minimizing any efficiency/stability impression. For instance, within the case of the mobile baseband, we suggest specializing in code and libraries accountable for parsing messages delivered over the air (significantly for pre-authentication protocols resembling RRC and NAS, that are probably the most uncovered assault floor), libraries encoding/decoding advanced codecs (for instance ASN.1), and libraries implementing IMS (IP Multimedia System) performance, or parsing SMS and/or MMS.
Fuzzing and Vulnerability Rewards Program
Enabling exploit mitigations and compiler-based sanitizers are wonderful strategies to reduce the probabilities of unknown bugs turning into exploitable. However, additionally it is necessary to repeatedly search for, discover, and patch bugs.
Fuzzing continues to be a extremely environment friendly methodology to seek out impactful bugs. It’s additionally been confirmed to be efficient for signaling bigger design points in code. Our crew companions carefully with Android groups engaged on fuzzing and safety assessments to leverage their experience and instruments with naked steel targets.
This collaboration additionally allowed us to scale fuzzing actions throughout Google by deploying central infrastructure that permits fuzzers to run in perpetuity. This is a high-value method generally known as steady fuzzing.
In parallel, we additionally settle for and reward exterior contributions through our Vulnerability Rewards Program. Along with the launch of Android 13, we up to date the severity pointers to additional spotlight remotely exploitable bugs in connectivity firmware. We stay up for the contributions from the safety analysis group to assist us discover and patch bugs in naked steel targets.
On the horizon
In Android 12 we introduced help for Rust within the Android platform, and Android 13 is the first launch with a majority of latest code written in a reminiscence secure language. We see a number of potential in additionally leveraging memory-safe languages for naked steel targets, significantly for top danger and uncovered assault floor.
Hardening firmware working on naked steel to materially enhance the extent of safety – throughout extra surfaces in Android – is among the priorities of Android Security. Moving ahead, our purpose is to increase using these mitigation applied sciences for extra naked steel targets, and we strongly encourage our companions to do the identical. We stand prepared to help our ecosystem companions to harden naked steel firmware.
Special due to our colleagues who contributed to this weblog publish and our firmware safety hardening efforts: Diana Baker, Farzan Karimi, Jeffrey Vander Stoep, Kevin Deus, Eugene Rodionov, Pirama Arumuga Nainar, Sami Tolvanen, Stephen Hines, Xuan Xing, Yomna Nasser.
Notes