2014-09-02 106 views
2

我試圖在啓用了TrustZone的開發板(Samsung exynos 4412)上運行Linux內核作爲安全操作系統。雖然有人會說安全操作系統應該小而簡單。但我只想嘗試。如果可能的話,那麼將Trustlet應用程序編寫或移植到此安全操作系統將很容易,特別是對於具有UI(可信UI)的應用程序。Linux內核可以作爲ARM TrustZone安全操作系統運行嗎?

我買了一個基於Xv6的可運行安全操作系統的開發板,正常的操作系統是Android(Android版本4.2.2,內核版本3.0.15)。我試圖用android的Linux內核來替換簡單的安全操作系統,也就是用一個小的彙編代碼,例如清除SCR寄存器的NS位,直接調用Linux內核條目(帶有必要的內核標記列表傳入) 。

內核未壓縮代碼被正確執行,內核的第一個C函數start_kernel()也被執行。除了運行到calibrate_delay()之外,幾乎所有初始化函數都運行良好。該功能將等待的jiffies改變:

/* wait for "start of" clock tick */ 
ticks = jiffies; 
while (ticks == jiffies); 

我想原因是沒有時鐘產生的中斷(我在打印中時鐘中斷回調函數日誌,他們從未得到)。我在local_irq_enable()函數之前和之後檢查了CPSR狀態。 IRQ和FIQ位設置正確。我還在中斷向量表中定義的Linux內核的IRQ處理程序中打印一些日誌。沒有記錄。

我知道安全世界和非安全世界之間的中斷系統可能存在一些差異。但我無法找到任何文檔中的差異。有人可以指出他們嗎?最重要的問題是,由於Linux是一個非常複雜的操作系統,Linux內核可以作爲TrustZone安全操作系統運行嗎?

我是Linux內核和ARM TrustZone的新手。請幫幫我。

+0

內核被編譯爲'真正'的硬件,而不是硬件TrustZone(驅動程序甚至不可能存在)。 – 2014-09-02 10:23:36

+0

