auditor

auditor是利用加密雜湊函數進行快速完整性審計的取證工具 。

它與其他流行的工具(fsum、hashdeep、sha256sum 等)類似,但具有使數位資料審計更簡單、更 快捷的功能。

auditor支援多種哈希演算法。預設值為sha256,這是 NIST 自 2015 年以來推薦的演算法(請參閱 NIST 關於雜湊函數的政策)。

預設情況下, Logothash method 已啟用,但此模式可以停用。

完整性鏈

所採用的審計流程auditor是基於 完整性鏈的概念,由儲存完整性資訊的審計文件提供。

此過程中涉及的術語有::
Audit_FullList是包含每個已處理原始資料檔案完整性資訊的稽核文件。

Stamp:是文件的實際完整性資訊Audit_FullListStamp執行相關操作時,資訊始終會重新計算並顯示。 :是儲存創建時間

Audit_Stamp的審計文件。StampAudit_FullList

完整性鏈
圖 1 - 過程中涉及的文件

完整性鏈會依照以下順序產生(預設):

內部的資料檔案input_path經過處理後,會產生完整性資訊(雜湊值、大小、相對檔案路徑等),這些資訊儲存在Audit_FullList

Audit_FullList也經過處理,生成Stamp,內容列印在終端並儲存在Audit_Stamp

完整性鏈檢查按上述流程的相反順序Stamp進行,即重新處理文件並對照審計文件檢查完整性。同時,也會重新計算完整性值,將其列印到終端,並與儲存在審計文件中的值進行比較Audit_Stamp,以驗證其是否匹配。

為繼續產生稽核文件並確保未來能夠正確、安全地執行完整性鏈驗證,請依照下列步驟操作:

  1. 將資料檔案整理到一個特定資料夾(稱為 input_path input_path)。安裝 audit 後,開啟命令終端並執行命令 。預設情況下,此指令會在 input_path 資料夾的根目錄下auditor hash input_path建立 audit 檔案。 (如有需要,可以更改此設定。) Audit_FullListAudit_Stamp
  2. 保存所有數據,包括審計文件,並 列印文件內容 Audit_Stamp或 對其進行數位簽名
    如果您跳過此步驟,任何人都可以篡改資料並產生新的稽核文件,從而破壞完整性驗證。 如果您目前無法使用印表機或數位證書,可以使用免費的時間戳機構(例如freetsa.org,使用線上簽名功能) 在線上簽署文件。
  3. 您也可以建立一個包含資料檔案和稽核檔案的軟體包(例如 ZIP、TAR 或其他格式)。將此軟體包備份到不同的媒體。
  4. 之後,當有人執行檢查時 auditor check,將執行上述完整性鏈。流程結束時, Audit_FullList將重新計算完整性資料並將其列印到終端 ,該資料必須與上一步中列印或數位簽章的值完全相符。 如果不匹配,則完整性檢查無效
  5. 您也可以使用 中的資料來驗證各個原始資料檔案的完整性 Audit_FullList。請參閱 的使用部分中的範例 auditor check

用法

按此查看簡要使用手冊。

安裝到系統後auditor,您可以如下使用:

auditor subcommands: 資訊
hash
lock
check
info
clone
chkcopy

hash這是法務審計的第一步。它會產生審計文件,從而可以驗證文件的完整性。

子指令 hash 的基本用法

auditor hash input_path

