iT邦幫忙

2026 iThome 鐵人賽

DAY 24
0
Security

從桃子園灘頭到CySA+系列 第 24 篇

Day24|檔案刪了、機器關了,鑑識還找得到甚麼?

  • 分享至 

  • xImage
  •  

Day23 講反鑑識的時候說,攻擊者把 log 清掉、把檔案刪掉,還可以往它沒清到的地方挖,像 Registry、MFT。
但這招有個前提,我是在考前一天晚上才被一題練習題點醒的。

題目大概是一台 Windows 疑似被記憶體常駐的惡意程式感染,而且機器已經關機了,問接下來最好的鑑識手段是甚麼。
我選了去查 Registry 跟 INDX,正解是去找 hibernation file 或 crash dump。

INDX 是 NTFS 拿來記「這個資料夾底下有哪些檔案」的索引,跟 MFT 一樣,檔案刪了之後常常還查得到曾經存在過的痕跡。
所以這兩個地方本身沒有錯,錯在這題的東西根本沒碰過磁碟。

我錯在它有沒有寫進磁碟過?

記憶體常駐(memory-resident),有時候也叫 fileless,意思是惡意程式只活在 RAM 裡,沒有在硬碟上留一個執行檔。
Registry、INDX、MFT 這些地方記的都是「磁碟上發生過的事」,檔案建立過、被開過、被刪過,才會留下紀錄。
一個從頭到尾沒落地的東西,這些地方本來就不會有它。

那 RAM 呢?
關機的那一刻,RAM 裡的東西就沒了,這就是 Day21、Day23 一直在講的 volatile evidence。
那可不可以開機之後再用工具抓記憶體?
我的理解是也不行,開機之後 RAM 裡裝的是一套全新的系統,原本那份已經被蓋掉了,抓到的是乾淨的記憶體。

所以剩下的路只有一條:找 RAM 曾經不小心掉到磁碟上的地方。

RAM 會掉到磁碟上的幾個地方

Windows 上大致有三個。

hiberfil.sys 是休眠檔,放在系統磁碟的根目錄,是隱藏的系統檔。
微軟文件的寫法是,休眠的時候 ==all the contents of memory are written to a file on the primary system drive==,也就是把記憶體整份寫進這個檔案,下次開機再讀回來。
所以如果那台機器出事後被「休眠」而不是關機,記憶體的內容就有機會整份躺在這裡。

但這邊要小心一件事。
Windows 10、11 預設的快速啟動(Fast Startup)也會用到這個檔案,可是它是先把使用者登出,才把 kernel 那一段寫進去。
所以按下關機之後 hiberfil.sys 裡面有東西,不代表使用者那邊跑的程式也在裡面,這個我的理解是要看當時是哪一種關法。

Memory.dmp 是當機(藍畫面)的時候留下來的 crash dump,預設在 %SystemRoot%\Memory.dmp。
系統掛掉的那一刻,會先把記憶體寫進 pagefile,下次開機再整理成這個檔案。
一樣有但書,dump 有分好幾種,微軟文件寫 kernel memory dump 不包含分配給 user-mode 程式的記憶體,所以有 dump 也不保證抓得到想要的東西。

pagefile.sys 是分頁檔,RAM 不夠用的時候,系統會把比較少用的記憶體分頁先搬到這裡放。
它不是一份完整的記憶體,比較像是零碎的片段,但惡意程式的一小塊有機會剛好被搬進來過。

檔案 甚麼時候會寫進去 我的理解
hiberfil.sys 休眠、快速啟動 有機會是整份記憶體,但要看關法
Memory.dmp 當機(藍畫面) 看 dump 類型,不一定有 user-mode 的部分
pagefile.sys 平常就在寫 片段,運氣好會撈到

三個都不是一定有,有沒有開休眠、有沒有當過機、dump 設定是哪一種,都會影響能撈到甚麼。
不過關機之後,也就剩這幾個地方可以碰碰運氣了。

pagefile.sys 為什麼複製不了?

說到 pagefile.sys,還有一個我也錯過的地方。
機器還開著的時候,直接去複製 pagefile.sys,會跳出「檔案已在另一個程式中開啟」,我把它當成權限不夠。

其實這是使用中被鎖住,作業系統開著的時候會一直佔著這個檔案(hiberfil.sys 也一樣),所以就算用系統管理員開命令列也解不開。
要拿它,就是讓 OS 停下來,關機、把硬碟拆下來,接到另一台機器上離線複製,接的時候記得 Day23 講的 write blocker。

但是!!!關機這個動作本身就會讓 RAM 消失。
所以順序上,我的理解是要記憶體的話先在開機狀態下用 live memory capture 的工具抓,再來才是關機拿 pagefile。
這跟 Day23 的 order of volatility 是同一件事,越容易不見的越先拿。

那刪掉的檔案呢?

刪掉的檔案就是另外一回事了,因為它確實寫進過磁碟。

在 Windows 上把一個檔案刪掉(清空資源回收筒那種),通常只是把它在檔案系統裡的那一筆標成「可以重用」,資料本身還在原本的位置,直到被新的東西蓋掉。
Day23 講的 MFT 時間戳就是靠這個。

另一個會留東西的地方叫 slack space。
檔案系統分配空間是一格一格給的,這一格叫 cluster,常見是 4 KB。
假設一個檔案只有 1 KB,它還是會拿到一整格,剩下那 3 KB 沒用到,就是 slack space。
這塊空間如果之前裝過別的檔案,舊資料的尾巴就有可能還留在裡面。

所以 slack space 只會出現在已經格式化、有檔案系統的磁區裡。
磁碟管理裡那塊黑色的「未配置」空間,根本沒有檔案系統,也就沒有「分配了一格沒用滿」這回事,它不算 slack space。

那東西還在,要怎麼撈回來?
這就是 data carving。
它不靠檔案系統的索引,直接在整顆磁碟的原始資料裡找檔案的特徵,例如 JPEG 開頭固定是 FF D8 FF,找到開頭、找到結尾,把中間那一段切出來存成一個檔案。
foremost、Scalpel 都是做這件事的工具。

但 carving 救得回內容,救不回檔名跟目錄。
因為檔名、放在哪個資料夾,那些是記在檔案系統裡的,carving 從頭到尾就沒有去讀檔案系統,所以救回來的檔案只會有工具自己給的編號。

註記:carving 我還沒自己跑過,以上是依據書上跟題目詳解整理的,如果有實際做過的大大歡迎給予回饋!


上一篇
Day23|證據怎麼拿,Chain of Custody怎麼記?
系列文
從桃子園灘頭到CySA+ 共 24 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言