当前位置:安全客 >> 知识详情

安卓Hacking Part 12: 使用第三方库加固Shared Preferences

2014-12-18 09:52:38 阅读:0次 收藏 来源: 360安全播报

在前几期中,我们介绍过Android应用开发过程中Shared Preference的实现,并演示了如何窃取安全防护不足的应用保存的Shared Preferences。本期中我们将学习如何使用一个名为”Secure Preferences”第三方库保护保存在Shared Preferences中的数据。尽管在设备被root的情况下,这个库也没法百分之百的保证应用的安全,但相比于普通的Shared Preferences敏感信息被能得到更好的保护。

http://p7.qhimg.com/t01175e1233370cd75e.png

“Secure Preferences”是一个Shared preferences加密包装库,可以加密保存在XML文件里面的Shared Prefereces数据,并且是开源的。

本文会一步步教你如何在开发过程中使用“Secure Prefereces”库来保卫数据安全。

实战Android Secure Preferences

1、下载”Secure Prefereces”库,地址如下

2、Eclipse中创建一个新工程。

3、在工程中添加我们刚刚下载的库以便待会用到。该过程类似于将其他库连接到我们的Android应用中去。如果你不知道怎么操作,简单的步骤就是:右击,选择属性,勾上“is Library”,然后将其连接的我们创建的应用中。

4、为了使用“Secure Prefereces”,我们需要在类中对Secure Prefereces进行初始化。

t01dbe72d4c6638fd7c.png

5、现在我们就可以想使用普通的Shared Preferences一样,创建一个”Editor”对象来想XML中插入数据。

t0110c1f75e8bbdb92c.png

如上图所示,我们一样使用Editor对象的putString方法来插入数据。

6、使用getString带上必要的参数来读取数据。

t014ce866e08ff1847f.png

上图中的代码读取了一个键值为”PASSWORD”的值,并显示在一个textview中。

这就是”Secure Preferences”在应用开发中的用法。

现在,我们会深入研究下”Secure Preferences”背后的工作,已经它是如何降低数据被窃取的风险的。

这里用到的APK和代码可以在上面的连接下载到。

我们为本文开发的应用的Activity布局中有一个编辑框,两个按钮,一个文本框,一个按钮用于加密并保存编辑框中的数据,另一个用于解密并在文本框中显示数据。如下图:

t01ccd477448d14aaf3.png

当我们在输入框中输入数据并点击”encrypt and save”按钮的时候,上一届中第五步中的代码就会执行,加密并保存用户输入的数据:

t01cd299ee8387b88cc.png

当我们点击”Decrypt and Display”按钮时,就会读取并解密保存在Shared Preferences中的数据。

现在,我们就来看看数据是怎么被存储到xml文件中的,以及为何可以增加窃密者窃取信息的难度。

前几期中,我们已经知道,Shared Prefercences 的数据保存在一个XML文件中,我们现在先吧这个文件下载到本地计算机中,可以使用如下命令:

adb pull /data/data/com.isi.secureprefs/shared_prefs/com.isi.secureprefs_preferences.xml

t0178cc9cbe1bc0803f.png

可以使用cat命令查看文件的内容:

cat com.isi.secureprefs_preferences.xml

t01907be0f225bbdef3.png

如上图,可以看到,这个xml文件中确实保存了数据,但却是经过了加密的数据。

SecurePreferences”如何工作?

t01916e12b8f05cd229.png

Secure Preferences 使用AES来加密数据。在Secure Preferences第一次被初始化的的时候回使用伪随机数来生成一个随机秘钥,并使用这个秘钥来加密保存的键值对,加密结果进过一遍base64后保存到XML文件中。因为AES是一种对此加密算法,所以解密也使用同一个秘钥。

总结

本文介绍了如何加密Shared Preferences中保存的键值对。这中办法能极大的提高设备中保存的数据的安全性。但当设备被root之后,这就不是那么理想了。更好的办法是使用基于密码的加密方式,及更加用户输入的密码来生成加密解密用的秘钥。

相关链接

https://github.com/scottyab/secure-preferences

Image Credit:

http://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/256/Apps-preferences-desktop-cryptography-icon.png


目录

安卓Hacking Part 1: 应用组件攻防(连载) 

安卓Hacking Part 2: Content Provider攻防(连载)

安卓Hacking Part 3:Broadcast Receivers攻防(连载) 

安卓Hacking Part 4:非预期的信息泄露(边信道信息泄露)

安卓Hacking:Part 5:使用JDB调试Java应用 

安卓Hacking Part 6:调试Android应用 

安卓 Hacking Part7:攻击WebView

安卓Hacking Part 8:Root的检测和绕过

安卓hacking Part9: 不安全的本地存储:Shared Preferences 

安卓Hacking Part 10:不安全的本地存储

安卓Hacking Part 11:使用Introspy进行黑盒测试 

安卓Hacking Part 12: 使用第三方库加固Shared Preferences 

安卓Hacking Part 13:使用Drozer进行安全测试 

安卓Hacking Part 14:在没有root的设备上检测并导出app特定的数据




本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:http://resources.infosecinstitute.com/android-hacking-security-part-12-securing-shared-preferences-third-party-libraries/

参与讨论,请先 | 注册 | 匿名评论
发布
用户评论
带头大哥的小弟 2015-11-18 17:50:23
回复 |  点赞

占楼占楼!

查看更多