例如,我如何检查 Android 版 YouTube 是否使用传输层安全性 TLS 加密?
是否有可以用来验证是否使用了加密的网络工具?
答案1
您可以通过连接到您控制的无线网络并在 AP 的有线端使用嗅探器(wireshark、tcpdump)来观察数据包的通过情况,从而进行测试。虽然 Android 应该优先使用无线网络而不是电话网络,但如果没有,您可以禁用电话数据服务。
让我们知道你发现了什么!
答案2
要进行测试,您需要使用 wireshark 或类似工具捕获网络数据包。如果您的手机已 root,则可以在手机上运行此工具。或者,您可以使用互联网连接的计算机并将未使用的 wifi/蓝牙卡设置为 wifi/蓝牙热点(例如,当计算机通过以太网直接连接到互联网时设置 wifi 热点,或者如果您的笔记本电脑通过 wifi 连接到互联网,则设置在您的手机和笔记本电脑之间共享互联网的蓝牙连接)。然后将手机连接到笔记本电脑的互联网并启动 wireshark 捕获。然后启动特定的移动应用程序并使用它。在进行捕获时,尽量不要让您的计算机或手机有太多其他互联网活动。通过 IP 地址过滤收集的数据包(例如,如果您正在查找 youtube,请查看与 youtube 关联的 IP)。检查应用程序生成的所有内容是否使用 TLS 发送(注意协议)。查看您想要保密的数据是否以未加密的形式发送。
对于 Android 上的 YouTube 应用的特定情况。不,视频和获取视频的初始请求是通过未加密的 HTTP 发送的。(我刚刚使用运行 Android 4.4.2 的 nexus 7 上的 YouTube 应用通过 wireshark 进行了测试。)它确实建立了初始 HTTPS 连接,我相信这是用于将您登录到您的谷歌帐户。但是,当您请求和观看视频时,包括标识视频的 HTTP 标头在内的流量是通过未加密的 HTTP 发送的。以下是在使用 YouTube 应用进行 TCP 流开始时发出的捕获的 HTTP 请求(我使用虚假数据更改了我的 IP 和许多其他字段,所以我没有无意中泄露我不想发送的信息,例如活动的谷歌会话 cookie)。请注意&id=b7935aa6939a4137&
未更改的部分。
GET /videoplayback?ms=au&clen=22426616&key=yt5&mime=video%2F3gpp&ip=1.2.3.4&mv=m&ipbits=0
&mws=yes&fexp=123456%2C123456%2C123456%2C123456%2C123456%2C123456%2C123456%2C123456
&sparams=clen%2Cdur%2Cgir%2Cid%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Csource%2Cupn%2Cexpire
&signature=123456789ABCDEF123456789ABCDEFABCDEFABCD.EF1234567890ABC123123123123A1231231234123
&upn=a1B2C3d4E5F&id=b7935aa6939a4137&gir=yes&mt=14001000000&sver=3&expire=1400200000
&dur=791.010&source=youtube&lmt=123456789012345&itag=36&dnc=1&cpn=-ABCDEFGHIJKLMt3 HTTP/1.1
Host: r3---sn-mv-ab4a.googlevideo.com
Connection: keep-alive
User-Agent: com.google.android.youtube/5.6.36(Linux; U; Android 4.4.2; en_US; Nexus 7 Build/KOT49H)
Accept-Encoding: gzip,deflate
https://www.youtube.com/watch?v=t5NappOaQTc
这是我在手机应用程序上观看视频的时候。
注意这两个 ID 是相互对应的;一个是用(修改过的)base64 编码的视频 ID,另一个是用十六进制编码的视频 ID。进入 Python,您可以显示它们是相同的:
>>> import base64
>>> base64.b64decode('t5NappOaQTc=').encode('hex')
'b7935aa6939a4137'
或者换一种方式:
>>> base64.b64encode('b7935aa6939a4137'.decode('hex'))
't5NappOaQTc='
因此,网络窃听者有可能注意到您通过 YouTube 移动应用程序观看的视频。