簡體   English   中英

這是(Python)腳本的安全suid /功能包裝器嗎?

[英]Is this a safe suid/capability wrapper for (Python) scripts?

(注意:我考慮過Linux,但該問題可能適用於其他平台。)

問題: Linux在#上不執行suid! 腳本也不會激活腳本上的“ Linux功能”。

為什么我們有這個問題? 因為在內核解釋程序安裝過程中運行腳本,所以攻擊者可能已替換了該文件。 怎么樣? 以前受信任的啟用suid /功能的腳本文件可以位於他可以控制的目錄中(例如可以刪除不擁有的受信任文件,或者該文件實際上是他擁有的符號鏈接)。

正確的解決方案:以下情況下,使內核允許suid / cap腳本:a)很明顯,調用者無法控制腳本文件-或-像其他幾個操作系統一樣,b)將腳本作為/ dev / fd /傳遞x,指最初由內核打開的受信任文件。

我正在尋找答案:對於無法做到這一點的內核(所​​有Linux),我需要一個安全的“現在”解決方案。

我有什么想法 二進制包裝程序,以安全的方式執行內核不執行的操作。

我想要

  1. 從已建立的(Python)腳本包裝程序中聽到,這些腳本將Linux功能以及suid從腳本文件傳遞到解釋器以使其有效。
  2. 在下面提出的我的包裝上獲取評論

sudo的問題 :sudo並不是一個很好的包裝器,因為它不能幫助內核避免因為剛才解釋的“腳本被替換”陷阱(注意事項下的“ man sudo”這樣說)而崩潰。


建議的包裝

  • 實際上,我想要一個小程序,它生成包裝器
    • 命令行,例如:sudo suid_capability_wrapper ./script.py
    • script.py已經設置了suid位和功能(無功能,僅提供信息)
  • 生成器suid_capability_wrapper可以
    • 生成C(?)源並進行編譯
    • 將輸出編譯為:默認: basename script.py .py或參數-o
    • 設置包裝所有者,組,suid(如script.py)
    • 設置允許的功能,例如script.py,忽略可繼承的有效上限
    • 如果解釋器(例如/ usr / bin / python)在其可繼承集中沒有對應的大寫,則發出警告(這是系統限制:如果沒有suid-root,則無法傳遞功能)
  • 生成的代碼可以:
    • 檢查文件描述符0、1和2是否打開,否則中止(可能為過於瘋狂的環境添加更多檢查)
    • 如果編譯的目標腳本是使用相對路徑編譯的,請通過/ proc / self / exe確定自身的位置
    • 結合自己的路徑和腳本的相對路徑來找到它
    • 檢查目標腳本的所有者,組,權限,大寫字母,suid是否仍與原始(內置)一樣[這是我想包括的唯一不必要的安全檢查:否則,我相信該腳本]
    • 將繼承的功能設置為等於允許的功能設置
    • execve()解釋器類似於內核的工作方式,但是使用我們知道的腳本路徑和我們所獲得的環境(腳本應照顧環境)

suid_capability_wrapper可能會打印大量注釋和警告,以使用戶了解以下內容:

  • 確保沒有人可以操縱腳本(例如可寫的世界)
  • 請注意,suid /功能來自包裝程序,因此無需關心腳本文件的suid / xattr掛載
  • 解釋器(python)被執行,它將從這里得到一個骯臟的環境
  • 它還將獲得通過它的其余標准過程環境,即……(請閱讀exec的手冊頁開頭)
  • 使用#!/ usr / bin / python -E從環境變量中清除python解釋器
  • 自己在腳本中清理環境,或者意識到有很多副作用代碼在運行,這些代碼確實會影響其中的一些變量

你不想使用認領所有,任何文件-你想用它調用Python解釋器的二進制,然后告訴它開始為您問的腳本文件。

它需要做三件事:

  • 啟動Python解釋器(從受信任的路徑,破壞chroot監獄等等)。 我建議靜態鏈接libpython並為此使用CPython API,但這取決於您。
  • 打開腳本文件FD,並自動檢查它是否為suid並由root擁有。 不允許在檢查和執行之間更改文件-小心。
  • 告訴CPython從您先前打開的FD執行腳本。

這將為您提供一個二進制文件,該二進制文件將僅在Python下執行所有由root和suid擁有的腳本。 您只需要一個這樣的程序,而不需要每個腳本一個。 這是您的“ suidpythonrunner”。

如您所料,您必須在運行Python之前清除環境。 LD_LIBRARY_PATH由內核處理,但是PYTHONPATH可能是致命的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM