近日来,由于一些原因,TikTok 的命运可谓一波三折。TikTok 本身真的存在隐私问题吗?本文,我们来看下黑客对 TikTok 的研究结果吧。
本文最初发表在 Medium 博客,经原作者 Elliot Alderson 授权,InfoQ 中文站翻译并分享。
最近,美国计划让微软收购视频分享社交网络移动应用 TikTok,因为“它对美国国家安全构成了风险”,必须交由美国本土的科技公司管理。TikTok 最近得到了多家媒体的报道,但其中又有多少是真实的呢?每篇文章都会回答一个非常具体的问题。现在,是时候把事实重新摆回桌面了。
免责声明
TikTok 为用户提供了大量功能,这要归功于它高达数百万行的代码。因此,仅靠一篇文章是不可能涵盖像“TikTok 是否对美国国家安全构成了威胁?”这样宽泛而模糊的问题答案。因此,我计划在一系列文章中讨论该问题,每篇文章都有特定的主题。
我是一名法国安全研究员,多年来,一直在分析移动应用程序。你可以在 http://fs0c131y.com/press 网站找到我的公开作品,在 http://twitter.com/fs0c131y 找到我。
我的目标是完全透明。我会和你分享我知道的所有内容。
如果想跳过技术细节,可以在本文末尾找到总结。
前言
2020 年 8 月 2 日,我开始分析 TikTok,并在 Twitter 上发布了相关信息。
就在这条推文发布几分钟后,我的一个粉丝评论道:
我们通过私信进行了讨论,他向我解释了这个问题。他监听了 TikTok 发出的网络请求,发现每隔 2 分钟就有一个请求。但是,内容是加密过的,他无法解密。
这听起来像是一个好的起点:
TikTok 定期发送的是什么内容?
什么时候发送?
发送到哪里?
这些内容是怎么加密的?
TikTok 定期发送什么内容?
当调试某个程序时,90% 的工作是需要重现它。所以,首先我试着重现这个问题。
我在法国 PlayStore 下载了最新版本的 TikTok;
我设置了 Burp Suite 来拦截从手机发出的网络请求;
我使用了 Frida 脚本来绕过应用程序中的 SSL 锁定,并启动了 TikTok。
果然,每隔 5 分钟,TikTok 就会发送一个包含加密内容的网络请求。
/service/2/app_log/ 端点
让我们关注对端点 /service/2/app_log/ 发出的请求。
参数
在研究其加密内容之前,我们已经可以看到这个请求包含了大量参数。
这里面的大多数名称都能说明问题,我可以看到有三种类型的参数:
有关设备的信息:
device_id
、device_type
、device_brand
、os_api
、os_version
……有关 App 的信息:
app_type
、app_language
、version_code
、version_name
、build_number
……有关用户的信息:
current_region
、locale
、region
事实上,这种做法非常标准,我们所使用的大多数应用程序都有相同的数据检索过程。
加密内容
现在,是时候看加密内容了。我反编译了 App,并搜索了 app_log
,在 com.ss.android.common.applog.NetUtil
类中找到了 sendEncryptLog
方法。
看不懂代码没关系,可以看下这个函数签名,需要 4 个参数。 arg4
是 URL, arg5
是请求的内容(未加密),其余的暂时不用关心。
现在,我可以使用 Frida截取此方法的调用,并在加密之前查看请求的内容。
我使用了小的 TTencryptedLog
方法,得到了以下输出:
如果我们仔细查看 JSON 文件的内容,就会看到非常标准的数据。
像以前一样,有很多关于设备的信息;
这个应用程序最后一次启动是什么时候;
事件记录,需要仔细研究他们认为的“事件”,就我所知,这似乎是一个相当标准的分析解决方案。
什么时候发送?
回答这个问题就等于回答什么时候调用方法。通过使用 JEB按下 X 键,你可以很容易地获得所有的交叉引用。
可以看到如下 4 种方法:
doUpdateConfig
sendTimelyEvent
sendLog
deviceRegister
包中的未知方法
sendEncryptLog
方法用于发送不同类型的 JSON。所以,我清理了 TikTok 的数据,一切从头开始,我设法捕获了以下 JSON:
当设备被注册时请求的内容:
TikTok 修改日志设置时的请求内容:
同样,字段名本身就可以说明一切。我在这些 JSON 中看不到任何可疑或特定于 TikTok 的东西。
发送到哪里?
正如你在前面的截图看到的那样,请求被发送到 log16-normal-c-useast1a.tiktokv.com。有意思的是,我人在欧洲,但我的日志却被发送到美国东部的据点……TikTok 是一个全球范围使用的应用程序,他们可能用了几个端点来上传日志。
经过深入研究,我们可以找到 URLConfig
类。
可以看到一共有 7 种 URL 配置:中国、美国、美国 HTTP、SIG AWS、SIG ALIYUN (阿里云新加坡)、Musically、Musically HTTP 等。
再说一次,居然没有欧洲的 URL 配置,似乎很奇怪是吧,但是没有关系。
这些内容是怎么加密的?
你还记得 sendEncryptLog
方法吗?
加密就发生在这一行: v5 = b.a(v5, v5.length);
EncryptorUtil
才是乐趣所在:
果然如此,加密是在本地库完成的。TikTok 使用的所有本地库都位于手机的文件夹 /data/data/com.zhiliaoapp.musically/app_librarian/<version>
中。我就讲到这里。至于 TikTok 关于加密数据的实际操作,值得单独写成一篇文章。
总结
本文,我试图了解 TikTok 定期发送回其服务器的数据,我对请求的内容进行了解密并分析。据我们所知,在目前的状态下,TikTok 并没有什么可疑的行为,也没有泄露不寻常的数据。获取用户设备的数据这种行为在移动领域相当普遍,在 Facebook、Snapchat、Instagram 和其他网站也会有类似的结果。
作者介绍:
Elliot Alderson,法国黑客。在 Predicta Lab 打击虚假信息,与 USANetwork 无关。
原文链接:
https://medium.com/@fs0c131y/tiktok-logs-logs-logs-e93e8162647a
评论 4 条评论