該研究主要關注于可以通過互聯網遠程觸發的攻擊向量,然后利用該攻擊向量去影響駕駛行為和其他安全相關組件,這意味著我們可以獲得訪問高速動力CAN總線的權限。
關注的汽車類型:
在蜂窩網絡和高速總線之間只存在少數層的;
方便替換SIM卡的;
汽車通過Wi-Fi或蜂窩網絡提供大量服務的。
選取了大眾高爾夫GTE和奧迪A3純電版作為研究對象,看起來兩輛車擁有一樣的車載娛樂系統,具有一個較寬的攻擊面,容易發現可利用的漏洞。
1.入口
大眾高爾夫GTE裝有Harman的車載娛樂系統模塊(Modular Infotainment Platform MIB),通過Wi-Fi連接后用nmap掃描發現大量開啟的端口,其中有個telnel服務,但密碼使用的是8位隨機字母,目前無法進入;其他端口是GPS、FM等功能調試接口。
49152端口是PlutinoSoft Platinum UPnP開源項目的UPnP服務的端口,奧迪A3同樣也開啟了這個服務,但是我們沒有發現這個服務的漏洞。
后來在高爾夫上發現了一個任意文件讀取的漏洞,但是很快的把漏洞拓展成了遠程代碼執行漏洞,利用這個漏洞需要在車輛附近連接上汽車Wi-Fi熱點才能進行利用。
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,沒有其他的接口,因此這個模塊在不接觸車的情況下無法進行攻擊。
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.RCC & Renesas V850
RCC單元是MIB上單獨的芯片,主要負責底層通訊的模塊,通過串口控制DAB+、CAN、AM/FM解碼等功能。
RCC沒有直接連接到總線,通過SPI控制Renesas V850進行總線數據進行操作的。
但是V850的固件本身不支持發送任意的CAN總線消息,只支持有限的總線數據發送,并且Renesas芯片開啟了讀保護,所以沒法輕易的導出固件。
MIB具有軟件升級的功能,可以使用SD卡、U盤、CD裝載新的固件進行升級,升級的初始化部分在MMX上進行;固件本身使用了RSA進行簽名,但是沒有加密。MMX對固件完成校驗后,直接穿給RCC進行升級,Renesas V850的升級由RCC的mib2_ioc_flash觸發;但是普通用戶沒法輕易獲得固件,如果獲得了固件可以修改固件添加后門從而發送任意的CAN消息。
7.網關
在我們對Renesas V850進行固件篡改后,我們可以發送任意的CAN總線消息到總線上,但是這是車載娛樂系統轉能用總線,直接連接到CAN網關,CAN網關作為防火墻,隔離了不同速率、類型的總線。
網關的固件已簽名,因此對該芯片加后門將不起作用,這會使得簽名無效。此外,只能通過ODB-II診斷口進行固件刷寫,不能通過車載娛樂系統的CAN總線刷寫固件,如果我們想繞過這個芯片,我們需要在固件中找到可利用的漏洞,實現這一目標的第一步就是嘗試從芯片上提取固件。 然而在經過仔細考慮之后,我們決定在此停止我們的研究,因為這可能會損害制造商的知識產權并可能違反法律。
8.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,請匿名的聯系制造商要求這樣的政策來保護你的權力。另一種很好的方法是尋找舉報政策,以這種方式聯系制造商。
要注意的是,從作為工程師的角度來看,看似簡單的解決方案,在應用到數十萬輛汽車的規模時,可能會完全不同,要有耐心和同理心。
了解研究相關的法律法規是很重要的。不同的國家立法和有限的相關管轄權并不能使這一問題變得容易。記住:即使有不犯罪的意圖也不會使違法行為不受懲罰。如果有疑問,請提前咨詢法律意見!