您当前的位置:安全博客 > 安全漏洞 > Android Database配置模式安全风险浅析

Android Database配置模式安全风险浅析

阿里无线安全团队发表于2015年03月11日

作者:行里

1. Database配置模式安全风险描述 

      Database配置模式安全风险源于:1)开发者在创建数据库(Database)时没有正确的选取合适的创建模式(MODE_PRIVATE、MODE_WORLD_READABLE以及MODE_WORLD_WRITEABLE)进行权限控制,从而导致数据库(Database)内容被恶意读写,造成账户密码、身份信息、以及其他敏感信息的泄露,甚至攻击者进一步实施恶意攻击。
      如果在开发中没有使用正确的创建模式数据库(Database)文件,将会导致敏感信息泄露危害,如个人账户密码、身份信息以及金融账户等重要敏感信息。

2. Database配置模式安全影响范围

Android所有系统

3.Database配置模式安全风险详情

1) 风险位置:

      openOrCreateDatabase(String fileName, int mode, CursorFactory factory)[1];

2) 风险触发前提条件:

      使用非MODE_PRIVATE模式创建数据库文件;

3) 风险原理:

      a. 使用MODE_WORLD_READABLE模式创建数据库文件,使得其他应用对该数据库文件具备可读的权限;
      b. 使用MODE_WORLD_WRITEABLE模式创建数据库文件,使得其他应用对该数据库文件具备可写的权限;

4. Database配置模式安全风险证明


      1) 使用MODE_PRIVATE模式创建数据库(Database)文件,因此在不具有root权限的情况下,其他应用不能读取该应用的数据库文件内容;

      通过MODE_PRIVATE模式创建数据库的代码片段:
 
      通过adb shell进入系统终端,查看创建的内部存储文件的权限为“-rw-rw----”,其中others的权限不可读,与应用不同uid的用户查看数据库文件内容时提示”Permission denied”,如下图所示:
 
      读取数据库的恶意代码片段:
 
      其他应用读取该应用通过MODE_PRIVATE模式创建的数据库    结果如下图所示:
 
      2) 使用MODE_WORLD_READABLE模式创建数据库(Database)文件,因此在不具有root权限的情况下,其他应用能够读取该应用的数据库文件内容;

      通过MODE_WORLD_READABLE模式创建数据库的代码片段:
 
      通过adb shell进入系统终端,查看创建的内部存储文件的权限为“-rw-rw-r--”,其中others的权限可读,与应用不同uid的用户能够查看数据库文件内容,如下图所示:
 
      读取数据库的恶意代码片段:

      其他应用读取该应用通过MODE_WORLD_READABLE模式创建的数据库结果如下图所示:
 


5.Database配置模式安全风险安全建议


      1. 避免使用MODE_WORLD_WRITEABLE和MODE_WORLD_READABLE模式创建数据库(Database);
      出于安全考虑,阿里聚安全建议不要使用全局可读模式和全局可写模式创建数据库,详情参照Google官方安全指导[2]。

引用

[1] http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
[2] http://developer.android.com/training/articles/security-tips.html

 



安全漏洞