Windows 取證之BMChache

0x0、概述

BMChache全稱RDP Bitmap Chache,即RDP(遠程桌面協議)位圖緩存。是Windows爲了加速RDP連接時的顯示,減少數據量的傳輸,改善RDP連接體驗的一種緩存機制。

 

0x1、什麼是RDP Bitmap Chache

Remote Desktop Protocol(RDP)是微軟從Windows NT 4.0開始爲了用戶能使用圖形界面通過網絡遠程方式連接到另外一臺計算機而開發的專有協議。

 

當年因爲是撥號上網,網絡帶寬很低,便開發了Bitmap Chache這種技術,爲了增強用戶體驗,降低帶寬延遲,RDP連接後,會將顯示的圖像在客戶端以位圖的形式緩存下來,RDP會話會重用這些圖像進行顯示,而不是時刻都使用網絡進行完整圖像傳輸,而是隻傳輸改變的部分,從而減少了延遲。雖然現在網絡帶寬已經得到很大的提升,但這一技術特性依然還是被保留了下來。

 

BMChache分爲兩種類型,一種是Bitmap Chaces(位圖緩存),一種是Persisten Bitmap Chaches(持久位圖緩存)。Persistent Bitmap Chaches是從Windows 2000的RDP 5.0版本開始引入的技術。區別在於,前一種是臨時緩存,與RDP會話生命週期綁定,後一種是持久化的緩存,不受到RDP會話生命週期的限制,即使會話結束後,內容依然會持久化的存在於文件中。

 

位圖緩存選項可以由用戶配置是否開啓,可以打開遠程桌面連接程序查看:

image-20210708143007579.png

 

需要注意的是,位圖緩存只存在與遠程連接的客戶端系統中,而不是服務端系統中。

在Windows xp中的存儲位置位於:%USERPROFILE%\Local Settings\Application Data\Microsoft\Terminal Server Client\Cache\路徑中:

image-20210708145417701.png

其文件名組成是“bchache + 圖像位深度 + .bmc後綴”,其中的數字表示位圖的質量,如果是bchache2.bmc表示是圖像的位深度是8bit,bcache22.bmc表示圖像的位深度是16bit,bcache24.bmc表示存儲的圖像位深度是32bit,單位是bpp(bits per pixel)。在Windows XP等老系統中,bchache**.bmc文件的最大大小是20MB。

 

在Windows 7及更高版本系統中,其文件存儲在 :%USERPROFILE%\AppData\Local\Microsoft\Terminal Server Client\Cache\路徑中:

 

image-20210708153250489.png

包括兩種類型,一種是bcache**.bmc,一種是Cache****.bin。bchache**.bmc用於老舊的系統,而Cache****.bin文件用於Windows 7及更高版本的系統。Cache****.bin文件大小最高可以達到100MB,當超過100MB,會新增一個文件,文件名中的數值從0000開始遞增。(如:Cache0001.bin、Cache0002.bin),與.bmc文件支持8bpp到32bpp位深度圖像不同,.bin文件的圖像位深度是固定的32bpp。

 

0x2、Bitmap Chache文件結構

 

.bmc文件結構:

 

.bmc文件並沒有固定的頭部標識,但它是由一張張BMP圖像組成的文件,每個單獨的區塊文件頭信息組成如下:

image-20210709094754603.png
 

 

前八個字節(83 8F 42 86 6E C8 EF B3)是圖像的哈希值,接下來的兩個字節(40 00)是圖像的寬度,然後兩個字節(40 00)是圖像的高度,然後四個字節(00 20 00 00)表示圖像的大小(單位是字節),接下來的四個字節(11 00 00 00)表示圖像的特定參數(是否壓縮)。總共佔用20個字節。

 

以這裏的bchache22.bmc爲例,每個區塊的圖像寬高都是0x40,也就是64x64大小的圖像,其圖像的位深度是16 bit,說明每個像素需要2個字節來存儲。那一個區塊的圖像總大小爲 :64x64x2=8192 bytes,如果是24bpp則佔用12288 bytes,32bpp佔用16384 bytes。

 

.bin文件結構:

 

.bin文件有固定的文件頭標識,以字符串RDP8bmp開頭,佔用8個字節,後面四個字節爲版本號,共十二個字節。

image-20210709103314266.png

 

然後是每個區塊圖像的文件頭:


image-20210709103948333.png

 

其中前八個字節(35 CE 5E 97 15 DA 7E E9)是區塊圖像的哈希值,然後兩個字節(40 00)是圖像的寬度,然後兩個字節是圖像的高度(40 00)。與之前的.bmc存儲不同,.bin中的每個區塊圖像的位深度都是32bpp,每個區塊圖像佔用16384 bytes。

 

我們可以參考bmp的文件結構組成,添加其文件頭信息,手動構建bmp文件,把文件導出來:


image-20210709150930150.png

image-20210709151019544.png

image-20210709151105437.png

關於bmp文件的格式可以參考 https://en.wikipedia.org/wiki/BMP_file_format#Pixel_storage

 

0x3、RDP BitMap Chache在取證中的意義

 

在前面,我們已經說明了,RDP BMChache只存在於客戶端,如果攻擊者在橫行移動攻擊中,使用了跳板機RDP遠程連接了目標機器進行了某些操作,取證人員就可以在跳板機上分析BMChache文件進行取證。

 

我們做一個簡單的演示,這裏使用遠程桌面連接一臺遠程機器,執行一些操作:

image-20210712120805348.png

 

然後我們使用工具BMC Viewer查看一下BMC文件的內容:

image-20210712121144554.png

可以看到緩存的位圖圖像中,有我們執行操作的部分內容的圖像。點擊每個區塊的內容,會顯示區塊的文件頭內容,可以根據這個導出圖像.

 

0x4、取證實踐

 

攻擊者通過某些手段已經入侵併拿到了GOT公司職員Little Finger的電腦控制權,攻擊者在這臺電腦上使用了GOT\varys-adm域管理員憑證連接到了域控服務器,攻擊者利用這臺電腦作爲入口點對組織進行橫向滲透。

 

提供給我們的取證資料包括Little Finger計算機的Windows日誌和littlefinger用戶配置文件。我們需要找出Varys-adm的密碼。

image-20210712123943510.png

 

通過獲取的日誌可以發現登錄的記錄:

image-20210712142138351.png

 

在littlefinger用戶的配置相關文件中找到了RDP Bitmap Chache文件:

 

image-20210712143501159.png

我們使用工具對Cache0000.bin進行解析,這裏使用bmc-tools.py工具(下載地址:https://github.com/ANSSI-FR/bmc-tools)。

 


image-20210712143928424.png

 

查看解析出來的圖像:

 

image-20210712144007677.png

通過查看這些圖像,發現了保存GOT\varys-adm密碼的信息:

 

image-20210712144223638.png

從解析的緩存圖像分析,域管理員可能是使用了Windows 10的便籤功能把密碼貼在桌面上了。

 

至此我們通過BMChache找出了密碼信息,用戶名:GOT\varys-adm,密碼:Uncutedition1@#

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章