diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6240093..a74ac9d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,13 @@
+# freeRASP 6.0.0
+We are constantly working on improving your freeRASP experience. This update contains a new check - obfuscation detection. Minimal supported Android SDK level was raised to 23.
+
+## What's new in 6.0.0?
+- ❗ BREAKING: Raised minSdkVersion on Android to 23
+- ❗ Removed BouncyCastle dependency on Android
+- 🔎 New threat type `obfuscationIssues`
+- 🔎 New threat callback `onObfuscationIssues`
+- ✔️ Fixed `NullPointerException` which could occur during specific subcheck execution on Android
+
# freeRASP 5.0.4
- ✔️ Fixed issue with metadata in iOS framework
diff --git a/README.md b/README.md
index 03127f8..fbc7c70 100644
--- a/README.md
+++ b/README.md
@@ -72,7 +72,7 @@ Add dependency to your `pubspec.yaml` file
```yaml
dependencies:
- freerasp: 5.0.4
+ freerasp: 6.0.0
```
and run `pub get`
@@ -100,14 +100,14 @@ and integration script from your project:
### Android setup
* From root of your project, go to **android > app > build.gradle**
-* In `defaultConfig` update `minSdkVersion` to at least **21** (Android 5.0) or higher
+* In `defaultConfig` update `minSdkVersion` to at least **23** (Android 6.0) or higher
```gradle
android {
...
defaultConfig {
...
- minSdkVersion 21
+ minSdkVersion 23
...
}
...
@@ -213,6 +213,7 @@ void main() {
// Setting up callbacks
final callback = ThreatCallback(
onAppIntegrity: () => print("App integrity"),
+ onObfuscationIssues: () => print("Obfuscation issues"),
onDebug: () => print("Debugging"),
onDeviceBinding: () => print("Device binding"),
onDeviceID: () => print("Device ID"),
@@ -247,28 +248,25 @@ void main() async {
```
## Step 5: Additional note about obfuscation
-The freeRASP contains public API, so the integration process is as simple as possible. Unfortunately, this public API also creates opportunities for the attacker to use publicly available information to interrupt freeRASP operations or modify your custom reaction implementation in threat callbacks. In order for freeRASP to be as effective as possible, it is highly recommended to apply obfuscation to the final package/application, making the public API more difficult to find and also partially randomized for each application so it cannot be automatically abused by generic hooking scripts.
+The freeRASP contains public API, so the integration process is as simple as possible. Unfortunately, this public API also creates opportunities for the attacker to use publicly available information to interrupt freeRASP operations or modify your custom reaction implementation in threat callbacks.
-### Android
-The majority of Android projects support code shrinking and obfuscation without any additional need for setup. The owner of the project can define the set of rules that are usually automatically used when the application is built in the release mode. For more information, please visit the official documentation
-* https://developer.android.com/studio/build/shrink-code
-* https://www.guardsquare.com/manual/configuration/usage
+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.**
-You can make sure, that the obfuscation is enabled by checking the value of **minifyEnabled** property in your **module's build.gradle** file.
-```gradle
-android {
- ...
+Finally, if there is a problem with the obfuscation freeRASP will notify you about it via **obfuscationIssues** callback.
- buildTypes {
- release {
- minifyEnabled true
- shrinkResources true
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
-}
+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](https://dart.dev/tools/pub/environment-variables). Then navigate to the freerasp-X.Y.Z/android/build.gradle file and delete the line:
+
+```groovy
+consumerProguardFiles 'consumer-rules.pro'
```
+You can read more about Android obfuscation in the official documentation:
+- https://developer.android.com/studio/build/shrink-code
+- https://www.guardsquare.com/manual/configuration/usage
+
+
## Step 6: User Data Policies
See the generic info about freeRASP data collection [here](https://github.com/talsec/Free-RASP-Community/tree/master#data-collection-processing-and-gdpr-compliance).
@@ -380,16 +378,16 @@ freeRASP is freemium software i.e. there is a Fair Usage Policy (FUP) that impos
Runtime App Self Protection (RASP, app shielding) |
- Advanced root/jailbreak protections |
+ Advanced root/jailbreak protections (including Magisk) |
basic |
advanced |
Runtime reverse engineering controls
- - Debug
- - Emulator
- - Hooking protections (e.g. Frida)
+ - Debugger
+ - Emulator / Simulator
+ - Hooking and reversing frameworks (e.g. Frida, Magisk, XPosed, Cydia Substrate and more)
|
basic |
@@ -398,7 +396,7 @@ freeRASP is freemium software i.e. there is a Fair Usage Policy (FUP) that impos
Runtime integrity controls
- - Tamper protection
+ - Tampering protection
- Repackaging / Cloning protection
- Device binding protection
- Unofficial store detection
@@ -412,6 +410,8 @@ freeRASP is freemium software i.e. there is a Fair Usage Policy (FUP) that impos
- HW security module control
- Screen lock control
+ - Google Play Services enabled/disabled
+ - Last security patch update
|
yes |
@@ -421,7 +421,7 @@ freeRASP is freemium software i.e. there is a Fair Usage Policy (FUP) that impos
UI protection
- Overlay protection
- - Accessibility services protection
+ - Accessibility services misuse protection
|
no |
@@ -432,11 +432,10 @@ freeRASP is freemium software i.e. there is a Fair Usage Policy (FUP) that impos
Security hardening suite
-
- - Customer Data Encryption (local storage)
+
- End-to-end encryption
- Strings protection (e.g. API keys)
- - Dynamic certificate pinning
+ - Dynamic TLS certificate pinning
|
no |
@@ -451,31 +450,41 @@ freeRASP is freemium software i.e. there is a Fair Usage Policy (FUP) that impos
yes |
- Monitoring |
+ Security events data collection, Auditing and Monitoring tools |
- AppSec regular email reporting |
+ Threat events data collection from SDK |
+ yes |
+ configurable |
+
+
+ AppSec regular email reporting service |
yes (up to 100k devices) |
yes |
- Data insights and auditing portal |
+ UI portal for Logging, Data analytics and auditing |
no |
yes |
+
+ Support and Maintenance |
+
- Embed code to integrate with portal |
- no |
+ SLA |
+ Not committed |
yes |
- API data access |
- no |
+ Maintenance updates |
+ Not committed |
yes |
- Fair usage policy |
- Mentioning of the App name and logo in the marketing communications of Talsec (e.g. "Trusted by" section of the Talsec web or in the social media). |
+ Fair usage policy |
+
+
+ Mentioning of the App name and logo in the marketing communications of Talsec (e.g. "Trusted by" section on the web). |
over 100k downloads |
no |
@@ -490,9 +499,9 @@ freeRASP is freemium software i.e. there is a Fair Usage Policy (FUP) that impos
For further comparison details (and planned features), follow our [discussion](https://github.com/talsec/Free-RASP-Community/discussions/5).
# About Us
-Talsec is an academic-based and community-driven mobile security company. We deliver in-App Protection and a User Safety suite for Fintechs. We aim to bridge the gaps between the user's perception of app safety and the strong security requirements of the financial industry.
+Talsec is an academic-based and community-driven mobile security company. We deliver in-App Protection and a User Safety suite for Fintechs. We aim to bridge the gaps between the user's perception of app safety and the strong security requirements of the financial industry.
Talsec offers a wide range of security solutions, such as App and API protection SDK, Penetration testing, monitoring services, and the User Safety suite. You can check out offered products at [our web](https://www.talsec.app).
# License
-This project is provided as freemium software i.e. there is a fair usage policy that impose some limitations on the free usage. The SDK software consists of opensource and binary part which is property of Talsec. The opensource part is licensed under the MIT License - see the [LICENSE](https://github.com/talsec/Free-RASP-Community/blob/master/LICENSE) file for details.
\ No newline at end of file
+This project is provided as freemium software i.e. there is a fair usage policy that impose some limitations on the free usage. The SDK software consists of opensource and binary part which is property of Talsec. The opensource part is licensed under the MIT License - see the [LICENSE](https://github.com/talsec/Free-RASP-Community/blob/master/LICENSE) file for details.
diff --git a/android/build.gradle b/android/build.gradle
index 89d5784..604c08f 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -43,7 +43,8 @@ android {
}
defaultConfig {
- minSdkVersion 21
+ minSdkVersion 23
+ consumerProguardFiles 'consumer-rules.pro'
}
}
@@ -51,5 +52,5 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
// Talsec SDK
- implementation 'com.aheaditec.talsec.security:TalsecSecurity-Community-Flutter:7.0.0'
+ implementation 'com.aheaditec.talsec.security:TalsecSecurity-Community-Flutter:8.0.1'
}
diff --git a/android/consumer-rules.pro b/android/consumer-rules.pro
new file mode 100644
index 0000000..05f9333
--- /dev/null
+++ b/android/consumer-rules.pro
@@ -0,0 +1 @@
+-flattenpackagehierarchy
\ No newline at end of file
diff --git a/android/src/main/kotlin/com/aheaditec/freerasp/Threat.kt b/android/src/main/kotlin/com/aheaditec/freerasp/Threat.kt
index d3ef637..600c95e 100644
--- a/android/src/main/kotlin/com/aheaditec/freerasp/Threat.kt
+++ b/android/src/main/kotlin/com/aheaditec/freerasp/Threat.kt
@@ -6,6 +6,7 @@ internal enum class Threat(val value: String) {
PASSCODE("passcode"),
SIMULATOR("simulator"),
APP_INTEGRITY("appIntegrity"),
+ OBFUSCATION_ISSUES("obfuscationIssues"),
DEVICE_BINDING("deviceBinding"),
UNOFFICIAL_STORE("unofficialStore"),
PRIVILEGED_ACCESS("privilegedAccess"),
diff --git a/android/src/main/kotlin/com/aheaditec/freerasp/handlers/PluginThreatHandler.kt b/android/src/main/kotlin/com/aheaditec/freerasp/handlers/PluginThreatHandler.kt
index 1d90b47..e10545d 100644
--- a/android/src/main/kotlin/com/aheaditec/freerasp/handlers/PluginThreatHandler.kt
+++ b/android/src/main/kotlin/com/aheaditec/freerasp/handlers/PluginThreatHandler.kt
@@ -53,6 +53,10 @@ internal object PluginThreatHandler : ThreatDetected, DeviceState {
notify(Threat.DEVICE_BINDING)
}
+ override fun onObfuscationIssuesDetected() {
+ notify(Threat.OBFUSCATION_ISSUES)
+ }
+
override fun onUnlockedDeviceDetected() {
notify(Threat.PASSCODE)
}
diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle
index f659540..d0fd95f 100644
--- a/example/android/app/build.gradle
+++ b/example/android/app/build.gradle
@@ -46,7 +46,7 @@ android {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.aheaditec.freerasp_example"
// Talsec library needs higher version than default (16)
- minSdkVersion 21
+ minSdkVersion 23
// TODO: Update to "flutter.targetSdkVersion" when sdk will be updated to >= 2.0
targetSdkVersion 31
versionCode flutterVersionCode.toInteger()
diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj
index bf0025b..d0a2200 100644
--- a/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/example/ios/Runner.xcodeproj/project.pbxproj
@@ -204,6 +204,7 @@
files = (
);
inputPaths = (
+ "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
);
name = "Thin Binary";
outputPaths = (
diff --git a/example/lib/threat_notifier.dart b/example/lib/threat_notifier.dart
index cf672ef..7f65087 100644
--- a/example/lib/threat_notifier.dart
+++ b/example/lib/threat_notifier.dart
@@ -9,6 +9,7 @@ class ThreatNotifier extends StateNotifier