开启隐藏的电台服务

这台索尼HAP-S1买来已有些年头,放桌面验值很不错,功能也很齐全,内置了Spotify、radiko.jp和TuneIn网络电台。国行买来这些服务都被隐藏了,需要更新固件开启,且在更新的过程中需要使机器对外显示的IP在国外,这里具体方法就不说了,可以在软路由上用iptables劫持机器流量至某服务端口。如果机器已经是最新版本固件了,可以回滚至上一个版本后再更新,方法如下:关机状态下同时按住HOME键和电源键,机器启动后会进入Special Mode,这里你可以选择回滚至上一个版本。

某天突然发现我最喜欢的TuneIn中的电台Radio Swiss Pop无法播放了,总是提示网络错误。尝试播放其他电台,发现有的又能播放,路由器上用tcpdump抓包分析发现,只要是电台流媒体地址是https的就无法播放,http协议的就正常。于是推测HAP-S1的根证书或许过期了,无法访问https链接,那方法就有两个,让TuneIn返回http协议的流媒体地址,或者让索尼更新固件支持https

联系TuneIn和电台

首先给TuneIn发送了邮件,说明了情况。TuneIn回复很快,说提交流媒体地址是由电台自己决定的,让联系电台。于是继续给Radio Swiss Pop发送邮件,对方回复也很及时,表示理解,说从http升级到https是他们有意为之,目的是为了客户的数据安全,不会为了我的设备而再提供http的兼容选项,并让我联系索尼。我当然联系了索尼,可一直没收到回复

联系索尼

索尼这边回信就慢多了,过了十多天才收到回信,简短地抱歉,然后告知此产品已不再受到支持,不会更新固件,但是会在以后的新产品开发中注意我的意见。WTK,新产品在哪?HAP-S1和HAP-Z1ES发布都七八年了,也停产几年了,之后再没有同类型的新产品发布

自己解决

首先找到Radio Swiss Pop的流媒体服务器地址,https://stream.srg-ssr.ch/ 是个Icecast2服务器,确认服务器是支持http协议的,所以只要想办法把TuneIn给HAP-S1返回的流媒体地址中‘https’替换为‘http’就行了。万幸HAP-S1和TuneIn通信没有用https协议,所以可以通过中间人攻击MITM的方式替换

iptables好像干不了内容替换的活,那就有请反代大师nginx出厂。nginx的活就是监听HAP-S1的请求,然后转发给TuneIn服务器;接收到TuneIn返回的结果后,把其中的‘https’替换为‘http’,然后把替换后的结果再返回给HAP-S1。配置文件的写法可以如下:

        server {
                listen 80;
                server_name opml.radiotime.com;
                location / {
                        proxy_set_header Accept-Encoding "";
                        proxy_pass  http://104.27.158.95;
                        proxy_set_header Host opml.radiotime.com;
                        subs_filter_types *;
                        subs_filter 'https' 'http';
                }
        }

接下来就是要让HAP-S1访问我们的中间人nginx,而不是原始的TuneIn服务器。我的做法是在路由器的dnsmasq设置中把TuneIn服务器域名opml.radiotime.com指定到局域网内的nginx服务器地址192.168.2.2

重启下HAP-S1以刷新DNS缓存,再次尝试播放Radio Swiss Pop,熟悉的音乐终于回来了

尝试彻底解决https问题

中间人攻击替换内容的方法终究只是旁门左道,彻底解决的话还是得ssh进去找到不支持https的原因。于是就有了以下的尝试。

nmap端口扫描,发现HAP-S1只开启了445,139端口用于samba协议共享音乐文件,60100,60300,604000端口用于API通信。服务器程序用的是lighttpd。网上找到几个samba和lighttpd的已知漏洞Poc,但都没有用。又找到索尼的开源源码公布网站,https://oss.sony.net/Products/Linux/Audio/HAP-S1.html,发现HAP-S1使用了samba 3.0.37和lighttpd 1.4.35,这两个版本都在已知的漏洞影响之外,想通过已知漏洞打开ssh的方法应该是行不通了。索尼的开源工作做得不错,使用了的开源软件都会把源码再次公开,国内还没见一家企业严格遵守开源协议公开源码的。可以看到HAP-S1的固件基于OpenWrt,网站上甚至还给出了自己编译固件的方法步骤

又找到了HAP-S1的维修手册Service Manual:https://www.manualslib.com/manual/893329/Sony-Hap-S1.html里面详尽地写明了拆解步骤,电路原理图,可以看到主板SoC使用了NXP的一颗Arm A9芯片MCIMX6D5EYM10AD,双核1GHz。在手册电路图里还看到了一个UART通讯接口,那拆开应该能接TTL适配器进shell吧?

于是二话不说拆开,有UART接口的通讯板就在前面板后面,用万用表测量了下,VCC,RX都正常的3.3V,TX却只有0.2V。WTK,燃起的希望又被马上浇灭了,难道索尼故意的吗,不让自己调试?鉴于自己糟糕的手艺和索尼复杂的内部工艺设计,我就没继续拆主板了,搞坏了就得不偿失。

另抓包找到HAP-S1的最新固件地址:http://hav.update.sony.net/HAP/PRD/1G/CN/10000201_4bcc0000.bin,加密了的

至此,放弃