In this section, device details like manufacturer, model, product and version are listed.
In this section, pre-installed that is collected from device listed. However, it should be noted that some users stopped uploading process before completed, in some devices, we could not collect all pre-installed applications.
In this section, we listed detailed analysis results for each application. We grouped this result into 7 different sections:
Application Metadata, Manifest Attributes, Application Permissions, Exported Components, Third Party Libraries, Tracker SDKs and Cloud Services.
These sections may contain data about following topics:
This section contains some metadata information about application. This information is obtained both from device while collecting application and using static analysis methods.
First Install Time: This information is received from device using our application (Pre-app Collector).
It shows that when the application is first installed to the device.
Last Update Time: This information is received from device using our application (Pre-app Collector).
It shows that when the application is updated.
MD5 Hash: MD5 hash of the apk file.
Package Name: Package name of the application.
Version Code: A positive integer used as an internal version number.
This number is used only to determine whether one version is more recent than another, with higher numbers indicating more recent versions.
Version Name: A string used as the version number shown to users.
This setting can be specified as a raw string or as a reference to a string resource.
Target SDK Version: Specifies the API level on which the app is designed to run. In some cases, this allows the app to use manifest elements or behaviors defined in the target API level, rather than being restricted to using only those defined for the minimum API level.
Minimum SDK Version: The minimum version of the Android platform on which the app will run, specified by the platform's API level identifier.
Certicate Info: This section contains multiple values about the certificate that is used to sign application.
Certificate Identifier: The purpose of this information to show which organization, company or people signed this application.
It is optained from analysis of certificate issuer field.
This section contains information about some important manifest attributes like sharedUserId, allowBackup, debuggable and usesClearTextTraffic.
sharedUserId: The name of a Linux user ID that will be shared with other apps. By default, Android assigns each app its own unique user ID. However, if this attribute is set to the same value for two or more apps, they will all share the same ID — provided that their certificate sets are identical. Apps with the same user ID can access each other's data and, if desired, run in the same process.
allowBackup: Whether to allow the application to participate in the backup and restore infrastructure. If this attribute is set to false, no backup or restore of the application will ever be performed, even by a full-system backup that would otherwise cause all application data to be saved via adb. The default value of this attribute is true.
debuggable: Whether or not the application can be debugged, even when running on a device in user mode — "true" if it can be, and "false" if not. The default value is "false".
usesClearTextTraffic: Indicates whether the app intends to use cleartext network traffic, such as cleartext HTTP. The default value for apps that target API level 27 or lower is "true". Apps that target API level 28 or higher default to "false".
This section contains list of all permissions and third permissions that application declared. Third party permissions are extracted using Androguard.
Permissions: In Android, application developers have to declare permissions to fulfill any functionality and access restricted resources. In this field, all of the permissions that are declared by appliation is listed.
Third Party (Custom) Permissions: In Android, app developers can use the security features provided by Android to define their own permissions. By defining custom permissions, an app can share its resources and capabilities with other apps.
Android apps mainly have 4 different components: Activity, Service, Content Provider, Broadcast Receiver. In this section, app components that are exported and can be used by other applications with or without permission are listed.
Activity: An activity is the entry point for interacting with the user. It represents a single screen with a user interface.
Service: A service is a general-purpose entry point for keeping an app running in the background for all kinds of reasons. It is a component that runs in the background to perform long-running operations or to perform work for remote processes.
Content Provider: A content provider manages a shared set of app data that you can store in the file system, in a SQLite database, on the web, or on any other persistent storage location that your app can access. Through the content provider, other apps can query or modify the data if the content provider allows it.
Broadcast Receiver: A broadcast receiver is a component that enables the system to deliver events to the app outside of a regular user flow, allowing the app to respond to system-wide broadcast announcements. Because broadcast receivers are another well-defined entry into the app, the system can deliver broadcasts even to apps that aren't currently running.
Using Third Party Libraries like SDKs saves a lot of time of the app developers. However, these libraries may affect user's security and privacy due to vulnerabilities, hidden functionalities. Also, they are commonly used by advertising and tracking services. In this section, TPLs that are used by application are listed. This information is extracted from applications by using state of art tool LibRadar.
Application developers take advantage of Tracker SDKs for various purposes like advertising, location tracking, crash reporting etc. To fulfill their functionality, these SDKs mostly violate user's privacy.
Thus, in this section Trackers SDKs which are detected using exodus-privacy tool are listed.
Name: Name of the Tracker SDK.
Tracker Groups: List of tracker groups that states the purpose of tracking service. This field include of Analytic, Advertisement, Profiling, Location, Identification, Crash Reporters.
Permissions: List of permissions that application declared.
In scope of this research, cloud services like Google Maps API, Amazon AWS S3 Buckets, Google Firebase Database and OAuth are analyzed.
In this section, we listed some interesting results that effect user's security and privacy more than other informations.
We developed an immature scoring system to evaluate devices in terms of various analysis results. Thus, we aim to understand devices' effect on user security and privacy. In this system, we groupped findings according to applicability, user's awareness about finding, how hard to exploit finding etc. In below, we seperated results in 4 different groups.
Number of system applications: In this context, we detected system apps by looking "android.uid.system" on sharedUserId. We calculated score with following equation:
score1 = (Number of applications that run as system on the device / Number of applications on the device) * 0.25
Number of exported application components without permission:
score2 = (Number of exported application components without permission / Number of applications on the device) * 0.50
Number of applications that have allowBackup enabled:
score3 = (Number of applications that have allowBackup enabled / Number of applications on the device) * 0.50
Number of applications that are not signed by manufacturer/vendor:
score4 = (Number of applications that are not signed by manufacturer/vendor / Number of applications on the device) * 0.50
Number of applications that are not updated for more than 2 years:
score5 = (Number of applications that are not updated for more than 2 years / Number of applications on the device) * 0.50
Number of dangerous permissions:
score6 = (Number of dangerous permissions / Number of applications on the device) * 0.75
Number of applications that have usesClearTextTraffic enabled:
score7 = (Number of applications that have usesClearTextTraffic enabled / Number of applications on the device) * 0.75
Number of applications that have debuggable enabled:
score8 = (Number of applications that have debuggable enabled / Number of applications on the device) * 0.75
Number of tracker SDK and number of trackers which are not in crash reporting group:
score9 = (Number of tracker SDK and number of trackers which are not in crash reporting group) * 1.00
Number of vulnerabilities in cloud services:
score10 = (Number of vulnerabilities in cloud services) * 1.00