今天我们介绍的ICSE 2024研究论文Attention! Your Copied Data is Under Monitoring: A Systematic Study of Clipboard Usage in Android Apps,对Android APP访问剪贴板数据这种行为进行了调查。
当然,尽管这篇论文是今年发表的,我们还是要介绍一下历史的进程。下面这部分论文内容介绍了Android系统的剪贴板特性,然而这已经是历史的一部分了(可以写进“Android安全发展史”):
最新的情况是什么样的,熟悉Android系统演化的读者应该都知道,从Android 10(2019年9月)开始,只有默认的输入法能够访问剪贴板数据,因此本文讨论的主要是Android 9及之前的系统,同时也考虑在后续系统中,APP仍然可以通过申请相关权限来显式访问剪贴板数据的情况。
回到论文中来,今天介绍的重点主要是作者研发的工具——ClipboardScope
以及相关的分析技术。看到这个XXScope风格,我们立即想到了此前推荐的诸多同类工作。对,这篇文章的好几位作者都曾经在G.O.S.S.I.P的老朋友——林志强教授的研究组学习工作过。在这篇论文中,作者运用ClipboardScope
对超过200万个Android应用进行了大规模静态分析,给这些应用的剪贴板读取操作进行了分类:
“spot-on”:读取剪贴板数据只是为了显示出来(不持久保存);
“grand-slam”:像仓鼠一样搜集所有剪贴板数据,保存(甚至还把数据发送出去);
“selective”:当剪贴板数据包含特定关键词的时候才保存;
“cherry-pick”:当剪贴板数据包含特定关键词的时候,保存其中的一部分内容(例如解析SMS OTP相关短信并保存其中的验证码);
上述的类别中,第一类(“spot-on”)操作是无害的,而后面三种就有点瓜田李下的嫌疑了。让我们先看一下分析结论,在整个被测试的APP数据集中,一共找到了26201个会读取剪贴板的APP,其中绝大部分(23948个,91.4%)执行了第一类操作,而剩余不到10%的APP(不到3000个)则执行了相对来说让用户有点担忧的操作。
在这些喜欢读取剪贴板的APP中,我们看到了某个安装超过10亿次的通信类APP(直接念身份证号吧)持续监听剪贴板(“grand-slam”),而且喜欢把数据保存在本地(通过SharedPreferences
方式),并且没有执行加密保护。
在执行第三类和第四类操作的APP中,作者统计了下载量比较高的应用,从下面的表格可以看到,基本上是对特定类型数据的监听和处理。例如有些代购APP会监控是否有taobao的URL链接,有一些VPN软件会解析特定的VPN配置数据来提取私钥之类的信息。
我们最应该从这篇论文中学习的是作者解决问题之道。把“找到有剪贴板监控行为的APP并将其操作分类”这个问题转换成一系列的程序分析。首先定义清楚source和sink,也就是找到相关的API,后面就只需要追踪数据流就可以分析剪贴板数据的使用。
当然,对整个数据流的分析还是比较复杂的,中间有很多挑战。下图是一个分析样例,这里面比较典型的分析难点是在对一些异步函数调用过程操作时可能会遇到的分析中断。
ClipboardScope
在污点分析中用了一些经验性的处理,把对象的静态成员变量、SharedPreferences
和Intent
都标记上了污点标签之后,就能够比较好地保证在遇到异步操作的时候也能保证数据流不会断掉。
ClipboardScope
还总结了一些特定的字符串操作,用来确定APP在读取剪贴板数据之后的行为,这部分的细节,读者可以去看下3.2章和4.3章的内容。
最后,我们给出ClipboardScope
的工作流程,大家对这整个流程是否有了比较清楚的理解了呢?
论文:https://bruceqczhao.github.io/assets/icse24/ICSE24a.pdf
开源代码:https://github.com/CityuSeclab/ClipboardScope_open