iT邦幫忙

2026 iThome 鐵人賽

DAY 23
0
Security

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

Day23|證據怎麼拿,Chain of Custody怎麼記?

  • 分享至 

  • xImage
  •  

Day21 講圍堵的時候留了一個問題:主機確認被感染,能不能直接關機?
Day22 的答案是斷網但保持開機,因為記憶體跟連線狀態一關機就沒了。

那留下來之後,到底要怎麼拿出來?
讀到 IR 這個 domain 的時候,證據這一塊我錯了一串,Chain of Custody、legal hold、write blocker、hash 對不上的原因,這幾題練習題我都答錯。

所以這篇就來整理,證據從被發現到被拿去分析,中間要守哪些規矩。

這些規矩到底是為了誰

這些步驟主要是為了讓證據上得了法庭(court),英文叫 admissibility(可採性)。

想像一下對方的律師會問甚麼:
你怎麼證明這顆硬碟就是從那台電腦拆下來的?
拆下來之後到分析之前,經過誰的手?
你怎麼證明裡面的東西沒被你們自己改過、刪過,或是被放了甚麼進去?

只要有一個問題答不出來,鑑識做得再漂亮,證據可能就站不住了。
反過來說,如果只是內部要做 RCA(根因分析)或事後檢討,不打算走法律程序,規矩就不一定要這麼嚴。

下面每一個名詞,其實都是在回答上面其中一個問題。

Legal hold:先叫大家別刪

Legal hold 中文我腦海直譯法律性保留,意思是組織收到通知(可能是官司、可能是調查),從這一刻起,相關的資料不能刪。

它的第一步不是去拿資料,而是通知會碰到這些資料的部門,先保全,不要動。
因為組織裡很多東西是會自己消失的,信箱有保留期限、log 會輪替,備份軟體的保留週期到了,舊的還原點也會被自動清掉。
這些平常是正常的維運,但 legal hold 一下來,就要先把它們停住。

那如果發現該留的資料,已經被例行的清除政策刪掉了呢?
我的理解是先回報法務,不是自己跑去做資料救援。
這在法律上可能牽涉到證據滅失,要怎麼處理是律師的判斷,鑑識或 IT 人員先動手,反而可能把事情弄得更複雜。

Order of volatility:越容易不見的越先拿

Day21、Day22 一直在講「揮發性證據」,這裡把它講完整。

RFC 3227(Guidelines for Evidence Collection and Archiving)第 2.1 節列了一個順序,從最容易消失的開始:

  1. registers、cache
  2. routing table、arp cache、process table、kernel statistics、memory
  3. temporary file systems
  4. disk
  5. 遠端的 logging 與 monitoring 資料
  6. physical configuration、network topology
  7. archival media(像是備份磁帶)

這個順序就叫 order of volatility。
記憶體跟網路連線狀態排在很前面,機器一關、網路一斷就沒了;硬碟排在後面,關機它還在。
所以執行containment的時候「先別關機」,跟這張清單講的是同一件事,切之前先想一下,這個動作會毀掉清單上的哪幾格,那幾格就先拿。

那如果證據不是被我們自己弄不見,是攻擊者先清過了呢?
有些惡意程式做完事會自己收尾,把 event log 清掉、把 prefetch 刪掉,連最一開始進來的那支 dropper 也一起刪,順便把主機上的 EDR 停掉。
prefetch 是 Windows 為了讓程式下次開得比較快留下的紀錄,會記哪些程式跑過;dropper 是第一支進來、負責把真正的惡意程式放下來的程式。
這時如果有SIEM的話,在Log產生的當下就被傳送到另一個位置,多一個保存證據的機會,反之沒有SIEM的話,能找到的證據就少了很多。

這種時候能找的,是它沒清到的地方。
一個是 Registry,程式執行過的痕跡、為了開機自動啟動寫進去的 Run key(像 HKCU\Software\Microsoft\Windows\CurrentVersion\Run),有可能會留下來。
另一個是檔案系統的 metadata,NTFS 有一張叫 MFT(Master File Table)的總表,記著每個檔案的名字、位置跟時間。檔案刪掉之後,那一筆通常只是被標成可以重用,在被新資料蓋掉之前,還有機會讀到它的時間戳。
所以被點名清掉、停掉的東西就先不用找了,往還在的地方去挖。

Chain of Custody:從拿到的那一刻開始記

