我有一個進程(啓動守護進程),它由OS X中rootd環境中的launchd啓動。該進程是代碼簽名的。如果我破壞了二進制文件,它仍會再次加載。要破壞二進制文件,我在十六進制編輯器中打開可執行文件,並查找並替換任何字符串。有沒有辦法阻止這個進程啓動,以防它被破壞?防止損壞的可執行文件在OS X上啓動
回答
蘋果提供了code signing framework允許可執行檢查自己的簽名和測試應用程序已被篡改。
開始通過獲得與所述呼叫到SecCodeCopySelf代碼對象,然後使用所檢索的SecCodeRef
調用SecCodeCheckValidity或SecCodeCheckValidityWithErrors。
這取決於你的應用程序退出,如果遇到與有效性的問題。由於它在根環境中運行,它也可以從launchd中卸載它自己。
請注意,驗證應用程序所用的時間取決於其大小和文件數量。一個非常大的應用程序包(如XCode)可能需要大約3分鐘,但小應用程序幾乎不會引人注目。
通常,OS X的Gatekeeper不會阻止您執行未經代碼簽名或未簽名的二進制文件,只要您已在下載批准後刪除了隔離屬性(「xxx是從應用程序下載的應用程序Intenet的......「)。另外,如果它看起來像是有意執行它(右鍵單擊,打開或在終端中執行),它就會失效。在某些東西被批准運行後,GateKeeper完成。
所以這是一個很好的保障措施,但是很虛弱的東西,坦率地說。沒有像iOS一樣。
你的目的,你可能想看看Ostiarius。這是最近發佈的工具,它會導致OS X內核拒絕執行未經簽名(或已修改)的任何二進制文件,也可能從運行期間的Internet上執行任何二進制文件。您可以使用xattr
將隔離屬性添加到您的二進制文件,以便它受到影響。
和/或在調用它的launchd腳本,使用codesign -dv
自己檢查簽名,你都願意推出之前。您也可以對應用程序進行沙盒處理,以確保如果它被劫持,則無權做任何事情。
因爲這是一個桌面進程中,同樣的安全研究人員還有另外一個免費的工具,叫做BlockBlock您可能會感興趣。我相信它會阻止二進制文件在第一時間被替換,直到您批准爲止。
坦率地說,這傢伙所做的一切都很酷。可能想檢查其餘的。
- 1. time.h clock()在OS X上損壞?
- 2. 如何防止損壞的文件?
- 3. 如何防止hadoop損壞.gz文件
- 4. 如何阻止xcode調試器在OS X上損壞文件系統NSURL?
- 5. 如何運行在OS X上的可執行文件
- 6. 春季啓動可執行的JAR「無效或損壞的jar文件」
- 7. 如何知道在OS/X中啓動可執行文件的目錄?
- 8. 防止電池「損壞」
- 9. 在OS X上跟蹤互連的Python可執行文件
- 10. 爲OS X製作可執行的可執行文件
- 11. Mac OS X更新後損壞的python
- 12. 如何在Mac OS X上創建ELF可執行文件?
- 13. 在Mac OS X上找不到Pip可執行文件
- 14. 防止在OS X啓動時出現iCloud打開文件對話框
- 15. 防止執行上傳的php文件?
- 16. 損壞的二進制可執行文件?
- 17. 防止在啓動Mac OS X時加載Zend Server CE?
- 18. 從OS X上的NPAPI調用外部可執行文件?
- 19. OS X - 將文件拖到可執行文件上,以文件作爲第一個參數啓動?
- 20. 如何防止堆棧損壞?
- 21. 寫入磁盤後,可執行文件已損壞
- 22. 如何使用c執行mac OS x可執行文件iphone
- 23. maven-tomcat7-plugin生成損壞的可執行文件JAR
- 24. 損壞的winapi可執行文件清單
- 25. 如何防止在$ PATH上查找可執行文件?
- 26. 如何使用[NSKeyedUnarchiver unarchiveObjectWithFile]防止損壞的文件崩潰?
- 27. 反序列化中的文件損壞,如何防止崩潰?
- 28. 在Windows 8中編譯的OS X上運行SDL可執行文件
- 29. Chrome Os損壞/安裝ubuntu
- 30. xcode:在路徑上沒有可啓動的可執行文件
雖然我同意Patrick的工具Ostiarius很棒,但它不會解決問題。儘管二進制文件可能已損壞,但它仍然被簽名,並且Ostiarius不會驗證應用程序的完整性。另外,如果用戶先前已接受要執行的應用程序,則會刪除其隔離標誌,並且Ostiarius仍將允許該應用程序運行。 – TheDarkKnight
不確定。 –
'須藤XATTR -w com.apple.quarantine 「0002; 56dffb86; Safari瀏覽器; 0EC7F021-2F3C-43CC-BC47-7981517CD429」 的/ usr/local/bin中/ ffmpeg',然後運行'的/ usr/local/bin中/ ffmpeg'如果它剛剛在控制檯上運行,它不會被刪除。 –