react-native-malwarelytics
Version:
Malwarelytics for React Native protects your banking or fintech app from a broad range of mobile security threats with an industry-leading mobile threat intelligence solution.
153 lines (144 loc) • 5.31 kB
text/typescript
//
// Copyright 2023 Wultra s.r.o.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions
// and limitations under the License.
//
/**
* An APK with analyzed threats.
*/
export interface ApkThreat {
/**
* Package name (application Id) of the app posing a threat to the current app.
*/
readonly packageName: string;
/**
* Threat index of the apk. Result of the correct combination of evaluated and suggested threat indexes.
*/
readonly threatIndex: ThreatIndex;
/**
* Evaluated threat index indicating severity of the threat.
*/
readonly evaluatedThreatIndex: ThreatIndex
/**
* Suggested threat index. If the value is `UNKNOWN` then there's no suggestion.
*/
readonly suggestedThreatIndex: ThreatIndex
/**
* Optional name of malware detection. This is not bound to the thratIndex, can appear independently.
*/
readonly malwareDetectionName?: string;
/**
* Set of recommended mitigations for handling the threat.
*/
readonly mitigations: ThreatMitigation[];
/**
* Evaluated threat reasons marking what is dangerous about the app.
*/
readonly reasons: ThreatReason[];
/**
* Store the app was installed from (for example google play).
*/
readonly threatInstaller: ThreatInstaller;
/**
* Set of malware flags - malware types and malware families.
*/
readonly flags: MalwareFlag[];
}
/**
* A threat level that is posed by an app.
*
* MALWARE:
* The found threats clearly indicate that the app is a malware.
*
* HIGHLY_DANGEROUS:
* The found threats indicate that the app is highly dangerous
* to the current app.
* It uses multiple potential attack vectors
* including techniques directly targeting the current app.
*
* DANGEROUS:
* The found threats indicate that the app is dangerous
* to the current app.
* Is uses multiple potential attack vectors.
* However, no technique directly targeting the current app was detected.
*
* POTENTIALLY_UNWANTED_APP:
* The found threats indicate that the app might be potentially dangerous.
* For example it declares potentially dangerous permissions.
* However it it quite possible that the app is legitimate.
*
* SAFE:
* There are no found threats.
*
* UNKNOWN:
* The threat is unknown.
* The app was probably not found.
* In case of suggestions, there's none.
*/
export type ThreatIndex = "MALWARE" | "HIGHLY_DANGEROUS" | "DANGEROUS" | "POTENTIALLY_UNWANTED_APP" | "SAFE" | "UNKNOWN"
/**
* Convert `ThreatIndex` type into number for the evaluation. The higher numeric value means a higher danger.
* @param threatIndex `ThreatIndex` to convert.
* @returns Number representing how dangerous the application is.
*/
export function threatIndexToNumber(threatIndex: ThreatIndex): number {
switch (threatIndex) {
case 'UNKNOWN': return 0
case 'SAFE': return 1
case 'POTENTIALLY_UNWANTED_APP': return 2
case 'DANGEROUS': return 3
case 'HIGHLY_DANGEROUS': return 4
case 'MALWARE': return 5
}
}
/**
* Installer app of an apk.
*
* STORE_GOOGLE_PLAY: The app was installed via Google Play
* STORE_HUAWEI_APP_GALLERY: The app was installed via Huawei App Gallery
* STORE_SAMSUNG_GALAXY_STORE: The app was installed via Samsung Galaxy Store
* STORE_APTOIDE: The app was installed via Aptoide
*/
export type ThreatInstaller = "STORE_GOOGLE_PLAY" | "STORE_HUAWEI_APP_GALLERY" | "STORE_SAMSUNG_GALAXY_STORE" | "STORE_APTOIDE"
export type ThreatMitigation = "WARNING_SCREEN" | "NOTIFICATION" | "SHOW_WEB" | "KILL_APP" | "KILL_APP_SHOW_WEB"
/**
* Evaluated flag for an apk threat.
* The flag risk the other app is posing.
*
* ACCESSIBILITY: Accesibility
* SMS_ACCESS: Read sms, receive sms, notification listener
* SCREEN_OVERRIDE: Task hijacking, screen overlay
* INSTALLER: Can install apps
* UNINSTALLER: Can uninstall apps
* EVADER: Hides it's internals/function
* OUTSIDE_GOOGLE_PLAY: Not installed via Google Play
* CALLER: Can play with your calls, e.g. it can setup a call forwarding of your calls
* PRELOADED_APP: The app is preloaded on the device
* PRIVILEGED_APP: The app is privileged (system privileges)
* DEVELOPMENT_OR_TEST: The app is debuggable
*
*/
export type ThreatReason = "ACCESSIBILITY" | "SMS_ACCESS" | "SCREEN_OVERRIDE" | "INSTALLER" |
"UNINSTALLER" | "EVADER" | "OUTSIDE_GOOGLE_PLAY" | "CALLER" |
"PRELOADED_APP" | "PRIVILEGED_APP" | "DEVELOPMENT_OR_TEST"
/** Flag designating malware info. */
export interface MalwareFlag {
readonly name: string;
readonly type: MalwareFlagType;
}
/** Type of MalwareFlag. */
export enum MalwareFlagType {
UNKNOWN = "UNKNOWN",
MALWARE_FAMILY = "MALWARE_FAMILY",
MALWARE_TYPE = "MALWARE_TYPE"
}