sid(安全標識符SID)

Windows NT系統使用 SID 來跟蹤每個帳戶: 如果重命名管理員帳戶,計算機仍然知道哪個帳戶是管理員帳戶。 這是因為 SID 不同於名稱,它永遠不會更改。例如,您可以重命名計算機上的 Administrator帳戶,並且仍將該帳戶用作管理員,這是因為 Windows 真正關心的並不是名稱是什麼;Windows 仍然知道該帳戶是 Administrator 帳戶,因為無論帳戶名稱如何變化,SID 保持不變。

基本介紹

  • 中文名:安全標識符
  • 外文名:Security Identifier
  • 作用範圍:Windows NT
  • 作用:跟蹤賬戶、服務、機器等對象
標識符介紹,作用,號碼組成,頒發機構的值,機器的SID,服務的SID,問題的產生,問題的解決,

標識符介紹

SID也就是安全標識符(Security Identifiers),是標識用戶、組和計算機帳戶的唯一的號碼。在第一次創建該帳戶時,將給網路上的每一個帳戶發布一個唯一的 SID。Windows 2000 中的內部進程將引用帳戶的 SID 而不是帳戶的用戶或組名。如果創建帳戶,再刪除帳戶,然後使用相同的用戶名創建另一個帳戶,則新帳戶將不具有授權給前一個帳戶的權力或許可權,原因是該帳戶具有不同的 SID 號。安全標識符也被稱為安全 ID 或 SID。

作用

用戶通過驗證後,登入進程會給用戶一個訪問令牌,該令牌相當於用戶訪問系統資源的票證,當用戶試圖訪問系統資源時,將訪問令牌提供給Windows NT,然後 Windows NT 檢查用戶試圖訪問對象上的訪問控制列表。如果用戶被允許訪問該對象,Windows NT將會分配給用戶適當的訪問許可權。
訪問令牌是用戶在通過驗證的時候由登入進程所提供的,所以改變用戶的許可權需要註銷後重新登入,重新獲取訪問令牌

號碼組成

如果存在兩個同樣SID的用戶,這兩個帳戶將被鑑別為同一個帳戶,原理上如果帳戶無限制增加的時候,會產生同樣的SID,在通常的情況下SID是唯一的,他由計算機名、當前時間、當前用戶態執行緒的CPU耗費時間的總和三個參數決定以保證它的唯一性。
一個完整的SID包括:
· 用戶和組的安全描述
· 48-bit的ID authority
· 修訂版本
· 可變的驗證值Variable sub-authority values
命名規則:
例:S-1-5-21-31044058 8- 2 500 36847- 5 803 895 05-500
S
1
5
21-31044058 8- 2 500 36847- 5 803 895 05
500
表明這一串是SID
SID的版本號
指頒發機構,這裡就是NT,值是5
表示一系列的子頒發機構,前面幾項是標誌域的
標誌著域內的帳戶和組。一個不是內置賬戶的值將大於等於1000
方法一:開始--運行--regedit--HKEY_USERS,目錄下對應的就是本機用戶的SID。
方法二:開始--運行--輸入cmd,在cmd視窗中輸入whoami /user,即可查詢到當前用戶的SID。
其中很多值都是固定的,比如第一個000001F4(16進制),換算成十進制是500,說明是系統建立的內置管理員帳號administrator,000001F5換算成10進制是501,也就是GUEST帳號了,詳細的參照後面的列表。
這一項默認是system可以完全控制,這也就是為什麼要獲得這個需要一個System的Cmd的Shell的原因了,當然如果許可權足夠的話你可以把你要添加的帳號添加進去。
或者使用Support Tools的Reg工具:
reg query "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProfileList
還有一種方法可以獲得SID和用戶名稱的對應關係:
1. Regedit32:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersion ProfileList
2. 這個時候可以在左側的視窗看到SID的值,可以在右側的視窗中ProfileImagePath看到不同的SID關聯的用戶名,
比如%SystemDrive%Documents and SettingsAdministrator.momo這個對應的就是本地機器的管理員SID
%SystemDrive%Documents and SettingsAdministrator.domain這個就是對應域的管理員的帳戶
另外微軟的ResourceKit裡面也提供了工具getsid,sysinternals的工具包裡面也有Psgetsid,其實感覺原理都是讀取註冊表的值罷了,就是省了一些事情。
3. 使用命令
在CMD(命令行)中輸入whoami /user,可以查看當前賬號的sid(whoami命令詳情請輸入whoami /?查看)

頒發機構的值

數值機構名稱顯示名稱首次引入備註
0
空機構
例如: "Nobody"
1
世界機構
(不顯示)
例如:已知組 "Everyone".
2
本地機構
(不顯示)
例如:"CONSOLE LOGON"
3
創建者機構
4
非特殊機構
5
NT機構
NT AUTHORITY\
由NT 安全子系統管理. 有許多的子域像"BUILTIN" 以及每個活動目錄的域
9
資源管理機構
11
微軟賬戶機構
MicrosoftAccount\
12
Azure活動目錄
AzureAD\
16
完整性級別
Mandatory Label\
作為Mandatory Integrity Control的一部分

機器的SID

