Broadcast Receivers

An intent is a message passed between Android application or system components. Applications can register to receive broadcast intents at runtime, which are system-wide intents delivered to each app when certain events happen on the device, such as network changes or the user unlocking the screen. Malicious applications can then trigger certain actions within the app based on which broadcast intent was received.

Further, malicious applications can register for intents broadcasted by other applications in addition to the Android system itself. This allows the malware to respond based on actions in other applications. This behavior typically indicates a more intimate knowledge, or potentially the targeting of specific devices, users, or applications.

In Android 8 (API level 26), broadcast intent behavior was changed, limiting the implicit intents that applications can register for in the manifest. In most cases, applications that register through the manifest will no longer receive the broadcasts. Now, applications must register context-specific broadcast receivers while the user is actively using the app.[1]

ID: T1402
Sub-techniques:  No sub-techniques
Tactic Type: Post-Adversary Device Access
Tactics: Persistence, Execution
Platforms: Android
Contributors: Alex Hinchliffe, Palo Alto Networks
Version: 2.0
Created: 25 October 2017
Last Modified: 27 March 2020

Procedure Examples

Name Description
DEFENSOR ID

DEFENSOR ID abuses the accessibility service to auto-start the malware on device boot. This is accomplished by receiving the android.accessibilityservice.AccessibilityService intent.[10]

EventBot

EventBot registers for the BOOT_COMPLETED intent to auto-start after the device boots.[9]

FlexiSpy

FlexiSpy uses root access to establish reboot hooks to re-install the application from /data/misc/adn.[2] At boot, FlexiSpy spawns daemons for process monitoring, call monitoring, call managing, and system.[2]

GolfSpy

GolfSpy registers for the USER_PRESENT broadcast intent and uses it as a trigger to take photos with the front-facing camera.[7]

Pegasus for Android

Pegasus for Android listens for the BOOT_COMPLETED broadcast intent in order to maintain persistence and activate its functionality at device boot time.[5]

SimBad

SimBad registers for the BOOT_COMPLETED and USER_PRESENT broadcast intents, which allows the software to perform actions after the device is booted and when the user is using the device, respectively.[6]

SpyDealer

SpyDealer registers the broadcast receiver to listen for events related to device boot-up.[4]

SpyNote RAT

SpyNote RAT uses an Android broadcast receiver to automatically start when the device boots.[3]

TrickMo

TrickMo registers for the SCREEN_ON and SMS_DELIVER intents to perform actions when the device is unlocked and when the device receives an SMS message.[8]

Mitigations

Mitigation Description
Use Recent OS Version

In Android 8, broadcast intent behavior was changed, limiting the implicit intents that applications can register for in the manifest.[1]

Detection

Broadcast intent receivers are part of standard OS-level APIs and are therefore typically undetectable to the end user.

References