沙箱可協助一般使用者快速建立軟體測試環境,但卻也有可能變成電腦犯罪的媒介。本文將分析沙箱的優缺點與傳統虛擬機器的差異,說明如何啟用沙箱,以及建立尋找Windows跡證的四個步驟,然後講解如何從沙箱中找到曾經使用過的痕跡。
帶有病毒的惡意軟體經常被有心人士釋出於網路上公開讓他人使用,若使用了這些帶有病毒的惡意軟體,就必須承擔自身電腦癱瘓或是個資外洩的風險,這並不是大家所樂見的。因此,微軟在2019年推出「Windows Sandbox」(本文簡稱「沙箱」)。沙箱通常被用來測試可疑或是危險的程式,然而有些心懷不軌的人會反向利用沙箱的特性來發動攻擊,且藉由沙箱的特性來隱藏操作痕跡。但「凡走過必留下痕跡」,仍然能夠找出沙箱曾被執行過的蹤跡。
窺探Windows Sandbox
接著,介紹沙箱及其優缺點、沙箱與傳統虛擬機器的差異,然後說明如何在個人電腦中啟用沙箱。
什麼是Windows Sandbox
微軟於2019年推出「沙箱」功能,主打「使用者能夠擁有輕量化的桌面環境,加入InPrivate Desktop安全功能,且在與自身電腦環境隔離的另一個環境下安全地執行應用程式」,目的是希望沙箱等同於一般的應用程式,但卻兼顧虛擬機的安全性。也由於沙箱能夠在隔離的環境下安全地執行應用程式,因此許多鑑識或資安人員都會利用沙箱檢測疑似帶有病毒的應用程式或瀏覽不安全的網頁等以降低電腦中毒的機率。
沙箱的優缺點
沙箱所具備的優點,包括以下幾項:
‧安全:沙箱中的虛擬環境與本機環境的操作完全一模一樣,但是沙箱與本機環境在操作上是完全分開的,彼此互不影響,就好像兩台電腦同時存在於一台電腦上一般。此特性常常被鑑識或資安人員用來開啟可疑的應用程式或不安全網站,因為其不會影響到本機的環境,就算不小心沙箱環境中毒,只須將其關閉即可。
‧一次性:當把沙箱關閉後,在開啟沙箱這段期間內其中任何的操作,例如新增檔案、資料夾或搜尋的網頁紀錄等,皆會一併被清除,且不易再透過其他方式找回被清除掉的資料內容。當下一次再開啟沙箱時,將會是一個全新的沙箱環境。
‧省時省成本:在尚未有沙箱這項功能釋出以前,想要使用虛擬環境,必須要另外安裝相關的軟體,並使用映像檔等方式來安裝欲安裝的作業系統。不過,沙箱推出後,只須將沙箱的功能開啟,便可達到如同一台虛擬機器的效果,相比傳統的虛擬機器,節省許多時間和成本。
此外,沙箱也有以下幾項的缺點:
‧開啟的沙箱數量:沙箱在同一時間中,一台電腦上僅能開啟一個沙箱,不像傳統的虛擬機器,只要電腦的硬體空間足夠,就能夠同時開啟多台裝置。因此,當須同時建立多個虛擬環境時便無法滿足要求。
‧須另外建立設定檔:沙箱預設支援簡單的設定檔,讓使用者能夠使用最基本的功能,但想要使用一些較為高階的功能,例如使用GPU、設定網路存取等等,須額外建立設定檔,就較為麻煩且難度較高。
沙箱與虛擬機器之差異性
沙箱與虛擬機器有何不同,以下統整了三大差異性(表1):
‧安裝複雜度:若要使用沙箱,僅須進入電腦BIOS將作業系統的核心虛擬化即可。但如果要安裝傳統的虛擬機器,必須先安裝虛擬機平台、取得安裝的光碟映像檔,安裝完後還要對安裝的作業系統做初始化。因此,安裝沙箱相對地簡易且複雜度較低。
‧硬碟占用的空間:虛擬機器不管是平台或是虛擬機器本身都會占用電腦中大量的空間(因本身較多為完整的系統),而當電腦中的空間被占用太多時,可能會導致開機速度變慢或是想要儲存的檔案無法儲存等狀況。而沙箱較不容易出現這種狀況,因未啟用沙箱時,它僅僅占用系統約25MB的空間,相比起虛擬機器,可說是非常的輕量。
‧記憶體占用:傳統的虛擬機器與沙箱在執行時,皆會占用本機電腦的記憶體,但是,當開啟過多的應用程式時,傳統的虛擬機器仍會占用本機電腦的記憶體,沙箱則可以彈性地將記憶體的使用空間讓給本機的電腦使用,讓本機電腦在執行其他應用程式時不會因為沙箱而速度變慢。
如何啟用沙箱功能
想要在個人電腦上啟用沙箱功能,可分成以下三個步驟:
步驟2:先將電腦的「CPU核心虛擬化」,此操作必須先到電腦的BIOS(基本輸入輸出系統,為個人電腦啟動的第一個軟體)進行設定,以聯想的ThinkPad為例,即是啟用「Virtualization Technology」選項。
步驟1:開啟電腦,在左下角的搜尋欄輸入「Windows功能」,如圖1所示,進入後勾選「Windows沙箱」,然後必須重新啟動,沙箱才能夠完成設定。
步驟3:如果上述都有完整設定,重新啟動後,點選左下角的功能列,便能在裡面找到Windows Sandbox的選項(圖2),至此初步設定大功告成,可以開始使用沙箱。
如圖3所示,已成功啟用並開啟沙箱,左上角標示代表此為沙箱畫面非一般的桌面。
取得沙箱四個步驟
沙箱在擁有諸多便利特性的光環下,看起來真的無可挑剔,但是別忘了,在先前介紹沙箱的「一次性」當中有提到,「當把沙箱關閉後,其開啟的檔案、瀏覽的紀錄等都會一併被清除,且很難再透過其他方式將資料復原」。這段話意味著,使用沙箱能夠做到幾乎來無影去無蹤,沒有人能知道使用者到底在沙箱中做了什麼事情,那麼有犯罪意圖的有心人士就有靈活運用的空間了,藉由沙箱去做企圖犯罪的行為,並藉此隱藏自己的犯罪痕跡。
事實上,即使關閉沙箱後資料已被清除,仍然能得知有心人士使用沙箱時留下的蛛絲馬跡。因此,這裡將介紹四個與沙箱相關得以用來檢查電腦系統環境變化的步驟。從四個步驟找出來的內容,稱之為Windows跡證,依序為「檔案結構」、「預取」、「程式執行痕跡」、「遠端桌面快取」。
1. 檔案結構
每一台作業系統為Windows的電腦會有類似的「檔案結構」,此結構中會包含預設的應用程式及功能。每當在電腦中新增「電腦功能」或安裝新的應用程式時,便會改變電腦系統中的「檔案結構」,因此在Windows中開啟沙箱功能時,系統中預設的「檔案結構」會產生些微的變動,但是平常會注意的是安裝好的功能或應用程式是否能夠運作,較少人會去注意安裝後的「檔案結構」變化。為了能夠清楚地比較系統在尚未安裝沙箱及已安裝沙箱後系統中的「檔案結構」變化,這裡將使用一套鑑識工具FTK Imager。FTK Imager截至2021年6月底的最新版本為4.5,下載網址是「https://accessdata.com/product-download/ftk-imager-version-4-5」。
接著,開始示範操作。FTK Imagers這套工具允許載入特定的邏輯或實體硬碟,在預設的Windows系統中,存在邏輯硬碟C(就是常聽到的C槽,本文也稱之C槽),在C槽中會包含Windows預設的系統功能與應用程式。
介紹過Windows的系統預設路徑後,開啟沙箱並重新開啟FTK Imager,如圖4所示,在硬碟C底下多了一個檔案路徑(存放該功能或應用程式之資料夾的路徑),完整路徑是「C:\ProgramData\Microsoft\Windows\Containers\BaseImage\\BaseLayer」。
本文稱以上路徑為沙箱路徑,其中為Windows系統自動產生的編號,每台設備皆不同。沙箱路徑在安裝沙箱之前尚未出現,然而安裝沙箱後便會出現,因此應當專注於此路徑中資料夾的變化。
從上述介紹中,可知開啟沙箱後,透過FTK Imager就能夠發現「檔案結構」中多了一個檔案路徑。接著,將路徑切到沙箱路徑中的路徑「C:\ProgramData\Microsoft\Windows\Container」。
在此路徑中看到一個名稱為「Sandboxes」的資料夾(文中稱為「沙箱資料夾」),如圖5所示,藉由沙箱資料夾能夠得知沙箱是否開啟。接著,透過下列兩個個步驟,來觀察沙箱資料夾的狀態(開始前必須先啟用沙箱)
首先,觀察沙箱資料夾。在沙箱資料夾中會出現一個檔名為隨機產生的資料夾(簡稱為A資料夾),如圖5右邊方框所示,此A資料夾會存放檔名為sandbox的虛擬硬碟「sandbox.vhdx」(vhdx全名為Virtual Hard Disk,為虛擬化硬碟,功能如同一般電腦存放資料的硬碟),如圖6所示。
然後,關閉沙箱,再觀察沙箱資料夾。然而,將沙箱關閉後,再到沙箱資料夾中查看,發現原本存在的A資料夾已經消失不見,如圖7所示(原本圖5中的A資料夾已經消失)。因此,既然A資料夾已經被消除,那麼原本存放在A資料夾中檔名為sandbox的vhdx虛擬硬碟當然也就一同被消除了,虛擬硬碟sandbox.vhdx被清除,意味著沙箱的資料已無法復原。
從上述實驗得知,FTK Imager能夠透過Windows系統的檔案路徑得知是否開啟沙箱,且一旦關閉沙箱,虛擬硬碟sandbox.vhdx遭到銷毀後,沙箱中的資料便無法取回。
2. 預取
「預取」是一個Windows功能,它會記錄Windows作業系統中執行程式的特徵,例如執行的日期與時間、執行次數、執行檔案的路徑等等。「預取」的副檔名格式為「.pf」,預設的檔案存放路徑是「C:\Windows\Prefetch」。
無法直接在滑鼠左鍵點兩下查看「預取」的檔案資料,因此,必須仰賴工具的幫助,本文使用一款開源的工具程式PECmd(https://github.com/EricZimmerman/PECmd),可將「預取」中所記錄的資料轉成網頁html格式。接著,透過以下四個步驟,從PECmd查看「預取」中記錄的內容(以下部分必須先啟用沙箱)。
首先,開啟命令提示字元(本文簡稱cmd)。鍵盤同時按〔Win〕+〔R〕鍵來開啟cmd,進入到Windows命令列。
接著,切換到PECmd下載後存放的路徑,依個人情況而定,本文存放在桌面(Desktop),如圖8所示。
然後,在cmd中輸入「PECmd.exe -d C:\Windows\Prefetch –html 」指令。PECmd.exe是指找到PECmd的執行檔,「C:\Windows\Prefetch」是設定要分析的「預取」檔案位置,以及為輸出的「html」檔案所要存放之輸出路徑,完整指令如圖9所示。
最後,在產出的html檔中找到「WINDOWSSANDBOX.EXE-.pf」檔案。成功執行後,從產出的html檔中找到WINDOWSSANDBOX.EXE-.pf檔案。在此檔案中記錄了不少的資訊,如圖10所示,包括沙箱上次的修改時間、沙箱上次的執行時間、執行沙箱的執行檔以及累計的沙箱執行次數。
經示範操作後,發現透過「預取」可讓資安人員得知沙箱什麼時間點被使用者使用、使用的次數等資訊,但是比較可惜的是,不知道使用者與沙箱內部實際上做了什麼。
3. 程式執行痕跡
除了在前一段提到的「預取」外,其實在系統中的機碼(Registry)也有記錄應用程式執行的相關資訊,這些資訊就是所謂的「程式執行痕跡」。程式執行痕跡最早出現在Windows XP系統,從它的英文名稱中有User,就可以合理推測這個功能與使用者有關連,事實上的確也是如此。程式執行痕跡記錄著使用者如何與電腦系統互動,且都將這些與系統互動的紀錄存放在「NTUSER.DAT」檔案內,此檔案位於「C:\Users\\」路徑,且必須把隱藏的檔名打開才找得到。
接著,進行示範操作。「NTUSER.DAT」這個檔案無法用滑鼠左鍵點兩下直接開啟,必須使用特定的工具,因此這裡採用UserAssistView,這是一款免費的鑑識軟體,可從網路上下載到自己的測試電腦,網址為「https://www.nirsoft.net/ utils/userassist_view.html」。接著,將分成兩步驟說明如何使用UserAssistView取出「NTUSER.DAT」中記錄的「程式執行痕跡」(以下部分必須先啟用沙箱)。
首先,開啟UserAssistView。在UserAssistView中記錄的「程式執行痕跡」,較為重要的資料分別為應用程式名稱、執行次數、上次執行時間、開啟應用程式所停留的總時間長度,如圖11上方框框數字1至4所示。
然後,找出結尾為「WindowsSandbox.exe」的exe執行檔案。找出WindowsSandbox.exe的「程式執行痕跡」後,代表能夠得知沙箱的相關紀錄,接著看到圖11下方框選部分,依照圖11上方各欄位的順序,得知應用程式名稱為\WindowsSandbox.exe、執行次數為第29次,上次的執行時間為2021年6月23日上午01:03:15、開啟應用程式所停留的總時間長度為844,362毫秒。
在工具UserAssistView的協助下,能夠得知「NTUSER.DAT」檔案中存放的系統與使用者互動紀錄,但是「程式執行痕跡」跟前一段提到的「預取」一樣,只能夠得知使用者與沙箱外部有什麼互動,依舊無法得知使用者實際上在沙箱的內部做了什麼。
4. 遠端桌面快取
「遠端桌面快取」是微軟從Windows 2000開始,在原有的遠端桌面連線中,再加入了快取(Cache)的機制,快取中儲存的內容為連線期間被連線電腦的畫面,目的是要改善使用的效能,並且將這些快取的畫面儲存成bitmap圖片格式。
此外,操作沙箱的過程其實也是透過遠端桌面連線協定,原因是除了能夠在沙箱與自己電腦之間檔案互相複製、貼上等操作以外,當沙箱開啟全螢幕時,螢幕最上方也會出現藍色的遠端桌面連線橫幅(如圖12內方框所示)。既然沙箱是使用遠端桌面連線協定,換句話說,沙箱使用畫面也會被記錄到「遠端桌面快取」中。上述提到的bitmap格式會被儲存在「Cache000X.bin」(「X」為數字0、1或2)當中,這個Cache000X.bin檔案放在「C:\Users\\AppData\Local\Microsoft\Terminal Server Client\Cache」路徑(文中簡稱此目錄為快取目錄)。
「Cache000X.bin」為.bin檔案格式,需要仰賴工具來協助取得檔案中記錄的內容,本文使用BMC-tools,這是一款由法國ANSSI國家網路安全機構所開發,由Python撰寫而成可取得.bin檔中的bitmap圖片,下載網址為「https://github.com/ANSSI-FR/bmc-tools」。
由於BMC-tools是由Python撰寫而成,因此必須先在電腦中安裝Python(本文使用3.6.10版,下載網址是https://www.python.org/downloads/release/python-3610/)。成功安裝上述這些工具後,以下透過四個步驟來取得「遠端桌面快取」中的bitmap圖片(以下操作前必須先啟用沙箱)。
首先,在沙箱中開啟一張印有Google的Logo圖片。為了確認擷取出來的畫面確實為沙箱中的畫面,先在沙箱中開啟一張印有Google Logo的圖片,接著便將沙箱關閉,因為先將沙箱關閉,擷取的畫面才會儲存到Cache000X.bin檔案中。
接著,開啟cmd,將目錄切到安裝BMC-tools的目錄底下(帶有bmc-tools.py的目錄)。
第三,輸入「python bmc-tools.py -s
-d 」指令。為將「遠端桌面快取」目錄中的「Cache000X.bin」複製到與BMC-tools同一個目錄底下,為在BMC-tools的目錄底下新增一個存放輸出的bitmap圖片之資料夾(本操作設定資料夾檔名為output),執行完畢,若出現如圖13所示的畫面,即代表執行成功。
最後,查看bitmap圖片。從「output」資料夾中可以發現沙箱畫面中有Google的Logo圖示出現在小畫家裡面,如圖14上方方框證明為Google Logo,而下方方框則證明是在小畫家中開啟。
比起前面講解的「檔案結構」、「預取」以及「程式執行痕跡」等步驟,遠端桌面快取能夠透過一張張的bitmap圖片,來得知使用者與沙箱內部執行了什麼應用程式或瀏覽了什麼網頁內容等等。但比較可惜的是,遠端桌面快取中被儲存的畫面,就目前的技術而言,無法湊在一起形成一張完整的圖片(圖13及圖14所看到圖片其實都是零散且無順序),需要用肉眼一張張想辦法拼湊起來,這是資安人員在查看遠端桌面快取過程中稍微麻煩的部分。
結語
任何科技開發的本意,都是要帶給人們更大的方便,但不可諱言,基於一些利益或是目的的情況下,藉以誘惑犯罪的行為將無可避免。透過本文操作,除了讓大家對沙箱有更進一步的認識外,也會了解到若使用沙箱得宜,它扮演的是測試可疑程式的好幫手,能夠降低使用電腦時的風險,避免遭到惡意攻擊。
<本文作者:社團法人台灣E化資安分析管理協會(ESAM, https://www.esam.io/)/令客思科技有限公司,於2018年成立,由負責人蔡旻嶧率領成員們致力於台灣科技產業的發展,其服務項目包括雲端相關技術的開發與整合、GIS圖學技術、大型系統開發等等。>