---
# System prepended metadata

title: 常見 Log＆AI-IDS 介紹

---

# 常見 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 編碼異常或攻擊參數改變。


