如何保护我的FLUTTER Mobile应用程序?(Flutter App渗透测试结果)

6 security penetration-testing flutter

在哪里可以获得Flutter App安全文档或最佳实践?我几乎准备发布我的应用程序。我使用在线(免费版本)https://www.ostorlab.co/report/并检查我的应用程序的安全性。

我上面有一个主要问题,下面有一些其他问题。

  • 如何禁用调试模式?
  • 如何禁用备份模式?
  • 如何在AndroidManifest或类似版本中阻止我的Google Map API密钥?

这些是我面临的安全问题。————————————————————————————————

高调试模式已启用说明

该应用程序以调试模式进行编译,攻击者可以通过该调试器连接调试器以访问敏感数据或执行恶意操作。攻击者可以在不访问源代码的情况下调试该应用程序,并利用它来代表用户执行恶意操作,修改应用程序行为或访问敏感数据,例如凭据和会话Cookie。

建议

通过在application标签中将android:debuggeable属性设置为false来禁用调试模式。

参考•DRD10-J不要释放可调试的应用程序(CERT安全编码)

例如:AndroidManifest:

<activity android:name="com.apptreesoftware.mapview.MapActivity" android:theme="@7F0C0102"> </activity>
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value=“****************************”></meta-data>
<meta-data android:name="com.google.android.gms.version" android:value="@7F080004"></meta-data>
Run Code Online (Sandbox Code Playgroud)

——————————————————————————————

可能启用了备份模式说明

默认情况下,Android执行应用程序的完整备份,包括/ data分区上存储的私有文件。备份管理器服务会将这些数据上传到用户的Google云端硬盘帐户。

建议

如果应用程序包含您不想还原的敏感数据,则可以通过在应用程序标签中将android:allowBackup属性设置为false来禁用备份模式。

参考资料•M开发者预览版上的随机缪斯:丑陋(第二部分)•DRD22。不要缓存敏感信息

——————————————————————————————

可能声明了未经许可的服务说明

服务是一个应用程序组件,可以在无需用户交互的情况下处理在后台执行的操作。服务还可以用于向其他应用程序公开功能。这对应于对Context.bindService()的调用,以建立与服务的连接并与其进行交互。不受保护的服务可以被其他应用程序调用,并可能访问敏感信息或执行特权操作

建议

服务可以向外部组件公开几种方法。可以使用方法checkPermission为每个方法定义任意权限。通过在清单的标记中强制执行权限,也可以分离服务并限制访问。

<permission android:name="co.ostorlab.custom_permission" android:label="custom_permission" android:protectionLevel="dangerous"></permission>
<service android:name="co.ostorlab.custom_service" android:permission="co.ostorlab.custom_permission">
    <intent-filter>
        <action android:name="co.ostorlab.ACTION" />
    </intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)

在执行该调用的实现之前,该服务可以通过调用方法checkCallingPermission来对单个IPC调用强制执行权限。

参考资料•CWE-280:权限或特权不足的处理不当•通过不受信任的输入进行的安全决策(OWASP Mobile前10名)•服务(Android开发者文档)

AndroidManifest.xml中的技术细节误报服务定义:

<service android:name="com.mobile.niyazibank.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT">
</action>
</intent-filter>
</service>
<service android:name="com.mobile.niyazibank.MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT">
</action>
</intent-filter>
</service>
<service android:name="io.flutter.plugins.firebasemessaging.FlutterFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT">
</action>
</intent-filter>
</service>
<service android:name="io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT">
</action>
</intent-filter>
</service>
<service android:exported="true" android:name="com.google.firebase.messaging.FirebaseMessagingService">
<intent-filter android:priority="-500">
<action android:name="com.google.firebase.MESSAGING_EVENT">
</action>
</intent-filter>
</service>
<service android:exported="true" android:name="com.google.firebase.iid.FirebaseInstanceIdService">
<intent-filter android:priority="-500">
<action android:name="com.google.firebase.INSTANCE_ID_EVENT">
</action>
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)

————————————————————

重要的导出活动,服务和广播接收者列表说明

应用程序中所有导出组件的列表。导出的组件可供外部应用程序访问,并提供该应用程序的入口点。

建议

此项仅供参考,无建议。

参考资料•内容提供者(Android开发人员文档)•活动(Android开发人员文档)•广播接收器(Android开发人员文档)•服务(Android开发人员文档)

Xih*_*uny 1

您是否上传了release版本或调试版本apk来检查安全性?

flutter build --release将生成release版本apk

另外,请在此处阅读更多信息:https://flutter.dev/docs/deployment/android