Execution Guardrails: Geofencing

Adversaries may use a device’s geographical location to limit certain malicious behaviors. For example, malware operators may limit the distribution of a second stage payload to certain geographic regions.[1]

Geofencing is accomplished by persuading the user to grant the application permission to access location services. The application can then collect, process, and exfiltrate the device’s location to perform location-based actions, such as ceasing malicious behavior or showing region-specific advertisements.

One method to accomplish Geofencing on Android is to use the built-in Geofencing API to automatically trigger certain behaviors when the device enters or exits a specified radius around a geographical location. Similar to other Geofencing methods, this requires that the user has granted the ACCESS_FINE_LOCATION and ACCESS_BACKGROUND_LOCATION permissions. The latter is only required if the application targets Android 10 (API level 29) or higher. However, Android 11 introduced additional permission controls that may restrict background location collection based on user permission choices at runtime. These additional controls include "Allow only while using the app", which will effectively prohibit background location collection.

Similarly, on iOS, developers can use built-in APIs to setup and execute geofencing. Depending on the use case, the app will either need to call requestWhenInUseAuthorization() or requestAlwaysAuthorization(), depending on when access to the location services is required. Similar to Android, users also have the option to limit when the application can access the device’s location, including one-time use and only when the application is running in the foreground.

Geofencing can be used to prevent exposure of capabilities in environments that are not intended to be compromised or operated within. For example, location data could be used to limit malware spread and/or capabilities, which could also potentially evade application analysis environments (ex: malware analysis outside of the target geographic area). Other malicious usages could include showing language-specific input prompts and/or advertisements.

ID: T1627.001
Sub-technique of:  T1627
Tactic Type: Post-Adversary Device Access
Tactic: Defense Evasion
Platforms: Android, iOS
Version: 1.1
Created: 30 March 2022
Last Modified: 20 March 2023

Procedure Examples

ID Name Description
S1094 BRATA

BRATA has performed country and language checks.[2]

S0507 eSurv

eSurv imposes geo-restrictions when delivering the second stage.[1]

G0112 Windshift

Windshift has region-locked their malicious applications during their Operation BULL campaign.[3]

Mitigations

ID Mitigation Description
M1006 Use Recent OS Version

New OS releases frequently contain additional limitations or controls around device location access.

M1011 User Guidance

Users should be advised to be extra scrutinous of applications that request location, and to deny any permissions requests for applications they do not recognize.

Detection

ID Data Source Data Component Detects
DS0041 Application Vetting API Calls

Application vetting services can detect unnecessary and potentially abused API calls.

Permissions Requests

Application vetting services can detect unnecessary and potentially abused location permissions.

DS0042 User Interface System Notifications

On Android 10 and later, the system shows a notification to the user when an app has been accessing device location in the background.

System Settings

The user can review which applications have location permissions in the operating system’s settings menu.

References