黑客攻击汽车MCU的JTAG调试接口的防御方法
对于汽车MCU的调试,JTAG接口调试是不可或缺的开发工具。通过JTAG调试接口,可以监视MCU的运行状态,修改和查看寄存器的数值,监测内存中的数据变化,并且通过调试器、IDE等开发工具,可以方便的排查问题。但是很多产品出厂后,并没有关闭JTAG调试接口,导致黑客可以很方便的利用各种黑客工具读写设备的固件,逆向固件代码获取代码逻辑,注入恶意代码后,控制汽车以致对车主造成严重的人身安全或财产安全。
针对JTAG调试接口的安全性问题,一般有如下几种解决方案:
1. 永久关闭JTAG调试接口
对很多高度安全敏感的产品,工厂会选择在生产过程的最后一步,通过熔断OTP(One Time Programmable) Fuse (保险丝)的方式, 将调试接口永远禁掉。产品出厂后,调试接口已被封死,简单粗暴的解决调试接口带来的安全风险。
2. Secure Debug安全调试
由于永久封死JTAG调试接口同时也禁止掉了重要的排查手段,产品在客户现场或者再出现问题时,难以定位,从而令售后维护工作很难开展。Secure Debug安全调试方法通过给调试接口加锁的方式,既保留JTAG的调试功能又防止黑客随意调试,成为了一种比较简单有效的安全方案。大致流程如下:
- 产品生产过程中,”解锁密码“会提前烧录到芯片的OTP内,然后将调试功能“上锁”,此时调试功能是不可用的。
- 当需要调试芯片时,芯片会通过JTAG接口发送UUID,这时调试主机根据UUID发送相应的解锁密码,若解锁密码与芯片中预存的密码一致,芯片将会解锁并开放调试功能
3. Debug Authentication认证锁
当前,MCU的功能越来越丰富,出现了多核MCU,其中每个核可能还支持Trustzone技术。这样就给调试的安全性提出了更多的需求,不仅需要调试锁来控制JTAG功能的开启与关闭,还需要提供更细粒度的权限管理,比如基于角色的访问控制。
为了满足灵活的调试权限管理要求,Debug Authentication利用非对称密钥体制授予不同的角色不同的权限,即为不同的人员颁发不同的证书,通过证书可以鉴别使用人员的身份和访问权限。在调试认证时,芯片会发送challenge-response报文,然后将response中的证书信息与芯片中预置的信息进行匹配,当验证合法后,再验证response中的签名,若证书与签名都验证通过,且请求的调试权限符合芯片的设置,芯片即会开放相应的权限。
一般来说,Debug Authentication认证锁机制比较复杂,通常采用Secure Debug方式或直接在高安全敏感场景使用永久封闭的方法即可。