這將:

  1. input_path使用預設演算法對 檔案進行哈希處理( sha256
  2. 產生審計檔案(預設路徑:根目錄內input_path):
    • Audit_FullList包含檔案中檔案的完整性資料(雜湊值、大小、名稱) input_path。預設名稱: _auditor_hashes.txt
    • Audit_Stamp:僅包含完整性資料Audit_FullList。預設名稱: _auditor_stamp.txt。此文件需要列印或進行數位簽名,以確保檢查所有完整性鏈。
  3. 顯示完整性數據Audit_FullList
  4. 之後hash,您可以執行 check命令來驗證完整性。為了確保將來能夠正確進行完整性檢查,請閱讀 “完整性鏈”部分並遵循其中的建議。

其他例子:

  1. 只產生哈希值,但不創建任何檔案(-l)

    auditor hash input_path -l
  2. 使用預設演算法,透過快速磁碟 (-z) 覆蓋審計檔案 (-o)(適用於 SSD 磁碟,速度很快):

    auditor hash input_path -o -z 
  3. 與上述步驟相同,但啟用嚴格模式,以確保 input_path 中的所有檔案都經過雜湊處理:

    auditor hash input_path -o -z --strict
  4. 覆蓋審計文件(-o),不使用哈希方法(-d):

    auditor hash input_path -o -d 
  5. 覆蓋審計檔案(-o),僅包含 txt 檔案(-i "**/*.txt"),僅包含根資料夾中的檔案(-u 1)(標誌 -i 和 -e 使用 glob 模式,詳情請參閱註釋)。

    auditor hash input_path -o -i "**/*.txt" -u 1
  6. 覆蓋審計文件(-o),包含所有文件,但不包括 txt 文件(-e "**/*.txt")

    auditor hash input_path -o -e "**/*.txt" 
  7. 覆寫稽核文件(-o),僅包含名為「file1.doc」(-i "**/*/file1.doc") 和「file2.xls」(-i "**/*/file2.xls") 的文件

    auditor hash input_path -o -i "**/*/file1.doc"  -i "**/*/file2.xls" 
  8. 覆蓋審計文件(-o),包含所有文件,但不包括資料夾 $RECYCLE.BIN 和「系統磁碟區資訊」內的文件。注意:$RECYCLE.BIN 中的字元 $ 屬於名稱,需要用字元 \ 進行轉義才能正確解析!

    auditor hash input_path -o -e "**/\$RECYCLE.BIN/**" -e "**/System Volume Information/**" 
  9. 覆寫稽核檔案(-o),包含所有txt檔案(-i "**/*/*.txt"),但資料夾1目錄下的檔案除外(-e "**/*/folder1/*")

    auditor hash input_path -z -o -a blake3 -i "**/*/*.txt" -e "**/*/folder1/*" 
  10. 覆蓋審計文件(-o),使用快速磁碟(-z)和演算法“blake3”(速度非常快):

    auditor hash input_path -o -z -a blake3
  11. 覆蓋審計檔案(-o),使用 10MB 的區塊大小和“whirlpool”雜湊函數

    auditor hash input_path -o -b 10MB -a whirlpool

lock當需要保留現有審計文件時,此功能非常有用。它可以在哈希命令之後使用 ,並防止意外生成新的審計文件input_path

子指令 lock 的基本用法

auditor lock input_path

這將:

  1. _auditor_lock.txt建立一個帶有建立時間戳記的 檔案input_path
  2. 哈希子指令不會在input_path鎖定狀態下執行。

要解鎖input_path,您需要手動刪除該檔案。_auditor_lock.txt


check這是法務審計的第二步。它利用審計文件中的資訊檢查資料的完整性,可以在執行雜湊運算之後使用。

子命令的基本用法 檢查

auditor check input_path

這將:

  1. 取得審計檔案(預設路徑:根目錄內input_path):
  2. 使用列出的完整性資料Audit_Stamp並進行核對Audit_FullList
  3. 使用列出的完整性資料Audit_FullList並與原始文件進行比對input_path
  4. 顯示重新計算後的完整性資料Audit_FullList

其他例子:

  1. 使用預設審計文件,在快速磁碟模式 (-z) 下進行檢查。

    auditor check input_path -z 
  2. 與上述相同,但啟用嚴格模式,以確保驗證 input_path 中的所有檔案。

    auditor check input_path -z --strict
  3. 僅檢查 txt 檔案(-i "**/*.txt"),使用預設稽核檔案(標誌 -i 和 -e 使用 glob 模式,詳情請參閱註解)。

    auditor check input_path -i "**/*.txt"
  4. 使用預設審計文件,以靜默模式 (-q) 檢查,並在遇到第一個錯誤 (-x) 時停止。

    auditor check input_path -q -x
  5. 使用特定名稱的稽核文件檢查 F:\data_path。 (-f 參數用於 <Audit_FullList>,-s 參數用於 <Audit_Stamp>)

    auditor check F:\data_path -f C:\other_path\personal_fullList.txt -s C:\other_path\personal_stamp.txt -q -x 
  6. 檢查 <input_path> 中單一檔案的完整性,並與某個稽核檔案進行比對。

    auditor check F:\data_path\file1.txt -f C:\other_path\some_audit.txt -q -x 

注意:審計檢查與 fsum 格式相容。

clone用於將資料複製input_path到內部dest_path,同時驗證複製資料的完整性。

克隆子指令的基本用法

auditor clone input_path dest_path

這將:

  1. 從[此處應填寫文件來源]取得文件input_path,產生完整性資料(雜湊值、大小、名稱);
  2. 將文件複製到dest_path
  3. 檢查文件中文件的完整性,dest_path並與產生的完整性資料進行比較input_path
  4. 如果審計文件不存在,您可以使用 `-g` 選項在 `/usr/local/bin`input_path和/或 `/usr/local/bin` 中建立它們dest_path。如果審計文件已存在,則無法建立它們。

如果出錯,程式將重試(預設重試 3 次,可以更改)。

其他例子:

  1. 在快速磁碟模式下(-z)。

    auditor clone input_path dest_path -z 
  2. 與上述操作相同,但啟用嚴格模式,以確保克隆 input_path 中的所有檔案:

    auditor clone input_path dest_path --strict
  3. 靜音模式(-q)和首次出錯時停止(-x)。

    auditor clone input_path dest_path -q -x
  4. 克隆時會在 input_path 和 dest_path 中產生稽核檔案(請參閱註解!)。

    auditor clone input_path dest_path -g both 
  5. 克隆時僅在目標路徑中產生稽核檔案。

    auditor clone input_path dest_path -g dest 
  6. 僅在 input_path 中克隆並產生稽核文件。

    auditor clone input_path dest_path -g input 
  7. 您可以使用 -i 和/或 -e 來包含或排除進程中的檔案(不能與 --strict 一起使用)。

    auditor clone input_path dest_path -q -x -i "**/*.txt" -e "**/dir1/**/*

注意:要產生審計文件,input_path不能同時存在審計文件(Audit_FullList 和 Audit_Stamp)!這是為了避免與現有審計文件混淆。

使用 audit clone --help 查看所有選項



chkcopy用於檢查內部資料input_path與稽核文件是否一致,並複製到目標位置dest_path,同時驗證目標位置中複製資料的完整性dest_path

chkcopy 子指令的基本用法

auditor chkcopy input_path dest_path

這將:

  1. 從審計文件中取得文件input_path並與審計文件中的完整性資料進行比對;
  2. 將文件複製到dest_path
  3. 將文件的完整性與dest_path審計文件中的完整性資料進行比對。
  4. 注意:chkcopy 不會產生稽核文件!

如果出錯,程式將重試(預設重試 3 次,可以更改)。

其他例子:

  1. 快速磁碟模式 (-z) 用於 SSD、M.2 等快速磁碟。

    auditor chkcopy input_path dest_path -z 
  2. 與上述步驟相同,但啟用嚴格模式,以確保檢查並複製 input_path 中的所有檔案:

    auditor chkcopy input_path dest_path --strict
  3. 靜音模式(-q)和首次出錯時停止(-x)。

    auditor chkcopy input_path dest_path -q -x
  4. 您可以使用 -i 和/或 -e 來包含或排除進程中的檔案(不能與 --strict 一起使用)。

    auditor clone input_path dest_path -q -x -i "**/*.txt" -e "**/dir1/**/*

注意: input_path必須有審計文件(Audit_FullList / Audit_Stamp)!

info不執行哈希完整性檢查。它僅測試審計文件及其內容 input_path,並顯示有用資訊。可在執行哈希運算後使用。

法醫資訊範例

auditor info input_path

這將:

  1. 取得審計檔案(預設路徑:根目錄內input_path):
  2. 核實審計文件是否 Audit_Stamp存在 Audit_FullList
  3. 驗證 中列出的檔案是否 存在Audit_StampAudit_FullList以及列出的大小是否與 中列出的大小相同 input_path
  4. 驗證所有文件是否 input_path都已列出 Audit_FullList
  5. 重新計算完整性資料Audit_FullList 並與審計文件進行核對Audit_Stamp
  6. 提供檔案大小和所有輸入路徑的報告。

筆記

1:在 Windows PowerShell 中,路徑名稱包含空格時,必須用單引號括起來,且不能使用單眼斜線結尾\。如果需要,可以使用雙反斜線結尾\\。這是因為單眼斜線會轉義結尾的引號,導致終端無法正確解析路徑。

這行得通: "C:\My Data Path""C:\My Data Path\\"

這樣做行不通: "C:\My Data Path\"

2: -i 和 -e 標誌(包含和排除模式)使用 glob 語法。請在此處查看簡要手冊!

下載

二進位檔案(壓縮包內)的下載和完整性資料:

免責聲明:此版本auditor為開發階段軟體,不提供任何形式的保證或支持,僅限 非商業用途。使用風險自負。

授權:此版本僅auditor授權用於 非商業用途。請查看完整的授權條款以了解詳情。

額外內容

審計文件格式

審計文件的格式很簡單。每一行包含:

hash_value ?ALGORITHM[<THASH-BlockSize>]|file_size[:hex]*relative_filepath
其中 [ ] 為可選參數:

hash_value:哈希值。

ALGORITHM[<THASH-BlockSize>]用於哈希的演算法,以大寫字母存儲,以保持與其他一些工具的兼容性。參數 `<THASH-BlockSize>` 為可選參數,用於指示所使用的雜湊方法和區塊大小。區塊大小必須以 KB、MB、GB 或 TB 為單位。例如:10MB。

file_size:哈希處理後原始檔案的檔案大小。用於檢查檔案大小是否匹配,以提高處理速度。既然已知哈希處理後的檔案大小與原始檔案大小不匹配,為什麼還要對一個大檔案進行雜湊處理呢?

[:hex]:可選標誌,用於指示檔案路徑是否採用十六進位格式。這是必要的,因為某些作業系統允許使用換行符(例如 '\n'、'\r' 或 '\0'),而十六進位格式可以避免結果格式化方面的問題。

relative_filepath:已哈希檔案的相對檔案路徑。

範例 1:使用方法 thash使用 sha256 演算法和 50MB 區塊大小:

281d5d93464f1165ea7c403ca99d63ff4bf9a360864f8df4bd0e8e6c03774e98 ?SHA256<THASH-50MB>|500000*file_hashed.bin

範例 2:使用常規方法,僅使用 blake3 演算法,檔案路徑採用十六進位格式。

7357b67824d086dc53f5e1ded565f500456bea1812783f1fbcddc08fddc3944c ?BLAKE3|2233:hex*1aCb344356e4e2b2b6

未來可以實現其他格式。



基準

使用 超精細結構,測試兩者之間的差異 auditor執行了 fsum、rhash 和 hashdeep64 運算,結果如下圖所示。

Machine configs:
S.O.: Windows 11 Home 64bits
Processor: AMD Ryzen 7 (7800X3D 4.20 GHz)
RAM: 64 GB of RAM (Corsair Vengeance DDR5 64GB - 5200MHz)
Disk: SSD M.2 2TB (Corsair MP600 Pro NVMe)

Data Source 1:
Benchmarks
Benchmarks using Data Source 1: Benchmarks
Data Source 2
Benchmarks
Benchmarks using Data Source 2: Benchmarks
有任何建議或發現錯誤?請聯絡我們: [email protected]