隨著PowerShell這套內建工具程式功能的強化,目前桌上型電腦最多人使用的Windows系統,已可協助電腦鑑識做證據蒐證與分析,惟此項工具程式使用時較為複雜,因此本文將介紹以PowerShell為基礎的開源工具PowerForensics,來當作在Windows平台的另一項取證利器。
儘管目前手機、平板電腦等已有取代部分桌上型電腦的趨勢,但目前桌上型電腦或筆記型電腦還是執行各項事務的主體,其中Windows系統在這個領域內還是占有相當高的市占率,因此在電腦鑑識上,從Windows系統中取得證據一直是主要研究的標的。
在Windows系統中要進行批次作業,最常用的莫過於DOS指令,DOS指令簡單易用,方便調查人員透過DOS指令搭配其他工具程式進行蒐證。然而,DOS指令的功能相較於UNUX/Linux的Shell就顯得相當陽春,尤其在蒐集系統資訊與進行後續分析處理時更顯得不足。因此微軟公司逐步地發展另一套可與UNUX/Linux的Shell比擬的PowerShell,PowerShell的功能日漸強大,如今已納入電腦鑑識的工具包。
PowerShell的缺點在於,若使用於電腦鑑識,指令及語法較為複雜,須耗費不少時間學習,因此本文改為使用另一套以PowerShell為基礎的開源工具PowerForensics進行電腦鑑識。
相關知識說明
接下來,先就PowerShell工具與PowerForensics軟體做一簡要的敘述。
PowerShell
微軟為了能開發出相當於UNIX/Linux中功能強大的Shell程式,在2006年推出PowerShell。原本PowerShell僅包含在微軟的Windows系統之中(如Windows Server 2003/2008/2012/2016、Windows XP/7/8/10),提供系統管理者以指令或Scirpt程式來管理系統,並可混合使用以往的DOS指令與部分的Linux指令(如cp、mv、man、pwd等),讓系統管理者在處理系統作業上更加容易。
目前PowerShell已經開放原始碼,並提供Linux與Mac OS版本,且隨著PowerShell的強化,管理者已經可以使用PowerShell來操作與管理系統、取得及分析系統資訊,也因此PowerShell也足以做為電腦鑑識工具。
然而,要操作PowerShell來執行鑑識作業,需要對PowerShell有足夠的了解才行。雖然有許多熱心人士已編寫相關的程式碼可以應用,但有時過於片段,欠缺整合應用,指令及語法稍嫌複雜,將影響電腦鑑識效率,因此以下介紹一套PowerShell-based的整合工具PowerForensics。
PowerForensics
PowerForensics是一款以PowerShell為基礎的鑑識工具框架(Framework),提供電腦鑑識及分析的工具,可在Windows的NTFS與FAT系統下使用(https://github.com/Invoke-IR/PowerForensics)。
PowerForensics提供開機磁碟(Boot Sector)、NTFS檔案系統、Windows系統操作跡證(Artifact)、快取資料(Cache)、註冊檔(Registry)等標的操作工具,並提供bit-copy功能的複製工具,功能已算是相當完整。
PowerForensics有兩種安裝方式,一種是透過PowerShell指令來安裝,另一種則是直接使用PowerForensics套件,再安裝至指定路徑。這裡將以PowerShell指令安裝的方式做說明。首先執行Windows PowerShell(系統管理員),因此得以系統管理員的權限來進行。接下來,如圖1所示執行「find-module -Name *PowerForensics*」,讓系統搜尋是否有PowerForensics的相關套件。如果有找到,就可以再執行「Install-Module -Name PowerForensics」,將這套工具安裝至自己的系統上。
安裝完成後,就可以啟用這套工具,以「Import-Module PowerForensics」將這套工具帶入目前的操作環境之中,並且能夠使用「Get-Command」指令來查詢有那些工具可以使用,如圖2所示。
鑑識方法介紹
PowerForensics有許多種電腦鑑識的工具,包括針對開機磁區、檔案系統、系統設定、Windows Registry、使用者操作資料等,另外要順利執行這些工具,PowerShell須以系統管理者身分執行,以下就功能進行分類,並做簡要介紹。
開機磁區相關工具
PowerForensics可用於開機磁區的相關工具,分別說明如下:
Get-ForensicMasterBootRecord:取得主要啟動磁區的資訊。
Get-ForensicGuidPartitionTable:查詢GUID磁碟分割表的資訊。
Get-ForensicBootSector:取得開機磁區的資訊。
Get-ForensicPartitionTable:查詢磁碟分割表的資訊。
執行電腦鑑識一開始,需要先確認操作的環境,包括所進行操作的磁碟資訊,所以必須取得磁區的資訊以磁碟分割表的訊息等。若是尚未能確定磁碟的路徑,可以先使用PowerShell透過WMI來取得,指令為「Get-WmiObject -Class Win32_DiskDrive」。
如果需要查詢磁碟0的訊息,可執行「Get-ForensicPartitionTable -Path \\.\PHYSICALDRIVE0」指令來取得該磁碟的磁區訊息,如圖3所示。
取得檔案系統資料
PowerForensics可用於取得檔案系統資料的指令,如下所述:
Get-ForensicFileRecord:由指定硬碟區中的主檔案表(Master File Table,MFT)取得檔案相關紀錄。
Get-ForensicVolumeBootRecord:取得指定硬碟區的開機磁區資料。
在得知磁碟的狀況之後,如果確認要操作的是C槽,可以透過「Get-ForensicVolumeBootRecord C:」指令進一步檢視磁碟的檔案系統狀態,評估所使用的磁區與主檔案表(Master File Table,MFT)是否正確,如圖4所示。
為了將所有檔案訊息進行蒐證,需要檔案在MFT中的相關訊息,其中最主要的就是檔案創建(Born)、修改(Modified)、存取(Access)等時間,可透過「Get-ForensicFileRecord」指令來取得,所獲得全部檔案的訊息如下:
Get-ForensicFileRecord -VolumeName \\.\C:
若只需要取得特定檔案,例如Windows計算機(calc.exe)程式的訊息,就直接指定該檔案所在路徑即可,如圖5所示:
Get-ForensicFileRecord C:\windows \system32\calc.exe
取得系統設定資料
若想取得系統設定資料,可使用以下的指令:
Get-ForensicAlternateDataStream:取得NTFS中Alternate Data Streams的訊息。
Get-ForensicShellLink:取得有關捷徑(.LNK)的訊息。
Get-ForensicExplorerTypedPath:查詢曾在Windows檔案總管中輸入過的路徑。
Get-ForensicNetworkList:獲得網路連線資訊。
Get-ForensicScheduledJob:取得排程的資訊。
Get-ForensicSid:查詢系統的SID(Security Identifier)。
Get-ForensicTimezone:取得系統目前設定所在時區(如臺灣為臺北時間)。
在NTFS檔案系統中,可允許檔案加入其他的資料串流(Alternate Data Stream,ADS),若以一般檔案列印,無法直接看到被加入的資訊串流,須透過其他指令方能顯示。
例如建立一檔案內容為「Hello, I am AVATAR.」,再將「This is a secret from ICCL」的字串加入到test.txt檔案中,若以type指令來查看會無法見到後來所加入的字串,須透過more方能得知,如圖6所示,但如果不知道所加入的名稱為hidden.txt,也不易得知其內容。
可透過Get-ForensicAlternateDataStream來取得整個磁區的資料,或是僅針對特定檔案。例如,當想取得C槽中所有的ADS資料時,執行如下指令:
Get-ForensicAlternateDataStream -VolumeName \\.\C:
如果想取得「D:\test.txt」的ADS資料,則執行如圖7所示的指令:
Get-ForensicAlternateDataStream -Path D:\test.txt
只要透過Get-ForensicSid與Get-ForensicTimezone指令,就能取得系統上的SID值與時間資訊,如圖8所示。由於SID值通常具有唯一性,配合時間即可做為數位證據。
取得Windows Registry的資料
當需要取得Windows Registry的資料時,可使用以下的指令工具:
Get-ForensicRegistryKey:取得特定的系統註冊機碼。
Get-ForensicRegistryValue:取得特定系統註冊機碼的設定值。
Windows註冊檔記錄了許多系統的設定資料與使用者的資訊,對於電腦鑑識工作相當重要。透過Get-ForensicRegistryKey 與Get-ForensicRegistryValue指令,可直接解析註冊檔的資料,搭配指令鍵值,更快速地找到機碼的資料。例如,想要查詢WinRAR的相關註冊機碼資料,即可搭配相關工具快速取得,如圖9所示。
取得使用者操作資料
可用於取得使用者操作資料的指令,介紹如下:
Get-ForensicOfficeFileMru:取得使用者最近採用Office所開啟的檔案列表。
Get-ForensicWindowsSearchHistory:取得使用者最近在Windows搜尋的關鍵字。
Get-ForensicUserAssist:檢視使用者近期的系統操作紀錄。
在Windows系統中,許多與個別帳號相關的訊息資料會存放在個人profile路徑之下的NTUSER.DAT檔(預設為隱藏),這個檔案在使用者登入期間無法直接開啟,即使開啟了,也無法直接判讀,所以需要相關工具協助解析。
這裡使用「Get-ForensicUserAssist -HivePath C:\Users\user\NTUSER.DAT」來取得「user」帳號下的操作紀錄,從中可見到「mspaint.exe」在2019年3月18日下午1時52分43秒被執行,如圖10所示。
情境模擬演練
台安公司近來發現有內部網路攻擊事件發生,為避免公司的機密資料外洩,並且要確認是內部員工或是有系統遭受入侵所致,於是請資訊部門進行清查。
資訊部門先就防火牆與入侵偵測系統紀錄分析,評估可能遭受SQL Injection攻擊,並查出數台電腦有嫌疑,於是規劃逐台進行查核。另公司電腦均使用Windows系統,且因尚無損害發生,暫無須採用嚴格的電腦鑑識程序,所以資訊部門決定使用PowerForensics進行電腦鑑識。在每台電腦上,資訊部門執行以下步驟:
步驟一:啟用PowerForensics
以系統管理者身分啟動PowerShell,確認系統環境並安裝PowerForensics。
步驟二:確認系統時區與SID
使用Get-ForensicSid與Get-ForensicTimezone記錄系統的SID與Time Zone,確認系統的時間與識別碼。
步驟三:匯出近期執行或開啟過的程式、捷徑與文件
使用Get-ForensicUserAssist來取得使用者近期的系統操作紀錄,並以Get-ForensicOfficeFileMru取得使用者最近利用Microsoft Office所開啟的檔案列表。
步驟四:檢測可疑的程式
到最近執行的程式或文件列表中查看是否有可疑程式,配合惡意程式進行檢測。
最後,在員工A的電腦發中現曾有執行可疑的程式Havij.exe,如圖11所示。經過分析比對後,確認為執行SQL Injection之工具程式,再比對SID與公司Active Directory上的紀錄,如圖12所示。 v 比對員工A的登入紀錄後,確認為員工A執行網路攻擊。而員工A見到原本的操作流程被解析出來,只能坦承因一時好奇,下載並學習使用駭客工具,資訊部門將調查結果呈交執行長,員工A因涉及資安事件的不當操作與處理,而得由公司重新派送學習科技資安教育訓練,以強化科技資安的管理。
結語
由於目前一般使用者還是以Windows為主,鑑識標的最常接觸的也是Windows系統,因此若要Windows上取證,透過Windows的工具會較為簡便,而且在微軟開始推動PowerShell之後,Windows平台便多了另一種電腦鑑識的好選擇。對此,本文介紹了PowerForensics,以作為電腦鑑識工具使用,並提供相關的使用方法,在實驗過程中,也可見識到現今PowerShell的強大之處,靈活使用幾乎足以取得Windows系統的相關跡證,若微軟未來仍持續以PowerShell作為系統操作指令工具的話,相信在未來的電腦鑑識中,這將占有一席之地。
<本文作者:台灣E化資安分析管理協會(ESAM, http://esam.nctu.me/esam/)從事E化資訊安全的分析管理與學術研究, 並與政府、產學及國際資安機構交流與合作,推廣資訊安全應用與發展, 協助企業、產業評估資安分析與風險。>