2012-01-27 16 views
3

是否有在服務器上運行用戶提供的Java代碼的安全問題的完整列表?我已經運行用戶提供的Java代碼時,我應該防範哪些安全風險?

  • 使用超時10秒
  • 在一個單獨的進程中運行的代碼與有限的可用內存使用SecurityMangager以防止文件和網絡IO
  • 用極其有限的帳戶下運行的代碼
  • 文件系統權限

我在FreeBSD服務器上運行這個,如果重要的話。

+1

即使有一個全面的列表,它可能會過時它出版的那一刻。 – jdigital 2012-01-27 23:20:40

+0

您是否擔心拒絕服務? JVM進程是否繼承父進程的文件描述符?你如何限制Classpath?用戶提供的Java可以調用'System.loadLibrary'嗎? – 2012-01-27 23:51:25

+0

服務器上還有什麼? – 2012-01-27 23:52:14

回答

1

我問自己的問題是,'我相信多少人,我相信他們的代碼不會破壞我的系統?總的來說,我的答案不會太多,而且我的投入也不會太多。但是,除了我的頭頂,這裏有一些我想要防範的事情。

  • 無限循環(超時幫助)
  • 狡猾的I/O操作(試圖讀/寫從/到目錄中,他們都進不去)
  • 權限提升代碼(限制賬戶只能在特定的環境下執行,或者具有特定的權限是一個巨大的好處)
  • 創建太多的對象/刪除內存(限制可用內存和/或資源是一個加號這裏)
  • 讀/寫/套接字而不釋放資源
  • 期待從STDIN輸入,如果服務器是無頭這可能是有問題的

很多更要警惕的,所以我會小心行事。儘可能保護每個帳戶和/home目錄(一個簡單的chmod 700 $HOME通常會這樣做),然後嘗試在公開部署之前考慮到的代碼。一旦您對服務器的穩定性感到滿意,請允許其他人測試您的服務器並查看其效果。

1

看起來像一個非常好的開始 - 安全管理器對於沙盒中的其他一些你沒有明確提到的東西是很重要的(比如阻止用戶禁用安全管理器,當然也可以調用任意命令,或者使用本地代碼,或者讓操作系統執行exec文件等)。我假設你從零權限開始,只需授予明確的權限。

安全管理器無法通過過量的資源使用來處理拒絕服務,但您的其他控件可能會解決這個問題(防止網絡連接,控制磁盤使用率,超時以防止CPU佔用 - 如果這意味着我的超時)。

你說「非常有限的文件系統權限」 - 希望這還包括磁盤配額?你是否運行多個不受信任的進程,並共享磁盤空間?用完文件句柄可能是個問題(不確定這些文件是如何管理的)。

仍然存在偶然的JVM漏洞,所以風險取決於服務器上的其他內容,以及問題的實際後果(如果您必須擦除服務器,這有多嚴重?)。

參見:Sandbox against malicious code in a Java applicationExecute external Java source code on server - limit security and resources?

相關問題