Windows Related

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 的過程)

  1. Client → Server:Client 發送認證請求(包含 username、domain)
  2. Server → Client:Server 回傳一個隨機的 Server Challenge(8 bytes)
  3. Client → Server:Client 用自己的 NTLM Hash 對 Server Challenge + 自己產生的 Client Challenge 進行 HMAC-MD5 運算,產生 NTLMv2 Response,連同 username、domain、Client Challenge 一起送回 Server

這個在網路上傳輸的 Response 就是所謂的 Net-NTLMv2 Hash,格式大致如下:

1
username::domain:ServerChallenge:NTProofStr:blob

攻擊方式

  • 離線暴力破解:用 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)時,名稱解析的順序通常是:

  1. DNS → 向 DNS Server 查詢
  2. LLMNR(Link-Local Multicast Name Resolution)→ 在區域網路廣播查詢
  3. NBT-NS(NetBIOS Name Service)→ 在區域網路廣播查詢
  4. mDNS(Multicast DNS)→ 多播查詢

如果 DNS 查詢失敗(例如打錯名稱 \\filsrver\share),Windows 會 fallback 到 LLMNR / NBT-NS 廣播。Responder 會監聽這些廣播並回應「我就是你要找的伺服器」,然後受害者就會把自己的 Net-NTLMv2 認證資料送給 Responder。

攻擊流程

1
2
3
4
5
6
7
1. 受害者輸入 \filsrver\share(打錯字)
2. DNS 查詢失敗
3. 受害者透過 LLMNR/NBT-NS 廣播詢問「誰是 filsrver?」
4. Responder 回應「我是 filsrver」
5. 受害者向 Responder 發起 NTLM 認證
6. Responder 取得 Net-NTLMv2 Hash
7. 攻擊者可以離線破解或進行 NTLM Relay

基本用法

1
2
3
4
5
6
7
8
9
# 啟動 Responder 監聽(eth0 為網卡介面)
$ sudo responder -I eth0 -dwv

# 常用參數
# -I : 指定網卡介面
# -d : 啟用 DHCP poisoning
# -w : 啟用 WPAD proxy 認證捕獲
# -v : 顯示詳細輸出
# -F : 強制 WPAD 認證(更積極)

抓到的 hash 會存在 Responder 的 logs 目錄中,可以直接用 Hashcat 破解:

1
$ hashcat -m 5600 captured_hash.txt wordlist.txt

防禦方式

  • 透過 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
2
3
4
Recent
 ├─ report.docx
 ├─ thesis.docx
 └─ notes.docx

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系統的正常運行是非常重要的。