Adversaries may establish persistence using system mechanisms that trigger execution based on specific events. Mobile operating systems have means to subscribe to events such as receiving an SMS message, device boot completion, or other device activities.
An intent is a message passed between Android applications 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.
In addition to Android system intents, malicious applications can register for intents broadcasted by other applications. 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 | Name | Description |
|---|---|---|
| S1095 | AhRat |
AhRat can register with the |
| S0525 | Android/AdDisplay.Ashas |
Android/AdDisplay.Ashas has registered to receive the |
| S0524 | AndroidOS/MalLocker.B |
AndroidOS/MalLocker.B has registered to receive 14 different broadcast intents for automatically triggering malware payloads. [4] |
| C0033 | C0033 |
During C0033, PROMETHIUM used StrongPity to receive the following broadcast events to establish persistence: |
| S0479 | DEFENSOR ID |
DEFENSOR ID abuses the accessibility service to auto-start the malware on device boot. This is accomplished by receiving the |
| S9005 | DocSwap |
DocSwap has registered the following intents to automatically execute MainService on device reboot: |
| S0478 | EventBot |
EventBot registers for the |
| S0522 | Exobot |
Exobot has registered to receive the |
| S0509 | FakeSpy |
FakeSpy can register for the |
| S0408 | FlexiSpy |
FlexiSpy uses root access to establish reboot hooks to re-install the application from |
| S1103 | FlixOnline |
FlixOnline may use the |
| S0421 | GolfSpy |
GolfSpy registers for the |
| S0536 | GPlayed |
GPlayed can register for the |
| S0544 | HenBox | |
| S0316 | Pegasus for Android |
Pegasus for Android listens for the |
| S0419 | SimBad |
SimBad registers for the |
| S1195 | SpyC23 |
SpyC23 listens for the |
| S0324 | SpyDealer |
SpyDealer registers the broadcast receiver to listen for events related to device boot-up.[20] |
| S0305 | SpyNote RAT |
SpyNote RAT uses an Android broadcast receiver to automatically start when the device boots.[21] |
| S0545 | TERRACOTTA |
TERRACOTTA has registered several broadcast receivers.[22] |
| S0558 | Tiktok Pro |
Tiktok Pro has registered for device boot, incoming, and outgoing calls broadcast intents.[23] |
| S0427 | TrickMo |
TrickMo registers for the |
| ID | Mitigation | Description |
|---|---|---|
| M1006 | Use Recent OS Version |
Android 8 introduced additional limitations on the implicit intents that an application can register for.[1] |
| ID | Name | Analytic ID | Analytic Description |
|---|---|---|---|
| DET0711 | Detection of Broadcast Receivers | AN1837 |
Correlates (1) application registration or activation of broadcast receivers tied to system or app-generated intents, (2) event-triggered execution while the application is not in the foreground, and (3) immediate follow-on actions such as network communication or data access. The defender observes a causal chain where an external event (e.g., BOOT_COMPLETED, SMS_RECEIVED, USER_PRESENT, CONNECTIVITY_CHANGE) triggers application execution that bypasses normal user-driven lifecycle expectations, followed by background processing or outbound activity. |