NewSID確保此SID採用標準的NT 4.0格式(3個32位子許可權,前面有三個32位許可權欄位)。接下來,NewSID為計算機生成一個新的隨機SID。NewSID的生成需要很長時間來創建一個真正的隨機96位值,它取代構成計算機SID的3個子授權值的96位。
機器的SID被存儲在HKLM\SECURITY\SAM\SAM\Domains\Account下,有兩個值:F和V。V值是在其數據(最後96位)的端部嵌入在其中的計算機SID的二進制值。
SID的破譯:
SID用於檔案,註冊表,服務和用戶許可權。機器SID以十六進制形式從此處確定:
regedit.exe : \HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\V(最後12個位元組)
explorer.exe : \%windir%\system32\config\ SAM
如果啟動時缺少SAM檔案,則在此處以十六進制形式檢索備份:
regedit.exe : \HKEY_LOCAL_MACHINE\SECURITY\Policy\PolAcDmS\@(最後12個位元組)
explorer.exe : \%windir%\system32\config\SECURITY
有時,SID以十進制形式引用。
例子2E,43,AC,40,C0,85,38,5D,07,E5,3B,2B
1)將位元組分為3個部分:
2E,43,AC,40 - C0,85,38,5D - 07,E5,3B,2B
2)顛倒每個部分的位元組順序:
40,AC,43,2E - 5D,38,85,C0 - 2B,3B,E5,07
3)將每個部分轉換為十進制:
1085031214 - 1563985344 - 725345543
4)添加機器SID前綴S-1-5-21:
S-1-5-21-1085031214-1563985344-725345543
一些免費試用程式(例如Start8)也使用機器SID來防止計算機重新啟動試用,儘管有經驗的用戶可以輕鬆更改機器SID。

服務的SID

服務SID是隔離服務的一項功能,是Windows Vista和Windows Server 2008中引入的安全功能。具有“不受限制”的SID類型屬性的任何服務,都將具有添加到服務主機進程的訪問令牌的特定服務SID。
服務SID的目的是允許管理單個服務的許可權,而無需創建服務帳戶,這是一種方便管理的措施。
每個服務SID是使用以下固定原理從服務名稱生成的機器級SID:
S-1-5-80-{大寫服務名稱的SHA-1值}
sc.exe實用程式可用於生成任意服務SID,這裡以dnscache為例,在cmd.exe中輸入:
sc.exe showsid dnscache
命令回顯:
NAME: dnscache
SERVICE SID: S-1-5-80-859482183-879914841-863379149-1145462774-2388618682
STATUS: Active
該服務也可以稱為NT SERVICE \ <service_name>(例如“NT SERVICE \ dnscache”)。

問題的產生

安裝NT/2000系統的時候,產生了一個唯一的SID,但是當你使用類似Ghost的軟體克隆機器的時候,就會產生不同的機器使用一個SID的問題。產生了很嚴重的安全問題。
同樣,如果是重複的SID對於對等網來說也會產生很多安全方面的問題。在對等網中帳號的基礎是SID加上一個相關的標識符(RID),如果所有的工作站都擁有一樣的SID,每個工作站上產生的第一個帳號都是一樣的,這樣就對用戶本身的資料夾和檔案的安全產生了隱患。
這個時候某個人在自己的NTFS分區建立了共享,並且設定了自己可以訪問,但是實際上另外一台機器的SID號碼和這個一樣的用戶此時也是可以訪問這個共享的。

問題的解決

下面的幾個試驗帶有高危險性,慎用,我已經付出了慘痛的代價!
微軟在ResourceKit裡面提供了一個工具,叫做SYSPREP,這個可以用在克隆一台工作站以前產生一個新的SID號碼。 下圖是他的參數
這個工具在DC上是不能運行這個命令的,否則會提示。
下面做一個試驗,先獲得目前帳號的SID: S-1-5-21-2000478354 - 688 78 9 844 - 839 522 115
然後運行Sysprep,出現提示視窗:
確定以後需要重啟,然後安裝程式需要重新設定計算機名稱、管理員口令等,但是登入的時候還是需要輸入原帳號的口令。
進入2000以後,再次查詢SID,得到:
S-1-5-21-759461550-1 453 070 86-51 579 9519,發現SID號已經得到了改變,查詢註冊表,發現註冊表已經全部修改了,當然全部修改了。
另外sysinternals公司也提供了類似的工具NTSID,這個到後來才發現是針對NT4的產品,界面如下:
他可不會提示什麼再DC上不能用,接受了就開始,結果導致我的一台DC崩潰,重啟後提示“安全賬號管理器初始化失敗,提供給識別代號頒發機構的值為無效值,錯誤狀態0XC0000084,請按確定,重啟到目錄服務還原模式...”,即使切換到目錄服務還原模式也再也進不去了!
想想自己膽子也夠大的啊,好在是一台額外DC,但是自己用的機器,導致重灌系統半天,重裝軟體N天,所以再次提醒大家,做以上試驗的時候一定要慎重,最好在一台無關緊要的機器上試驗,否則出現問題我不負責喔。另外在Ghost的新版企業版本中的控制台已經加入了修改SID的功能,自己還沒有嘗試,有興趣的朋友可以自己試驗一下,不過從原理上應該都是一樣的。
文章發表之前,又發現了微軟自己提供的一個工具“Riprep”,這個工具主要用做在遠程安裝的過程中,想要同時安裝上應用程式。管理員安裝了一個標準的公司桌面作業系統,並配置好套用軟體和一些桌面設定之後,可以使用Riprep從這個標準的公司桌面系統製作一個Image檔案。這個Image檔案既包括了客戶化的套用軟體,又把每個桌面系統必須獨占的安全ID、計算機賬號等刪除了。管理員可以它放到遠程安裝伺服器上,供客戶端遠程啟動進行安裝時選用。但是要注意的是這個工具只能在單硬碟、單分區而且是Professional的機器上面用。

相關詞條

熱門詞條

聯絡我們