安全存重大漏洞,日产关闭聆风NissanConnect服务

  • 发表于: 2016/02/26 10:40:00 来源:车云网

澳洲的安全研究员Troy Hunt发现了日产聆风手机App存在漏洞,本周三,日产在全球停止了这项服务。

半年前克莱斯勒被黑事件之后,汽车界对于联网安全这件事情也开始前所未有地关注起来。这个关注表现在很多方面,比如到技术供应商那儿去寻找解决方案,比如安全产品类公司受到更多关注,咨询公司接受到的相关咨询也有所增加。

不过,半年时间还是太短,此前遗留的问题似乎是在等着一个个被发现。

日产聆风的NissanConnect服务,就被澳大利亚的一名安全研究员Troy Hunt发现了一个漏洞所在,然后与另外一名来自英国的安全研究员Scott Helme进行了验证。这周二,Hunt在发现漏洞一个月之后,将其公开。周三,日产在全球停止了NissanConnect服务。不过,在其停止服务两个小时后,有来自加拿大的车主表示这项漏洞依然存在。

今儿车云菌就根据Hunt的记录与描述,给大家讲讲这个漏洞的故事。

BUG是肿么被发现的?

故事要从Hunt在挪威开的一个学习班开始说起。今年一月,Hunt在挪威开了个学习班,指导一些开发者们如何发现App中存在的问题。赶巧了,其中一位就是聆风的车主。因为这位同学要求匿名,Hunt就管他叫Jan。

白天上完课之后,Jan回家自己练习的时候,就把手机连上电脑(此处使用工具Fiddler)来做功课。然后他选择了聆风的手机App,叫做Carwings。

△截图来自网络(Jan的App为挪威语,且带有其个人信息)

从这个App界面能够看出,Carwings能够查看到车辆的基本信息,包括预测的剩余可行驶里程、电池充电状态,充满电所需时间等。在后面的两个图标中,则分别是充电与空调控制相关。空调界面,可以远程控制空调的开启,并设定时间。空调右边的图标则是与车辆信息相关,可以查看到一些历史驾驶习惯信息等。

第一次,Jan发送了一条命令:

GET https://[redacted].com/orchestration_1111/gdc/BatteryStatusRecordsRequest.php?RegionCode=NE&lg=no-NO&DCMID=&VIN=SJNFAAZE0U60XXXXX&tz=Europe/Paris&TimeFrom=2014-09-27T09:15:21

上述命令的Host名称被Hunt替换了。得到的回复如下:

从回复到的内容中能够看到车辆的电池状态。但是这些状态并不是吸引Jan注意的重点,而在于他发送的请求命令中,并没有包含任何验证信息,而是仅仅通过一个包含VIN码的「GET」命令,就拿到了。(上面命令S开头的一串代码,最后五位数被Hunt用X取代)

VIN码虽然每辆车是唯一的,但是VIN码并不算秘密,在车身上就能够找到,还不足以成为一个App上的验证信息。

但是,电池状态这个东西,也不能算信息泄露,毕竟拿到了这个状态也不能对车辆做什么。第二次,Jan更改了他发送的命令,如下:

GET https://[redacted].com/orchestration_1111/gdc/RemoteACRecordsRequest.php?RegionCode=NE&lg=no-NO&DCMID=&VIN=SJNFAAZE0U60XXXXX

这次能看到,是一个远程查看空调的状态。同样收到回复信息,但也只是一个被动的状态。

第三次,Jan发出的命令是远程打开空调。

GET https://[redacted].com/orchestration_1111/gdc/ACRemoteRequest.php?RegionCode=NE&lg=no-NO&DCMID=&VIN=SJNFAAZE0U60XXXXX&tz=Europe/Paris

然后他就成功了!

△打开空调命令返回信息,包含用户ID以及VIN码

在回复的内容中,不仅告诉命令发送者空调已经被打开,其中还有Jan的个人信息,包括用户名(因为是Jan真实名字稍微变化得到,所以盖住),VIN码也随之返回。

之后,Jan用浏览器又试验了一次,结果完全一样。在所有的命令中,都没有身份认证信息,均是匿名发送。

试验进行到这里,可以得到的结论是,这个App中没有身份验证这个阶段,但是这个漏洞是否能够被复制,比如对VIN码知道得不确切的情况下,即别人的车,是不是能够控制尚不清楚。

漏洞复现

第二天Jan去学习班的时候,就给Hunt带了一张另外一辆车的VIN码照片。除了最后五位之外,前面与Jan的车完全一样。

△图片来自网络,Hunt将最后五位遮住

Hunt认为要证明这是一个漏洞,那么就必须能够在其他车辆上复现。但是这个过程中,也不能够去破解其他人的车辆,去侵犯别人的隐私权。所以,Hunt与Jan只是将上述VIN码发送了一个电池状态的命令,只会回复电池状态信息。

不过,他们的请求被驳回了。

△请求被驳回

从上图看,只提到了TCUID不对,但并不能知道被驳回的确切原因。或许是因为VIN码并没有Jan的App绑定,或许是因为命令中的某些参数无效需要变更,比如Regioncode这一栏,这辆车的所在地他们并不确定。

但是VIN码的最大漏洞之一就是能够穷举。因为只有最后五位数不同,所以Hunt选择Burp Suite这个工具来进行穷举并发送命令。Hunt在Jan与这位不知名车主最后五位都在的号段选择了两万个数据,随机取整。这样可以逐个发出命令,不过并不需要所有都实现,只要其中有车辆回复信息就可以了。Burp可以列出收到信息的内容大小,下图中Request 0是Jan的车,回复了631个字节,其他回复都是288个字节。直到他们发现了另外一个。

