Android 设备上的安全性

Adobe AIR 2.5 和更高版本

在 Android 上,和在所有计算设备上一样,AIR 符合本机安全模型。同时,AIR 保持自己的安全性规则,旨在使开发人员轻松编写安全的、与 Internet 连接的应用程序。

因为 Android 上的 AIR 应用程序使用 Android 软件包格式,安装属于 Android 安全性模型。不使用 AIR 应用程序安装程序。

Android 安全性模型有三个主要方面:

  • 权限

  • 应用程序签名

  • 应用程序用户 ID

Android 权限

Android 的许多功能由操作系统权限机制保护。为了使用某种保护的功能,AIR 应用程序描述符必须声明应用程序要求必要的权限。用户尝试安装应用程序时,Android 操作系统会在继续安装之前对用户显示所有请求的权限。

大多数 AIR 应用程序需要在应用程序描述符中指定 Android 权限。默认情况下,不包括任何权限。通过 AIR 运行时公开的受保护的 Android 功能需要下列权限:

ACCESS_COARSE_LOCATION
允许应用程序通过 Geolocation 类访问 WIFI 和移动电话网络位置数据。

ACCESS_FINE_LOCATION
允许应用程序通过 Geolocation 类访问 GPS 数据。

ACCESS_NETWORK_STATE 和 ACCESS_WIFI_STATE
允许应用程序通过 NetworkInfo 类访问网络信息。

CAMERA
允许应用程序访问摄像头。

INTERNET
允许应用程序提出网络请求。也允许远程调试。

READ_PHONE_STATE
允许 AIR 运行时在有来电时静音。

RECORD_AUDIO
允许应用程序访问麦克风。

WAKE_LOCK 和 DISABLE_KEYGUARD
允许应用程序使用 SystemIdleMode 类设置阻止设备休眠。

WRITE_EXTERNAL_STORAGE
允许应用程序写入设备上的外部存储卡。

应用程序签名

为 Android 平台创建的所有应用程序包都必须进行签名。由于 Android 上的 AIR 应用程序都以本机 Android APK 格式打包,因此根据 Android 约定而非 AIR 约定对其进行签名。尽管 Android 和 AIR 使用代码签名的方式相似,但存在显著区别:

  • 在 Android 上,签名将验证开发人员是否持有私钥,但不用于验证开发人员的身份。

  • 对于提交给 Android 市场的应用程序,证书必须至少在 25 年内有效。

  • Android 不支持将包签名迁移到其他证书。如果更新通过其他证书进行签名,则用户必须卸载原始应用程序后才能安装更新的应用程序。

  • 两个使用相同证书签名的应用程序可以指定一个共享的 ID,以便允许它们访问彼此的缓存和数据文件。(AIR 没有提供此类共享。)

应用程序用户 ID

Android 使用 Linux 内核。为每个安装的应用程序分配了 Linux 类型的用户 ID,该用户 ID 确定其进行文件访问等操作的权限。通过文件系统权限提供保护,防止对应用程序、应用程序存储和临时目录中的文件进行非授权访问。写入外部存储器(即 SD 卡)的文件在 SD 卡作为大容量存储设备安装到计算机上时,可以被其他应用程序或用户读取、修改和删除。

通过 Internet 请求接收的 Cookie 不在 AIR 应用程序之间共享。

背景图像隐私

当用户将某个应用程序切换到后台时,一些 Android 版本会捕获它在最近应用程序列表中使用缩览图的屏幕快照。此屏幕快照存储在设备内存中,攻击者可以通过该设备的物理控件访问该快照。

如果您的应用程序显示敏感信息,则您应保护此类信息,防止被背景屏幕快照捕获。由 NativeApplication 对象调度的 deactivate 事件表示应用程序将要切换到背景。使用此事件可以清除或隐藏所有敏感信息。

Android 上的加密数据

Android 上的 AIR 应用程序可以使用内置 SQL 数据库中提供的加密选项保存加密数据。为提供最佳安全性,请将加密密钥基于用户在运行应用程序时输入的密码。本地存储的加密密钥或密码很难或者不可能对访问应用程序文件的攻击者“隐藏”。如果攻击者可以检索密钥,那么除了 Android 系统提供的基于用户 ID 的文件系统安全外,加密数据不会提供任何附加保护。

EncryptedLocalStore 类可用于保存数据,但在 Android 设备上不对该数据进行加密。而 Android 安全模型则利用应用程序用户 ID 保护数据不被其他应用程序访问。使用共享用户 ID 并使用相同代码签名证书签名的应用程序使用相同的加密本地存储区。

重要说明: 在根手机上,使用根权限运行的任何应用程序都可以访问任何其他应用程序的文件。因此,使用加密本地存储区存储的数据在根设备上并不安全。