感謝您的回覆。但是我已經看到了幾個可以做很多事情的trustzone實現,比如UI顯示和觸摸屏。你可以看到Genode的實現。 [文檔](http://genode.org/documentation/articles/trustzone)[視頻](https://www.youtube.com/watch?v=voFV1W4yyY8) – 2014-09-02 12:29:14

+0

你的問題似乎有點不清楚。檢出標籤[tag:trust-zone]中的所有問題,尤其是[如何開發用於arm信任區的程序]問題(http://stackoverflow.com/questions/15455011/how-to-develop-programs-for -arm信任區)。你**不需要安全的操作系統才能擁有安全的* trustlet *;只需安全啓動,帶有啓動鎖的分區檢查器和帶有Secure API的監視器表。 – 2014-09-02 16:40:20

回答

1

沒有什麼技術上可以阻止Linux在ARM處理器的安全狀態下運行。但它擊敗了TrustZone的全部目的。 Linux等大型複雜的內核和操作系統不能正式驗證其可以被視爲「安全」。

有關這方面進一步閱讀,看http://www.ok-labs.com/whitepapers/sample/sel4-formal-verification-of-an-os-kernel

至於你所面臨的具體問題 - 應該有什麼特別之處在安全中斷處理與非安全狀態(除非你明確配置它是不同)。但可能是因爲您已刪除的安全操作系統正在執行一些目前尚未發生的初始計時器初始化。

3.0.15是一個絕對古老的內核 - 它在2.5年前發佈,基於3年前發佈的內容。

+1

這可能會分裂頭髮......在安全的世界中,Linux沒有任何問題;這是ARM支持向後兼容的默認設置。在安全的世界中運行Linux和Trustlet可能是錯誤的。在安全的世界中運行安全的外圍設備和另一個非安全的Linux環境中的最小安全Linux技術上是可行的。不要相信微內核的炒作。大多數攻擊都是在API代碼而不是操作系統上。 Linux比OKL4擁有更多的評論者。在OKL4中編寫有缺陷的應用程序/單元與在Linux中編寫應用程序/單元一樣簡單(或更容易)。 – 2014-09-02 16:10:54

+0

Linux也比OKL4大幾個數量級(僅僅爲了該報告而鏈接 - 操作系統本身不安全,只有系統可以安全)。大型代碼庫本質上不太安全。儘管從簡單的技術角度來看,可以高興地使用安全Linux和非安全Linux並存,但這對於提高系統安全性並無幫助。 – unixsmurf 2014-09-02 16:47:26

+0

由於我的澄清似乎並不清楚:我對OKL4瞭解不多,我也不認爲它是安全的。我只是在報告中討論了正式驗證操作系統的問題時才列出了一個鏈接。正如我在回答中首先說的,然後在評論中更強烈地回答。我宣稱它可以在宇宙冷熱死亡之前變得安全。我也聲稱對於Linux的任何規模都是如此。減少攻擊面並不是一個安全的系統 - 它可以使它不那麼不安全。 – unixsmurf 2014-09-03 01:17:24

2

運行Linux作爲安全世界默認情況下,操作系統應爲標準配置。也就是說,安全的世界主管是最值得信任的,並且可以輕鬆轉換到其他模式。 安全世界是ARM CPU的操作概念。

注意:僅僅因爲Linux在安全的世界運行,不會使您的系統安全! TrustZone和安全世界是您可以用來創建安全系統的功能。

但我只想嘗試。如果可能的話,那麼將Trustlet應用程序編寫或移植到此安全操作系統將很容易,特別是對於具有UI(可信UI)的應用程序。

的TrustZone允許的軟件分區。如果您在同一圖層中同時運行Linux和trustlet應用程序,則沒有用處。 trustlet只是一個正常的應用程序。

trustbar的正常模式是在啓動時設置監視器向量頁並鎖定物理訪問。然後,Linux內核可以使用smc指令調用程序在trustlet訪問DRM類型的功能來解密媒體等。在這種模式下,Linux上運行作爲一個正常的世界操作系統,但可以用,在調用功能有限通過您定義的SMC API保護世界

除了運行到calibrate_delay()之外,幾乎所有的初始化函數都運行良好。

這是對症無功能中斷。 calibrate_delay()在等待刻度計數以通過系統計時器中斷增加時運行緊密循環。如果您在安全的世界中運行,則可能需要路由中斷。寄存器GICD_ISPENDR可用於強制中斷。您可以使用它來驗證ARM GIC是否正常工作。另外,內核命令行選項lpj=XXXXX(其中XXXX是某個數字)可以跳過此步驟。

最有可能的一些外圍中斷路由器,時鐘配置或其它中斷/定時器初始化由引導裝載程序在一個正常的系統完成,你缺少這一點。啓動新的電路板總是很困難; TrustZone更是如此。

1

你說的話有幾個問題需要清理。首先,你是否試圖讓安全世界內核運行或正常世界內核?你說你想在西北的SW和Android上運行Linux,但是你的問題是:「我試圖用android Linux內核替換簡單的安全操作系統」。那麼你遇到哪些內核問題?

其次,你提到清除NS位。這並不合理。如果設置了NS位,則清除它意味着您已經在NW中運行(正如所設置的位將指示),執行了SMC指令,切換到Monitor模式,將NS位設置爲0,然後恢復SW寄存器。是這樣嗎?

至於中斷而言,你有沒有正確初始化的直條爲每個執行模式,即安全世界直條,正常的世界直條和MVBAR。除了在NSACR和其他設置中設置適當的值之外,還需要設置所有這三個參數,以確保中斷被引導到正確的執行世界,而不是所有的操作都由SW處理。另外,您確實需要爲所有三種模式分別創建異常向量表和處理程序。您最初可能只能使用一組,但一旦使用TZASC分區您的內存系統,您將需要分離所有內容。

TZ需要大量的配置,而不是簡單地通過設置/取消設置NS位處理。對於Exynos 4412,許多TZ控制寄存器必須正確設置才能在NW中執行。不幸的是,用戶指南的公開版本中沒有包含這些信息。您需要完整版本才能獲得在此處理器上實際運行SW和NW內核所需的所有值和地址。

相關問題