是時候物聯網醫療設備下手了:對心臟起搏器生態系統安全性研究

雲棲號資訊:【點擊查看更多行業資訊
在這裏您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!

這是我有關起搏器生態系統安全性研究的系列文章中的第一篇,此研究包括在Marie Moe於2015年在SINTEF發起的一個內部項目。

第一篇文章爲下一篇文章奠定了基礎,並提供了有關我們將要研究的BIOTRONIK起搏器生態系統的基本說明,以及用於研究的方法。

0x01 漏洞披露

這些研究結果以漏洞報告的形式與BIOTRONIK做了共享。BIOTRONIK根據協調的漏洞披露流程進行了合作,並分析和驗證了我們的報告。然後,他們分享了對每個報告的漏洞的響應,我們詳細討論了每個要點。在這些討論中,BIOTRONIK提供了足夠的信息,以確認由漏洞引起的患者傷害的可能性是極小的。

BIOTRONIK建議醫療保健提供者和患者繼續按使用說明繼續使用設備並遵循設備說明。

CISA漏洞諮詢可在此處獲得。

https://www.us-cert.gov/ics/advisories/icsma-20-170-05

協調披露的時間表:

· 2019年10月:漏洞報告已發送至BIOTRONIK

· 2019年11月:SINTEF與FDA進行了討論

· 2020年4月:SINTEF收到BIOTRONIK的回覆

· 2020年4月/ 5月:BIOTRONIK,BSI,CISA和SINTEF之間進行了討論

· 2020年6月18日:CISA發佈漏洞披露。

0x02 心臟起搏器的生態系統

什麼是心臟起搏器?

首先,讓我們定義什麼是起搏器或ICD。植入式心臟復律除顫器(ICD)是一種植入到患者體內的醫療設備,通常在心律不齊的情況下控制患者的心跳。ICD用於患有嚴重心律不齊的患者,即那些狀況可能導致他們昏厥甚至心臟驟停的患者。該設備監視患者的心律,並在檢測到異常時發送電脈衝。

1596025649950422

圖1:SINTEF實驗室中的起搏器圖片

圖1中顯示了一個ICD。該設備只有信用卡的大小,並具有一根,兩根或三根稱爲引線的電線。正如德州心臟研究所所解釋的,植入物內部裝有脈衝發生器以及其他電子電路和電池。起搏器與ICD的區別在於,ICD可以發出電擊,而起搏器只能通過小的電刺激來校正心臟的節律。患者可以感覺到ICD發出的電擊,通常醫生會要求他報告一次或多次。從現在開始,我們將僅使用術語“起搏器”來指代“起搏器”和“ ICD”。

每次事件發生時都必須報告然後去看醫生,這會使病人很煩惱。這就是起搏器製造商以無線方式連接設備的原因。這樣,患者可以在夜間使用外部設備從起搏器收集數據,並將其自動發送到服務器,由專科醫生看診。這樣可以在出現問題的情況下更快地通知醫生,並防止患者不必要的拜訪。

生態系統

如前所述,起搏器不是安裝在患者體內並在體內與外界保持任何互動狀態的獨立設備。它依賴於整個生態系統才能正確有效地工作。該生態系統由多個設備組成。圖2顯示了我們一直在研究的供應商的生態系統,但這是很通用的。

1596025668743603

圖2:供應商的起搏器生態系統圖

這是對生態系統不同組成部分的描述:

· 起搏器:植入患者體內,這是生態系統的主要設備。它會產生電脈衝,有助於調節心率。可編程的起搏器使醫生可以爲每個患者選擇合適的起搏器。

· 編程器:編程器是醫院的從業人員用來對起搏器進行編程的外部計算機。該設備需要與起搏器接近,通信仍然是無線通信。

· 家庭監控單元:HMU是一種旨在通過防止患者過於頻繁地拜訪醫生來減輕患者生命的設備。確實,該設備放置在患者家中,負責從起搏器下載數據,並將其發送到供應商的服務器,以便從業者遠程訪問它們。

· 運營商網絡:HMU需要一種訪問Internet的方式,以便與供應商的服務器進行通信。根據HMU(參見下文)的不同,可以使用移動網絡(例如GSM或3G)訪問互聯網,也可以使用常規電話線訪問Internet。

· 供應商的服務器:這些是HMU連接到的服務器,以導出患者的數據。這是通過運營商網絡實現的。從業人員可以通過在線平臺訪問這些服務器。

研究範圍

