檔案系統的完整性監控是偵測惡意活動的關鍵步驟。藉由建立檔案系統基準和比對系統狀態變化,可以有效識別檔案的新增、刪除或修改。find、sha1sum 和 sdiff 等指令能協助建立基準並比對差異。sha1sum 可產生檔案的 SHA-1 雜湊值,sdiff 則能逐行比較檔案內容。此外,curl 指令可用於網路互動,例如擴充套件縮短網址以檢查潛在威脅。靜態分析技術,例如使用 xxd 命令檢視檔案的十六進位內容,可以揭示惡意軟體的特徵。結合 vi 編輯器,更能直接修改二進位檔案。最後,VirusTotal 提供 API 介面,可自動化提交檔案進行掃描,並取得分析報告,有助於快速識別已知的惡意軟體。
第10章:檔案系統監控工具
惡意軟體感染和其他入侵往往可以透過它們對目標檔案系統所做的更改來檢測。你可以利用密碼雜湊函式的特性以及一些命令列技巧來識別隨時間被新增、刪除或更改的檔案。這種技術在像伺服器或嵌入式裝置這樣的系統上最為有效,因為這些系統的變化通常不大。
在本章中,我們開發了一個工具來建立檔案系統的基準,並將系統的後續狀態與之比較,以確設定檔案是否被新增、刪除或修改。以下是需求:
- 記錄給定系統上每個檔案的路徑。
- 為給定系統上的每個檔案建立SHA-1雜湊值。
- 能夠在稍後的時間重新執行工具,並輸出任何已更改、刪除、移動或新建的檔案。
使用的命令
在本章中,我們介紹了用於檔案比較的sdiff命令。
sdiff
sdiff命令逐行比較兩個檔案並輸出差異。
常見命令選項:
-a:將所有檔案視為文字檔案-i:忽略大小寫-s:抑制兩個檔案之間共有的行-w:每行輸出的最大字元數
命令範例: 要比較兩個檔案並僅輸出不同的行:
sdiff -s file1.txt file2.txt
步驟1:建立檔案系統基準
建立檔案系統基準涉及計算目前駐留在系統上的每個檔案的訊息摘要(雜湊值),並將結果記錄到檔案中。要做到這一點,可以使用find和sha1sum命令:
SYSNAME="$(uname -n)_$(date +'%m_%d_%Y')" ; sudo find / -type f | xargs -d '\n' sha1sum > ${SYSNAME}_baseline.txt 2>${SYSNAME}_error.txt
我們在Linux系統上執行時包含sudo命令,以確保可以存取系統上的所有檔案。對於找到的每個檔案,我們使用sha1sum計算SHA-1雜湊值,但透過xargs命令呼叫sha1sum。xargs命令將盡可能多的檔名(從管道讀取的輸入)放在sha1sum命令列上(受記憶體限制)。這將比為每個單獨的檔案呼叫sha1sum更有效率。相反,它將為每1000個檔案或更多(取決於路徑名的長度)呼叫一次。我們將輸出重定向到一個包含系統名稱和當前日期的檔案,這對於組織和時間線目的至關重要。我們還將任何錯誤訊息重定向到一個單獨的日誌檔案,以便稍後審查。
範例10-1:baseline.txt
3a52ce780950d4d969792a2559cd519d7ee8c727 /.gitkeep
ab4e53fda1a93bed20b1cc92fec90616cac89189 /autoscan.sh
ccb5bc521f41b6814529cc67e63282e0d1a704fe /fd2.sh
baea954b95731c68ae6e45bd1e252eb4560cdc45 /ips.txt
334389048b872a533002b34d73f8c29fd09efc50 /localhost
...
步驟2:檢測基準變更
要檢測系統變更,只需將先前記錄的基準與系統的當前狀態進行比較。這涉及重新計算系統上每個檔案的訊息摘要,並將其與最後已知的數值進行比較。如果數值不同,則知道該檔案已更改。如果一個檔案在基準列表中,但不再在系統上,則知道它被刪除、移動或重新命名。如果一個檔案存在於系統上,但不在基準列表中,則知道它是一個新檔案,或是一個先前被移動或重新命名的檔案。
使用sha1sum檢查變更
$ sha1sum -c --quiet baseline.txt
sha1sum: /home/dave/file1.txt: No such file or directory
/home/dave/file1.txt: FAILED open or read
/home/dave/file2.txt: FAILED
sha1sum: WARNING: 1 listed file could not be read
sha1sum: WARNING: 2 computed checksums did NOT match
在這裡,您可以看到來自stderr的輸出,表明該檔案不再可用。這是由於檔案被移動、刪除或重新命名。可以透過將stderr重定向到一個檔案或/dev/null來抑制此訊息。
內容解密:
sha1sum -c --quiet baseline.txt:此命令用於檢查檔案的完整性。它讀取baseline.txt中記錄的雜湊值和檔案路徑,並重新計算當前系統上對應檔案的雜湊值。如果重新計算的雜湊值與記錄的雜湊值不匹配,命令會輸出錯誤訊息。- 錯誤訊息解讀:
/home/dave/file1.txt: No such file or directory:表示該檔案已被刪除或移動。/home/dave/file1.txt: FAILED open or read:表示該檔案無法開啟或讀取,可能是由於許可權問題。/home/dave/file2.txt: FAILED:表示該檔案的雜湊值與記錄的不匹配,意味著檔案已被修改。
sha1sum: WARNING: 1 listed file could not be read:警告指出有一個列出的檔案無法讀取。sha1sum: WARNING: 2 computed checksums did NOT match:警告指出有兩個檔案的校驗和不匹配,意味著它們已被修改。
這種方法能夠有效地檢測檔案系統中的變更,有助於識別潛在的安全威脅。
系統檔案完整性監控與變更偵測的實務應用
在資安領域中,系統檔案的完整性監控是一項至關重要的任務。本篇文章將探討如何利用bash指令與指令碼實作系統檔案的基線建立、變更偵測以及自動化通知。
建立系統檔案基線
建立系統檔案基線是監控檔案系統變更的第一步。基線記錄了系統中所有已知檔案的路徑及其雜湊值。我們可以使用find命令列出系統中的所有檔案,並將結果儲存於filelist.txt中:
find / -type f > filelist.txt
內容解密:
find / -type f:從根目錄開始遞迴尋找所有檔案(不包括目錄)。> filelist.txt:將find命令的輸出重新導向至filelist.txt,儲存檔案路徑列表。
比對基線與當前檔案系統狀態
接下來,我們需要比對基線與當前檔案系統的狀態,以識別新增、刪除或變更的檔案。這可以透過join命令實作:
$ join -1 1 -2 2 -a 1 <(sort filelist.txt) <(sort -k2 baseline.txt)
/home/dave/file3.txt 824c713ec3754f86e4098523943a4f3155045e19
/home/dave/file4.txt
/home/dave/filelist.txt
/home/dave/.profile dded66a8a7137b974a4f57a4ec378eda51fbcae6
內容解密:
join命令用於比對兩個已排序的檔案。-1 1和-2 2指定了比對的欄位。-a 1表示輸出第一個檔案中未比對成功的行。<(sort filelist.txt)和<(sort -k2 baseline.txt)利用程式替換對檔案進行排序。
自動化與通知
為了提高效率,我們可以將上述過程自動化,並生成XML格式的報告。以下是一個範例指令碼baseline.sh:
#!/bin/bash -
# Cybersecurity Ops with bash
# baseline.sh
# Description:
# Creates a file system baseline or compares current
# file system to previous baseline
function dosumming() {
find "${DIR[@]}" -type f | xargs -d '\n' sha1sum
}
function parseArgs() {
while getopts "d:" MYOPT; do
DIR+=( "$OPTARG" )
done
shift $((OPTIND-1))
(( $# == 0 || $# > 2 )) && usageErr
(( ${#DIR[*]} == 0 )) && DIR=( "/" )
}
declare -a DIR
parseArgs "$@"
BASE="$1"
B2ND="$2"
if (( $# == 1 )); then
dosumming > "$BASE"
exit
fi
# ...(省略部分程式碼)
printf '<filesystem host="%s" dir="%s">\n' "$HOSTNAME" "${DIR[*]}"
while read HNUM FN; do
# ...(省略部分程式碼)
done < "$B2ND"
內容解密:
dosumming函式利用find和sha1sum計算指定目錄下所有檔案的SHA1雜湊值。parseArgs函式解析命令列引數,支援-d選項指定起始目錄。- 指令碼根據引數數量決定是建立新的基線還是比對現有基線。
惡意軟體分析:靜態分析技術深度解析
在網路安全營運中,檢測惡意程式碼的存在是最基本也是最具挑戰性的任務之一。分析一段程式碼時,主要有兩種選擇:靜態分析和動態分析。靜態分析是檢查程式碼本身是否存在惡意活動的指標,而動態分析則是執行程式碼並觀察其行為和對系統的影響,以確定其功能性。本章重點介紹靜態分析技術。
安全警告
處理可能存在惡意的檔案時,務必在與網路隔離且不含任何敏感資訊的系統上進行分析。完成後,假設系統已被感染,並在將其重新引入網路之前徹底清除和重新映像系統。
靜態分析工具介紹
本章介紹了用於與網站互動的 curl、編輯檔案的 vi,以及進行基數轉換和檔案分析的 xxd。
curl 命令詳解
curl 命令可用於在客戶端和伺服器之間透過網路傳輸資料。它支援多種協定,包括 HTTP、HTTPS、FTP、SFTP 和 Telnet。curl 極為多功能,以下介紹的命令選項僅代表其可用功能的一小部分。
常見命令選項
-A:指定傳送至伺服器的 HTTP 使用者代理字串-d:與 HTTP POST 請求一起傳送的資料-G:使用 HTTP GET 請求而非 POST 請求傳送資料-I:僅擷取協定(HTTP、FTP)標頭-L:跟隨重新導向-s:不顯示錯誤訊息或進度條
命令範例
要擷取標準網頁,只需將 URL 作為第一個引數傳遞。預設情況下,curl 會將網頁內容顯示到標準輸出。可以透過重新導向或使用 -o 選項將輸出重新導向到檔案:
curl https://www.example.com
使用 curl 擴充套件縮短 URL
不確定潛在危險的縮短 URL 會指向哪裡?可以使用 curl 擴充套件它:
curl -ILs http://bit.ly/1k5eYPw | grep '^Location:'
這個命令會跟隨重新導向並擷取最終的 Location: 標頭,從而揭示縮短 URL 的真實目標。
靜態分析技術
靜態分析涉及檢查可執行檔案的二進位內容,尋找可疑的模式或行為指標,而無需執行檔案。這種方法可以快速識別潛在的惡意軟體,且不會冒險執行可能有害的程式碼。
使用 xxd 進行檔案分析
xxd 是一個用於建立十六進位轉儲或從十六進位轉儲還原始二進位資料的工具。它對於檢查檔案的二進位內容非常有用。
xxd malicious_file.exe
這個命令會產生 malicious_file.exe 的十六進位轉儲,可以用來檢查可疑的模式或特徵。
#### 內容解密:
此命令會將指定的可執行檔案轉換為十六進位格式輸出,以便於人工檢查或進一步的自動化分析。透過檢查十六進位轉儲,可以識別出潛在的惡意特徵,如特定的惡意軟體簽名或異常的資料結構。
工作坊
改進
baseline.sh的使用者經驗,防止意外覆寫基準檔案。如果使用者僅指定一個檔案,請檢查該檔案是否已存在。如果存在,請詢問使用者是否允許覆寫該檔案。根據使用者的回答決定是否繼續或離開。修改
baseline.sh指令碼,編寫一個 shell 函式,將DIR陣列中的條目轉換為絕對路徑。在列印 XML 之前呼叫此函式,以便filesystem標籤在其dir屬性中列出絕對路徑。修改
baseline.sh指令碼,對於relocated標籤,檢查原始檔案和重新定位的檔案是否位於相同的目錄中(即具有相同的dirname);如果是,則在orig=""屬性中僅列印基本名稱。如何平行化
baseline.sh的部分操作以提高效能?實作你的想法以平行化baseline.sh以獲得更快的效能。如果將指令碼的某部分放在後台執行,如何在繼續執行之前“重新同步”?
參訪網路安全營運網站以取得更多資源和這些問題的答案。
命令列文字編輯器與二進位檔案分析
在命令列環境中進行文字編輯和二進位檔案分析是系統管理和開發工作中的重要技能。本文將介紹 vi 編輯器和 xxd 命令的使用方法,並探討如何利用這些工具進行二進位檔案分析。
使用 vi 編輯器
vi 是一款功能強大的命令列文字編輯器,支援外掛程式擴充功能。以下是 vi 的基本使用方法:
- 開啟檔案:使用命令
vi somefile.txt開啟指設定檔案。 - 進入插入模式:在
vi環境中,按下Esc鍵後輸入i進入插入模式,即可編輯文字。 - 離開插入模式:按下
Esc鍵離開插入模式。 - 進入命令模式:按下
Esc鍵進入命令模式,可以執行各種命令。
常見的 vi 命令
| 命令 | 功能 |
|---|---|
b | 向前移動一個單字 |
cc | 取代目前行 |
cw | 取代目前單字 |
dw | 刪除目前單字 |
dd | 刪除目前行 |
:w | 儲存檔案 |
:w filename | 將檔案儲存為指設定檔名 |
:q! | 不儲存變更並離開 |
ZZ | 儲存變更並離開 |
:set number | 顯示行號 |
/ | 向前搜尋 |
? | 向後搜尋 |
n | 尋找下一個符合的結果 |
使用 xxd 命令進行二進位檔案分析
xxd 命令可以用於以十六進位或二進位格式顯示檔案內容。以下是一些常見的用法:
基本用法
- 以十六進位格式顯示檔案:
xxd somefile.txt - 以二進位格式顯示檔案:
xxd -b somefile.txt - 從指定偏移量開始顯示內容:
xxd -s 35 somefile.txt - 限制顯示的位元組數:
xxd -l 50 somefile.txt
分析 ELF 執行檔
假設我們有一個名為 helloworld 的 ELF 執行檔,可以使用 xxd 命令分析其內容。
$ xxd -s 0 -l 4 helloworld
00000000: 7f45 4c46 .ELF
上述命令顯示了檔案開頭的魔數,確認該檔案為 ELF 格式。
$ xxd -s 4 -l 1 helloworld
00000004: 02
這裡顯示了第五個位元組的值,表示該執行檔是 64 位元架構。
結合 vi 編輯器進行十六進位編輯
可以結合 vi 和 xxd 進行十六進位編輯。首先,使用 vi 開啟檔案,然後在 vi 中執行命令 :%!xxd 將檔案內容轉換為十六進位格式進行編輯。
十六進位、十進位、二進位和 ASCII 轉換
在分析檔案時,經常需要在不同進位制之間進行轉換。可以使用 printf 和 xxd 命令來實作這些轉換。
示例
- 將十六進位轉換為十進位:
printf "%d" 0x41 - 將十進位轉換為十六進位:
printf "%x" 65 - 將 ASCII 字元轉換為十六進位:
printf 'A' | xxd - 將十六進位轉換為 ASCII 字元:
printf "0x41" | xxd -r - 將 ASCII 字元轉換為二進位:
printf 'A' | xxd -b
分析未知可執行檔的技術
在資安領域,分析未知可執行檔是一項重要的任務。透過分析,我們可以瞭解程式的功能、來源以及潛在的安全威脅。本文將介紹幾種基本的分析方法,包括使用 vi 編輯器檢視檔案內容、提取 ASCII 字串、以及與 VirusTotal 介面進行檔案掃描。
使用 vi 編輯器檢視二進位檔案
vi 編輯器不僅可以用於編輯文字檔案,也可以用來檢視二進位檔案。透過 xxd 命令,可以將二進位檔案轉換為十六進位格式進行檢視。
:%!xxd
這將檔案內容轉換為十六進位格式顯示在 vi 編輯器中。編輯完成後,可以使用以下命令轉換回原始二進位格式:
:%!xxd -r
內容解密:
:%!xxd將當前緩衝區的內容傳送給xxd命令進行十六進位轉換。:%!xxd -r將十六進位格式轉換回二進位格式。
提取 ASCII 字串
提取 ASCII 字串是分析未知可執行檔的基本方法之一。可以使用 strings 命令或 egrep 命令來實作。
egrep -a -o '\b[[:print:]]{2,}\b' somefile.exe
這個命令使用正規表示式搜尋可執行檔中的可列印字元,並輸出匹配的字串。
內容解密:
-a選項使egrep將二進位檔案視為文字檔案處理。-o選項僅輸出匹配的字串,而不是整行。\b[[:print:]]{2,}\b正規表示式匹配連續的兩個或以上可列印字元。
為了去除重複字串,可以將輸出結果傳送給 sort 命令進行排序和去重:
egrep -a -o '\b[[:print:]]{2,}\b' somefile.exe | sort -u
若要按字串長度排序,可以結合 awk 命令:
egrep -a -o '\b[[:print:]]{2,}\b' somefile.exe | awk '{print length(), $0}' | sort -rnu
內容解密:
awk '{print length(), $0}'在每行輸出前加上字串的長度。sort -rnu對輸出結果進行反向數值排序並去重。
與 VirusTotal 介面進行檔案掃描
VirusTotal 是一個商業性的線上工具,用於上傳檔案並對其進行掃描,以判斷是否具有惡意。VirusTotal 提供了 API 介面,可以使用 curl 命令與其互動。
在使用 VirusTotal API 之前,需要先註冊帳號並取得 API 金鑰。然後,可以使用以下命令查詢檔案的掃描報告:
curl 'https://www.virustotal.com/vtapi/v2/file/report?apikey=replacewithapikey&resource=<檔案HASH值>'
內容解密:
apikey是從 VirusTotal 取得的 API 金鑰。resource是檔案的 MD5、SHA-1 或 SHA-256 雜湊值。
透過 VirusTotal 的 API,可以查詢檔案是否已經被掃描過,並取得相關的掃描報告。