作者:SamCurry
翻译:云驰未来咨询服务部
汽车智能化、网联化打破了汽车控制系统原有的封闭生态,“数据驱动、软件定义”的发展趋势极大地扩展了汽车的安全边界。
信息安全是汽车智能化、网联化的前提。智能汽车在实现更加智能的出行体验时,也将不可避免地面临网络安全和数据安全的问题。
当汽车越来越智能,我们应该将更多的注意力放在信息安全上。要实现人与车的安全和谐相处,就必须先为汽车的进化构建一条零妥协的信息安全防线。
事件综述
本文最先由YugaLabs安全研究员SamCurry公开在Twitter上(目前现代已修复该漏洞),完整讲述了通过手机APP解锁连接电子邮件地址的车辆,远程控制车锁、发动机、喇叭、车灯、后备箱等,为我们展示了汽车智能网联化的B面。
当下,越来越多车企推出的远程控制功能,通过手机APP远程控制车机,开关空调、锁门等,在我们享受便捷性的同时,汽车被远程操纵的安全危险一直存在。
安全无小事,行业应该重视此类信息安全事件,引以为鉴,尽快与专业的智能汽车信息安全公司合作,为汽车构建纵深防御信息安全体系。
云驰建议
1.在一些电子邮件注册、手机号码注册等场景中,需要采用二次确认等双重认证方式,降低信息泄露或授权攻击发生的可能性。
2.敏感信息传输过程中使用非对称加密对数据包字段进行加密,并对令牌等信息添加时间戳等验证机制。
3.对JWT等参数做校验时对恶意参数及其各类编码后的恶意参数进行限制,情况允许时采用黑名单+白名单的过滤方式。
4.对目标系统进行适当的威胁分析和风险评估,识别高风险区域,有助于设计并采用合理的安全应对措施。
5.汽车厂商应积极采用静态应用安全测试、软件组成和模糊测试,并部署适当策略启用OTA更新。
事件还原
我们一直在研究车辆云服务的安全问题。之前看到许多研究文章都涉及到对实体钥匙的攻击,却没有针对网站进行过多的研究,所以我们打算针对网站进行深入挖掘,最终收获了一个现代汽车的漏洞,可以通过这个漏洞远程控制汽车的车锁、发动机、喇叭、车灯、后备箱等。
我们下载了现代的手机app,研究后发现它能够允许用户启动/停止/锁定/解锁车辆。为了在真实场景下研究该app,我们找了一辆现代,通过BurpSuite抓取所有流量包,并查看它实际的API调用。
以下是正常解锁汽车时简化后的HTTP请求:
POST/ac/v2/rcs/rdo/unlockHTTP/1.1
Access_token:token
{"userName":"EMAIL","vin":"VIN"}
“Access_token”头是我们通过电子邮件/密码在app中进行身份验证生成的JWT。
正常情况下服务器可以通过JWT中的会话令牌来识别电子邮件地址,不需要在正文中另外发送,但是这里post请求的JSON正文中又重新发送了电子邮件,很明显该服务后端处理JSON电子邮件的方式和传统方式是有所区别的,那么具体过程是怎么样的呢?
我们将电子邮件参数修改为JWT电子邮件之外的参数时,服务器就会回复“未经授权”,这说明服务器会将我们在JSON正文中发送的电子邮件与从JWT中解析出的电子邮件地址进行校验,也就是说如果可以绕过该校验,那么我们理论上就可以解锁汽车并执行任意操作。也就是需要让服务器从我们输入的两个参数中解析出一个有效的受害者电子邮件。
在不断的测试中我们发现服务器不要求用户确认他们的电子邮件地址,并且还有一个非常宽松的正则表达式来匹配电子邮件地址,它并不限制一些其他字符的输入,也就是说我们可以尝试进行模糊用户帐户注册。
在反复的尝试之后,我们在一个已经存在的账户电子邮件地址的末尾添加了一个CRLF字符,成功创建了一个绕过JWT和电子邮件地址校验的帐户。
这里采用了CRLF注入的攻击方式。
在HTTP头的规范中是以CRLF表示一行的结束,无论是请求头还是响应头,末尾都会有一个\r\n。
在拼接