Ubuntu-12.04

gcc 沙盒工具 - Ubuntu 12.04 上的 AppArmor / CHROOT 監獄

  • February 25, 2018

我們有一個 Node 應用程序作為 C++ 沙盒工具的前端,該工具使用 gcc 編譯程式碼並將結果輸出到瀏覽器。

例如

exec("gcc -o /tmp/test /tmp/test.cpp",
   function (error, stdout, stderr) {
       if(!stderr) {
           execFile('/tmp/test', function(error, stdout, stderr) {});
       }
   }
);

這工作正常。

但是,正如您可以想像的那樣,如果要公開,這將是一場安全噩夢 - 所以我正在考慮兩種保護我的堆棧的選項:

  1. CHROOT 監獄——但這本身不足以阻止目錄遍歷/文件訪問。
  2. 應用裝甲?

所以我的問題是真的,我怎樣才能保護我的堆棧免受任何可能來自的討厭:

A) 使用 gcc 編譯未知程式碼

B) 執行編譯後的程式碼

這完全取決於有多少風險以及您願意為保護它而犧牲什麼。

chroot 監獄可能只提供很差的保護級別,尤其是讓潛在的攻擊者可以訪問網路和主機的所有計算資源,以及提升本地特權升級漏洞的能力(碰巧被發現經常出現在各種軟體包中,甚至包括 Linux 核心)。

MAC 解決方案(SELinux、AppArmor、TOMOYO)將允許更精細的控制,尤其是包括網路訪問,但MAC 並不是那麼牢不可破

另一個級別的沙盒將包括攔截所有系統呼叫 - 幾乎與您在Seccomp中看到的一樣。但顯然,在這裡創建一個有用的配置文件將是一項非常艱鉅的工作。

您可以更進一步,為您執行的程式碼的每個實例分離一個虛擬機或一個容器 - 這是您可能對資源使用和與主機數據分離的最高級別控制的地方 - 但這很可能除了少數使用者的微不足道的情況外,任何事情都變得昂貴。

引用自:https://serverfault.com/questions/451266