介紹完 Log analysis 以及讓大家簡單看了 Log 的輸出 records 後,相信大家對 Log 的各個欄位有一定的理解了~ 今天我們會特別針對 Log 資訊來讓大家進一步體驗資安分析的實作!
昨天已經分享過如何快速抓取最近的 Log records,就是用 log show --last 5s
或者 log show -- last 5m
看自己想要顯示至今多久前的 Log 訊息。而我們現在要做的就是,如果想要對特定的資訊(e.g., error msg)去抓取 Log,就需要先認識一個 Log 常用的 CLI 指令 → --predicate
。
Predicate 是 macOS Unified Log 的 篩選條件,語法類似 Apple 的 NSPredicate。
它可以讓你在 CLI 下,只抓到你想看的 log,而不是整個 log 資料庫(超大超多超雜,根本看不完)。
簡單說:
predicate = 「我想要抓哪些 log 的規則」
log show --predicate 'process == "loginwindow" && composedMessage CONTAINS[c] "failed"' --last 5m
process == "loginwindow"
→ 只抓 loginwindow 的 logcomposedMessage CONTAINS[c] "failed"
→ 文字訊息包含 failed,不分大小寫&&
→ 兩個條件都要成立在 CLI 也就是 terminal 裡面,我們無法針對 Log level(debug/info/default/error/fault)去抓取特定的值顯示,只能先使用 log show -—debug
、log show —-info
再針對裡面的訊息進一步去抓取!如果還不懂的話沒關係,這個等等我們下面就會提到!
-info
→ 抓 Info + Default + Error + Fault-debug
→ 抓 Debug + Info + Default + Error + Faultlog show --last 5h # 過去 5 小時
log show --last 5m # 過去 5 分鐘
log show --start <time> --end <time> # 指定時間區間(絕對時間 -> YYYY-MM-DD HH:MM:SS|年-月-日 時:分:秒)
log show --style syslog # 傳統的 system log 樣式(只顯示時間、process、訊息文字),比較陽春,但也較直觀 -> 方便 grep/awk
log show --style json # JSON 輸出,方便用程式解析
log show --info # Info 與以上級別(Info + Default + Error + Fault)
log show --debug # Debug 與以上級別(Debug + Info + Default + Error + Fault)
# 不指定就是只抓(Default + Error + Fault)
log show
沒有指定 -info
/ -debug
→ 只抓 Default、Error、Fault 級別
大致介紹完 predicate 後,我們就來針對幾個比較常用的指令來針對 Log 訊息輸出吧!
只抓取 ComposedMessgae 裡面有 failed 且跟「登入、認證」相關的 Log 訊息
log show --predicate 'process == "loginwindow" && composedMessage CONTAINS[c] "failed"' --last 1h
log show --predicate 'process == "sshd" && composedMessage CONTAINS[c] "failed"' --last 1h
大家可以試試看輸出有沒有跑出 Log,如果沒有出現訊息也沒關係!代表你近一個小時內,都沒有出現 failed 的情況,讚讚 👍!如果想要看到輸出的話,也可以透過調整時間範圍(1h → 5h 或者 10h 去看 5 小時前或 10 小時前的相關 Log 訊息)來試試看。此外,這邊出現的 Log level 應該都會是 Error 的情況,因為一般登入、連線錯誤等等只要一出現,通常系統都會將這些訊息的標記為 Error,所以也可能會有「false positive」的問題,像如果是 pasteboard 這種的錯誤事件,對資安來說可能不是特別重要,但就會被一起算進來!😱😱
通通抓 😈
網路截取自 https://home.gamer.com.tw/artwork.php?sn=5044747
今天我們就先介紹分享到這邊啦,明天會繼續針對更複雜的「進階抓取分析」技巧來做介紹!如果對今天的內容有任何問題都歡迎在下方提問,或者任何有錯的地方都歡迎指教,那我們明天再見!✋