/ 安全研究

大众奥迪车载娱乐系统漏洞技术分析

本文译自:Computest: The Connected Car

研究目标

该研究主要关注于可以通过互联网远程触发的攻击面,然后利用该攻击面,去影响驾驶行为和其他安全相关的组件,这也意味着我们可以获得访问高速动力CAN总线的权限。

Car Network

研究方案

该研究主要关注的汽车技术方案有以下特点:

  • 蜂窝网络和高速总线之间连接的结构相对简单;
  • SIM卡可轻易被替换;
  • 汽车通过Wi-Fi或蜂窝网络提供大量的服务。

选取了大众高尔夫GTE和奥迪A3纯电版作为研究对象,两辆车使用了相同的车载娱乐系统(IVI),看上去攻击面也更广,发现漏洞利用的可能性也更大。

inside golf

研究成果

1. 入口

mib main unit

大众高尔夫GTE装有Harman的车载娱乐系统模块(Modular Infotainment Platform, MIB),通过Wi-Fi连接后用nmap扫描发现开启了大量端口,其中有个telnet服务,但密码使用的是8位随机字母,目前无法进入;其他端口是GPS、FM等功能调试接口。

$ nmap -sV -vvv -oA gte -Pn -p- 192.168.88.253
Starting Nmap 7.31 ( https://nmap.org ) at 2017-01-05 10:34 CET
Host is up, received user-set (0.0061s latency).
Not shown: 65522 closed ports
Reason: 65522 conn-refused
PORT STATE SERVICE REASON VERSION
23/tcp open telnet syn-ack Openwall GNU/*/Linux telnetd
10123/tcp open unknown syn-ack
15001/tcp open unknown syn-ack
21002/tcp open unknown syn-ack
21200/tcp open unknown syn-ack
22111/tcp open tcpwrapped syn-ack
22222/tcp open easyengine? syn-ack
23100/tcp open unknown syn-ack
23101/tcp open unknown syn-ack
25010/tcp open unknown syn-ack
30001/tcp open pago-services1? syn-ack
32111/tcp open unknown syn-ack
49152/tcp open unknown syn-ack
Nmap done: 1 IP address (1 host up) scanned in 259.12 seconds

49152端口是PlutinoSoft Platinum UPnP开源项目的UPnP服务的端口,奥迪A3同样也开启了这个服务,但是我们没有发现这个服务的漏洞。

$ nmap -p- -sV -vvv -oA a3 -Pn 192.168.1.1
Starting Nmap 7.31 ( https://nmap.org ) at 2017-01-04 11:09 CET
Nmap scan report for 192.168.1.1
Host is up, received user-set (0.013s latency).
Not shown: 65533 filtered ports
Reason: 65533 no-responses
PORT STATE SERVICE REASON VERSION
53/tcp open domain syn-ack dnsmasq 2.66
49152/tcp open unknown syn-ack
Nmap done: 1 IP address (1 host up) scanned in 235.22 seconds

后来在高尔夫上发现了一个任意文件读取的漏洞,但是很快的把漏洞拓展成了远程代码执行漏洞,利用这个漏洞需要在车辆附近连接上汽车Wi-Fi热点才能进行利用。

$ ./exploit 192.168.88.253
[+] going to exploit 192.168.88.253
[+] system seems vulnerable...
[+] enjoy your shell:
uname -a
QNX mmx 6.5.0 2014/12/18-14:41:09EST nVidia_Tegra2(T30)_Boards armle

2. MMX

通过漏洞获得权限的是一套基于ARMv7的QNX多媒体系统,是它提供了Wi-Fi热点服务,但是没有用于手机APP的蜂窝网络连接;不过在系统上发现有一个内部网络。

# ifconfig mmx0
mmx0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
address: 00:05:04:03:02:01
media:  autoselect
inet 10.0.0.15 netmask 0xffffff00 broadcast 10.0.0.255
inet6 fe80::205:4ff:fe03:201%mmx0 prefixlen 64 scopeid 0x3

通过扫描,发现内容存在其他存活的设备,那个设备被证明是RCC,同样开启了telnet服务,但是使用的不是和MMX同样的密码;不过深入研究MMX的配置后发现,MMX和RCC使用Qnet(一个QNX专有协议)共用文件系统,MMX和RCC可以互相派生进程和读取文件(例如/etc/shadow),后来发现RCC上的shadow是一个链接,链接到MMX系统上的shadow文件。

# /tmp/telnet 10.0.0.16
Trying 10.0.0.16...
Connected to 10.0.0.16.
Escape character is ‘^]’.
QNX Neutrino (rcc) (ttyp0)
login: root
Password:
	___ _ _ __ __ ___ _____
	/ |_ _ __| (_) | \/ |_ _| _ \
	/ /| | | | |/ _ | | | |\/| || || |_)_/
	/ __ | |_| | (_| | | | | | || || |_) \
	/_/ |_|__,__|\__,_|_| |_| |_|___|_____/
/ > ls –la
total 37812
lrwxrwxrwx 1 root root 17 Jan 01 00:49 HBpersistence -> /mnt/efs-persist/
drwxrwxrwx 2 root root 30 Jan 01 00:00 bin
lrwxrwxrwx 1 root root 29 Jan 01 00:49 config -> /mnt/ifs-root/usr/apps/
config
drwxrwxrwx 2 root root 10 Feb 16 2015 dev
dr-xr-xr-x 2 root root 0 Jan 01 00:49 eso
drwxrwxrwx 2 root root 10 Jan 01 00:00 etc
dr-xr-xr-x 2 root root 0 Jan 01 00:49 hbsystem
lrwxrwxrwx 1 root root 20 Jan 01 00:49 irc -> /mnt/efs-persist/irc
drwxrwxrwx 2 root root 20 Jan 01 00:00 lib
drwxrwxrwx 2 root root 10 Feb 16 2015 mnt
dr-xr-xr-x 1 root root 0 Jan 01 00:37 net
drwxrwxrwx 2 root root 10 Jan 01 00:00 opt
dr-xr-xr-x 2 root root 19353600 Jan 01 00:49 proc
drwxrwxrwx 2 root root 10 Jan 01 00:00 sbin
dr-xr-xr-x 2 root root 0 Jan 01 00:49 scripts
dr-xr-xr-x 2 root root 0 Jan 01 00:49 srv
lrwxrwxrwx 1 root root 10 Feb 16 2015 tmp -> /dev/shmem
drwxr-xr-x 2 root root 10 Jan 01 00:00 usr
dr-xr-xr-x 2 root root 0 Jan 01 00:49 var

3. Car-NET

联网模块没有放在车载娱乐系统上,而是在仪表盘后面有个单独的模块,并且SIM卡是嵌入式的eSIM,没有其他的接口,因此这个模块在不接触车的情况下无法进行攻击。

Car Net Box

4. 奥迪A3

奥迪A3使用了同样的车载娱乐系统,但是版本更高,拥有一个物理SIM卡给奥迪联网功能提供服务;通过Wi-Fi热点进行扫描后,没有得到任何结果,但是通过对SIM卡的公网IP进行扫描,发现了大量开放的端口。

$ nmap -p0- -oA md -Pn -vvv -A 89.200.70.122
Starting Nmap 7.31 ( https://nmap.org ) at 2017-04-03 09:14:54 CET
Host is up, received user-set (0.033s latency).
Not shown: 65517 closed ports
Reason: 65517 conn-refused
PORT STATE SERVICE REASON VERSION
23/tcp open telnet syn-ack Openwall GNU/*/Linux telnetd
10023/tcp open unknown syn-ack
10123/tcp open unknown syn-ack
15298/tcp filtered unknown no-response
21002/tcp open unknown syn-ack
22110/tcp open unknown syn-ack
22111/tcp open tcpwrapped syn-ack
23000/tcp open tcpwrapped syn-ack
23059/tcp open unknown syn-ack
32111/tcp open tcpwrapped syn-ack
35334/tcp filtered unknown no-response
38222/tcp filtered unknown no-response
49152/tcp open unknown syn-ack
49329/tcp filtered unknown no-response
62694/tcp filtered unknown no-response
65389/tcp open tcpwrapped syn-ack
65470/tcp open tcpwrapped syn-ack
65518/tcp open unknown syn-ack
Nmap done: 1 IP address (1 host up) scanned in 464 seconds

大部分服务和高尔夫类似,但是端口不一样,可能奥迪的MIB更老旧,但是我们在高尔夫上利用成功的漏洞在奥迪A3上同样可以利用。只有当汽车开启了奥迪联网服务,并且拥有公网IP时,攻击者才可以成功利用漏洞。

5. Renesas V850 && RCC

RCC单元是MIB上单独的芯片,主要负责底层通讯的模块,通过串口控制DAB+、CAN、AM/FM解码等功能。

chip unit

RCC没有直接连接到总线,通过SPI控制Renesas V850进行总线数据进行操作的。
但是V850的固件本身不支持发送任意的CAN总线消息,只支持有限的总线数据发送,并且Renesas芯片开启了读保护,所以没法轻易的导出固件。

MIB具有软件升级的功能,可以使用SD卡、U盘、CD装载新的固件进行升级,升级的初始化部分在MMX上进行;固件本身使用了RSA进行签名,但是没有加密。MMX对固件完成校验后,直接穿给RCC进行升级,Renesas V850的升级由RCC的mib2_ioc_flash触发;但是普通用户没法轻易获得固件,如果获得了固件可以修改固件添加后门从而发送任意的CAN消息。

6. 网关

gateway

在我们对Renesas V850进行固件篡改后,我们可以发送任意的CAN总线消息到总线上,但是这是车载娱乐系统转能用总线,直接连接到CAN网关,CAN网关作为防火墙,隔离了不同速率、类型的总线。

网关的固件已签名,因此对该芯片加后门将不起作用,这会使得签名无效。此外,只能通过ODB-II诊断口进行固件刷写,不能通过车载娱乐系统的CAN总线刷写固件,如果我们想绕过这个芯片,则需要在固件中找到可利用的漏洞,实现这一目标的第一步就是尝试从芯片上提取固件。 然而在经过仔细考虑之后,我们决定在此停止研究,因为这可能会损害制造商的知识产权并可能违反法律。

7. USB攻击

除了远程攻击之外,我们还发现了USB攻击向量,MMX会去识别USB转网口的USB设备用于debug;

/etc/usblauncher.lua:

-- D-Link DUB-E100 USB Dongles

device(0x2001, 0x3c05) {

    driver”/etc/scripts/extnet.sh -oname=en,lan=0,busnum=$(busno),devnum=$(devno),-

phy_88772=0,phy_check,wait=60,speed=100,duplex=1,ign_remove,path=$(USB_PATH) /lib/dll/

devnp-asix.so /dev/io-net/en0”;

    removal”ifconfig en0 destroy”;

};

device(0x2001, 0x1a02) {

    driver”/etc/scripts/extnet.sh -oname=en,lan=0,busnum=$(busno),devnum=$(devno),-

phy_88772=0,phy_check,wait=60,speed=100,duplex=1,ign_remove,path=$(USB_PATH) /lib/dll/

devnp-asix.so /dev/io-net/en0”;

    removal”ifconfig en0 destroy”;

};

-- SMSC9500

device(0x0424, 0x9500) {

    -- the extnet.sh script does an exec dhcp.client at the bottom, then usblauncher can

slay the dhcp.client when the dongle is removed

    driver”/etc/scripts/extnet.sh -olan=0,busnum=$(busno),devnum=$(devno),path=$(USB_PATH)

/lib/dll/devn-smsc9500.so /dev/io-net/en0”;

    removal”ifconfig en0 destroy”;

};

<!-- -->

-- Germaneers LAN9514

device(0x2721, 0xec00) {

    -- the extnet.sh script does an exec dhcp.client at the bottom, then usblauncher

can slay the dhcp.client when the dongle is removed

    driver”/etc/scripts/extnet.sh -olan=0,busnum=$(busno),devnum=$(devno),path=$(USB_

PATH) /lib/dll/devn-smsc9500.so /dev/io-net/en0”;

    removal”ifconfig en0 destroy”;

};

即使没有USB我们也还有telnet打开着,在这个版本的QNX,密码是8位的大写字母,我们只需花100美元用FPGA去暴力破解密码,不到三天就可以破解出密码。

我们修改了Nexus 5的内核内容,只要把手机插到车载USB口上,它就会被识别成一个网卡,MMX就会进入一个调试界面。

披露过程

在我们发现和验证了漏洞之后,就联系了相应的汽车制造商;为此我们去寻找了相应厂商的Responsible Disclosure Policy(RDP)去了解他们的披露流程,但是大众没有相应的RDP,所以我们通过大众公众举报系统联系了他们的外部律师,并且实名披露了我们发现的东西。

经过2017年7月中旬的初步沟通,我们认为面对面是最好的披露方式,大众邀请我们2017年8月访问他们位于沃尔夫斯堡的IT中心。

大众需要一些时间来调查影响并进行风险评估,最后10月份我们收到了他们的最终结论,他们不会公布自己的声明。

他们于2018年2月初进行评估,并且2018年4月大众汽车向我们提供一封确认漏洞的信件,并提及它们已在车载娱乐系统中更新修复了漏洞,这意味着升级后的汽车不会受到该漏洞的印象;但是根据我们的经验,在这之前生产的汽车不会自动更新,依然受到漏洞的影响。

当发布这篇文章的时候,我们决定只披露部分我们的发现,公布我们的过程和攻击策略,不公布远程漏洞的细节。并且我们也咨询了丰富经验的律师后,以确保我们的方法和行动是合理的,并评估了潜在的法律后果。

总结

在我们的研究中,至少证明了一个可行的利用方案,远程控制车载娱乐系统,从而控制大屏幕、喇叭、麦克风,并且发送任意CAN消息,但是由于CAN网关将车载娱乐系统和其他组件做了隔离,这使得我们并不能直接影响驾驶和其他安全系统。

我们认为具有恶意意图的对手被低估了,最初的漏洞我们是在安全测试中发现的,在我们和大众会议中,我们了解到尽管到车载娱乐系统被用于大众遍布全球的上千万的汽车上,但是它没有通过一个正式的安全测试。然而在他们的反馈里,他们早就知道了这个漏洞。

与行业内的人士交流时,我们的印象是他们的安全的意识和关注度在不断增长,但主要侧重于处于发展阶段的模型,生产刹车等关键部件时,制造商在其保证零部件的质量上已具备高度的成熟度;主要关注于功能安全而非信息安全。

对于大多数零部件制造商来说,远程攻击是一个新的领域,为了有效地解决这个问题,需要在软件开发的生命周期中嵌入安全检测,这是一个多年前在应用程序安全就开始的模式。在具有自动测试、持续部署和发布后快速更新的环境中,这样做更容易。由于法规和生态的原因,这在硬件行业并非总是可行的。它通常需要许多供应商之间的协调。如果我们想保护未来的汽车,这些都是我们必须解决的问题。但是今天或上周上路的汽车呢?他们通常没有所需的能力(比如无线更新),但是在未来的十五年里会继续开在我们走的道路上。我们相信他们会对其车主构成威胁。

由于汽车行业不是传统的软件行业,因此需要关注其他行业并借鉴其安全原则和实践。 以手机为例,汽车行业可以从可信赖执行、隔离和创建生态系统中学习宝贵的经验,实现快速安全补丁。例如,汽车中可远程访问的组件应该能够接收并经过验证后执行安全更新,而无需用户交互。我们知道,在日常运营中组件故障是一个高威胁;我们也明白,联网汽车有其优势,我们也没有试图改变这种趋势;但是,我们不能忽视当今互联网世界中存在的威胁。

建议

1. 厂商

  • 不断增长的联网设备增加的不仅是了巨大的机会,还会伴随着其他我们需要关心的风险。产品的质量问题不仅只存在于机械和材料上,嵌入式软件的安全也同样重要,因此在质量保证方面需要同等重视。
  • 通常来说,从第三方购买组件,并不能撇清制造商对其质量和安全的责任,对于这些组件同样需要进行彻底的质量检验。制造商要对所售产品的质量和安全负责。
  • 即使是最好的质量控制也不能防止错误发生,在这样的事件中,制造商应该对受影响的客户承担责任并迅速和透明地进行沟通和反馈,隐瞒不仅会导致客户的损失,还会影响厂商的声誉。
  • 白帽子不应该被视为威胁,而是帮助发现漏洞,这些人们往往有不同的视角和方法,使他们能够找到很多没被发现的漏洞,这些漏洞的发现对于提高产品的质量非常重要。
  • 每个制造商都应该制定一份责任披露政策(RDP),明确说明外部人员的情况可以在安全的环境中报告发现的漏洞。白帽子不应该受到威胁,并且鼓励向制造商披露调查结果。

2. 消费者

  • 联网汽车主要为消费者带来更多的优势,但这应用技术还处于早期阶段,因此在质量和安全性方面尚未完全成熟。
  • 了解更多信息:询问你想要的汽车用于碰撞测试等的质量和安全标准,具体询问有关远程维护以及制造商对于汽车中软件的支持时长,如果防止被远程攻击威胁,请让您的经销商在正常的服务时间内安装更新。
  • 在可能的情况下,保持软件是最新版本。这不仅适用于汽车,同样适用于所有的物联网设备,如婴儿监视器,智能电视和家庭自动化设备等。

3. 白帽子

  • 发现并披露一个漏洞,不只是白帽子的个人胜利,也是为了实现一个更好的IT系统做出贡献。
  • 如果发现了一个漏洞,在可能对人造成伤害的情况下,不要挖的太深入。
  • 立即通知漏洞的所有者或制造商,不要和媒体或任何其他第三方分享相关信息,寻找责任方的RDP,如果你找不到RDP,请匿名的联系制造商要求这样的政策来保护你的权力。另一种很好的方法是寻找举报政策,以这种方式联系制造商。
  • 要注意的是,从作为工程师的角度来看,看似简单的解决方案,在应用到数十万辆汽车的规模时,可能会完全不同,要有耐心和同理心。
  • 了解研究相关的法律法规是很重要的。不同的国家立法和有限的相关管辖权并不能使这一问题变得容易。记住:即使有不犯罪的意图也不会使违法行为不受惩罚。如果有疑问,请提前咨询法律意见!
大众奥迪车载娱乐系统漏洞技术分析
分享