我想了解差異服務帳戶類型之間的差異。我對這個問題大跌眼鏡。爲什麼在本地系統上運行服務在Windows上不好?
答案是因爲它有強大的本地資源訪問權限,如果可能的話應該使用網絡服務。
但我仍感到無法理解,如果它具有對本地資源的強大的訪問,如何攻擊者可以訪問該帳戶?有什麼方法來破壞賬戶?我明白這是關於安全的,但我不知道如何。這可能是黑客黑客的世界,然而任何人都可以簡單地解釋爲什麼網絡服務帳戶比本地帳戶更好?
在此先感謝。
我想了解差異服務帳戶類型之間的差異。我對這個問題大跌眼鏡。爲什麼在本地系統上運行服務在Windows上不好?
答案是因爲它有強大的本地資源訪問權限,如果可能的話應該使用網絡服務。
但我仍感到無法理解,如果它具有對本地資源的強大的訪問,如何攻擊者可以訪問該帳戶?有什麼方法來破壞賬戶?我明白這是關於安全的,但我不知道如何。這可能是黑客黑客的世界,然而任何人都可以簡單地解釋爲什麼網絡服務帳戶比本地帳戶更好?
在此先感謝。
您運行的每個程序都會增加服務器的攻擊面。
你必須假定一個確定的,惡意的演員可以利用錯誤或漏洞在你的程序,使它做任何事情。通過以最少的特權執行他們的程序來減輕這種負擔。
一些漏洞包括:
Luring attacks,其中攻擊者誘騙你將程序並根據程序的提升權限執行自己的代碼。
Buffer Overrun Attacks,其中發送到方法的額外數據被寫入到相鄰的存儲器中,該存儲器可能是控制流邏輯的目標。
Man in the Middle attacks,指攻擊者僞造郵件到您的程序。
通常情況下,一個給定的服務不明顯容易受到任何這些。在網絡服務(或其他權限降低的帳戶)下運行是一種「比抱歉更好」的策略,承認軟件開發的兩個重要事實:程序員是易犯錯的,攻擊者是有創造力的。
本地帳戶在本地計算機上實際上具有完全的管理權限。因此,任何可能逃離緩衝區溢出並自動執行的代碼都有可能造成破壞。
在另一方面,網絡服務帳戶在默認情況下只在本地系統客戶級別的訪問。因此,即使攻擊者設法找到在服務中發送和執行代碼的方式,代碼將具有有限的訪問權限。
如果你的服務有一個錯誤,它可以允許攻擊者執行任意代碼(如緩衝區溢出),他可以到服務的情況下,本地系統帳戶,這相當於管理員帳戶運行,與你的計算機的一切。因此,您的服務正在運行的權限較低,攻擊者可獲得的權限較小。
最簡單的情況是服務允許服務的用戶在命令行上執行一些代碼。例如,MS SQL Server有一個存儲過程,允許您運行「命令行」命令(即運行程序)。
LocalSystem帳戶是* nix root帳戶的Windows equivilant。它比管理員帳戶更有特權。當您以LocalSystem身份運行時,您可以完全訪問機器上的所有資源。
正如其他人寫的,你應該寫你的代碼,以儘可能少的權限運行。
本地服務和網絡服務之間的主要區別是運行的網絡服務的服務必須在域中進行身份驗證到其他機器(如計算機帳戶我相信)的能力。
請注意,LocalService和NetworkService帳戶都具有「模擬」特權,這是一種潛在的危險特權 - 它允許服務模擬正在調用服務的用戶。如果該用戶是管理員,那麼即使您的代碼在低權限服務中運行,它也可以執行管理員執行的任何操作。如果攻擊者可以利用最小權限服務中的緩衝區溢出漏洞,他們可以將用於模擬調用者的API掛鉤,並等待高權限調用者調用您的服務。這種技術被稱爲「令牌綁架」和MSRC has a great blog post描述了這個問題(幷包含了描述如何緩解許多與使用本地服務和網絡服務帳戶相關的其它風險鏈接)。
這應該去http://serverfault.com – squillman
@squilman:我不同意。如何編碼服務通常決定了它需要什麼級別的權限。對於這個問題的答案應該對任何編寫服務的人都非常感興趣。 – AnthonyWJones
@Anthony:我不同意你的看法。 「爲什麼網絡服務帳戶比本地帳戶好?」 < - serverfault資料。 –