What is PyFlag? PyFlag 原是由澳洲國防部設計,之後被以 GPL License(Free Software Foundation, 2007) 模式釋出為自由軟體。原始設計是做為以資料庫與分析工具所架構的數位鑑識工具,後來又再加上了先進的網路鑑識的能力。它具有以下的特性:
PyFlag 是一種圖形界面的鑑識軟體,它可以以分析比對大容量的檔案、和 log 檔。 PyFlag 有強大的功能,包括載入許多不同類型的 log 檔案、執行磁碟與映象檔的鑑識分析。 Pyflag 也能藉由 tcpdump 快速有效率地進行網路流量分析。 因為 PyFlag 是在 web 之上使用的軟體,它能夠部署於 Server 中並由多位 user 同時共用。資料是載入到 case 中以便與資訊隔離開來。 PyFlag 基於 GPL 授權,可供任何人使用、修改與改良。 Feature List Network Forensics
PyFlag 能分析 TCPDump 的網路記錄格式,支援不同類型的通訊協定。
Log Analysis
PyFlag 擁有強大的 log 分析能力。支援許多 log 格式及提供查詢 log 檔案的強大系統。
Disk Forensics
PyFlag 具備強力的分析鑑識硬碟 images 能力,支援多數檔案系統。也擁有 Carve ( 比對檔案中,出現某一特徵的程序 ) 的能力。
Memory Forensics
PyFlag 利用 Volatility Framework 可支援記憶體鑑識的功能。
The general PyFlag architecture: PyFlag 的主要元件如下: IO Sources :
為了提供壓縮,或在原始 image 中儲存案件有關的 meta-data ,通常 image 除了 dump( 有時稱為 dd 格式 ) 外還會以其他格式儲存。鑑識的資料通常來自不同的格式。 透過IO Source Drivers ,PyFlag 可支援多種不同的image 格式。 IO 子系統使用不同的 driver ,將資料以統一格式呈現,提供了一個標準的介面將 image 呈現給 PyFlag 。
在我們使用PyFlag 分析image 前,我們必須定義一個IO Source 。一個IOSource 僅僅是收集資訊以獲取原始image 的數據資料。
例如,為了讀取一組 Encase 類型檔案,我們需知道使用 Encase 的 Driver 。透過讀取 partition table 來瞭解檔案系統是從那裡開始。這組必要的資訊稱為一個「 IO Source 」,而我們也可以自行將其命名。
一些常用 IO Source drivers 使用包括 EWF(Expert Witness Forensic file format, Kloet , 2007 )這種支援業界目擊證據文件格式,以及標準 IO Source 也增加了可以直接取用 dd program 的原始 image 檔的能力。這提取可以把容量非常大的 PCAP 檔案以 EWF 格式儲存,以利壓縮、 hash 認證和檔案 metadata 等功能的使用。
The Virtual File System : 檔案系統是數位鑑識的核心,因此 Virtual File System ( VFS )是 PyFlag 的核心。 PyFlag 使用源自 Unix 的觀念是, “ 所有的東西都是檔案 ” 。 VFS 是一個抽象的檔案系統。主要功能是向用戶提供信息。在 VFS 中的檔案不一定存在於 image 中,但所呈現信息已經由 VFS 推導出來。 VFS 本身只是儲存 inode 和檔案名稱的關係。
VFS 基本上是一個樹狀結構,把 PyFlag 所有的物件在裡頭呈現。 VFS 是模仿真正的檔案系統,物件被稱為 inode 。 VFS inode 是個字串,它可以描述出這個物件如何獲得,物件相關的路徑、名稱等。這種途徑把 inode 在 VFS 下安排成一個目錄結構。內部的物件以 inode 的 ID 呈現,這種用法常見於一般工具中。 PyFlag 採用的新技術是可以把取自 Data 的來龍去脈以 inode string 來呈現。這種模式讓使用者可以很方便地檢視每個推論來自何處。
Virtual File System(VFS) 提供了三個主要功能:
開啓檔案 在 VFS 中建立新檔案 在 VFS 瀏覽檔案結構(檔案名稱和目錄)。
l The File System Loader :
新建一個 case 後, PyFlag VFS 是空的。我們必需先塞入原始資料,這便是由 File System Loader 的工作。
透過 IO Source 把 imgaes 載入後。 File System Loader 會檢查檔案系統的位置,並發掘所有在其中的檔案。負責把調查的檔案系統中所找到的檔案列表填入 VFS 的 inode 中。 File System Loader 是一個特殊的模組,它可以從一個實際的檔案系統(如 NTFS 或 ext2 )來處理和填入 VFS inode 。也能建立虛擬 inodes 來呈現抽象物件。
File System Loader 有很多種,大致上可以分為幾種類型:
sleuthkit 的文件系統驅動程序:
這類 drivers 使用 Brian Carrier's Sleuthkit 的程式讀取許多種類型的檔案系統,如 NTFS 、 FAT 、 ext2 、 ext3 、 ffs 等。 Mounted File System Driver:
這個drver 只能與已掛載的IO Source 一起運作,而它 是在一個給定的目錄下,來記錄所發現的文件和目錄之用。 PCAP Filesystem:
這個虛擬的檔案系統提供了存取 PCAP 檔案的能力,讓 PyFlag 能從事網路鑑識。 例如: PCAP FileSystem Loader 在 VFS 中呈現代表的 TCP Stream 的節點,而記憶體鑑識 Loader 把 porcess IDs 和 memory structure 在 VFS 呈現。每種 filesystem loader 把它的 inodes 用一個特定的掛載點載入到 VFS 中。這讓許多不同的 IO Source 和 filesystem 可以同在 VFS 中呈現。藉由這些 source 產生 VFS 的 inodes ,應用程序整個一起呈現共同比對。
l Scanners:
VFS 是 PyFlag 的核心,它提供 inode 的存儲場所。而我們可以使用各種不同的 VFS File Drivers 開啓這些 inode 。 File System 可以從 IO Source 匯入到 VFS 。但 File System Loader 不是將檔案系統匯入 VFS 的唯一方式。我們也可以用掃描的方式來完成這個動作。
掃描是指使用一個或多個 scanner 來檢查某個目錄的過程。 scanner 是一種能夠細察與蒐集檔案資訊的模組元件。這過程中可能又某些檔案會被新增至 VFS 中(可再次掃描)。
掃描一組檔案可以從網頁瀏覽檔案系統的頁面開始,或直接從 Load Data 的選單進行。 PyFlag 有許多不同的 Scanner 。 Scanner 是一種小型的、專門為了從檔案系統中搜索檔案及資訊所建立的程式碼。例如, Zip file Scanner ,旨在搜尋所有壓縮文件,並創建 VFS 的 inode 來表示 zip 檔的內容。
每次 Scanner 創建一個新的 VFS 檔案,便會使用一整套完整的 Scanner 去動作。假設 pst 檔案 Scanner 發現了一個 pst 檔案,從而建立新的 VFS inode 處理每一封電子郵件發現的附件。然後 Zip Scanner ,可以掃描發現其中一個附件是一個壓縮檔,從而建立了一套 VFS 的 inode 代表壓縮檔的內容。然後 Virus Scanner 發現一個可能這些文件中的某一個檔案是病毒。
圖 2.scanner
l The GUI and Table widget:
GUI 提供了一個能檢視 Scanner 所掃瞄成果和使用 VFS 的界面。 PyFlag 最強大的工具集是 table viewer 。這個工具允許搜索極其複雜的數據。下圖顯示了一個典型的使用表的部件,儘管它是用在許多地方在 PyFlag 。
圖 3.Table widget
l Scripting and automation:
PyFlag 擁有強大的 GUI 快速導覽鑑識分析結果。但在任何硬體下,鑑識工作是一個緩慢的過程。硬碟 image 大小目前發展呈指數型增加,許多鑑識工作需要越來越多時間去進行。 PyFlag 會將鑑識分析結果 cache 起來,讓鑑識分析工作只需要進行一次。之後從 cache 中讀取操作起來會快上許多。
PyFlag 的優點之一是使用者界面( UI )。換句話說,使用者如何與軟件交互,可以方便地改變而不用改變主要的程式碼。這讓使用者能擁有多種不同於 GUI 界面的選項。
命令行界面( CLI )一直是 Unix 的核心概念。雖然大多數新用戶擔心不懂得如何使用 CLI ,聲稱這是不直覺式、比 GUI 更難使用。然而 CLI 仍不被遺忘,原因就是 CLI 是更強大。在某些情況下,它允許批次或使用 Script 方式處理工作。 PyFlag 允許用戶互換任何模式來操作,因此,使用者如果不熟悉 CLI ,仍然可以使用 GUI 。
Flash commands:
Flash 可以從 PyFlag 主目錄下鍵入 ./flash :
mic@debian:~/pyflag$ ./flash
Welcome to the Flag shell. Type help for help
Flag Shell: />help
PyFlag shell allows direct access to the filesystems. Command line expansion is supported.
The following commands are defined, type help command to find out more:
['load', 'execute', 'set', 'help', 'less', 'cd', 'pwd', 'exit', 'ls', 'command', 'cp', 'istat']
Flag Shell: />help load
load case.iosource: loads the iosource within case into the shell.
l Network Frensics:
在數位鑑識調查中最有價值的證據之一是網絡所擷取的資訊。網絡流量可以呈現了豐富的價值和安全 / 管理的價值訊息。可惜一般被設計來分析網絡流量的工具(例如: Ethereal ),只能調試網路問題或解剖通訊協議。但在鑑識調查中,高層次訊信息如 FTP 、 Email… 等社交網路才是重點。
模組目的是提供高層次的分析資料,同時提供足夠的信息來查明準確掌握每一塊數據的來源。例如,當瀏覽聊天訊息時,我們可以精確地看到每個聊天訊息的封包。
多層次地進行遞歸分析數據是 PyFlag 架構的優點之一,它可以發掘檔案被封裝在其他檔案中。這種方法是應用在分析網路通訊協議上最是理想,一般高層協議是架構在底層通訊協議之上。
PyFlag 通常採取以下步驟來剖析網絡流量:
對 PCAP 檔案進行分析和並從中擷取封包。 將這些封包在不同低層通訊協議中分析,如以太網, IP , TCP 或 UDP 。 使用 TCP stream reassembler 將有關 TCP 封包收集到 stream 中。 Reassembler 思索封包重送並按順序排序。 所產生的 Stream 用高層通訊協議的解析器(如: HTTP, IRC, MSN Chat )剖析。 The PCAP Filesystem
我們首先載入一個 IO Source 並將其命名,把 PCAP 檔案載入到 PyFlag 。然後選擇 PCAPFS 檔案系統。 PCAP 檔案系統,掃描 IO Source 並把封包建立索引。然後在 VFS 建立一個獨立檔案稱為 rawdata 。該檔案代表著原始封包資料。
The Network Scanners
初始的 VFS 只有一個檔案, network scanner 負責填入 VFS 的新檔案。以下是一些重要的 network scanner :
Steam Reassembler Scanner Steam Reassembler Scanner 將 TCP 封包分類到個別的 stream 。相對應的 VFS Driver 就可以使 stream 資料像個一般檔案使用。
HTTP Scanner 掃描儀的 HTTP Scanner 管理已重組的 Stream 並把曾造訪過的不同的網址分類。然後為 HTTP 下載的物件內容建立 VFS 的 inode 。
POP/SMTP Scanners 在 POP scanner 管理 POP stream 並辨識已傳送的 email 。依靠 RFC2822 scanner 的幫助,這個 scanner 可以為傳送的電子郵件中的附件建立 VFS 的 stream 。
MSN/IRC Scanners 記錄所有聊天信息,並讓它們顯示成便於檢索的格式。 MSN 檔案傳輸,也可以被進一步地掃描進 VFS 中。