在我們看來傳統(tǒng)的工業(yè)機(jī)器人是很無趣的。通常情況下,它們獨(dú)自或者在人類的指導(dǎo)下在制造和生產(chǎn)環(huán)境中執(zhí)行重復(fù)性的,程序化的任務(wù)。它們經(jīng)常被用來執(zhí)行危險(xiǎn)或不適合人類去干的任務(wù),因此,它們的工作環(huán)境往往與人類或者其他有價(jià)值的機(jī)器隔離開來。

但是最新一代的協(xié)同機(jī)器人(“cobots”)并非如此。在符合安全標(biāo)準(zhǔn)的同時(shí),他們與人類或者其他機(jī)器在共同的環(huán)境中工作。這一代機(jī)器人與人類攜手并進(jìn),協(xié)助人類完成工作,而不僅僅是執(zhí)行自動(dòng)化的,危險(xiǎn)性的操作。 Cobots可以學(xué)習(xí)移動(dòng),通過高清攝像機(jī)“看”,或通過麥克風(fēng)“聽到”來完成工作。
因此,Cobots比傳統(tǒng)的工業(yè)機(jī)器人呈現(xiàn)出了更為有趣的攻擊研究。但是,Cobots只限于工業(yè)應(yīng)用?不,他們也可以被集成到其他裝置中!
去年二月,Cesar Cerrudo和我發(fā)表了一篇非技術(shù)論文“Hacking Robots Before Skynet”,在這篇論文中我們對(duì)來自多家知名廠商的幾款家用,商用以及工業(yè)機(jī)器人進(jìn)行了研究,在這些機(jī)器人中我們發(fā)現(xiàn)了近50個(gè)關(guān)鍵的安全漏洞。在Cobots這部分機(jī)器人部分,我們對(duì)包括來自Rethink Robotics的Baxter / Sawyer和Universal的UR機(jī)器人進(jìn)行了研究,這些都是工業(yè)機(jī)器人行業(yè)的領(lǐng)導(dǎo)者。
Baxter / Sawyer:針對(duì)這款機(jī)器人,我們發(fā)現(xiàn)其存在身份驗(yàn)證漏洞,采用不安全的協(xié)議傳輸和默認(rèn)的部署配置,易受到物理攻擊以及使用了一個(gè)存在多個(gè)安全漏洞的框架-ROS,該公司已經(jīng)在2017年2月修復(fù)了我們報(bào)告的主要問題。
UR:我們?cè)谠S多控制協(xié)議中發(fā)現(xiàn)了身份驗(yàn)證問題、易受到物理攻擊、內(nèi)存破壞漏洞以及不安全的通信傳輸?shù)劝踩┒?。所有這些問題在最新版本(3.4.2.65,2017年5月)的系統(tǒng)中中仍未修補(bǔ)。
根據(jù)IOActive網(wǎng)絡(luò)安全公司漏洞披露的政策,我們已經(jīng)在去年1月份與供應(yīng)商取得了聯(lián)系,所以他們有足夠的時(shí)間來修復(fù)這些漏洞并通知客戶。我們的目標(biāo)是使cobots機(jī)器人更安全,防止攻擊者利用漏洞對(duì)企業(yè),員工和周圍環(huán)境造成嚴(yán)重傷害。我真的希望這篇文章可以推動(dòng)cobots機(jī)器人的安全性能夠向前發(fā)展,使得我們可以安全地使用現(xiàn)在的這些機(jī)器人以及后續(xù)更多代的機(jī)器人。
在這篇文章中,我將討論攻擊者如何通過cobot(例如UR3,UR5,UR10 - Universal Robots)機(jī)器人的多個(gè)漏洞來遠(yuǎn)程修改安全設(shè)置,違反適用的安全準(zhǔn)則,通過移動(dòng)機(jī)器人對(duì)其周圍的工作人員造成身體上的傷害。通過這個(gè)例子我們可以看到如果這些系統(tǒng)被黑客攻擊或者控制可能會(huì)給人類造成多么嚴(yán)重的后果,操縱安全限制和禁用緊急按鈕可能直接威脅到人的生命。在這個(gè)例子中,我們利用了cobot機(jī)器人的六個(gè)漏洞來改變其安全限制,并通過遠(yuǎn)程網(wǎng)絡(luò)禁用安全面板和緊急按鈕/傳感器,演示視頻可以在下面這個(gè)url中看到:
問:這些機(jī)器人真的可以傷害一個(gè)人嗎?
答:是的,加拿大蒙特利爾(ETS)技術(shù)研究所的控制和機(jī)器人實(shí)驗(yàn)室的一項(xiàng)研究清楚地表明,即使是較小的UR5模型,其強(qiáng)大到足以嚴(yán)重傷害一個(gè)人。即使是在慢速移動(dòng)中,他們的力量也足以造成顱骨骨折
問:等等,他們有沒有安全功能,防止他們傷害附近的人類?
A:是的,但是黑客可以遠(yuǎn)程入侵,我將在下一個(gè)技術(shù)部分告訴你黑客是如何入侵機(jī)器人系統(tǒng)的。
問:這些機(jī)器人部署在哪里?
A:世界各地,每天在多個(gè)生產(chǎn)環(huán)境中都有機(jī)器人在工作。
集成商定義所有安全裝置
Universal Robots公司是UR機(jī)器人的制造商,但是在特定應(yīng)用中安裝UR機(jī)器人的公司是集成商,一個(gè)機(jī)器人只有集成和安裝之后才被認(rèn)為是一個(gè)完整的機(jī)器。 UR機(jī)器人的集成商負(fù)責(zé)確保消除整個(gè)機(jī)器人系統(tǒng)的任何重大危險(xiǎn),這包括但不限于:
1. 對(duì)整個(gè)系統(tǒng)進(jìn)行風(fēng)險(xiǎn)評(píng)估,在許多國(guó)家,這是法律規(guī)定的的必要流程。
2. 如果風(fēng)險(xiǎn)評(píng)估認(rèn)為安全,則連接其他機(jī)器和其他安全裝置
3. 在Polyscope軟件(控制面板)中設(shè)置相應(yīng)的安全設(shè)置,確保用戶不會(huì)使用“安全密碼”來修改任何安全措施。
4. 驗(yàn)證整個(gè)系統(tǒng)的設(shè)計(jì)和安裝是否正確
Universal Robots公司已經(jīng)意識(shí)到集成商必須考慮機(jī)器人存在的潛在的重大危害例如:
1. 機(jī)器人工具或者工具連接器上的鋒利的刀邊或者刀尖有可能刺傷皮膚;
2. 機(jī)器人軌道附近的障礙物上的鋒利刀邊或者刀尖有可能刺傷皮膚;
3. 由機(jī)器人的碰撞引起的瘀傷;
4. 由機(jī)器人沉重的機(jī)器零件或者材料表面之間的碰撞而產(chǎn)生的扭傷或骨折;
5. 由于未經(jīng)授權(quán)更改安全配置參數(shù)而導(dǎo)致的錯(cuò)誤
一些安全相關(guān)功能是專為cobot應(yīng)用而設(shè)計(jì)的,這些功能包括:
1. 力和功率限制:用于在機(jī)器人和操作員之間碰撞的情況下,減少機(jī)器人在運(yùn)動(dòng)方向上施加的夾緊力和壓力;
2. 動(dòng)量限制:通過降低機(jī)器人的速度,用于在機(jī)器人和操作者之間碰撞的情況下減少高瞬態(tài)能量和沖擊力;
3. 刀具定向限制:避免鋒利的刀邊指向操作者;
4. 速度限制:用于確保機(jī)器人手臂低速運(yùn)行;
5. 安全邊界:用于限制機(jī)器人的工作空間,強(qiáng)制其停留在定義的虛擬平面的正確一側(cè),而不能通過它們。
6. 安全I(xiàn)/O:當(dāng)觸發(fā)此輸入安全功能(通過緊急按鈕,傳感器等)時(shí),向輸入端發(fā)送低信號(hào),并使安全系統(tǒng)轉(zhuǎn)換到“減小”模式。
安全設(shè)置可以有效防止許多潛在危險(xiǎn)事件。但是,如果惡意攻擊者繞過這些安全措施,操縱機(jī)器人來威脅人類生命,那可能會(huì)發(fā)生些什么呢?
UR用戶指南的聲明
遠(yuǎn)程更改安全配置
“安全配置只能根據(jù)集成商進(jìn)行的風(fēng)險(xiǎn)評(píng)估進(jìn)行更改。如果改變了安全參數(shù),機(jī)器人的整個(gè)系統(tǒng)應(yīng)當(dāng)被認(rèn)為是新的,這意味著包括風(fēng)險(xiǎn)評(píng)估在內(nèi)的整個(gè)安全審批流程應(yīng)該相應(yīng)的更新“。
遠(yuǎn)程更改安全配置的過程如下所示:
步驟1.通過在UR Dashboard Server上利用身份驗(yàn)證漏洞來確認(rèn)遠(yuǎn)程機(jī)器人系統(tǒng)的版本信息;
步驟2.通過在UR Modbus TCP服務(wù)中利用基于堆棧的緩沖區(qū)溢出漏洞獲得對(duì)系統(tǒng)的控制權(quán)限,并以root身份執(zhí)行命令;
步驟3.修改security.conf文件,該文件將覆蓋所有的通用安全限制,接頭限制,邊界和安全I(xiàn)/O值限制;
步驟4.強(qiáng)制繞過計(jì)算校驗(yàn)和值,并上傳新文件。我們需要偽造這個(gè)校驗(yàn)和值,因?yàn)橥ǔ<缮毯芸赡茉谟布蠈懭氘?dāng)前的校驗(yàn)和值;
步驟5.重新啟動(dòng)機(jī)器人,以便更新安全配置;
步驟6.通過利用UR控制服務(wù)上的認(rèn)證問題,以任意危險(xiǎn)的方式操作機(jī)器人。
通過逆向分析ursys-CB3.1-3.3.4-310.img這個(gè)系統(tǒng)鏡像,我知道了機(jī)器人的入口點(diǎn)以及允許網(wǎng)絡(luò)上的其他機(jī)器與操作系統(tǒng)進(jìn)行交互的服務(wù)程序。對(duì)于此演示,我使用供應(yīng)商提供的URSim模擬器,該模擬器包含了機(jī)器人鏡像中大部分核心的二進(jìn)制文件。盡管這個(gè)示例使用模擬器可以更為清楚展示攻擊效果,但我還是修改了這個(gè)二進(jìn)制文件,修改后的文件部分代碼可以在Linux機(jī)器上正常運(yùn)行。URControl這個(gè)二進(jìn)制文件中導(dǎo)出了很多不同的網(wǎng)絡(luò)服務(wù),這些網(wǎng)絡(luò)服務(wù)的私有協(xié)議在實(shí)現(xiàn)上都沒有使用強(qiáng)大的認(rèn)證機(jī)制。例如,網(wǎng)絡(luò)上的任何用戶都可以向其中一個(gè)服務(wù)發(fā)出命令,并獲取正在運(yùn)行的進(jìn)程的遠(yuǎn)程操作系統(tǒng)的版本(步驟1):
現(xiàn)在我已經(jīng)驗(yàn)證了遠(yuǎn)程目標(biāo)運(yùn)行著一個(gè)易受攻擊的系統(tǒng)ursys-CB3.1-3.3.4-310(UR3,UR5或UR10),下一步我準(zhǔn)備利用網(wǎng)絡(luò)服務(wù)漏洞來破壞這個(gè)機(jī)器人系統(tǒng)(步驟2)。由于UR Modbus TCP服務(wù)(端口502)不支持對(duì)命令源的認(rèn)證機(jī)制,因此,網(wǎng)絡(luò)攻擊者可能會(huì)在控制的過程中破壞機(jī)器人系統(tǒng)。與機(jī)器人IP連接的攻擊者可以發(fā)出Modbus讀/寫請(qǐng)求,并部分更改機(jī)器人的狀態(tài)或向操作人員發(fā)送請(qǐng)求,以更改控制鏈接的狀態(tài)。發(fā)送Modbus寫請(qǐng)求并不能改變機(jī)器人的任何安全設(shè)置,然而,我們?cè)谠赨R Modbus TCP接收器(URControl內(nèi)核的一個(gè)二進(jìn)制文件)中發(fā)現(xiàn)了一個(gè)基于堆棧的緩沖區(qū)溢出。
UR Modbus TCP服務(wù)程序的recv函數(shù)存在堆棧緩沖區(qū)溢出漏洞,攻擊者通過該函數(shù)可以向程序的緩沖區(qū)寫入超出其長(zhǎng)度的內(nèi)容,造成緩沖區(qū)的溢出,從而破壞程序的堆棧,使程序轉(zhuǎn)而執(zhí)行其他的指令,以達(dá)到攻擊的目的,這是一個(gè)很常見的堆棧緩沖區(qū)漏洞。
在進(jìn)行漏洞利用之前,我們先來看一下漏洞利用的將要面臨的阻礙。機(jī)器人的Linux內(nèi)核被設(shè)置為堆棧隨機(jī)化(randomize_va_space = 1 => ASLR),VDSO(virtual dynamic shared object page)和內(nèi)存區(qū)域共享。此外,由于內(nèi)核中的"No eXecute" (NX) 被置位,因此該內(nèi)核文件是不可寫以及不可執(zhí)行的。
當(dāng)對(duì)目標(biāo)緩沖區(qū)進(jìn)行溢出操作時(shí),我們也需要要對(duì)指向函數(shù)參數(shù)的指針執(zhí)行溢出操作。在函數(shù)返回之前,這些參數(shù)在其他函數(shù)調(diào)用中被使用,所以我們必須要為這些函數(shù)調(diào)用提供有效的實(shí)參。否則,我們永遠(yuǎn)不能找到函數(shù)的返回點(diǎn)以及控制函數(shù)的執(zhí)行流程。