Windows

如何防止 Windows 服務的程式碼注入/交換?

  • April 20, 2019

嘿!

作為我們產品的一部分,我們在客戶的伺服器上有一個本地安裝程序,可以與他們的數據庫進行互動。我們目前正在將其轉換為 Windows 服務。我們已經找到瞭如何使用nssm製作windows 服務,但我們遇到的一件事是如何通過允許攻擊者切換我們的與他們的程式碼。

更具體地說,該服務將執行類似的命令%SOME_DIR%\node.exe my_javascript.js,我們希望避免讓外部播放器簡單地切換 node.exe 或 javascript 文件。

所以我的問題有三個:

  • 沒有管理權限的攻擊者是否可以切換服務使用的文件?
  • 這完全是一個安全問題,還是我們可以假設如果攻擊者有能力達到他們可以切換文件內容的程度,那麼無論如何它幾乎是遊戲結束?
  • 如果這是一個安全問題,我們如何避免這成為一個問題/降低風險?有沒有辦法鎖定文件,只有特權使用者(或服務本身)才能更改文件的內容?該解決方案應允許服務自動更新其程式碼。

非常感謝你的回答!

乾杯☀️

菲爾

看看我能不能解決你的3個問題。

  1. 假設你的服務執行檔,和.js文件位於一個普通使用者可以訪問(寫權限)的目錄,它可以很容易地修改.js文件(添加/刪除程式碼),替換.js文件用一個全新的同名(覆蓋合法的)甚至刪除它(阻止服務正常啟動)。執行檔也是如此。它甚至可以用惡意的替換。
  2. 這是一個安全問題,因為您並不總是需要係統上的管理員權限才能修改文件。您所呈現的情況可能會被具有使用者權限的攻擊者用來獲得管理員權限(權限提升)。
  3. 您應該將您的服務執行檔和 .js 文件放在一個目錄中,只有具有管理員權限的使用者才有寫入權限。這應該可以降低風險。此外,請確保將服務命令放在引號 (" “) 內,以防止 Windows 未引用服務路徑列舉(使用未包含在引號中且包含空格的命令行濫用服務)。

如果您需要有關我的任何答案的更多詳細資訊,請隨時提問!

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