2012-11-03 89 views
7

我正在研究類似Ideone的系統,其中不可信用戶代碼必須以沙盒模式運行。如何防止使用ptrace執行系統調用

爲此,我一直在尋找ptrace第一層保護的可能性。然而,經過幾次實驗後,似乎:

  • 我可以攔截系統調用,然後修改輸入參數。
  • 我可以攔截一個系統調用後,它已被調用並更改返回值。
  • 但是,似乎沒有任何方法可以防止電話被攻擊(殺死整個應用程序除外)。

我想攔截某些系統調用並返回一個虛假的結果代碼,而不會實際發生調用。有沒有辦法來實現這個?

+0

PTRACE_SYSEMU?根據手冊頁:「這個調用被類似用戶模式的Linux用來模擬所有孩子的系統調用」 – Krumelur

回答

2

請記住,您的沙箱只可如果它運行的代碼不是多線程的,那麼它應該是安全的。你還必須非常小心,以防止沙盒代碼分叉。

見,例如,一紙有關的問題,由羅伯特·沃森下面的討論:

Exploiting races in system call wrappers

全文鏈接到文章中,我將在這裏直接提供的鏈接爲好:

"Exploiting Concurrency Vulnerabilities in System Call Wrappers"

更好的方法似乎仍然是由沃森建議:完全集成的安全框架到內核,並照顧其使用,以避免concu貨幣問題。 Linux和NetBSD以及Mac OS X和其他面向安全的系統已經提供了這樣的框架,因此如果使用這些系統在這些現有框架內實施您的策略,那麼所有這些都是必需的。即甚至不嘗試在系統調用包裝或其他系統調用插入機制中實現您的安全策略。

+0

或者,因爲你打算阻止應用程序調用某些系統調用,所以你可以阻止他們分叉或創建線程。這會大大降低程序的功能。 – petersohn