我的項目只關注起搏器生態系統的一個要素,即家庭監控單元。即使不是強制性的,該設備也很安全,因爲它可以與起搏器和供應商的服務器直接交互。它還處理患者的數據。最重要的是,以前的研究人員已經表明,通過使用某些HMU消耗起搏器的電池,可以將它們轉變成“武器”,並威脅到患者的生命。圖3突出顯示了我研究成果中使用的範圍:

  1. HMU與供應商服務器之間的接口。
  2. HMU本身是獨立的嵌入式設備。
  3. HMU和起搏器之間的接口。

1596025687193951

圖3:HMU的範圍

我最終將重點放在範圍2上,在範圍1上有一些重疊。主要是因爲在實驗室中沒有可用的起搏器,所以將範圍3留在了一邊。來自NTNU的另一位學生Anniken Wium Lie專注於範圍1,特別是移動網絡接口。儘管我們的範圍是不同的,但是在我們的項目之間進行了許多合作。的確,我對HMU硬件以及Anniken所建立的Fake Base Station的發現使我們能夠與該設備進行更多的交互並更好地理解它。

0x03 黑盒測試方法

爲了進行研究,我一直在使用“黑盒測試方法”。我不會過多介紹該方法的細節,但基本上,這是一種從外部評估軟件,設備或系統的方法,對內部的瞭解很少。攻擊者正在分析通過發送一些輸入或僅通過被動偵聽獲得的黑盒的輸出,然後試圖推斷出目標的內部系統。做出一些猜測之後,攻擊者可以調整其輸入以確認其想法或利用目標(請參見圖4)。

1596025705453030

圖4:黑盒測試方法圖

與可用於評估系統的其他方法相比,該方法具有多個優點。確實,這裏的目標是在真實條件下進行測試,以適應實際情況。這意味着這樣的測試將包括在系統部署過程中可能發生的實際錯誤,例如默認密碼,總體上的錯誤配置,甚至是缺乏對員工的培訓(例如,弱密碼)。它還具有較低的誤報率,因爲攻擊者可以評估與漏洞相關的風險,即,給定的漏洞是否真正可利用。另一方面,白盒測試中,攻擊者可以完全訪問源代碼和實現細節,可能會導致不相關的漏洞(至少沒有達到Black Box Security測試的目標),因爲這些漏洞永遠不會在實際場景中觸發。但是,黑盒測試方法也有一些缺點。根據定義,攻擊者幾乎沒有有關目標的信息,並且可能會錯過一些可能由代碼和/或配置檢查發現的漏洞。顯然,黑盒測試不應該是唯一執行的安全性測試,即使它是在真實條件下評估設備的絕佳方法。

我的項目集中在一個專有的生態系統上,除了供應商爲患者提供的信息外,我幾乎沒有任何信息,這實際上是模糊且非技術性的。此外,我的目標是在現實情況下評估與該生態系統相關的安全風險。然後,黑盒測試方法論很好地適應了我的限制和目標,這就是爲什麼我決定使用它的原因。

0x04 尋找調試接口

對家庭監控單元的硬件測試

當我剛開始從事該項目時,我對硬件安全性和總體硬件知之甚少。但是,致力於這個主題是一個挑戰,在此過程中我學到了很多東西。目標是德國公司BIOTRONIK製造的Cardio Messenger IIS家庭監視單元。我沒有比較好的方法,但是尋找調試端口似乎是必經之路。因此,下面將重點介紹如何定位調試端口以及從HMU中提取固件。

組件識別

首先,我打開設備以查看硬件類型。此階段的目標是確定板上的主要組件,並利用它們之間的相互作用構建一個簡單的原理圖。圖1顯示了電話線版本的CardioMessenger II-S。與GSM版本非常相似,僅調制解調器有所更改。這就是爲什麼,此帖子將主要使用T-Line的圖片,因爲它是我執行初始測試的設備。但是,所有發現也隨後在GSM版本上得到了驗證。

1596180693502398_jpeg

圖5:CardioMessenger II-S T線內部

我首先從網上查找PCB上不同部分的數據表。有趣的是,PCB可以分爲三個不同的部分:

  1. 主PCB
  2. 左上角的“微控制器PCB”
  3. 調制解調器(已插入主PCB,可以在T-LINE版本上卸下)

在微控制器PCB上,有:

· 微控制器,Atmel的AT91RM9200(現爲微芯片)

· 4Mb 閃存

· 外部RAM

查看PCB上剩餘的內容,有數字信號處理器(圖1的左下角)和調制解調器,我們可以繪製圖2所示的非常簡單的示意圖。

