使用Nmap版本扫描唤醒AppleTV的技术探究

本文通过Nmap版本扫描意外唤醒AppleTV的案例,详细分析了网络扫描工具与智能设备交互的技术细节,包括端口探测、数据包捕获和协议分析,揭示了设备网络服务的安全特性。

AppleTV & nmap -sV

作者:Brian King
分类:How-To, InfoSec 301
标签:Apple, AppleTV, 实验, Nmap, 测试

注意: 本博客中提到的技术和工具可能已过时,不适用于当前情况。然而,这篇博客仍可作为学习机会,并可能用于更新或集成到现代工具和技术中。

有一天我正在工作,我妻子问我为什么电视开着。我不知道,我没有打开它。但它就在我的桌子附近,我知道也没有别人打开它。不过,我之前在本地网络上运行了nmap来测试一些东西。你可能听说过使用nmap扫描打印机时要小心,因为有些打印机会认真打印出它们接收到的数据包,你可能不想浪费那么多纸。我的AppleTV是不是也在做类似的事情?

结果确实是。跟我一起进行一个小调查,作为练习工具的借口。我发现追逐自己的问题比读书或以其他方式追逐别人的问题更能让我了解事物的工作原理。

如果你有AppleTV,可以这样做:找出它的IP地址(设置 > 通用 > 关于 > IP地址。我的是192.168.10.110。在这里,看看你是否也有型号A1625,运行tvOS 9.2.2,像我一样——也许这很重要?),然后关闭它。然后,使用同一网络上的计算机运行nmap版本扫描。

1
nmap -sV 192.168.10.110

观察AppleTV上的小灯。我的在大约30秒后亮起。完整的扫描在大约两到三分钟后完成,并宣布以下六个端口是开放的:

版本扫描结果

我关闭它并再次运行扫描,得到了相同的结果,所以我确定是扫描把它打开了。现在我想知道是什么导致了这种情况。也许这里有什么东西可以用来控制AppleTV?我能关闭它吗?开始播放一些音乐?烦扰我邻居的AppleTV?

让我们看看在这段时间网络上发生了什么。

在一个终端窗口中,我运行了tcpdump。在另一个窗口中,我再次运行版本扫描。使用tcpdump在运行扫描器或其他自动化工具时显示流量是一个好习惯。它帮助你在工具没有输出时看到它仍在运行。它让你看到是否配置错了扫描器,现在你可能会因为扫描了错误的东西而陷入麻烦。

如果你不带参数运行它,数据包头会被转储到stdout。你可以添加一个bpf过滤器来减少无趣的流量(例如“not arp”),-n开关关闭名称解析和使用知名端口名称,这样你会得到更短的行。如果你知道你要查找的IP地址,这会有很大帮助。对于这样的事情,我发现让工具解释的东西越少越好。我想看到“端口22”而不是“ssh”,因为那里的东西可能并不总是ssh。

Tcpdump在上,nmap在下

我将数据包捕获到文件(-w appletv.pcap)以供以后使用。

我认为这里会有一个或两个数据包导致设备打开,但让我们看看在最坏的情况下,我们需要筛选多少数据包才开始查看。

2,869个数据包比我想要查看的要多。

我们如何缩小范围?那是整个版本扫描,我知道我感兴趣的东西在它的开始附近。

另外,我猜我想要的数据包将是发送到一个开放端口的,显然nmap扫描也会尝试与关闭的端口通信。所以,让我们再次尝试tcpdump,但只监听我们之前发现的开放端口。那是3689、5000、7000、7100、49152、62078。并且我一看到电视打开就按Ctrl-c停止收集流量。

从2869个数据包减少到122个。

这好多了。我在Wireshark中打开数据包捕获,并从底部(最近)开始。我在寻找任何看起来像对话的东西。我注意到这个:

感兴趣的对话

右键单击该数据包,选择“Follow…. TCP Stream”显示我这个类似HTTP的对话:

类似HTTP的对话

现在,RTSP不是HTTP,但在这里语法非常相似:如果我知道发送到哪个IP和端口,我可以在命令行上这样做。回头看Wireshark,是端口5000。

我关闭AppleTV并尝试它,将OPTIONS请求管道到netcat。我为“echo”设置的“-e”标志告诉它解释反斜杠转义序列,这样我得到实际的新行而不是字面的反斜杠-n,这对谁都没好处。

与捕获的相同响应

我得到了相同的响应,但AppleTV仍然关闭——所以这不是我想要的。但有趣的是,我从一个“关闭”的系统得到了如此完整的响应。

这是另一个候选:

看起来奇怪的HTTP请求

这看起来像是nmap为了从某个特定系统获取特定响应而做的事情。请求是:GET /nice%20ports%2C/Tri%6Eity.txt%2ebak(“nice ports,/Trinity.txt.bak”?——是的,这是nmap的创造力在起作用。他们为什么发送这样的请求?答案:http://seclists.org/nmap-dev/2006/q2/207)

无论如何,我发送了这个,但没有得到任何响应。也没有电视唤醒。这也不是我想要的。进一步向开始处看,我看到两个裸GET请求,到不同的端口。

GET / HTTP/1.0 到端口3689

我可以发送那个:

1
$ echo -en "GET / HTTP/1.0\n\n"| nc 192.168.10.110 3689

然后电视打开了!

结果就是这个。只是一个“GET /”就足以从网络唤醒AppleTV。

所以,这就是我的答案。这是nmap版本扫描逻辑的一部分通用测试。就像扫描打印机会让它打印东西一样,这是扫描器的副作用,不是其 intended functionality。而且这不是一个错误或某种晦涩数据包处理技巧。这是最基本的HTTP请求。有趣。这似乎表明AppleTV的某些功能可能通过这个端口暴露,并且至少部分不需要认证。

在网上查找关于这个端口的信息,我遇到了这个“非官方AirPlay协议规范”,解释了我在这里看到的一些东西,并给出了进一步研究的想法:https://nto.github.io/AirPlay.html。如果你感兴趣这能走多远,那将是我的下一步。


评论

Russell Butturini
2016年10月11日 @ 2:08 pm
很好的文章。你有没有把它连接到支持AnyNet+(如三星)的电视?它会监视连接到HDMI的支持AnyNet+的设备来开机和打开。想知道AppleTV是否唤醒,电视作为副作用盲目地自己开机。

BBKing
2016年10月12日 @ 8:47 am
是的——那是另一部分,Russell。AnyNet+似乎是三星对HDMI CEC(消费电子控制)标准的名称,AppleTV在打开后使用它来告诉电视唤醒。
我注意到这开始于我拿到第四代AppleTV替换旧款时。它也是允许你的AppleTV遥控器调整电视音量的原因。苹果在这里谈论它:https://support.apple.com/en-us/HT205225

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计