UNPKG

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.

770 lines (689 loc) 24 kB
// // 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. // import type { Apk } from "./model/antivirus/Apk" import type { ThreatIndex } from "./model/antivirus/ApkThreat" import type { DebuggerType } from "./model/rasp/DebuggerInfo" // --------------------------------------------------------------------------------------- // // C O M M O N // // --------------------------------------------------------------------------------------- /** * Configuration for Malwarelytics Module. */ export interface MalwarelyticsConfig { /** * Configuration for Apple Services. */ apple?: MalwarelyticsAppleConfig /** * Configuration for Android Services. */ android?: MalwarelyticsAndroidConfig /** * Configures client or device's identification if this information is available in the * time of Malwarelytics module initialization. */ clientIdentification?: MalwarelyticsClientIdentification /** * Server environment. The default value is "PRODUCTION". */ environment?: MalwarelyticsServiceEnvironment } /** * Configuration for connection to Malwarelytics service. */ export interface MalwarelyticsServiceConfig { /** * Username for the Malwarelytics service. */ username: string /** * Password for the Malwarelytics service. */ password: string /** * Signature public key for the Malwarelytics service. Default value is undefined. */ signaturePublicKey?: string /** * Server environment configured per platform. If set, then this value overrides the * value set in the root of the configuration. */ environment?: MalwarelyticsServiceEnvironment } /** * Defines Malwarelytics Service Environment: * - `"TEST"` - Test environment. * - `"PROD"` - Production environment. * * Note that using test environment will cause a warning print in the debug console. */ export type MalwarelyticsServiceEnvironment = "TEST" | "PRODUCTION" /** * Configuration for user or device identifiers in case that * such information is available in case of Malwarelytics initialization. */ export interface MalwarelyticsClientIdentification { /** * Client's identifier. */ clientId?: string /** * Device's identifier. */ deviceId?: string } // --------------------------------------------------------------------------------------- // // A P P L E Specific // // --------------------------------------------------------------------------------------- /** * Configuration of the Malwarelytics SDK for the Apple platform. */ export interface MalwarelyticsAppleConfig { /** * Configures connection to the remote Malwarelytics service. If no service is provided, * then module will work in offline mode. */ service?: MalwarelyticsServiceConfig /** * RASP component configuration. If not set, default values are used. */ rasp?: MalwarelyticsAppleRaspConfig; /** * Configuration of the events that are sent to the server. */ events?: MalwarelyticsAppleEventsConfig; /** * Configuration of customer grouping and naming in the Malwarelytics web console. */ customerGrouping?: MalwarelyticsAppleCustomerGroupingConfig; } /** * Configuration of the RASP features on the Apple platforms */ export interface MalwarelyticsAppleRaspConfig { /** * Jailbreak detection configuration. The default action is `NOTIFY`. */ jailbreak?: MalwarelyticsAppleBasicDetectionConfig; /** * Debugger detection configuration. The default action is `NOTIFY`. */ debugger?: MalwarelyticsAppleDebuggerDetectionConfig; /** * Reverse engineering tools presence detection configuration. The default action is `NOTIFY`. */ reverseEngineeringTools?: MalwarelyticsAppleBasicDetectionConfig; /** * HTTP proxy detection configuration. The default action is `NOTIFY`. */ httpProxy?: MalwarelyticsAppleBasicDetectionConfig; /** * Repackaging detection configuration. The default action is `NO_ACTION` with empty array of certificates. */ repackage?: MalwarelyticsAppleRepackagingDetectionConfig; /** * Screen capturing detection. The default action is `NOTIFY`. */ screenCapture?: MalwarelyticsAppleScreenCaptureDetectionConfig; /** * VPN detection config. The default value is `NOTIFY`. */ vpn?: MalwarelyticsAppleBasicDetectionConfig; /** * Call detection config. The default value is `NOTIFY`. */ call?: MalwarelyticsAppleSimpleDetectionConfig; /** * App presence detection. 3rd party app presence. * The default value is `.manual` with empty array of apps. */ appPresence?: MalwarelyticsAppleAppPresenceDetectionConfig; } /** * Configuration of the events collection. */ export interface MalwarelyticsAppleEventsConfig { /** * Way to disable event collection in general. The default value is `true`. */ enableEventCollection?: boolean; /** * Event will be reported when user takes a screenshot. The default value is `true`. */ enableScreenshotTakenCollection?: boolean; } /** * Configuration of customer grouping and naming in the Malwarelytics web console. */ export interface MalwarelyticsAppleCustomerGroupingConfig { /** * Set custom source bundle identifier. * The value has to match application credentials defined in the web application. * * Maximum length of the value is 255 characters. */ sourceBundleId?: string; /** * Set app bundle identifier to obtain extra granularity * of the information displayed in the web application. * Distinguishes application purposes or segmentation in one organization. * * Maximum length of the value is 255 characters. */ appBundleId?: string; /** * Set audience group ID to obtain extra granularity * of the information displayed in the web application. * Distinguishes users from different customer systems (RETAIL, CORPORATE, ...). * * Maximum length of the value is 20 characters. */ audienceGroupId?: string; } /** * Configuration of the repackaging detection behavior */ export interface MalwarelyticsAppleRepackagingDetectionConfig { /** * Behavior of the repackaging detection */ action: MalwarelyticsAppleDetectionAction; /** * Trusted certificates for ad-hoc or enterprise distribution. * * This is needed only for non-production distribution. * * How to retrieve the certificate: * 1. Open the Keychain Access application. * 2. Find a certificate that will be used to sign your application, for example, “Apple Development: Jan Tester (c)”. * 3. Right-click on the item and click “Export…”. * 4. Export the certificate in the .cer format. * 5. Open up the terminal and cd into the folder with your exported certificate. * 6. Encode the certificate in Base64 with cat your_exported.cer | base64. */ trustedCertificates?: [string]; /** * This URL will be open in the default browser when app is terminated in case that the `action` is `EXIT`. */ exitUrl?: string; } /** * Configuration of the basic detection behavior */ export interface MalwarelyticsAppleBasicDetectionConfig { /** * Behavior of the detection */ action: MalwarelyticsAppleDetectionAction; /** * This URL will be open in the default browser when app is terminated in case that the `action` is `EXIT`. */ exitUrl?: string; } /** * Configuration of the debugger detection behavior */ export interface MalwarelyticsAppleDebuggerDetectionConfig { /** * Behavior of the debugger detection */ action: MalwarelyticsAppleDebuggerDetectionAction; /** * This URL will be open in the default browser when app is terminated in case that the `action` is `EXIT`. */ exitUrl?: string; } /** * Configuration of the screen capture detection behavior. */ export interface MalwarelyticsAppleScreenCaptureDetectionConfig { /** Behavior of the detection */ action: MalwarelyticsAppleScreenCaptureDetectionAction; /** This URL will be open in the default browser when app is terminated in case that the `action` is `EXIT`. */ exitUrl?: string; /** Overlay that will be displayed when screen capture is detected in case that the `action` is `HIDE`. */ overlay?: MalwarelyticsAppleOverlay; } /** * Configuration of the simple detection behavior. */ export interface MalwarelyticsAppleSimpleDetectionConfig { /** * Behavior of the detection */ action: MalwarelyticsAppleSimpleDetectionAction; } /** * Configuration of the app presence detection behavior. */ export interface MalwarelyticsAppleAppPresenceDetectionConfig { /** * Behavior of the detection */ action: MalwarelyticsAppleAppPresenceDetectionAction; /** * Applications that can be detected on the phone if present. */ apps: MalwarelyticsAppleDetectableApp[]; } /** * Configuration of application that can be detected on the phone if present. */ export interface MalwarelyticsAppleDetectableApp { deeplinkProtocols: string[]; name: string; category: MalwarelyticsAppleDetectableAppCategory; tag?: string; } /** * Configuration of the screen capture overlay. */ export interface MalwarelyticsAppleOverlay { type: MalwarelyticsAppleOverlayType; color?: MalwarelyticsAppleColor; image?: MalwarelyticsAppleImage; } /** * UIColor abstraction for configuration. */ export interface MalwarelyticsAppleColor { red: number; green: number; blue: number; alpha: number; } /** * UIImage abstraction for configuration. */ export interface MalwarelyticsAppleImage { name: string; } /** * Category of MalwarelyticsAppleDetectableApp * REMOTE_DESKTOP - Remote desktop apps are apps that can screen cast phone screen. */ export type MalwarelyticsAppleDetectableAppCategory = "REMOTE_DESKTOP" /** * NO_ACTION - do nothing * NOTIFY - notify via the observer * BLOCK - block the debugger * EXIT - exit the app */ export type MalwarelyticsAppleDebuggerDetectionAction = "NO_ACTION" | "NOTIFY" | "BLOCK" | "EXIT"; /** * NO_ACTION - do nothing * NOTIFY - notify via the observer * EXIT - exit the app */ export type MalwarelyticsAppleDetectionAction = "NO_ACTION" | "NOTIFY" | "EXIT"; /** * NO_ACTION - do nothing * NOTIFY - notify via the observer * HIDE - hide app's content with an overlay when screen capture is detected * EXIT - exit the app */ export type MalwarelyticsAppleScreenCaptureDetectionAction = "NO_ACTION" | "NOTIFY" | "HIDE" | "EXIT"; /** * NO_ACTION - do nothing * NOTIFY - notify via the observer */ export type MalwarelyticsAppleSimpleDetectionAction = "NO_ACTION" | "NOTIFY"; /** * MANUAL - automatic detection is turned off, you can do a manual check * NOTIFY - notify via the observer */ export type MalwarelyticsAppleAppPresenceDetectionAction = "MANUAL" | "NOTIFY" /** * DEFAULT - default cover with a solid color and an application icon * COLOR - cover with a solid color * IMAGE - cover with an image */ export type MalwarelyticsAppleOverlayType = "DEFAULT" | "COLOR" | "IMAGE"; // --------------------------------------------------------------------------------------- // // A N D R O I D Specific //` // --------------------------------------------------------------------------------------- /** * Configuration of the Malwarelytics SDK for the Android platform. */ export interface MalwarelyticsAndroidConfig { /** * Configures connection to the remote Malwarelytics service. If no service is provided, * then module will work in offline mode. */ service?: MalwarelyticsServiceConfig /** * ISO 639-1 language code that the app will be used for UI localization. */ languageCode?: string; /** * Antivirus component configuration. If not set, default values are used. */ antivirus?: MalwarelyticsAndroidAntivirusConfig; /** * RASP component configuration. If not set, default values are used. */ rasp?: MalwarelyticsAndroidRaspConfig; /** * Configuration of customer grouping and naming in the Malwarelytics web console. */ customerGrouping?: MalwarelyticsAndroidCustomerGroupingConfig; /** * Configuration of device fingerprinting. */ fingerprint?: MalwarelyticsAndroidFingerprintType; } /** * Configuration of customer grouping and naming in the Malwarelytics web console. */ export interface MalwarelyticsAndroidCustomerGroupingConfig { /** * Set custom source package name. * The value has to match application credentials defined in the web application. * * Maximum length of the value is 255 characters. */ sourcePackageName?: string; /** * Set app app package name to obtain extra granularity * of the information displayed in the web application. * Distinguishes application purposes or segmentation in one organization. * * Maximum length of the value is 255 characters. */ appPackageName?: string; /** * Set audience group ID to obtain extra granularity * of the information displayed in the web application. * Distinguishes users from different customer systems (RETAIL, CORPORATE, ...). * * Maximum length of the value is 20 characters. */ audienceGroupId?: string; } /** * Type of device fingerprinting performed. */ export enum MalwarelyticsAndroidFingerprintType { /** * Fingerprinting is completely turned off on all devices. * No fingerprinting method is used. */ NONE = "NONE", /** * Basic fingerprinting. * * Fingerprinting uses only some fingerprinting methods. Only the methods that are safe on all devices. */ BASIC = "BASIC", /** * Safe fingerprinting. * * Using full fingerprinting on non-problematic device. * Using basic fingerprinting on problematic devices. Those are some Pixel devices with Android 14. */ SAFE = "SAFE", /** * Full fingerprinting. * * Using all available fingerprinting methods. */ FULL = "FULL" } /** * Antivirus component configuration for Android platform */ export interface MalwarelyticsAndroidAntivirusConfig { /** * Disable or enable Antivirus. Default is false, so Antivirus is enabled. */ disable?: boolean; /** * Malwarelytics in silent mode does not show any UI. Default is true. */ enableSilentMode?: boolean; /** * How often will be antivirus database checked (hourly). Default is 48 hours. */ onlineCheckIntervalHours?: number; /** * If databse update should be performend on SDK initialize. Default is true. */ updateOnInitialize?: boolean; } /** * Configuration action for RASP detection. * - `'NO_ACTION'` - Do not check this type of RASP event. * - `'NOTIFY'` - Notify application via the RASP listener. * - `'EXIT'` - Exit application. */ export type MalwarelyticsAndroidRaspAction = 'NO_ACTION' | 'NOTIFY' | 'EXIT' /** * Configuration action for RASP blocking feature. * - `'NO_ACTION'` - Do nothing. * - `'BLOCK'` - Block the feature. */ export type MalwarelyticsAndroidRaspBlockAction = 'NO_ACTION' | 'BLOCK' /** * Configuration action for process name change feature. * - `'NO_ACTION'` - Do nothing. * - `'USE_STEALHY'` - Use stealthy process name. */ export type MalwarelyticsAndroidRaspProcessNameAction = 'NO_ACTION' | 'USE_STEALTHY' /** * Configuration action for ADB detection. * - `'NOTIFY'` - Notify application via the RASP listener. * - `'EXIT'` - Exit application. */ export type MalwarelyticsAndroidRaspAdbDetectionAction = 'NOTIFY' | 'EXIT' /** * Configuraiton action for simple RASP detection. * - `'NO_ACTION'` - Do not check this type of RASP event. * - `'NOTIFY'` - Notify application via the RASP listener. */ export type MalwarelyticsAndroidRaspSimpleDetectionAction = 'NO_ACTION' | 'NOTIFY' /** * Configuration for RASP event detection. */ export interface MalwarelyticsAndroidRaspDetectionConfig { /** * Action to execute when particular RASP event is detected. */ action: MalwarelyticsAndroidRaspAction /** * If action is 'EXIT', then this URL is opened on application's exit. */ exitUrl?: string } /** * Configuration for ROOT RASP event detection. */ export interface MalwarelyticsAndroidRaspRootDetectionConfig extends MalwarelyticsAndroidRaspDetectionConfig { /** * Minimum confidence value of heuristic root detections that triggers app termination. * * Works only if action is 'EXIT'. Possible values are between 0.0 (inclusive) and 1.0 (inclusive). The default value is 1.0. */ exitOnRootMinConfidence?: number } /** * Configuration for Android debugger RASP event detection. */ export interface MalwarelyticsAndroidRaspDebuggerDetectionConfig extends MalwarelyticsAndroidRaspDetectionConfig { debuggerTypes?: DebuggerType[]; } /** * Configuration for Repackaging RASP event detection. */ export interface MalwarelyticsAndroidRaspRepackageDetectionConfig extends MalwarelyticsAndroidRaspDetectionConfig { /** * One or more values of SHA-1 of signing certificate(s). To get the hash, follow instructions from * [Obtaining Signature Hash](https://developers.wultra.com/components/malwarelytics-android/develop/documentation/Repackaging-Detection#obtaining-signature-hash) document. * * Expecting lowercase hex value without any byte separators. No default value is set. */ signatureHash?: string[]; } /** * Configuration for RASP event detection. */ export interface MalwarelyticsAndroidRaspBlockConfig { /** * Action to execute when particular RASP event is detected. */ action: MalwarelyticsAndroidRaspBlockAction } /** * Configuration for screen readers RASP detection. */ export interface MalwarelyticsAndroidRaspScreenReaderBlockConfig extends MalwarelyticsAndroidRaspBlockConfig { /** Defines collection of allowed screen readers. It is empty by default. */ allowedScreenReaders?: Apk[]; } /** * Configuration for process name change feature. */ export interface MalwarelyticsAndroidRaspProcessNameConfig { action: MalwarelyticsAndroidRaspProcessNameAction; customProcessName?: string; } /** * Tapjacking configuration. */ export interface MalwarelyticsAndroidRaspTapjackingBlockConfig extends MalwarelyticsAndroidRaspBlockConfig { /** * Defines sensitivity for blocking tapjacking. The default value is ThreatIndex.HIGHLY_DANGEROUS. */ blockSensitivity?: ThreatIndex; /** * Define whether to ignore system apps in blocking tapjacking. The default value is false */ ignoreSystemApps?: boolean; /** * List of allowed tapjacking-capable apps. User for fine-tuning tapjacking protection. * It enables to ignore apps that are capable of tapjacking. Use to get rid of false-positives. */ allowedTapjackingApps?: Apk[]; } /** * ADB configuration. */ export interface MalwarelyticsAndroidRaspAdbDetectionConfig { /** Behavior of the detection */ action: MalwarelyticsAndroidRaspAdbDetectionAction; /** This URL will be open in the default browser when app is terminated in case that the `action` is `EXIT`. */ exitUrl?: string; } /** * Simple detection configuration. */ export interface MalwarelyticsAndroidRaspSimpleDetectionConfig { /** Behavior of the detection */ action: MalwarelyticsAndroidRaspSimpleDetectionAction; } /** * App presence configuration. */ export interface MalwarelyticsAndroidRaspAppPresenceDetectionConfig extends MalwarelyticsAndroidRaspDetectionConfig{ /** List of apps that the SDK is looking for. * When not defined, the default list of remote apps from native SDK is used. */ remoteDesktopApps?: MalwarelyticsAndroidRaspNamedApkItem[]; } /** * Configuration of app the presence of which should be checked. */ export interface MalwarelyticsAndroidRaspNamedApkItem { /** Defined custom name to be used for the application. */ displayName: String; /** Package name (application ID) of the app. */ packageName: String; /** SHA-1 hash of the app's signature. The signature hash is optional. */ signatureHash?: String; } /** * Runtime Application Self-Protection Configuration for Android platform */ export interface MalwarelyticsAndroidRaspConfig { /** * Emulator detection configuration. The default action is 'NOTIFY'. */ emulator?: MalwarelyticsAndroidRaspDetectionConfig; /** * Root detection configuration. The default action is 'NOTIFY'. */ root?: MalwarelyticsAndroidRaspRootDetectionConfig; /** * Debugger detection configuration. The default action is 'NOTIFY'. */ debugger?: MalwarelyticsAndroidRaspDebuggerDetectionConfig; /** * Repackaging detection configuration. The default action is 'NOTIFY'. */ repackage?: MalwarelyticsAndroidRaspRepackageDetectionConfig; /** * Screen sharing detection configuration. The default action is 'NOTIFY'. */ screenSharing?: MalwarelyticsAndroidRaspDetectionConfig; /** * Turns on/off blocking taking screenshots and screen recording. The default action is 'BLOCK'. */ screenshot?: MalwarelyticsAndroidRaspBlockConfig; /** * Screen readers detection. If no configuration is provided, then the default values * are applied. See `MalwarelyticsAndroidRaspScreenReadersConfig` interface for more details. * The default action is 'BLOCK'. */ screenReader?: MalwarelyticsAndroidRaspScreenReaderBlockConfig; /** * Sets custom name to be used for the app process. The default action is 'USE_STEALTHY'. */ processName?: MalwarelyticsAndroidRaspProcessNameConfig; /** * Tapjacking configuration. If no configuration is provided then the default values are applied. * See `MalwarelyticsAndroidRaspTapjackingConfig` interface for more details. * The default action is 'BLOCK'. */ tapjacking?: MalwarelyticsAndroidRaspTapjackingBlockConfig; /** * HTTP proxy detection configuration. The default action is 'NOTIFY'. */ httpProxy?: MalwarelyticsAndroidRaspDetectionConfig; /** * VPN detection configuration. The default action is 'NOTIFY'. */ vpn?: MalwarelyticsAndroidRaspDetectionConfig; /** * ADB detection configuration. Be aware that there's no 'NO_ACTION' action, so this * detection is always ON. * * The default action is 'NOTIFY'. */ adb?: MalwarelyticsAndroidRaspAdbDetectionConfig; /** * Active call detection configuration. The default action is 'NOTIFY'. */ activeCall?: MalwarelyticsAndroidRaspSimpleDetectionConfig; /** * App presence detection configuration. The default action is 'NOTIFY'. */ appPresence?: MalwarelyticsAndroidRaspAppPresenceDetectionConfig; }