HMU_Schematic

圖6:HMU原理圖

有了這個原理圖,很清楚我們可以在哪裏進行測試。在這個項目中,我主要在調試端口(UART / JTAG)以及MCU與Modem之間的通信上進行了測試。但是,如果有適當的設備,也可以嘗試直接進行交互。

在開始CardioMessenger II-S的工作之前,我分析了其他已知存在漏洞的醫療設備,例如St Jude Medical的Merlin @ Home或Medtronic的舊HMU。Merlin @ Home是一個嵌入式Linux系統,訪問非常簡單:通過UART(標記爲UART)連接到設備後,系統會提示你登錄。但是,如果中斷引導,則會出現一個終端在Blob Bootloader中,帶有一些可用命令。帶有適當boot init=/bin/sh參數的命令會給你一個shell作爲root用戶。

然後,我想知道我是否會遇到與CardioMessenger II-S類似的問題,但是在查看組件時,即使它可行,我也很難相信它可能是在HMU上運行的嵌入式Linux系統。 因此假設它是一些基於著名的實時OS(例如Free RTOS)構建的自定義OS。

因此,下一步是在板子上尋找調試端口。我們從MCU的數據表中瞭解到JTAG / SWD和UART是可用的。仔細觀察微控制器周圍的PCB部分,我們可以確定幾個興趣點,它們在圖3中以紅色顯示。

cmiis_tline_details_jtag

圖7:板上可能的調試端口

尋找UART

UART

引腳未在設備上標記,因此我要弄清楚與UART相對應的步驟是:

  1. 使用萬用表和已知的接地參考來確定接地引腳(如果沒有更好的設備,則設備的金屬部件可以解決問題)。在這裏可以使用連續性測試功能。
  2. 爲了防止將計算機連接到隨機的幾個引腳上並使計算機正常工作,我隨後使用示波器監視了啓動過程中不同引腳上的情況。可以在TX上檢測到活動。
  3. 最後,我們需要使用的波特率。一種解決方案可能是簡單地連接計算機並嘗試使用其他計算機,直到獲得有意義的東西爲止。但是,更好的方法是使用示波器(或邏輯分析儀)確定位週期,然後取其倒數來獲得波特率。

回到HMU,圖3中以青色突出顯示的引腳下面的3個引腳與UART相對應。當查看啓動期間TX引腳上發送的內容時,我得到以下輸出:

Bootloader TELEX4:

但僅此而已。我嘗試在線查找此字符串,但沒有得到任何相關信息,我確實找到了UART,但似乎也沒有調試信息發送給它。

然後,我嘗試查看是否可以與之交互,併發送了諸如“ ENTER ”,“ CTRL + C ”,“ ESC ”等鍵,但沒有任何交互,也沒有回顯任何文本。

微控制器與調制解調器之間的通信

從圖2所示的原理圖中可以看出,UART不僅用於輸出調試信息,而且還用於在兩個組件之間進行通信。這裏,調制解調器和微控制器使用UART進行通信。在網上尋找調制解調器的數據表時,我們很容易找到調制解調器的UART引腳。我們暫時不想在這裏發送任何東西,只是竊聽通信。爲此,我們可以將調制解調器的TX引腳(對應於doc的“輸入”,對應於doc的“輸入”)連接到USB-to-TLL的RX引腳,以實現從微控制器到調制解調器的通信。我們可以通過連接到另一個USB到TTL的RX引腳的RX進行相同的操作,以實現從調制解調器到微控制器的通信。從那裏我們可以觀察到發生了有趣的數據通信:

[2019-03-30 11:43:24] at
atii5#vversion 
AT#MCOUNTRY?
at
AT+WOPEN=1
AT#DIALSELECT=1
AT#AUTHENT=PAP
at#atcmd=0,"-STE=7"
at#atcmd=1,"+A8E=6,5,0,1,0,0"
at#atcmd=2,"X3"
at
AT#DIALN1="T9W[REDACTED]"
AT#ISPUN="[REDACTED]@cm3-homemonitoring.de"
AT#ISPPW="[REDACTED]"
at#atcmd=0,"-STE=7"
[2019-03-30 11:43:26] AT#CONNECTIONSTART
[2019-03-30 11:43:28] at#connectionstop

可以看出,微控制器正在使用AT命令配置調制解調器。通過查看“ 具有IP連接的GSM / GPRS無線調制解調器的AT命令”,我們瞭解到微控制器命令調制解調器連接到接入點名稱(APN),該名稱是移動網絡與另一個網絡(通常是Internet)之間的網關。

