Description of the freeRASP API
TalsecConfig
Specifies configuration for your app. See the table below for detailed description of the attributes.
field | type | description | sample value |
---|---|---|---|
AndroidConfig
Specifies configuration for instances of the app running on Android devices. See the table below for detailed description of the attributes.
field | type | description | sample value |
---|---|---|---|
IOSConfig
Specifies configuration for instances of the app running on Android devices. See the table below for detailed description of the attributes.
field | type | description | sample value |
---|---|---|---|
Future<void> start(TalsecConfig config)
Starts freeRASP with configuration provided in config.
void attachListener(ThreatCallback callback)
Attaches instance of ThreatCallback to freeRASP. If ThreatCallback is already attached, current one will be detached and replaced with callback. When threat is detected, respective callback of ThreatCallback is invoked.
ThreatCallback
A class which represents a set of callbacks that are used to notify the application when certain security threat is detected. Read more about the meaning of the callbacks in the .
method name | return type | Android | iOS |
---|---|---|---|
androidConfig
AndroidConfig?
Configuration for Android apps
any AndroidConfig instance
iosConfig
IOSConfig?
Configuration for iOS apps
any IOSConfig instance
watcherMail
String
The value is automatically used as the target address for your security reports. Mail has a strict form 'name@domain.com'
.
'john@example.com'
isProd
bool?
Defaults to true
when undefined. If you want to use the Dev version to make the development process easier, set the parameter to false
. Make sure that you have the Release version in the production (i.e. isProd set to true)!. To simplify switching between debug and release version of freeRASP based on the build type, you can use BuildConfig.BUILD_TYPE.contains("Release", true)
as a value for isProd
.
true
packageName
String
Package name of the app.
'com.talsec.freerasp.demoapp'
signingCertHashes
List<String>
Certificate hashes of your app.
['mVr/qQLO8DKTwqlL+B1qigl9NoBnbiUs8b4c2Ewcz0k=']
supportedStores
List<String>
Package names of the alternative stores. If you publish on the Google Play Store and Huawei AppGallery, as these are already included internally. (You can assign just emptyArray()).
For more information, visit the Detecting Unofficial Installation wiki page.
[ 'com.sec.android.app.samsungapps']
bundleIds
List<String>
List of Bundle IDs for the app
['com.talsec.freerasp.demoapp']
teamId
String
Apple Team ID used in the app
'M8AK35...'
onPrivilegedAccess
VoidCallback?
onDebug
VoidCallback?
onSimulator
VoidCallback?
onAppIntegrity
VoidCallback?
onUnofficialStore
VoidCallback?
onHooks
VoidCallback?
onDeviceBinding
VoidCallback?
onDeviceID
VoidCallback?
onPasscode
VoidCallback?
onSecureHardwareNotAvailable
VoidCallback?
onObfuscationIssues
VoidCallback?
onDevMode
VoidCallback?
onADBEnabled
VoidCallback?
onSystemVPN
VoidCallback?
Solution: The simulator does not support the release build of Flutter - more about it . Use a real device in order to build the app in release mode.
Solution: Technical limitation of Flutter - more about it . Use command flutter run
to launch the app (i.e. run the app from scratch).
For more general issues or questions, visit page. You can also check out the , where you can report issues and view existing reports.
This page provides you with all the necessary information about freeRASP integration for FlutterFlow. Please read it carefully. If you have a question, don't hesitate to open an issue.
In this section, you will implement the imported freeRASP Action.
On your app's initial page, navigate to the UI Builder.
On the right panel, click on Actions.
In the Action Flow Editor box, click Open.
In the newly opened window, click on On Page Load at the top.
Click Add Action (or + and then Add Action, if you already have an Action).
On the right panel, search for the runRASP Custom Action.
Select the runRASP Action.
In the Set Function Arguments section, you will find the configuration-related arguments and several "onX" arguments. More about reactions in the #handle-detected-threats.
The freeRASP Action requires several arguments to be filled to function. Some data are related to specific platforms.
If you are developing the application exclusively for one platform, you can omit the configuration part related to the other platform. If you don't want to provide configuration to an unrelated platform, provide an empty string:
Click the orange variable icon next to the Value label
Scroll down to Constants
Click Constant to expand the dropdown menu
Select Empty String
watcherMail
is an email address designated for receiving security reports. Ensure that the email address follows the strict name@domain.com
format.
isProd
is a boolean flag that determines whether the freeRASP integration is in the Dev or Release version.
The Dev version of freeRASP is intended for usage during the development phase. It serves the purpose of segregating development and production data, as well as disabling certain checks that are not applicable during the development process. These checks include:
Emulator usage (onSimulator
)
Debugging (onDebug
)
Signing (onAppIntegrity
)
Unofficial store (onUnofficialStore
)
Obfuscation issues (onObfuscationIssues
)
Developer mode (onDevMode
)
ADB Enabled (onADBEnabled
)
packageName
is a unique identifier for your Android application.
You can find the packageName
value for your application in FlutterFlow settings:
Navigate to Settings and Integrations.
Locate and select App Details.
In the textbox labelled Package Name, you will find the package name associated with your application.
Do NOT use solutions such as package_info_plus to provide the value of the package name! The package name has to be hardcoded.
signingCertHash
is a hash of the certificate of the key which was used to sign the application. The value of the hash must be encoded in Base64 form.
More about signing hash and how to obtain it in Getting Signing Certificate Hash.
supportedStore
is a third-party app store to which your application is uploaded. By including this store, freeRASP considers it as trusted source.
To add a store, add the package name of the store to the supportedStore
list.
Google Play store and Huawei AppGallery are supported out of the box. You don't need to add them.
bundleId
is a unique identifier for your iOS application.
More about bundle ID and how to obtain one: FlutterFlow Documentation | App Deployment.
teamId
is a unique identifier assigned to a development team enrolled in the Apple Developer Program.
You can find your teamId
on the Apple Developer portal:
Go to the website: https://developer.apple.com/account.
Log in using the account that is used to sign and release your app.
Scroll down to the Membership details section.
Look for the line labelled "Team ID" - the value of your team will be displayed there.
The freeRASP Action offers multiple callbacks for handling threats. A callback is an Action that gets triggered when a threat is detected.
To implement callback:
Open Action Flow Editor with runRASP action.
Open one of the dropdown menus labelled "onX" on the right panel (X for a given type of reaction, for example, onAppIntegrity)
In the Action Flow Editor box, click on Open.
Implement your reaction.
Visit Threat detection to learn more details about the performed checks and their importance for app security.
freeRASP for Flutter allows you to define multiple values for:
Signing certificate hash
Supported app store
Bundle ID
Due to FlutterFlow's limitations, the current implementation of freeRASP for FlutterFlow only allows you to specify a single value for each of these attributes. If want to provide more values, you can download the code and adjust those parameters manually (see Flutter)
Currently, freeRASP supports only Android and iOS. When running the application in the FlutterFlow web client, freeRASP will not be initialized.
The minimum required Android SDK level for freeRASP is 23. FlutterFlow applications have a minimum SDK level of 21 by default.
This creates some restrictions:
Deploying the application from the FlutterFlow web client is not possible.
Downloading the APK from the FlutterFlow web client is not supported.
To overcome these limitations, we recommend following these steps:
Download the code.
Manually raise the SDK level in the build.gradle
file to 23.
Deploy the application using Google Play Console.
Raising SDK version
From the root of your project, go to android
> app
> build.gradle
In defaultConfig
update minSdkVersion
to at least 23 (Android 6.0) or higher
The freeRASP has the following prerequisites that must be met before starting.
freeRASP requires a minimum SDK level of 23. Some versions of Flutter projects, by default, support even lower levels of minimum SDK. This creates an inconsistency we must solve by updating the minimum SDK level of the application:
From the root of your project, go to android
> app
> build.gradle
.
In defaultConfig,
update minSdkVersion
property to at least 23 (Android 6.0) or higher.
Xcode 15 is required to be able to build the application
Run the following command inside the project directory to add the freeRASP dependency:
To ensure freeRASP functions correctly, you need to provide the necessary configuration and initialize it. All required values must be filled in for the plugin to operate properly. Detailed descriptions of the configuration options are provided on the API page.
For Android apps, you must get your expected signing certificate hashes in Base64 form. You can go through this manual to learn how to sign your app in more detail, including manual signing and using Google's Play app signing.
In the entry point to your app, import freeRASP and add the following code:
It is necessary that Flutter Bindings are initialized. This can be satisfied by calling WidgetsFlutterBinding.ensureInitialized()
, as shown in the code snippet above.
freeRASP executes periodical checks when the application is running. You can handle the detected threats using listeners. For example, you can log the event, show a window to the user or kill the application. See the Threat detection in the wiki to learn more details about the performed checks and their importance for app security.
freeRASP reacts to threats using ThreatCallback
. Internally, each threat has its own callback (of VoidCallback
type), which is called when a threat is detected.
Start freeRASP to detect threats just by adding this line below the created config and the callback handler:
For the version you’re integrating, you can find the specific dSYMs for debugging in Releases.
In order to provide as much protection as possible, freeRASP enhances security measures by implementing ProGuard consumer rules, which obfuscate specific sections of the SDK. However, these rules are applied to your Android app code as well due to inheritance.
In certain cases, you may prefer to exclude this rule.
To remove the rule, you need to find freerasp
in your cache folder. More about where to find the cache folder here. Then navigate to the freerasp-X.Y.Z/android/build.gradle
file and delete the line:
Read more about why obfuscation is important in the wiki.
freeMalwareDetection is a powerful feature designed to enhance the security of your Android application by quickly and efficiently scanning for malicious or suspicious applications (e.g. Android malware) based on various blacklists and security policies.
It helps to detect apps with suspicious package names, hashes, or potentially dangerous permissions.
Visit the freeMalwareDetection repository to learn more about this feature! For the integration, refer to the integration guide for the Flutter platform.