Foreground Persistence

Adversaries may abuse Android's startForeground() API method to maintain continuous sensor access. Beginning in Android 9, idle applications running in the background no longer have access to device sensors, such as the camera, microphone, and gyroscope.[1] Applications can retain sensor access by running in the foreground, using Android’s startForeground() API method. This informs the system that the user is actively interacting with the application, and it should not be killed. The only requirement to start a foreground service is showing a persistent notification to the user.[2]

Malicious applications may abuse the startForeground() API method to continue running in the foreground, while presenting a notification to the user pretending to be a genuine application. This would allow unhindered access to the device’s sensors, assuming permission has been previously granted.[3]

Malicious applications may also abuse the startForeground() API to inform the Android system that the user is actively interacting with the application, thus preventing it from being killed by the low memory killer.[4]

ID: T1541
Sub-techniques:  No sub-techniques
Tactic Type: Post-Adversary Device Access
Tactics: Collection, Persistence
Platforms: Android
MTC ID: APP-19
Contributors: Lorin Wu, Trend Micro
Version: 1.0
Created: 19 November 2019
Last Modified: 26 December 2019

Mitigations

Mitigation Description
Application Vetting

Applications could be vetted for their use of the startForeground() API, and could be further scrutinized if usage is found.

User Guidance

If a user sees a persistent notification they do not recognize, they should uninstall the source application and look for other unwanted applications or anomalies.

Detection

Users can see persistent notifications in their notification drawer and can subsequently uninstall applications that do not belong.

References