https://www.embeddedarm.com/documentation/third-party/ts-modem2_developerguide-gsm-gprs-ip-commands-s000333b.pdf

首先,它使用WOPEN命令啓動TCP / IP堆棧,然後選擇與DIALSELECT命令一起使用的主撥號號碼。然後將身份驗證方法設置爲密碼身份驗證協議(PAP)。最後,設置撥號號碼,以及連接到APN所需的用戶名和密碼(ISPUN和ISPPW命令)。用戶名和密碼以明文形式發送。另外,我們注意到用戶名與設備的序列號相對應,該序列號印在設備下方的標籤上。在本系列的最後一篇文章中,我將回到這些憑據上,以及它們在完整攻擊場景中扮演的角色。

尋找JTAG

攻擊物聯網設備的另一種常見方法是使用JTAG接口。在CardioMessenger II-S的情況下,JTAG引腳也沒有標記,並且有幾種候選:圖2中用青色表示的14個引腳。但是,JTAG僅需要5個引腳。我沒有合適的設備來同時探測所有14個引腳,並且感謝NTNU電子部門的工程師(再次感謝Ingulf,如果你讀過這篇文章的話),我們能夠在這些引腳上添加合適的連接器。圖4顯示了已添加的連接器以及在板上進行的焊接。

details_soldering

圖8:添加到板上的連接器的詳細信息

JTAG引腳的識別

爲了確定JTAG接口的引腳排列,我們使用了一種稱爲“ JTAGulator ” 的特殊硬件工具。正如JTAGulator的發行商Grand Idea Studio所解釋的那樣,它是一種“ 開源硬件工具,可幫助從測試點識別OCD連接,或在目標設備上元件。”基本上,它可以通過嘗試所有可能的排列猜JTAG接口的引腳分配。該JTAGulator是一種價格合適的商用設備,在圖5呈現。

http://www.grandideastudio.com/jtagulator/

JTAGulator

圖9:Grand Idea Studio的JTAGulator

該設備易於使用。首先,我們需要將開發板上有趣的引腳連接到JTAGulator(如圖6所示)。然後,JTAGulator通過USB連接到計算機,並且可以通過screen例如USB與計算機進行交互。波特率是115200 Bd / s。

jtagulator_connected

圖10:連接到設備的JTAGulator

連接設備後,步驟如下:

  1. 調整JTAGulator的電壓(對於CardioMessenger II-S,爲3.3V)
  2. 啓動IDCODE掃描以確定TDO,TMS,TCK,TRST
JTAG> i
Enter starting channel [0]:
Enter ending channel [0]: 12
Possible permutations: 1716
Bring channels LOW between each permutation? [y/N]: y
Enter length of time for channels to remain LOW (in ms, 1 - 1000) [100]:
Enter length of time after channels return HIGH before proceeding (in ms, 1 - 1000) [100]:
Press spacebar to begin (any other key to abort)... 
JTAGulating! Press any key to abort...
-------------------------------------------
TDI: N/A
TDO: 11
TCK: 4
TMS: 12
Device ID #1: 0000 0101101100000010 00000011111 1 (0x05B0203F)
TRST #: 3
TRST #: 10
-------------------------------------------
IDCODE scan complete.
  1. 啓動BYPASS掃描以獲取TDI
JTAG> b
Enter starting channel [0]:
Enter ending channel [12]:
Are any pins already known? [Y/n]: y
Enter X for any unknown pin. Enter TDI pin [0]: x
Enter TDO pin [11]:
Enter TCK pin [4]:
Enter TMS pin [12]:
Possible permutations: 10
Bring channels LOW between each permutation? [Y/n]: y
Enter length of time for channels to remain LOW (in ms, 1 - 1000) [100]:
Enter length of time after channels return HIGH before proceeding (in ms, 1 - 1000) [100]:
Press spacebar to begin (any other key to abort)...
JTAGulating! Press any key to abort...
----
TDI: 5
TDO: 11
TCK: 4
TMS: 12
TRST #:
TRST #:
Number of devices detected: 1 
------
BYPASS scan complete.
  1. 讀取設備ID以確認引腳排列
JTAG> d
TDI not needed to retrieve Device ID.
Enter TDO pin [11]:
Enter TCK pin [4]:
Enter TMS pin [12]:
Device ID #1: 0000 0101101100000010 00000011111 1 (0 x05B0203F)
-> Manufacturer ID: 0x01F -> Part Number: 0x5B02
-> Version: 0x0
IDCODE listing complete.

