让我们聊聊TikTok
我最近在新闻中听到一个引起注意的消息。美国政府正在考虑禁止一款在移动设备上流行的应用程序——不仅是政府设备,而是面向所有美国人。这款应用就是TikTok。
据称,禁止该应用的原因是它向中国政府发送美国公民的数据。数据隐私问题和监控资本主义策略是引人入胜且复杂的主题,值得更多关注。目前,大多数信息安全专业人士会对“你的应用和设备是否在监视你?”这个问题回答“是”。但程度如何?
本文的目的不是回答这个问题(那可能需要一整本书),而是介绍一些核心技能,帮助读者开始移动设备和Android应用分析的旅程,自己寻找答案。
我们将坚持被动分析类型。例如,尝试识别网络流量和API调用,但不会向API服务器发送 manipulated 数据。我们可以查看设备和应用上的数据,但应非常小心操作应用,以免在上游产生意外行为。这种测试需要授权(如渗透测试或漏洞赏金计划)。
设备基线分析
首先,我想看看在安装TikTok之前,手机尝试连接哪些远程主机。我配置了一个Raspberry Pi 4设备作为接入点,以捕获设备流量。
使用Wireshark和命令行工具(如tshark)分析pcap文件,进行长短尾分析,找出通信最频繁和最不频繁的主机。在51个唯一主机中,许多请求是针对Google主机的,这是预期的,因为这是一个Google设备和操作系统。
排除“google”和“gstatic”后,列表减少到23个主机。移除ytimg.com(YouTube)和ntp.org后,一些域名如d2to8y50b3n6dq.cloudfront.net和akamaized.net值得进一步调查,因为CDN流量不一定 benign。
使用whois,app-measurement.com域似乎与Google相关,因此可以搁置分析。Instagram相关域也可以忽略,尽管有趣的是,重启后设备尝试与相关主机通信(可能是API),即使应用未打开。
xtrapath3.izatcloud.net域似乎与Android操作系统和GPS配置相关。一些奇怪的DNS查找,如qiqgyezmfcqf.example.org,实际上是Chrome的行为,用于检测ISP的未解析DNS请求重定向。
lightstep-collector.api.ua.com和identity.api.ua.com域似乎与Under Armor相关,因为MapMyRun安装在设备上。insightapi.p3-group.com更难解释,whois信息受隐私保护,网站使用WordPress,需要进一步调查。
cdn.ampproject.com域似乎与Google和移动设备搜索加速相关。两个反向DNS查找(89.62.225.13和160.62.225.13)似乎与德国电信和制药公司相关,但whois可能不准确,因此放入可疑列表。
需要进一步调查的主机列表:
- D2to8y50b3n6dq.cloudfront.net
- p3ins.akamized.net
- 89.62.225.13.in-addr.arpa
- 160.62.225.13.in-addr.arpa
在Wireshark中,使用过滤器查找这些查找,PTR记录指向server-13-225-62-89.ewr53.r.cloudfront.net。没有其他流量到这些IP地址或域,因此难以说存在恶意通信。
查看协议层次,HTTP、TLS和ICMP是唯一需要调查的协议。ICMP流量主要是目的端口不可达,没有ICMP隧道或其他隐蔽通信。
设置Burp Suite进行HTTP/S流量分析
设置Burp Suite Professional作为拦截代理。配置代理监听移动设备所在的网络。在运行Burp的系统上配置浏览器(推荐Firefox)使用代理,使用FoxyProxy Standard扩展切换代理设置。
访问http://burp下载CA证书,导入Firefox的证书存储。对于Android设备,设置代理更复杂。Android 6.0更容易,因为OS尊重用户证书存储。Android 7.0及以上需要安装系统级证书。
安装Burp Suite证书 for Android 6.0:
- 配置浏览器使用Burp,访问http://burp
- 下载cacert.der,重命名为cacert.crt
- 使用adb push cacert.crt /mnt/sdcard/Download
- 在设备上,Settings > Security > Install from Storage,选择cacert.crt
从手机设置代理,进入连接的WiFi网络的高级选项,选择手动代理设置,输入Burp Suite中配置的IP地址和端口。
手机通过Burp通信后,重启以查看相同流量。D2to8y50b3n6dq.cloudfront.net域用于下载证书存储,文件为cdnconfig.zip和truststore.zip。内容对应URL所述目的,下载证书存储内容,解释了D2to8y50b3n6dq.cloudfront.net和p3ins.akamized.net流量。虽然不确定如何在设备上使用,但似乎不恶意。不过,未验证信任存储文件中的每个CA。
此时,相对确信在包捕获运行的一小时内,没有数据被窃取或设备被 compromise。但这不意味着设备没有每天或每月检查命令和控制服务器。
应用分析
现在转向TikTok。在从Google Play Store安装之前,使用ADB列出已安装包:
adb shell 'pm list packages –f'
安装TikTok后,使用ADB查找,应用名称不是TikTok相关,而是com.zhiliaoapp.musically。使用Python比较文本列表找出差异。
使用ADB定位基础APK并拉取用于静态分析:
adb shell pm path com.zhiliaoapp.musically
adb pull /data/app/com.zhiliaoapp.musically-1/base.apk path/to/desired/destination
在MobSF中处理APK文件,进行自动化静态分析。应用相对复杂,有16个导出活动、22个导出服务、22个导出接收器和4个提供者。这些是应用的攻击面,可能被意外方式操纵。使用Drozer框架进行分析。
TikTok是一个相对大的应用,攻击面大小是其他应用的四倍。详细分析这些需要后续博客文章,因为它们可能无法回答原始问题:应用是否发送个人数据?
MobSF提供权限信息,从Android清单中提取。有67个声明权限,相对较多。一些权限对于分享短视频的应用似乎奇怪,如android.permission.AUTHENTICATE_ACCOUNTS允许创建账户和设置密码,以及16个修改系统数据的特定设置。从外部难以确定功能需求,但如果必须决定应用是否过度权限,我会说是。
网络流量检查
手机设置使用Burp作为代理,Burp CA安装并信任后,进行网络流量检查。启动应用时,拦截应用流量。通过初始“我感兴趣什么”选择,创建账户,观看一些视频,使用应用几分钟。
保存Burp拦截的所有HTTP请求到文件,使用命令行工具了解涉及通信的主机数量。有32个主机与TikTok网络流量相关。通过手动分析Burp中的代理流量,使用域作为搜索术语,用grep获取更易解析的文本列表。
许多GET请求到TikTok API分析设备,这对开发者常见,安装基础指标有用,但可视为数据收集。
注意到一些奇怪之处:大多数API调用的HTTP消息体被加密。为什么说数据被加密?见过API请求被gzip压缩,但能查找压缩文件开始并解码流量。调查时,基于启动应用的时间查找请求开始,右键消息体选择“Send to Decoder”,发送到Burp Suite解码器,选择各种解码类型,但无法找到可解码的数据部分。
在Burp中保存请求到文件,右键代理窗口选择Save Item。请求被base64编码,可在命令行解码:
$echo “<paste base64 blob here” | base64 -d -w 0 > file_name
移除保存文件中的HTTP头信息,留下消息体。使用file实用程序返回“data”(无文件魔术字节)。使用ent实用程序检查一些较大消息体的熵,似乎加密。
此时,打破加密的最佳选择是对提取的APK进行深入静态分析,找出加密实现方式,编写代码解密。这超出了本文范围。
在分析中,如果进行风险分析以允许应用在公司设备上,我认为有足够数据决定反对。但禁止TikTok from the general public?我的意见是, without breaking encryption, 很难说。猜测有人解密了数据,收集的数据被视为隐私侵犯。
但为 devil’s advocate,如果查看其他流行应用,如Instagram、Twitter、Snapchat或Facebook?它们收集一些个人数据。我们处于监控资本主义时代,出售人类行为进行 targeted advertising 是这些公司赚钱的方式。它们发送什么数据?
获取这些其他流行社交媒体应用发送的数据更困难,因为它们使用证书固定(Certificate Pinning)来击败流量检查。这是在应用中嵌入特定证书以建立TLS加密通信,如果未使用该证书(如使用Burp证书),则通信不建立。
击败证书固定,需要在运行时向应用注入代码(使用如Frida)以移除或绕过固定代码,或反编译应用,编辑smali文件,重新打包应用,安装修改后的应用。两种选项都不 trivial。
personally,我认为作为用户,可以安全地假设任何流行应用都在从手机发送个人数据给这些公司。公司总部所在地重要吗?对有些人可能,对大多数可能不。最终,我认为大多数人不知道移动设备上的应用在多大程度上 compromise 他们的隐私,但这是另一天、另一博客文章的话题。