Windows Related
Active Directory (AD)
有關AD的基本名詞,可以參考NTUSTISC - AD Note - 環境建置 & Background,包含 Directory Service, Active Directory, Active Directory Domain Service, LDAP, Organization Units(OU), Group Policy Object(GPO)
- 可以把 AD 想像成一種 專門用於身份、權限、群組和資源管理的資料庫 + 服務。
- LDAP是一種用來存取「目錄服務(Directory Service)」的網路協定,目錄服務可以理解為:一個專門存放組織資訊的資料庫,常見儲存內容:
使用者帳號、密碼(hash)、email、部門、群組權限、電腦設備,很多企業內部系統的 登入驗證 都會透過 LDAP。常見實作包括:Microsoft Active Directory,所以既然這是一個database,就存在和database server溝通的場景,query command就可能存在injection的risk -
LDAPS = LDAP + SSL/TLS: 在 LDAP 的基礎上加上 加密層 (SSL/TLS)。
- NTDS.DIT(NT Directory Services Database): 是 Active Directory 的核心資料庫。在 Microsoft Windows Server 的 Domain Controller 上,幾乎所有 AD 資料都存放在這個檔案裡。
lsass.exe VS SAM
SAM只會存取本地用戶的NTLM Hash,而lsass.exe是只要有存取過目前電腦的使用者都會被記錄,例如domain admin或是其他使用者利用smb連過來也會被lsass紀錄
lsass
- 作用:Local Security Authority Subsystem Service,Windows 核心安全服務。
- 用途:管理 登入驗證、使用者 token 和安全政策。
- 安全角度:是非常敏感的系統進程,攻擊者經常嘗試 dump LSASS memory 來竊取帳號密碼(尤其是 NTLM hashes)。
SAM(Security Account Manager)
- 就是一個用於windows的數據庫文件,用於儲存用戶的密碼,並且對於本地端或遠端的使用者進行身分認證
- 在
C:\Windows\System32\config\SAM
| 項目 | NTDS.DIT | SAM | LSASS |
|---|---|---|---|
| 類型 | AD 資料庫檔案 | 本機帳號資料庫 | 系統 process |
| 範圍 | Domain accounts | Local accounts | 記憶體中的 credential |
| 位置 | Domain Controller | 每台 Windows | 每台 Windows |
| 儲存形式 | database file | registry hive | process memory |
| 是否包含 hash | 有 | 有 | 有 (memory) |
LM(LAN Manager)& NTLM(NT LAN Manager)
| 名稱 | 是什麼 |
|---|---|
| LM | 舊的 Windows password hash(非常不安全) |
| NTLM | 新一代 hash + authentication protocol |
- LM 是非常早期的 Windows 密碼雜湊機制,來源於舊版 LAN Manager 網路系統。
- NTLM 是 LM 的改進版,用於 Windows NT 系列。不只是 hash,它也是一種 challenge-response authentication protocol。
- 雖然比 LM 好,但 NTLM 仍然有安全問題,因此在現代 AD 環境中,微軟推薦使用:Kerberos
Net-NTLMv2(Net-NTLMv2 Hash)
Net-NTLMv2 是 NTLM 認證過程中,在網路上傳輸的 challenge-response 驗證資料,與存在本機的 NTLM Hash 不同。
| 項目 | NTLM Hash | Net-NTLMv2 Hash |
|---|---|---|
| 本質 | 密碼的 hash(儲存用) | 網路認證過程中產生的 challenge-response |
| 儲存位置 | SAM / NTDS.DIT / LSASS memory | 不儲存,只在認證時出現於網路上 |
| 可否用來 Pass-the-Hash | ✅ 可以 | ❌ 不行 |
| 可否離線破解 | ✅ 可以 | ✅ 可以(但較慢) |
| 可否用來 Relay | ❌ 不適用 | ✅ 可以(NTLM Relay Attack) |
NTLM 認證流程(產生 Net-NTLMv2 的過程)
- Client → Server:Client 發送認證請求(包含 username、domain)
- Server → Client:Server 回傳一個隨機的 Server Challenge(8 bytes)
- Client → Server:Client 用自己的 NTLM Hash 對 Server Challenge + 自己產生的 Client Challenge 進行 HMAC-MD5 運算,產生 NTLMv2 Response,連同 username、domain、Client Challenge 一起送回 Server
這個在網路上傳輸的 Response 就是所謂的 Net-NTLMv2 Hash,格式大致如下:
1 | |
攻擊方式
- 離線暴力破解:用 Hashcat(mode 5600)或 John the Ripper 對抓到的 Net-NTLMv2 hash 進行字典/暴力破解
- NTLM Relay Attack:不破解 hash,而是把抓到的認證請求直接轉發(relay)到另一台目標伺服器,冒充受害者進行認證(工具如
ntlmrelayx.py)
Responder
Responder 是一個專門用於毒化(poisoning)Windows 名稱解析協定來竊取 Net-NTLMv2 Hash 的滲透測試工具。
原理
當 Windows 機器嘗試存取一個網路資源(例如 \\fileserver\share)時,名稱解析的順序通常是:
- DNS → 向 DNS Server 查詢
- LLMNR(Link-Local Multicast Name Resolution)→ 在區域網路廣播查詢
- NBT-NS(NetBIOS Name Service)→ 在區域網路廣播查詢
- mDNS(Multicast DNS)→ 多播查詢
如果 DNS 查詢失敗(例如打錯名稱 \\filsrver\share),Windows 會 fallback 到 LLMNR / NBT-NS 廣播。Responder 會監聽這些廣播並回應「我就是你要找的伺服器」,然後受害者就會把自己的 Net-NTLMv2 認證資料送給 Responder。
攻擊流程
1 | |
基本用法
1 | |
抓到的 hash 會存在 Responder 的 logs 目錄中,可以直接用 Hashcat 破解:
1 | |
防禦方式
- 透過 GPO 停用 LLMNR:
Computer Configuration → Administrative Templates → Network → DNS Client → Turn Off Multicast Name Resolution → Enabled - 停用 NBT-NS:在網路介面設定中,
TCP/IP → WINS → Disable NetBIOS over TCP/IP - 啟用 SMB Signing(防止 NTLM Relay)
- 使用強密碼(增加離線破解難度)
- 在企業環境中盡可能使用 Kerberos 取代 NTLM
WDigest
是一種 Windows 身分驗證機制(authentication protocol / package),它存在於 Windows 的 LSASS authentication packages 中,主要用途是支援 HTTP Digest Authentication。但在資安領域它更有名的原因是:它曾經會在記憶體中保存明文密碼(plaintext password)。
LAPS(本機系統管理員密碼解決方案)
是 Microsoft 提供的一種 管理 Windows 本機 Administrator 密碼的解決方案,LAPS = 自動為每台電腦設定不同的本機 Administrator 密碼,並把密碼安全地存到 Active Directory。
Prefetch
Windows 用來加速程式啟動的機制,但它同時會留下 程式執行痕跡。檔案位置在C:\Windows\Prefetch\,會紀錄以下info
| 資訊 | 說明 |
|---|---|
| Executable name | 執行檔名稱 |
| Last run time | 最近執行時間 |
| Run count | 執行次數 |
| File accessed | 程式使用的檔案 |
| Volume information | 磁碟資訊 |
Jump List
是 Microsoft Windows 的一個功能,用來顯示某個程式最近開啟過的檔案或常用項目。例如右鍵點擊 Word 可能會看到:
1 | |
Software
- 什麼是svchost.exe?
svchost.exe被稱為服務主機,是一個軟體程式,是Windows操作系統的一部分,被許多Windows應用程式使用。一台計算機的svchost.exe應該位於系統文件夾中的’\windows\System32’。 在啟動時,服務控制管理器啟動svchost.exe,以管理從動態鏈接庫(DLLs)運行的系統服務。因此,對於每個正在運行的服務,都有一個svchost.exe的實例來管理它。 它通過確保各種服務和進程共享資源來幫助減少CPU負荷。動態鏈接庫有被各種軟體應用程式所利用的代碼。它們需要svchost.exe作為額外的軟體來確保運行這些不同服務的效率。這可以確保Windows或其他程式所需的DLL文件被有效加載。
- dllhost.exe
dllhost.exe是微軟Windows操作系統的一部分。dllhost.exe用於管理DLL應用,在任務管理器中可以找到,這個程序對是微軟Windows系統的正常運行是非常重要的。