本文主要介绍 TextView 的一些风险点。文中提到的相关资源和代码可以在https://github.com/AndroidAppSec/vuls/releases/tag/v1.2 获取。
四、TextView安全
TextView是很常见安卓控件,如果不恰当使用也会造成一些安全风险。
比如说以下界面,有几个安全隐患。
1、显示类型
首先,密码框是明文显示的,容易被窥屏或者截屏获取敏感信息。
可以通过在EditText标签中指定android:inputType为textPassword,来让密码进行掩码显示。
2、截屏攻击
不过这样并不能抵御截屏获取敏感信息。在 Android 5.0之前,要实现截屏需要有 root 权限。在 Android 5.0 之后,google 开放了录屏 API,使得无需 root 权限就能够截屏了。比如说以下图片中依然可以看到输入的密码明文。
为了解决截屏带来的风险,可以在承载的 Activity 中,加入以下代码来防止截屏获取敏感信息。
为了验证效果,我们做以下实验:
1)、在以下界面(未做防护),执行命令adb shell screencap -p /sdcard/1.png进行截屏。
2)、在以下界面(做了防护),执行命令adb shell screencap -p /sdcard/2.png进行截屏。
看一下截图文件,发现 1.png 大小正常而 2.png 大小为 0 字节,说明成功抵御了屏幕截图的攻击。
并且,我们在切换应用的界面,发现也不可见账号密码了。
3、剪切板安全
在文本框中经常会使用到复制粘贴的功能,这个时候数据是保存在剪切板中的。而剪切板是安卓系统提供的功能,所有的应用都可以访问,并且无需特殊权限申请。如果在剪切板中存储了敏感信息,就存在泄漏的风险。比如以下的应用通过监控剪切板内容,成功获取了身份证号码。
为了缓解风险,可以采用以下方法来禁用剪切板相关功能:
1)、禁用长按。在 EditText 中加入属性android:longClickable="false"。
2)、重写 EditText 的回调方法。
4、键盘缓存安全
在文本框输入的内容,有时候会被输入法缓存,以提升用户体验。但是在涉及到敏感信息输入框的时候,就可能会造成信息泄漏。为了缓解此问题,可以指定android:inputType为textNoSuggestions。
注:本文中涉及到的风险点通常需要根据应用的类型进行判断,比如说银行类 APP可能需要规避本文中的风险,而工具类 APP 则无需考虑大部分本文的风险点。
参考:
https://sushi2k.gitbooks.io/the-owasp-mobile-security-testing-guide/content/0x05d-Testing-Data-Storage.html
领取专属 10元无门槛券
私享最新 技术干货