Chain of Custody(CoC,證據監管鏈)回答的是「這個證物,有誰碰過」。

它是一份跟著證物走的紀錄,大致會記:

  • 這是甚麼東西(型號、序號、外觀狀態)
  • 甚麼時間、在哪裡、被誰取得
  • 之後每一次轉手,從誰手上交給誰、時間、交接時的狀態

重點在「從甚麼時候開始記」。
我的理解是,CoC 是跟著證據起算的,碰到證物的那一刻就要開始寫,而且是先寫再動。
硬碟拿到手,先把型號、序號、時間記下來,才去接機器拉 image,不是做完再回頭補。

這邊很容易跟 legal hold 混在一起。
legal hold 是跟著通知起算的,叫大家先別刪;CoC 是跟著證物起算的,記錄它經過誰。
一個在證據被拿到之前,一個在之後。

紀錄中間只要斷一段,例如某天證物放在哪、誰拿過說不清楚,這就叫 CoC 斷鏈,對方律師就可以主張這段期間證物可能被動過。

如果現場是在實體世界,像機房被闖入、機櫃被破壞、線被剪斷,記錄的方式是拍照。
這種時候去匯出設備的組態或 log,證明的是系統的狀態,證明不了門鎖被撬、機櫃被砸;而現場一旦清理過,就回不去了。
所以判斷發生什麼事、該怎麼取證,也是很重要滴。
照片拍完也是證物,一樣要標記、寫進 CoC。

順帶一提,證物在路上也要顧。
手機這類東西運送的時候,會放進訊號屏蔽袋,袋子再貼防拆封條,證明路上沒人打開過。

Write blocker 跟 hash:證明沒被動過

最後一個問題是「你怎麼證明沒改過」。

Write blocker(防寫裝置)是接在證物硬碟跟鑑識電腦中間的東西,讓鑑識電腦只能讀、不能寫。
為什麼需要它?
因為作業系統掛載一顆磁碟的時候,可能會順手寫一點東西進去,像日誌或存取時間,人沒做甚麼,硬碟內容就已經變了。
這是在實驗室分析階段用的,跟上面運送用的屏蔽袋是不同階段的東西。

接上 write blocker 之後,對整顆硬碟算一次 hash,拉完 image 再對 image 算一次,兩個要一樣。
Linux 上拉 image 常見的是 dd:

dd if=/dev/sdb of=evidence.img bs=64k status=progress
sha256sum /dev/sdb evidence.img

bs 是每次讀寫的區塊大小,GNU coreutils 的說明寫輸入跟輸出的預設都是 512 bytes,一次搬這麼小一塊,整顆硬碟拉起來會很慢,所以通常會把它調大。
if、of 是來源跟目的地,跟速度沒有關係。

hash 相符代表甚麼?
這裡我原本只想到「內容沒被改」,但其實它一次排除了三件事:沒被改、沒被刪、也沒被加東西進去。
最後那個很重要,對方可能會說「這個惡意程式是你們自己放進去的」,hash 對得上就能回應這個說法。

反過來,如果 image 前後 hash 對不上,常見的原因是沒接 write blocker,原碟在過程中被寫到了。或者是取證時失敗,所以承上面所述,拉image之前就要先算一次hash,確保我們拉出來的image是跟原始硬碟一致的。
這跟 CoC 是兩回事,CoC 記的是人跟時間,不會讓 hash 改變。

Day08 用 certutil -hashfile 算 hash,是拿去 VirusTotal 查「有沒有人看過這個檔案」。
這裡是同一招換一個用途,拿來證明「這顆硬碟從頭到尾沒被動過」。

名詞 回答哪個問題 我的理解
Legal hold 資料還在不在 收到通知就叫大家不能刪
Order of volatility 先拿哪個 記憶體、連線先拿,硬碟後拿
Chain of Custody 經過誰的手 碰到證物就開始記,先寫再動
Write blocker 有沒有被寫到 分析時只讀不寫
Hash 有沒有被改、刪、加 前後一致就三個都排除

大家可以想一下,當自己的環境出事時,誰去拿證據、拿完放哪、交給誰,這些有寫下來嗎?


上一篇
Day22|圍堵要切多乾淨?
下一篇
Day24|檔案刪了、機器關了,鑑識還找得到甚麼?
系列文
從桃子園灘頭到CySA+ 共 24 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言