數碼單反相機竟然也可以被黑客實施勒索攻擊!不信嗎!請拿出你的佳能相機過過目!
圖片傳輸協議(PTP)
現代單反相機不再使用膠片來捕捉和再現圖像,而是使用圖片傳輸協議(PTP)。圖片傳輸協議最初主要涉及圖像傳輸,現在這個協議包含了幾十個不同的命令,支持從拍照到升級相機固件的任何操作。
以前大多數用戶使用USB數據線將相機連接到個人電腦,但新款相機現在支持WiFi連接。這意味著,曾經只有USB連接設備才能訪問的PTP/USB協議,現在也變成了每個近距離支持wifi的設備都可以訪問的PTP/IP協議。
在一次演講中,Daniel Mende (ERNW)展示了佳能EOS相機當時支持的每一種網路協議可能遭受的所有不同的網路攻擊。在演講的最後,Daniel討論了PTP/IP網路協議,展示了攻擊者可以通過從網路嗅探特定的GUID與相機通信,該GUID是在目標計算機與相機配對時生成的。由於PTP協議提供了多種命令,並且沒有以任何方式進行身份驗證或加密,因此他演示了如何使用協議中存在的功能監視受害者。
在研究中,研究人員的目標是超越訪問和使用協議的功能。他們模擬攻擊者,希望在協議中找到實現漏洞,希望利用它們來接管相機。這樣的遠程執行代碼(RCE)場景將允許攻擊者用相機做任何他們想做的事情,用勒索軟體感染相機只是眾多選項之一。
從攻擊者的角度來看,PTP層看起來是一個很好的攻擊目標,因為:
1. PTP是一種未經身份驗證的協議,支持許多不同的複雜命令;
2. PTP中的漏洞可以通過USB和WiFi進行同等程度的利用;
3. WiFi支持使研究人員的相機更容易被附近的攻擊者訪問。
在本文中,研究人員會將PTP作為攻擊載體,介紹兩種潛在的攻擊方法:
1. USB:如果一個攻擊者接管了你的電腦,就可以通過USB將惡意軟體傳播到你的相機中;
2. WiFi:攻擊者可以在旅遊景點設置一個流氓WiFi接入點,感染你的相機。
攻擊目標的設定
研究人員選擇佳能EOS 80D單反相機的原因有很多:
1. 佳能是最大的單反相機製造商,控制著超過50%的市場份額;
2. EOS 80D支持USB和WiFi;
3. 佳能配有Magic Lantern,Magic Lantern是佳能單反相機推出的一款擴展包,主要包括Dual ISO捕捉兩種不同閃光範圍的圖像、擴大動態範圍、延時攝影、定時曝光控制計等功能,支持擴展API。從而提高相機的擴展功能。
獲取固件
這通常是每個嵌入式研究中最棘手的部分,第一步是檢查供應商的網站上是否有公開可用的固件更新文件。不出所料,研究人員在短時間的谷歌搜索之後找到了它。下載文件並提取歸檔文件之後,研究人員遇到了一個令人不快的意外。該文件似乎是加密或壓縮的,如圖1所示。
在瀏覽該文件時,研究人員沒有找到任何有用的模式,這可能暗示了引導載入程序的彙編代碼的存在。在許多情況下,引導載入程序是未壓縮的,它包含解密或解壓縮文件所需的指令。
嘗試使用Binwalk或7Zip等多種解壓縮工具都無用,這意味著這是一種專有的壓縮方案,甚至是一種專用的加密方案。
在谷歌,研究人員檢查了互聯網對這個. fir文件的看法,發現固件確實是AES加密的。
由於是開源的,研究人員希望ML(Magic Lantern)能夠以某種方式發布這個加密密鑰,從而允許解密固件。不幸的是,事實並非如此。ML不僅故意將加密密鑰保密,研究人員甚至在互聯網上的任何地方都找不到密鑰。通過努力,研究人員發現ML開發了一種叫做攜帶型ROM轉儲的工具。這是一個自定義固件更新文件,一旦載入,就會將相機的內存轉儲到SD卡。
使用ML論壇中提供的說明,研究人員成功地卸載了相機的固件,並將其載入到研究人員的反彙編程序(IDA Pro)中。現在研究人員終於可以開始尋找相機的漏洞了。
反轉PTP層
此時,查找PTP層就非常容易:
1. PTP層是基於命令的,並且每個命令都具有唯一的數字操作碼;
2. 固件包含許多指示字元串,這簡化了逆向工程的任務。
通過遍歷PTP OpenSession處理程序,研究人員找到了根據操作碼註冊所有PTP處理程序的主函數。快速檢查確保固件中的字元串與研究人員在網上找到的文檔匹配。
在查看註冊函數時,研究人員發現PTP層的攻擊面很多。該函數註冊了148個不同的處理程序,表明供應商支持許多專有命令。通過實施近150種不同的命令,在其中一種命令中找到關鍵漏洞的可能性非常高。
PTP處理程序的API
每個PTP命令處理程序都可以實現相同的代碼API。API使用了ptp_context對象,圖4顯示了ptp_context的一個用例。
可以看到,上下文包含函數指針,用於:
1. 查詢輸入消息的大小;
2. 接收輸入的消息;
3. 處理消息後返迴響應。
事實證明,大多數命令都相對簡單。它們只接收幾個數字參數,因為協議支持每個命令最多有5個這樣的參數。在掃描了所有支持的命令之後,148個命令的列表很快縮小到38個接收輸入緩衝區的命令。從攻擊者的角度來看,研究人員完全控制了這個輸入緩衝區,因此,我們可以開始在這麼小的命令集中查找漏洞。
幸運的是,每個命令的解析代碼都使用普通的C代碼,並且非常容易分析。很快,研究人員發現了自己的第一個漏洞。
CVE-2019-5994:SendObjectInfo中的緩衝區溢出(0x100C)
PTP命令名稱:SendObjectInfo
PTP命令操作碼:0x100c
在內部,協議將支持的文件和圖像稱為「對象」,在這個命令中,用戶更新給定對象的元數據。處理程序在解析應該是對象的Unicode文件名時包含緩衝區溢出漏洞。圖5顯示了易受攻擊的代碼片段的簡化代碼版本:
這是主要全局上下文中的緩衝區溢出,在此上下文中,無需反轉不同的欄位,研究人員擁有的唯一的直接暗示就是複製之後的Free-Where原語。副本可以將pKeywordsStringUnicode欄位修改為任意值,然後觸發調用以釋放它。
這看起來是一個好方法,但是研究人員要繼續尋找一個更容易被利用的漏洞。
CVE-2019-5998:NotifyBtStatus中的緩衝區溢出(0x91F9)
PTP命令名稱:NotifyBtStatus
PTP命令操作碼:0x91F9
儘管研究人員的相機型號不支持藍牙,但一些與藍牙相關的命令顯然還存在的,攻擊者仍然可以訪問它們。在本例中,研究人員發現了一個典型的基於堆棧的緩衝區溢出,如圖6所示。
CVE-2019-5999:BLERequest中的緩衝區溢出(0x914C)
PTP命令名稱:BLERequest
PTP命令操作碼:0x914C
看起來藍牙命令比其他命令更容易受到攻擊,這可能意味著開發團隊缺乏經驗。這一次研究人員發現了一個基於堆的緩衝區溢出,如圖7所示。
現在總共有3個漏洞:
·全局結構上的緩衝區溢出;
·緩衝區溢出堆棧;
·堆上的緩衝區溢出。
如前所述,研究人員將嘗試利用基於堆棧的漏洞,這可能是最容易的。
代碼執行
研究人員首先使用USB線把相機和電腦連接起來,研究人員之前使用的USB介面與佳能的「EOS實用程序」軟體,似乎很自然地試圖利用USB傳輸層。在搜索PTP Python庫時,研究人員發現了ptpy。
在編寫代碼執行漏洞之前,研究人員先從一個小的概念驗證(PoC)開始,它將觸發研究人員發現的每個漏洞。圖8顯示了相機如何崩潰,供應商將其描述為「Err 70」。
現在,是時候開始真正的漏洞利用了。
漏洞利用
研究人員的計劃是使用Sleep()函數作為斷點,並測試在給定的秒數之後是否可以看到設備崩潰。這將確認他們接管了執行流程並觸發了對Sleep()的調用。大多數情況下,易受攻擊的任務只是在沒有觸發崩潰的情況下停止的,從而導致相機停止工作。目前研究人員無法區分停止工作、睡眠和運行掛起的情況,這使得研究人員的斷點策略毫無意義。
研究人員決定改變策略,通過尋找一個總是觸發Err 70的代碼地址。從現在開始,研究人員的斷點將是對該地址的調用,崩潰意味著研究人員擊中了斷點。
研究人員逐漸構建研究人員的漏洞,直到最終研究人員能夠執行研究人員自己的程序集片段——現在研究人員有了代碼執行。
惡意載入
研究人員通常使用基本的TCP載入器進行Scout,這需要網路連接。雖然研究人員可以使用一個文件載入器來從SD卡載入Scout,但是稍後需要為Scout提供相同的網路連接,所以研究人員最好現在就解決這個問題。
查看了不同設置後,研究人員意識到WiFi不能在USB連接的時候使用,很可能是因為它們都是PTP層的,不支持同時使用,所以研究人員決定只使用WiFi。
在研究人員再次查看了PTP命令處理程序的列表,這次更徹底地查看了每個命令處理程序。令研究人員大為欣慰的是,研究人員發現了更多的漏洞。
CVE-2019-6000:SendHostInfo中的緩衝區溢出(0x91E4)
PTP命令名稱:SendHostInfo
PTP命令操作碼:0x91E4
查看易受攻擊的代碼,如圖9所示,研究人員第一眼就很明顯地忽略了這個漏洞。
這一次,開發人員雖然記得要檢查消息的預期固定大小為100位元組。然而,他們卻忘記了一些至關重要的事情。非法數據包只會被記錄,但不會被刪除。在快速檢查了研究人員的WiFi測試環境後他們確實看到了崩潰。
雖然這個漏洞正是研究人員一直在尋找的,但是他們決定繼續尋找更多的漏洞,特別是這種漏洞很可能會在多個命令中找到。
CVE-2019-6001:SetAdapterBatteryReport中的緩衝區溢出(0x91FD)
PTP命令名稱:SendAdapterBatteryReport
PTP命令操作碼:0x91FD
研究人員不僅發現了另一個具有相同代碼模式的漏洞,而且這是列表中的最後一個命令,為研究人員提供了很好的結果。圖10顯示了易受攻擊的PTP處理程序的簡化版本。
在本例中,由於堆棧緩衝區相當小,因此研究人員將繼續使用以前的漏洞。
注意:在WiFi設置中測試這個漏洞時,研究人員發現它在函數返回之前也崩潰了。所以,研究人員只能通過USB連接來利用它。
第二次嘗試尋找惡意載荷
既然發現了漏洞,研究人員就可以執行攻擊,並成功地在相機上載入了Scout。現在,研究人員有了一個網路調試器,可以開始轉儲內存地址,以便在逆向工程過程中幫助執行攻擊。
但是,研究人員的目標是展示使用圖片傳輸協議從USB和WiFi中劫持相機。雖然這兩個傳輸層之間有一些細微的差異,但最終研究人員使用的漏洞在兩種情況下都有效,從而證明了他們的觀點。然而,接管相機只是研究人員發起攻擊的第一步。現在是時候創建一些勒索軟體了。
加密
任何勒索軟體都需要加密功能來加密存儲在設備上的文件,如上所述,固件更新過程提到了AES加密,這看起來是個一次性完成所有任務的好機會。
這個逆向工程任務比研究人員想像的要簡單得多,因為研究人員不僅找到了AES函數,還找到了固件更新過程的驗證和解密密鑰。因為AES是對稱密碼,所以同樣的密鑰也可以用於加密惡意固件更新,然後對其簽名,使其通過驗證檢查。
研究人員使用了Scout實現了所有複雜的密碼演算法,並實現了一條模擬固件更新過程的新指令,然後最終返回演算法計算的密碼簽名。使用此指令,研究人員可以知道固件更新文件中每個部分的正確簽名是什麼,從而有效地獲取相機本身的簽名原語。
在圖11中,你可以看到研究人員的自定義ROM轉儲程序,它是通過修補Magic Lantern的ROM轉儲程序創建的。
CVE-2019-5995:惡意固件在後台悄悄進行更新
這是有一個用於遠程固件更新的PTP命令,它不需要任何用戶交互。這意味著即使所有的漏洞都已修復,攻擊者仍然可以使用惡意固件更新文件來感染相機。
勒索目標的實現
在完成固件更新過程之後,就可以實現勒索目標了。勒索軟體使用與固件更新過程相同的加密函數,並在固件中調用相同的AES函數。加密SD卡上的所有文件後,勒索軟體會向用戶顯示勒索消息。
先設置一個流氓WiFi接入點可以很容易地實現,首先是嗅探網路,然後偽造一個AP,使它的名稱與相機自動嘗試連接的名稱相同。一旦攻擊者與相機位於同一區域網內,就可以發起攻擊。
以下是佳能發布的官方安全建議鏈接:
日語版本的鏈接:https://global.canon/ja/support/security/d-camera.html
英語版本的鏈接:https://global.canon/en/support/security/d-camera.html


※CVE-2019-13354:Ruby strong
※URGENT/11:VxWorks RTOS 11個0 day漏洞影響20億設備
TAG:嘶吼RoarTalk |