小编说:特斯拉汽车一直受到黑客的关注,很多安全研究人员都尝试过挖掘特斯拉汽车的漏洞,主要原因是特斯拉是纯电动汽车并且有网络连接,可以通过网络对汽车进行控制,而且特斯拉本身也非常依赖电子控制系统。本文就来分析特斯拉已经出现过的问题。此漏洞已经修复,本文只是为了让读者了解漏洞原理以便应用到工作中,使汽车变得更安全。 本文选自《智能汽车安全攻防大揭秘》一书
一直以来特斯拉被认为比其他具有网络连接功能的汽车更安全,可以作为联网汽车的楷模,尽管特斯拉时不时被爆出一些小BUG。例如,2015年8月的黑客大会DEFCON上,安全研究人员Marc Rogers和Kevin Mahaffey分享了他们对特斯拉Model S的研究成果,他们在研究过程中找到了6个问题,通过这些小BUG可以以物理入侵(不是远程入侵)的方式控制汽车。接下来,我们就介绍他们这项研究的过程。
- 系统架构
图1所示为特斯拉Model S的信息娱乐系统架构。
图1 特斯拉Model S信息娱乐系统架构(图片来源lookout.com)
Model S的娱乐及信息系统和控制器CAN网络是隔离的,娱乐信息系统的各个模块之间通过一个局域网进行通信,而汽车的各个控制器(如动力刹车等)通过CAN通信,娱乐系统与CAN之间通过网关连接。
首先来看看Model S信息娱乐系统的几个模块,分别是仪表板、中央信息显示和网关,其中仪表板和中央信息显示两个模块都运行版本比较老的Ubuntu操作系统,网关运行开源的实时操作系统FreeRTOS。
(1)仪表系统又叫仪表盘IC(Instrument Cluster),是位于方向盘正前方的一个8英寸的屏幕,运行Ubuntu Linux操作系统,处理器是NVIDIA Tegra3,如图2所示。
图2 被拆下来的仪表
(2)中央信息显示模块CID(Central Information Display),就是汽车中央的17英寸大屏,运行Ubuntu Linux操作系统,处理器是NVIDIA Tegra4,如图3和图4所示。
图3 CID 内部
图4 CID背面
(3)网关(Gateway):连接信息娱乐系统与控制器网络,与CID集成在一起,运行FreeRTOS操作系统。图5所示为Model S整个网络的架构。
图5 Model S的网络架构
这种将汽车的控制器网络与娱乐信息系统进行隔离的网络架构是非常优秀的设计,因为娱乐信息系统有丰富的网络连接,当黑客入侵娱乐系统后还需要通过网关才能控制汽车的关键部件[例如,行驶安全相关的部件(如电动转向、电子刹车等)]。
- 信息收集
首先对系统进行分析,找出可能的攻击向量,然后再研究特定的攻击向量,首先是物理攻击向量。通过分析找到了如下可能的物理攻击向量。
(1)CID有两张可插拔的存储卡。
(2)CID有一个USB接口。
(3)一个4针的以太网接口。
(4)各种测试点和调试诊断接口。
然后对找到的物理攻击向量与其他攻击向量进行测试,测试结果如下。
浏览器:不仅CID运行的操作系统是老版本的Ubuntu系统,其运行的浏览器也是比较老的版本,浏览器基于WebKit 534.34,这个版本的浏览器引擎有几个比较知名的漏洞。通过这些漏洞可以让浏览器崩溃但是没有实现代码执行。
蓝牙:没有找到漏洞。
USB:可以通过CID的USB接口让CID重启进入NVIDA Tegra的Recovery模式,但是bootloader是通过密码保护的,所以没有办法通过这种方式提取固件。
存储卡:其中一张存储卡上有一个名叫carkeys.tar的文件,其中包含了这辆Model S的OpenVPN认证信息,也就是一个X509标准证书、一个RSA私钥和一个OpenVPN静态密钥,这些相当于车钥匙,所以未来汽车的钥匙可能都是基于密码算法的,如图6所示。
图6 carkeys文件解压结果
另外一张卡存储了地图数据和一个以root权限运行的脚本。
Wi-Fi:将Model S连入Wi-Fi后并没有发现开放的端口,但是当Model S连上Wi-Fi后首先会通过向一些服务器发起http请求确定网络连通性,在确定网络连通性后尝试通过OpenVPN连接特斯拉服务器(地址是vpn.vn.teslamotors.com)。由于OpenVPN配置正确,不能进行中间人攻击。图7所示为特斯拉VPN的配置。
图7 特斯拉VPN的配置
特斯拉的OpenVPN使用UDP协议,并启用了tls-auth,这就是CarKey.tar中包含的那个静态密钥的用处,即用于对数据包加入HMAC(Keyed-Hashing for Message Authentication)用于消息认证、用于防止DoS攻击、端口扫描、未授权的SSL/TLS握手和初始化等。
因为特斯拉服务器与汽车的证书链都是由同一个根证书机构签发的,所以如果配置得不好可能出现漏洞,图8所示为特斯拉的证书链。
图8 特斯拉的证书链
特斯拉有一个根证书认证机构(root CA),根证书机构下面链接了一个Policy CA(策略证书认证机构,这个机构自己的证书由root CA签发),然后Policy CA还签发了一个Issuing CA(签发CA),最后这个CA被用于签发服务器的证书和汽车的证书(汽车的证书是用于服务器验证汽车的),由于服务器和客户端都由同一个CA签发,如果对证书的认证只检查证书的签发CA就会出现安全问题。x509v3EKU(Extended Key Usage是个扩展标准,指定了公钥用途)中规定了一个证书中的公钥的用途,也就是说,一个证书只能被用于特定的目的,比如VPN服务器的证书就只能用于服务器认证,而CarKey的证书只能被用于客户端认证。OpenVPN中可以设定是否要对EKU中指定的密钥用途进行验证,所以我们的问题是万一特斯拉汽车配置OpenVPN时没有开启这个对公钥(比如CarKey.tar里包含的和VPN服务器传来的证书里包含的公钥)的用途验证呢?所以如果搞个假的服务器FauxpenVPN(记住我们说过要中间攻击),当这辆车和我们的冒牌FauxpenVPN通信时,它向FauxpenVPN发送hello,这时冒牌服务器就把汽车CarKey.tar里那个证书返回给车,如图9所示。
图9 假想的利用客户端证书伪造成服务端证书攻击场景
CarKey里的证书和真的VPN服务器的证书的认证链相同,如果特斯拉在配置OpenVPN服务时没有检查前面说的EKU证书用途(因为我们发给服务器的是从汽车中名为CarKey.tar的文件中提取出来的证书,而这个证书是用于客户端认证的证书),那么汽车会信任FauxpenVPN,就可以进行中间人攻击了,如图10所示。
图10 利用客户端证书伪造服务器示意图
由于Model S验证了服务器EKU,所以并不能用CarKey.tar里的证书(用于客户端认证的)来伪造服务器(因为需要用于服务端认证的证书)与汽车交互。如果能找到一个由Issuing CA签发的证书而且这个证书的EKU指定用途为服务端认证,就可以伪造一个VPN服务器进行中间人攻击。
以太网接口:如图11所示,以太网接口先是由一个特斯拉车主发现并发布在特斯拉车主论坛,在这之前大家都觉得这个接口比较奇怪,因为它和常规的以太网接口不同。
图11 Model S的以太网接口及导线
通过这个接口可以与汽车的娱乐信息系统网络通信,接入信息娱乐系统网络后使用Nmap等工具对内网扫描就可以发现3个设备,一个是CID、一个是IC、另一个是网关。这三个设备发送了大量(约1000个包每秒)的UDP广播包(目的地址192.168.90.255),根据数据类型的不同使用不同的端口,这就与CAN总线的机制非常类似,网络上每个节点将数据广播到网络上,需要数据的节点就接收需要的数据,猜测这里的端口号类似于CAN的消息ID。通过扫描还发现了一些开放的端口及对应的服务,如表1所示。
表1 娱乐信息系统的扫描结果
扫描到的服务中有两个是已经被爆出有漏洞的老版本,分别是DNS Proxy: runs dnsmasq 2.58和HTTP Service: mini_httpd 1.19。
另外,如扫描结果显示的那样,CID和IC都运行了X11服务器,并且没有任何认证,因此可以随意更改显示内容,如图12所示。
图12 通过没有认证的X11服务更改仪表板和中控屏的显示(来源lookout.com)
最后,他们还找到了分别运行于IC和CID上的两个程序ic-updater和cid-updater,从字面意思理解这两个程序分别为IC和CID的升级程序,功能是获取诊断信息、上传文件或者固件,这两个程序的大部分命令都有认证保护,但是其中也有些没有,例如‘status’,这两个程序在输入‘status’状态命令时会打印出许多信息娱乐系统的关键信息,属于信息泄露漏洞,图13所示为ic-updater status显示出的信息。
图13 仪表板IC升级工具打印出的固件VRL信息
事实上,后面整个研究的突破点就是这个漏洞导致的,通过这个漏洞打印出来的信息里给出了下载固件的URL。
- 测试中遇到的挫折
正当Marc Rogers进行研究时,其他研究人员找到了那个以太网接口,特斯拉通过远程升级将这个端口加入了认证机制,原本接上网线就可以与内网进行通信,现在却不行了,但是由于知道IC和CID都在内网上,所以可以通过直接将网线接到CID或者IC的以太网接口接入内网,如图14所示。
图14 直接将网线接入CID
- 测试中的突破
通过cid-updater服务的status状态命令打印出来的信息里包含了一个比较特别的URL:firmware_download_url=hxxp://firmware-bundles.vn.teslamotors.com:4567/…,其字面意思是下载固件的URL。由于之前尝试对OpenVPN进行中间人攻击时已经弄清楚了特斯拉的OpenVPN配置,并且已经从存储卡里的CarKeys.tar文件中找到了特斯拉客户端的证书及密钥,所以可以与特斯拉的服务建立VPN连接来下载固件。下载下来的固件约600多兆,是一个SquashFS文件系统,解压后尝试寻找私钥和Shadow文件(Linux系统里存储用户名和密码哈希等相关信息的文件),结果找到了IC的Shadow文件。下一步就是尝试破解这个Shadow文件获得密码(如彩虹表、字典、暴力破解等方法),特斯拉设置的这个密码是弱密码,很容易就被破解。实际上,通过Shadow文件破解出来的好几个账号都是弱密码。有了秘密码和账号后就可以通过SSH接入IC,而且被破密码的账号是sudoer的(虽然不是root,但是可以通过sudo以root权限执行命令),就这样取得了IC的root权限,如图15所示。
图15 root权限接入IC
IC的root权限已经搞定了,下一步要搞定CID的root权限,由于没有CID的shadow文件,所以只有继续分析固件,通过分析固件发现CID每隔24小时就会从一个名为mothership的服务器获取一个安全令牌(Security Token),然后将一个名为tesla1的账号的密码设为这个安全令牌。CID还会将安全令牌发给IC,IC则将安全令牌明文存储。通过在IC的文件系统中找到这个安全令牌可以登录CID上的tesla1账号,而且这个tesla1账号也是一个sudoer,就这样,IC和CID的root权限都被搞定了。
另外,前面提到的以太网结果被加入认证机制后其实认证也用到了这个token,网关(这里是指以太网接口与信息娱乐网络之间负责认证的“网关”)每隔30秒会对通过这个以太网接口对接入信息娱乐网络的设备进行认证,认证方式是由需要接入网络的设备根据token、VIN,以及一个salt计算一个哈希值以广播的方式发送出去,图16所示为自动认证代码。
图16 以太网接口自动认证代码
- 控制汽车
获得了IC和CID的root权限后,下一步再来看看如何控制汽车,Model S的内网数据传输率较高,每秒约500~1000个UDP报文包,搞清楚哪些数据包包含的是控制数据比较困难,所以通过分析程序判断哪些数据是通过手机应用或者CID上面的按钮进行操作才出现的数据可以快速弄清楚哪些数据控制哪些功能。在弄清楚控制某些功能的数据后还要弄清楚是哪个服务发送了这些数据,由于是通过CID的触摸屏来控制的,所以在CID上使用strace系统调用监控命令来分析是哪个服务发送了这些数据,结果发现是一个名为QtCarVehicle的服务发送了那些控制数据包。
QtCarVehicle包含一个叫Gateway Message Sender的类,用于通过网关发送消息的类,然后就是执行这个类的各种功能的方法。到这一步就可以通过调用这个服务来执行预设功能了。
值得注意的是,经过逆向分析还发现Model S并不会直接通过信息娱乐系统发送CAN原始数据包控制汽车,而是采用了API调用的方式,即CID通过功能调用接口请求网关执行某个功能的操作,这些功能操作都是预先定义好的允许执行的操作。
娱乐系统通过功能接口请求网关执行特定操作的设计非常重要(这里指CID通过API请求网关),这种设计可以保障在信息娱乐系统被黑客攻陷后,不能直接往CAN总线发送原始CAN数据,只能执行预先设置好的“允许”的功能。当然,这是在网关没有被攻破(例如,Jeep案例中,攻击者将被修改后的固件刷入V850后)的前提下。
经过测试发现了一系列的预设功能调用,其中影响最大的可能就是关闭汽车(VAPIPoweroff)这个功能,当汽车以低于5迈的速度行驶时,调用这个功能会使汽车突然刹车并停下来,而在高于5迈时调用这个功能则会使汽车不能加速,但是刹车和转向都受驾驶员正常控制。其他可以通过CID的触摸屏控制的功能也都可以被控制。
为了实现远程控制,在CID与一个控制服务器之间建立一个SSH隧道连接,然后就可以利用之前找到的token通过SSH接入CID,如图17所示。
图17 接入CID
接入CID后调用QtCarVehicle服务提供的功能可以控制汽车的一些功能,例如关闭电源,如图18所示。
图18 执行关闭电源脚本
还可以控制如下功能。
(1)关闭汽车。
(2)启动汽车。
(3)开关门。
(4)开关天窗。
(5)开关前后行李箱。
(6)控制大灯。
(7)控制减震器。
(8)控制空调。
(9)鸣笛。
- 小结
图19所示为整个研究过程的总结图。
图19 整个研究过程的流程图
1 . 特斯拉做得比较好的地方
(1)远程升级:当出现安全漏洞时,特斯拉只需要远程推送补丁即可,不需要召回或者向Jeep Uconnect漏洞那样需要寄送U盘。
(2)VPN配置正确:特斯拉使用的VPN配置正确,不会有常见的(如中间人攻击等因为配置缺陷而造成的)漏洞。
(3)账号密钥更新及时:特斯拉的密钥每隔24小时就更新一次。
(4)控制器网络与信息娱乐系统的隔离:Model S在汽车的控制器网络(CAN)与信息娱乐系统之间采用网关进行隔离,并且网关只允许预设的功能调用。
2 . 需要改进的地方
(1)Wi-Fi静态密码:特斯拉服务中心名为Tesla Service的Wi-Fi(特斯拉会自动连接Wi-Fi)采用了汽车之间共享的静态密码,最好能改为WPA企业认证,这样就不用在汽车之间采用相同的静态密钥。
(2)边界安全模型:Model S具有非常强的边界安全,但是内网的安全性不高,设计者应该假设攻击者可以获得信息娱乐系统网络,虽然进入网络并不能造成太大影响。
(3)明文存储认证信息:VPN密钥和安全令牌都以明文的方式存储在文件系统中,如果将这些关键信息存储在硬件安全模块(如TPM,Trusted Platform Module)中会更安全。
(4)信息娱乐系统网络上的节点间通信没有加密,并且有些还没有认证:网络上的节点间通信没有加密,所以攻击者可以分析网络上的所有流量。另外,只有少部分服务采用了认证机制。如果要实现节点级别的安全,那么网络上所有的节点绝对不能对网络有任何信任,任何节点间的通信都应该经过加密和认证。
注:本文涉及漏洞均已修复。