# 常見 Log&AI-IDS 介紹 [TOC] ## Log 介紹 ### 什麼是 Log ? 『_**詳細而確實的分析以及備份系統的 Log**_』是一個系統管理員的基本工作之一。 Log 就是記錄系統活動資訊的幾個檔案, 例如:**何時、何地 (來源 IP)、何人 (什麼服務名稱)、做了什麼動作 (訊息登錄囉)**。 > 換句話說就是: > 記錄系統在什麼時候由哪個程序做了什麼樣的行為時,發生了何種的事件等等。 ### [ ](#Linux-常見-Log-檔名 "Linux-常見-Log-檔名")Linux 常見 Log 檔名 登錄檔可以幫助我們瞭解很多系統重要的事件,包括登入者的部分資訊, 因此**Log 的權限通常設定為僅有 root 能夠讀取而已**。 - `/var/log/boot.log`: 開機時,系統核心會去偵測與啟動硬體,接下來開始各種核心支援的功能啟動等。這些流程都會記錄在 /var/log/boot.log 裡面! ![image](https://hackmd.io/_uploads/ry-CaXEGlx.png) 不過這個檔案只會存在這次開機啟動的資訊,前次開機的資訊並不會被保留下來! - `/var/log/cron`: 這個 Log 內可查詢 - [crontab 排程](https://linux.vbird.org/linux_basic/centos7/0430cron.php)有沒有實際被進行? - 進行過程有沒有發生錯誤? - /etc/crontab 是否撰寫正確? ![image](https://hackmd.io/_uploads/r1jxlVEGle.png) * * * * * 分鐘 小時 日期 月份 星期 - at、crontab可以建立自己的排程 - `/var/log/dmesg`: 記錄系統在開機時,核心偵測過程所產生的各項資訊。適合查看核心層級與硬體相關的訊息(如 USB、磁碟、網卡、CPU 問題) > CentOS 預設將開機時核心的硬體偵測過程取消顯示,因此額外將資料記錄一份在這個檔案中。 - `/var/log/lastlog`: 記錄系統上面所有的帳號最近一次登入系統時的相關資訊。(出事時可以用來看誰在搞事&誰可以排除嫌疑) - ![image](https://hackmd.io/_uploads/SyBgJm7-gg.png) ![image](https://hackmd.io/_uploads/rkPMkXQ-xe.png) [lastlog 指令](https://linux.vbird.org/linux_basic/centos7/0410accountmanager.php#uselinux_find) 就是利用這個檔案的記錄資訊來顯示的。 - `/var/log/messages`: 這個檔案相當的重要,幾乎系統發生的錯誤訊息 (或者是重要的資訊) 都會記錄在這個檔案中; 如果系統發生莫名的錯誤時,這個檔案是一定要查閱的 Log 之一。 - `/var/log/secure`: 基本上,只要牽涉到『需要輸入帳號密碼』的軟體,那麼當登入時 (不管登入正確或錯誤) 都會被記錄在此檔案中。 包括系統的 login 程式、圖形介面登入所使用的 gdm 程式、 su, sudo 等程式、還有網路連線的 ssh, telnet 等程式,登入資訊都會被記載在這裡。 - `/var/log/wtmp`, `/var/log/faillog`: 這兩個檔案可以記錄正確登入系統者的帳號資訊 (wtmp) 與錯誤登入時所使用的帳號資訊 (faillog) ! > [last](https://linux.vbird.org/linux_basic/centos7/0320bash.php) 就是讀取 wtmp 來顯示的, 對於追蹤一般帳號者的使用行為很有幫助 ![image](https://hackmd.io/_uploads/r1gfHwHzeg.png) 常見的 log 就是這幾個,但是不同的 Linux distributions ,通常 Log 的檔名不會相同 (除了 `/var/log/messages` 之外 )。 所以還是得要查閱你 Linux 主機上面的 Log 設定資料, 才能知道你的 Log 主要檔名! ### syslog - Syslog 是一種標準化的 系統日誌記錄機制與協定,用來收集和儲存來自 作業系統、應用程式、背景服務的重要訊息。 - Syslog 包含三大元素: 1.Facility(來源分類)2.Severity(嚴重程度)3.Message(訊息內容) 整個 Linux 作業系統內部,**使用 Syslog 架構所產生與儲存的 log 系統** | 來源分類(Facility) | 常見產生者範例 | 說明 | | --- | --- | --- | | `kernel` | Linux 核心(使用 `dmesg` 可查看) | 核心層級訊息,如硬體錯誤、驅動程式 | | `auth` | SSH、sudo、pam 模組等,在`/var/log/secure`查看 | 登入、密碼驗證、使用者操作 | | `daemon` | sshd、crond、nginx、mysql 等 | 系統服務或背景程式 | | `user` | 一般應用程式(如 Python script) | 自行寫入 Syslog 的程式 | | `cron` | 排程工作 | cron job 的執行與錯誤 | | `last` | last、lastlog| 使用者登入、登出歷史記錄(需搭配 /var/log/wtmp 分析) | | `boot` | bootlogd、systemd-boot 等 | 系統開機流程記錄,協助排解開機相關問題 | | `dmesg` | dmesg、核心訊息緩衝區 | 顯示核心初始啟動及驅動偵測資訊,通常來源為 kernel | - kernel - 核心層級訊息,如硬體錯誤、驅動程式 - 裝置驅動錯誤、IO 問題(ex: 磁碟損毀) - 開機過程的硬體偵測紀錄 - 核心模組載入、移除 ![image](https://hackmd.io/_uploads/B1LS9P4Gll.png) - auth - 登入成功或失敗(本機或遠端) - sudo 使用記錄 - 密碼錯誤、帳號鎖定等 ![image](https://hackmd.io/_uploads/Hkot2PEGxx.png) - daemon - 系統服務或背景程式 - 服務啟動、停止 - 執行錯誤、重新啟動 - 異常事件(如 Nginx 錯誤) ![image](https://hackmd.io/_uploads/Hk1mguVzee.png) - user - 自寫程式主動發送 log 到 syslog - 方便與其他系統級 log 整合 - cron - cronjob 是否有成功執行 - 執行了哪個 command 或 script - 有沒有錯誤訊息 - lastlog - 顯示有關系統上使用者最近登錄的信息 - 該文件包含使用者登錄信息,如使用者名稱、終端、主機以及上次登錄的時間等。 - boot - 開機時,系統核心會去偵測與啟動硬體,接下來開始各種核心支援的功能啟動等 - dmesg - 記錄系統在開機時,核心偵測過程所產生的各項資訊。適合查看核心層級與硬體相關的訊息 :::warning dmesg vs boot dmesg 輸出的只有核心還有硬體裝置跟驅動的資訊 boot log 還會有包含 user space 的系統服務 ::: ### Web Access log :::info Web Access Log 記錄所有與用戶端應用程式和使用者存取電腦資源相關的事件。它就像一個日誌檔案,記錄了網站伺服器接收到的每個請求,包含請求的詳細信息。 就是你在網站上做的所有動作都會被記錄在這個 log 當中,可以從中看到誰來了、做了什麼,甚至能找出是否有人試圖入侵。 ::: ![image](https://hackmd.io/_uploads/ByuC8fvbxe.png) ``` 127.0.0.1 - nagiosadmin [06/Jan/2025:17:50:04 +0800] "GET /nagios/ HTTP/1.1" 200 880 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0" ``` 包含IP、時間、請求、HTTP 狀態碼、傳回內容大小、用戶瀏覽器 ## Linux內建管理或分類log的工具(log collector,log parse) 一種會「**集中接收、處理、儲存或轉發**」系統或應用程式 log 的程式。 它可以是: - 本機 log 收集工具(像是 `rsyslog`, `journald`) - 分散式架構中的 log agent(如:Fluentd, Logstash, Beats) - 集中式儲存與查詢平台的一部分(如:ELK Stack 中的 Logstash) ### systemd-journald.service - 功能:收集來自 kernel、systemd、使用者程式的 log,並儲存在 binary 格式的 journal 檔案中。這些日誌由 systemd-journald 服務負責收集與管理。 - 儲存位置:`/run/log/journal/`(揮發性)或 `/var/log/journal/`(永久) - 查看方式:用 `journalctl` | 指令 | 功能 | |------|------| | `journalctl` | 顯示所有 log(時間順序) | | `journalctl -b` | 只顯示「本次開機」的 log | | `journalctl -k` | 顯示核心(kernel)訊息 | | `journalctl -u nginx.service` | 顯示指定服務(例如 nginx)的 log | | `journalctl --since "2025-05-26 10:00"` | 從特定時間開始顯示 log | | `journalctl -xe` | 顯示錯誤(含詳細資訊),最常用於 debug | ex: ![image](https://hackmd.io/_uploads/ByVnmFVGlx.png) ### rsyslog.service - Rsyslog(Rocket-fast System for Log processing) 是一套在大部分 Linux 預設的高效能系統日誌工具,用來接收、處理、儲存、轉送系統產生的 log。 - Rsyslog 是 Syslog 系統的升級版,支援更多功能與彈性,常與 systemd-journald 搭配使用。 - 來源:來自 kernel、daemon、應用程式(用 syslog API 發送) - 功能: - 接收來自系統核心(Kernel)、應用程式、背景服務(如 sshd、cron、nginx)的日誌訊息 - 將 log 傳送到遠端 log 伺服器(集中管理) - 可轉發 log 給 ELK Stack 或其他系統 ![image](https://hackmd.io/_uploads/rJT5_f7Wxg.png) #### 無聊去看系網有沒有被攻擊 `sudo vi /var/log/nginx/access.log` - 正常(status code=200):![image](https://hackmd.io/_uploads/rJeueBGXbge.png) - 異常(status code=404) - 有人在嘗試猜目錄![image](https://hackmd.io/_uploads/SJWedzQblg.png) - 他的行為類似直接在瀏覽器打:`https://im.ncnu.edu.tw/.git/config` ### logrotate - 角色:log **輪替與清理工具** - 功能: - 定期壓縮舊的 log(如 `access.log.1.gz`) - 清除過舊的 log,避免磁碟爆滿 - 可以設定每天/每週/每月輪替 ![image](https://hackmd.io/_uploads/BkgUqYNMeg.png) ## 其他整理 log 的外部工具 (儲存蒐集分析) #### ref - https://last9.io/blog/linux-syslog-explained/ - https://linux.vbird.org/linux_basic/centos7/0570syslog.php - https://www.netadmin.com.tw/netadmin/zh-tw/technology/87B0B07EEFE849A1A898E6A288C73E9A - https://owasp.org/www-project-top-ten/ ### Hydra 是一款知名的**線上密碼破解工具**,支援多種通訊協定(如 SSH、FTP、HTTP、MySQL...),用來進行: - 帳號密碼猜測攻擊(Dictionary attack / Brute force attack) - 驗證遠端伺服器的登入弱點 1.攻擊 :::info `hydra -l testuser -P pass.txt ssh://127.0.0.1 ` 使用hydra去對testuser(127.0.0.1)進行密碼爆破 使用pass.txt裡的密碼逐一嘗試 - 若登入失敗,Hydra 紀錄失敗訊息並繼續嘗試下一個密碼。 - 若登入成功,Hydra 會顯示類似: `[22][ssh] host: 127.0.0.1 login: testuser password: letmein` ::: 2.接著去被攻擊的主機上看rsyslog那邊會不會有紀錄 `sudo cat /var/log/auth.log | grep "Failed password"` 成功的話就會顯示 `2025-05-28T08:33:19.791910+00:00 rsyslog sshd[6621]: Failed password for testuser from 2001:e10:6840:32:be24:11ff:febe:d40b port 59060 ssh2` 包含時間跟此筆log是從rsyslog寫入,還有攻擊者嘗試登入使用者 `testuser` 時輸入了錯誤的密碼,導致失敗,攻擊來源IP跟port --- ## 傳統 IDS 與 AI-IDS 的差異 ### 比較 | 項目 | 傳統 IDS(規則式) | AI-IDS(機器學習式) | | -------- | ---------------------- | -------------------------------------------- | | 判斷依據 | **人為訂定**規則或特徵庫 | 基於大量**訓練資料**的模型 | | 更新方式 | **人工手動**更新規則 | **模型重新訓練或微調** | | 辨識能力 | 低(僅能辨識已知特徵) | 中~高(可辨識未知模式,但可能 OverFitting) | | 維護成本 | 較高(需人工持續維護) | 高(資料準備、運算成本高) | | 可解釋性 | 高(規則明確) | 低~中(黑盒模型,可解釋性較差) | #### AI-IDS 期望達成的目標 - 找出新型態或變種攻擊模式(主要目標) - 有效降低 False Positive 比例(主要目標) - 提供給系統管理員有效的建議及方向 - 輔助傳統 IDS 更新規則(rule),提升整體偵測效能 ### AI-IDS 面臨的挑戰 #### 1. 過度擬合(Overfitting) - 模型在特定環境過於專業化,辨識能力不足。 - 不同 client 服務與 server 差異大,難以直接套用單一 AI 模型。 #### 2. 客戶端資料特殊性與多樣性 - 各客戶具有不同 log 特徵,通用模型難以處理。 - 訓練資料不足或面臨長尾知識(long-tail knowledge)問題。 #### 3. 資料隱私安全 - client log 資料為機密,無法直接用於模型訓練。 - 需在確保安全隱私下有效利用這些資料。 #### 4. 動態更新與即時性問題 - 模型重新訓練成本過高,難以即時更新。 - 透過 knowledge editing 雖能更新,但存在其他問題與衝突。 #### 應收集的 log 資料 - **系統調用(Audit log)** - `adduser`, `chmod`, `execve` 等敏感操作紀錄。 - **Service Log(Syslog)** - 使用 `rsyslog` 收集各種常駐服務日誌,如 SSH、HTTP Server、資料庫等。 #### Log 處理與 Retrieval 流程 1. 定期將日誌以 Embedding 方式轉換並建立索引。 2. 接收新日誌時,檢索相似歷史紀錄並送入 LLM。 3. 由 LLM 判斷異常行為。 ## AI-IDS ### 背景 - 傳統的安全防護方式(防毒軟體、防火牆)已經逐漸無法有效防禦快速變化且未知的新型攻擊。 - 已知的攻擊特徵(pattern)無法有效阻擋未知攻擊,需藉由更進階的方式偵測異常行為。 ### 入侵偵測方法比較 #### 靜態分析(Static Analysis) 方式:僅分析系統紀錄(Log)。 - 缺點: - 無法即時觀察到攻擊過程,易漏掉複雜攻擊。 - 缺乏對系統資源使用狀態的觀察,無法直觀呈現攻擊的實際影響。 #### 動態分析(Dynamic Analysis) 方式:觀察系統資源使用量(CPU、Memory、Network)。 - 優點: - 更直觀,可觀察攻擊時的系統資源變化情況。 - 能偵測非典型且未被識別為特徵的攻擊行為。 ### 入侵偵測系統(IDS)介紹 IDS 主要分為兩大類: #### Signature-based Detection(特徵比對偵測) 透過比對已知攻擊特徵(pattern)來判斷是否發生攻擊。 - 缺點: - 無法偵測未知攻擊(False Negative)。 - 容易產生假警報(False Positive)。 - 系統負擔可能較重。 #### Behavior-based / Anomaly-based Detection(異常行為偵測) 建立正常行為模型,偵測偏離正常行為的異常情況。 - 缺點: - 系統初期需較長的磨合期。 - 合法行為可能被誤判(False Positive)。 ### IDS 的類型 #### Network-based Intrusion Detection System(NIDS) 透過網路封包進行特徵比對,確認是否存在異常流量。 - 優點:容易部署。 - 缺點:無法分析加密流量。 #### Host-based Intrusion Detection System(HIDS) 部署於主機內,監控系統檔案變更、屬性變更與授權狀態。 - 優點:能深入監控系統內部情況。 - 缺點:部署與維護較複雜,資源消耗較高。 ### 為何需要 AI-IDS 傳統 IDS 無法有效處理: - 動態更新的攻擊特徵。 - 客戶環境差異導致的 False Positive 問題。 ### AI-IDS 特點與改善方向: - 降低 False Positive - 透過語言模型 (LLM) 判斷是否為真正異常行為。 - 發掘未知/新型攻擊 (Variant Patterns) - 傳統 IDS 僅能偵測簡單規則攻擊,如 /admin/index.php 的 request,但難以偵測攻擊變體。 - AI-IDS 能識別新型攻擊變化,如 URL 編碼異常或攻擊參數改變。