2017-05-14 53 views
2

Security.framework導出函數如SecCodeCheckValidityWithErrors()ref,src用於驗證代碼簽名對證書存儲的正確性。macOS內核如何驗證Security.framework的完整性?

然而,誰檢查督察? Security.framework也被簽名。內核如何在不加載Security.framework的情況下驗證它的簽名以便訪問這些函數?這並不意味着僅僅用自定義實現來代替Security.framework就可以有效地關閉所有的代碼簽名保護。

如果內核Security.framework的靜態版本編譯的,那麼什麼是有它作爲一個單獨的框架呢?如果不這樣做,是否只是盲目地相信這個特定的框架未被篡改?

背景:我最近更換了我的Macbook上的內置鍵盤,它使用錯誤的USB PID宣佈自己,所以它被認爲是JIS而不是ANSI。它可以通過更改AppleUSBTCKeyboard.kextInfo.plist中的單行來修復,但這會使簽名無效。使用所有相關的OID創建自己的CA是不夠的,因爲kext簽名檢查被硬編碼爲只接受基於Apple的證書。解決這個問題的唯一合法方式是支付蘋果100美元/年的費用,主要是爲了使用我自己的電腦。這就是爲什麼我想要使anchor apple不僅要與Apple CA頒發的認證相匹配,而且還要求任何可信CA(包括用戶提供的認證)能夠公開發布補丁儘可能非侵入性,現在我正在調查怎麼做。

回答

1

蘋果不公開文件如何引導信任鏈的作品。

然而,有一些間接證據表明,某些關鍵文件校驗和開機進行:

enter image description here

雖然我沒有親自試過,好像很有可能的安全框架進行檢查因此,你不可能偷偷摸摸地改變這一點。考慮在更高級別重新映射鍵盤。

1

Security.framework實際上是不用於檢查的kext的代碼簽名的邏輯直接負責。這是由kexttools完成 - 從內存中,kextcache檢查創建簽名時預鏈接內核或更新的kext緩存,並kextd加載按需內核擴展時。

的Hackintosh的社區想出了一個改進的工具鏈,讓自己的kext簽名授權。我還沒有測試過,因爲最後一次檢查他們認爲你會使用一些Hackintosh網站的中央CA,這對我沒有吸引力,而且我沒有找到他們用來對付Apple工具的補丁。我沒有花費太多時間在這個上面,所以也許有更多的持久性,你可以使它工作:https://www.tonymacx86.com/threads/gatebreak-signed-kexts-for-everyone.112306/