前几期中,我们讨论了与Activity,Content Provider ,Broadcast Receivers 相关的攻防,在本期中,我们将会来讨论讨论非预期的信息泄露, 也即我常常提到的所谓“边信道信息泄露”.
何为非预期的信息泄露?
当应用处理用户或其它数据源输入的数据时,可能会把数据放在不安全的位置,而这些数据能够被同一设备上其它的恶意应用读取,这就造成了风险。
安全风险
由于利用这样的边信道信息泄露非常容易,导致应用容易受到很严重的攻击,攻击者通过一小段代码就能够读取不安全的敏感信息,我们也能通过adb之类的工具来读取。
示例
以下是以下边信道信息泄露的示例情景
Content Provider 信息泄露
Copy/paste buffer缓存
日志记录
URL缓存
浏览器Cookie对象
第三方统计数据
下一节中,我们将会演示上述情景将如何被攻击者利用。
1、 Contetn Provider 信息泄露
即使数据不会储存在设备上,任然可以通过一个恶意应用来提取漏洞Content Provider的数据。
相关的详细信息可以参看第二期文章(传送门到第二期)
2、 Copy/Paste buffer缓存
Android中的Copy/Paste buffer缓存也是一个存在安全问题的地方,由于移动设备拼命的限制,用户更倾向于使用复制粘贴。如果用户把信用卡号这样的敏感信息复制到了剪贴板,攻击者通过一小段代码就能轻轻松松读取到数据
攻击者通过在受害者设备中植入恶意应用,就能随时随地读取受害者的敏感信息,给受害者造成非常严重的损失。
我们用上面的代码开发了一个示例应用,来演示恶意应用如何从剪贴板读取敏感信息。
假设用户在使用合法应用的时候已经将敏感信息复制到了剪贴板,现在,我们使用恶意程序来从剪贴板中读出信息:
我们的示例只是读出数据并显示在屏幕上,但攻击者能远程控制恶意应用将读取到的信息发送到他自己的服务器上。
3、 日志
Android提供的日志功能也是一个会造成信息泄露的地方,日志一般是开发者在开发期间调试使用的,在本节中,我们将会看到攻击者如何通过日志信息发现信息泄露。在测试时,我有多种方式使用logcat工具来读取日志信息,见下一节。
3.1 使用Eclipse
如果使用Eclipse IDE,只需要把你的设备连接到电脑上,我们就能在Logcat选项卡中看到应用运行期间输出的所有日志信息,其中可能就会有一些敏感信息,下面的截图就是测试应用在日志在打印出了密码
3.2 使用adb
我们使用adb来查看日志
首先连接设备到电脑,并使用以下命令:
# adb logcat
该命令在终端中打印出所有的日志,如下图。图中我们感兴趣的应用日志分散在大量的系统事件日志中,我们可以通过logcat的选项来过滤出我们感兴趣的东西:
-v verbose 打印详细
-d debug 打印调试级日志
-I information 打印提示级日志
-e error 打印错误级日志
-w warning 打印警告级日志
我们也能通过以下命令将logcat的输出保存到文件中:
1
|
#adb logcat > output.txt |
将日志保存到电脑本地,一遍后期进一步分析。
3.3使用恶意应用
我们也能开发一个恶意应用来读取设备的日志信息,关键代码如下:
提示:READ_LOGS权限在Jellybean(Android 4.1 API level 16)后不再对第三方应用开放,但这段代码任然可以在root过的设备上运行。
4.URL缓存和浏览器cookie对象
已经有大量基于web view的应用程序造成URL,cookie和缓存等泄露的问题,这允许攻击者劫持用户的会话。这样的缓存可能存在日志,流量历史,浏览缓存等多种形式。
我们能用grep从logcat的输出中过滤出诸如cookies等敏感信息,命令如下:
1
|
#adb logcat|grep “cookie” |
许多的应用都没有禁用掉缓存.可以简单的通过”no-cache”,”no-store”等HTTP头来避免造成信息泄露。
这方面有许多的漏洞报告,详细信息请参看文章末尾的相关链接。
5.分析发送到第三方的信息
某些情况下,有的应用会使用第三方API。在使用这类应用时,第三方的API可能会读取诸如设备ID及位置信息等敏感信息。
总结:
按照2014年发布的OWASP 移动安全漏洞 TOP 10,非预期的信息泄露排名第四,尽管这看起来是一个非常简单的漏洞,但其泄露的关键信息可能会造成非常严重的安全风险。攻击者检查信息泄露的方法相对非常简单,所以强烈建议开发者在开发应用过程中注意防范信息泄露。
(责任编辑:冬天的宇)