然後,JTAG引腳爲:

jtag_pinout

圖11:CardioMessenger II-S上的JTAG引腳

0x05 固件提取

現在有了JTAG引腳,我們可以連接JTAG適配器並開始與微控制器進行交互,以獲取我們真正尋找的東西:固件。就我而言,我使用瞭如圖8所示的Raspberry Pi Zero。我的目標是僅使用COTS設備和開源軟件,以儘可能降低成本。

與OpenOCD建立連接

如Dominic Rath在其博士論文中所述,OpenOCD(開放式芯片調試器)旨在爲嵌入式目標設備提供調試,系統內編程和邊界掃描測試。與一個爲用戶提供所需電信號的小型適配器一起使用,我們可以執行片上調試或編程,而無需外部且通常很昂貴的編程器。如上所述,它可以與Raspberry Pi Zero搭配使用,價格約爲10美元。Raspberry Pi Zero的另一個廉價替代品是Shikra由Xipiter開發。使用OpenOCD的缺點是它可能不穩定或存在錯誤。此外,第一次使用時不一定要直接瞭解。儘管如此,一旦解決了配置問題,它就會成爲非常強大的工具。我非常喜歡爲OpenOCD編寫配置的功能,幾乎可以像“腳本”一樣使用它。

rpi_connected

圖12:使用Raspberry Pi Zero作爲JTAG適配器

連接到設備後,我們可以簡單地SSH到RasperryPi並測試連接。首先,我們需要啓動OpenOCD,執行sudo openocd -f your_config.cfg,然後nc 127.0.0.1 4444連接,然後scan_chain命令來檢測存在哪些設備。

cmiis_tline_openocd_working_connection

圖13:通過JTAG與HMU交互

固件轉儲

OpenOCD爲我們提供了一條dump_image讀取內存的命令。通過使用圖10中所示的微控制器的內存映射,可以輕鬆轉儲特定的內存塊。感興趣的部分包括引導加載程序,閃存和外部閃存的內容。相應的地址和大小可以從數據表的存儲器映射中檢索到(參見圖10)。

cmiis_tline_at91rm9200_memory_map

圖14:AT91RM9200內存圖

爲了轉儲我感興趣的內存部分,我使用了以下OpenOCD配置文件:

# INTERFACE
interface bcm2835gpio 
bcm2835gpio_peripheral_base 0x20000000 
bcm2835gpio_speed_coeffs 113714 28 
bcm2835gpio_jtag_nums 11 25 10 9 
bcm2835gpio_srst_num 24
reset_config srst_only srst_push_pull 
adapter_khz 500

# TRANSPORT
transport select jtag

# TARGET
set WORKAREASIZE 0
set CHIPNAME at91rm9200
source [find target/at91rm9200.cfg]
reset_config srst_only srst_nogate 
adapter_nsrst_delay 100 
adapter_nsrst_assert_width 100

# EXEC 
init 
targets 
halt

echo "Dumping bootloader..."
dump_image bootloader.img 0x00000000 1048576
echo "Done!"

echo "Dumping SRAM..."
dump_image sram.img 0x00200000 104576
echo "Done!"

echo "Dumping Flash content..." 
dump_image flash.img 0x10000000 4194304
echo "Done!"

echo "Dumping RAM..."
dump_image sdram.img 0x20000000 2097152
echo "Done!"

連接到設備後,我們可以啓動“腳本”,大約5分鐘後,我們獲得了四個內存轉儲!

0x06 分析總結

這部分分析中,我們將設備拆開,弄清楚主要組件是什麼以及它們的功能是什麼。然後,我們使用該信息來確定調試端口。最後,我們使用JTAG訪問轉儲了設備的內存,並獲得了HMU的固件。在下一篇文章中,我們將看到如何利用設備與後端服務器之間缺乏相互身份驗證來提取數據。在第三篇文章中,我們將看到如何使用獲得的固件對HMU與後端服務器進行通信的專有協議進行逆向。

【雲棲號在線課堂】每天都有產品技術專家分享!
課程地址:https://yqh.aliyun.com/live

立即加入社羣,與專家面對面,及時瞭解課程最新動態!
【雲棲號在線課堂 社羣】https://c.tb.cn/F3.Z8gvnK

原文發佈時間:2020-08-02
本文作者:h1apwn
本文來自:“嘶吼網”,瞭解相關信息可以關注“嘶吼網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章