△利用Burp工具进行穷举并发送命令

△其中一辆车的回复

如果电池状态能够获得,那么只要更换请求内容,同样可以打开空调并得知用户ID信息。而唯一需要的VIN码要么去人家底盘上看,要么可以根据VIN码的命名规则进行穷举。当然,穷举并不限于最后五位,也可以是更多,只不过花的时间不一样而已。

于是,Hunt将这个漏洞上报给了日产。

与日产的交涉

不过,日产开始并没有搭理。单从这个漏洞本身来看,泄露的信息只是App上的一个用户名,也不知道密码,能够做的事情,也只是打开车辆的空调而已。似乎并不会造成多大威胁。

在Hunt上报这个问题一个月之后,他收到了一个来自加拿大的邮件,名字叫做「奇怪的日产API」。邮件里这位同学在看到Hunt发布在Vtech上的文章之后,有了同样的发现,能够靠VIN码和GET命令就反控车辆。他们发现的内容与Jan一样。

Hunt从邮件中发现,他们在论坛上讨论这个问题,因为并不止一个人发现,很多人都发现了这个问题。

唯一不一样的,是请求命令中的些许不同,而这个不同似乎是与地域有些关系的。

到了这个时候,Hunt发现,如果要引起日产的足够重视,那么只有让日产意识到这个漏洞的重要性才行。于是,Hunt想到了他的好朋友Scott Helme。正巧他也是一位安全领域专家,还有一辆聆风,更妙的是,Hunt在澳洲,而Scott在英国。相隔如此之远。

这就是两位的复现视频了。为了证明他们确实不在一起,Hunt还特意挑了个阳光明媚的日子,而英国则是一如以往地阴天。

与之前的试验不同的是,他们这次尝试了驾驶历史记录这个命令。从视频中可以看到,返回了很长一串信息,详细列出了这辆车每一段旅程,开了多远、开了多久、什么时候开始的。

由此可以知道这个漏洞所能够带来的危害有二:

1.远程控制功能。幸运的是,Carwings并不像其他车辆的远程控制程序,能够解锁车辆或者远程启动,只能开启空调。但是对于电动车来说,依然存在一个风险可能。就是在车主不知道的情况下,让空调一直保持开启,可以耗干电池。然后车就只能趴窝了。

2.获取信息。电池状态或者空调状态这类信息并不算隐私,但是驾驶历史记录、App的个人ID,以及VIN码却都是。尤其VIN码这个东西,据Hunt表示,在澳洲和挪威,都有人提供一项服务:利用VIN码来获取地址信息等。

唯一幸运的是,在不同的地域,API设置都不太一样,发送的URL也有所区别,并不是全球通用。

当然,要关闭这项漏洞也是可以的。只需要登录日产的网站,就可以关闭这项功能。

鉴于已经有很多人在公共论坛讨论这个事情,而Hunt与Scott又再次复现这个漏洞。于是,Hunt告诉日产,你看事情已经到这个地步了,我只能公开我的发现了。

Hunt还记录了在得知这个漏洞之后,与日产交涉的时间线:

时间线:(澳洲东部时间)

1.1月23日,发现所有漏洞信息,并提交给了日产美国的信息安全部门。

2.1月30日,致电日产详细解释是如何发现这个漏洞的,并发送邮件进一步说明。

3.2月12日,邮件询问进度,并提了一些建议,如何去改进。

4.2月20日,告知加拿大车主的事情,并将他们在共同论坛讨论的事情附上链接,并告知日产,我下周会将这个事情公布。

5.2月24日,公布漏洞。

Hunt总共发了10封邮件(有来有回),并打了一次电话。在24号早上,Hunt收到了日产的回复,希望他能够延迟几周发布。但是Hunt考虑到在一个公共论坛上,大家从去年就开始讨论了,而且之前也已经过了1个月,于是表示将会当天发布,然后就没有收到回信。期间,Hunt表示,如果日产有什么想说的,他也会发到文章当中,比如,他们如何看待这个漏洞的。但是没有收到任何回复。

虽然日产处理漏洞的速度并不快,但是Hunt依然表扬了下日产,认为前期的提交bug过程很顺利。能够很方便地找到对应的负责人,他们也愿意仔细了解问题所在。与Hunt接触过的其他一些公司相比,日产的态度还是很积极的。

当然,现在让Hunt感兴趣的问题是,为什么日产关闭了这个服务,加拿大的车主依然可以从浏览器上用相同的命令获得信息。当然,App是已经不能用了。

车云小结

关于这个漏洞,暂时的信息就到底为止了。对于具体的操作过程十分感兴趣的可以去Hunt的博客上看。Hunt会将后续内容持续更新在这篇博文上。车云菌在会在事情有了新的进展之后,跟踪报道。

虽然目前日产官方并没有对这个漏洞说明太多,只在关闭服务的公告中提到,因为能够远程控制空调而造成此次漏洞存在,为了修复,只能关闭服务。

或许此前日产的不行动也是源于此,毕竟作为OEM来说,还是不太希望主动公布这类消息,如果能够悄摸地就把BUG改掉自然是最好不过了。

但是联网汽车在给使用者带来方便的时候,也就给制造商们带来了这个「麻烦」:互联网的信息共享不仅表现在车主能够享受到的服务之上,在漏洞与问题上同样存在。

相关标签:
信息安全
日产
车联网
黑客攻防战
  • 车云星
  • 空间站
  • 福特星球
  • 虫洞

加料 /

人评论 | 人参与 登录
查看更多评论