Linux 系統上的 auditd 工具能有效記錄系統活動,提供稽核和安全分析的基礎。透過 aureport 指令,可以生成各種稽核報告,例如驗證事件、檔案存取和行程活動,幫助管理員掌握系統安全狀態。搭配 ausearch,更能深入追蹤特定行程的行為。然而,過多的稽核規則會影響系統效能,需謹慎組態。至於 Kubernetes 叢集的安全,kube-hunter 則扮演重要的角色。它能識別叢集中的潛在弱點,並提供修復建議。kube-hunter 支援多種佈署方式,包含主機佈署、容器佈署和 Pod 佈署,並提供主動和被動兩種掃描模式,滿足不同環境的需求。從外部攻擊模擬到內部安全檢測,kube-hunter 提供全面的叢集安全評估,有效提升 Kubernetes 環境的安全性。

使用 auditd 進行系統稽核與日誌分析

auditd 是 Linux 系統上一個強大的稽核工具,能夠詳細記錄系統呼叫、檔案存取、使用者行為等各類別事件。透過 auditd,管理員能夠對系統進行深入的稽核與分析,從而提升系統的安全性。

aureport 指令基礎

執行 aureport 指令可生成系統稽核報告的摘要資訊,包括組態變更、登入次數、驗證事件等關鍵指標。以下是一個典型的 aureport 輸出範例:

Summary Report
======================
Range of time in logs: 21/07/20 20:21:45.071—25/07/20 15:06:13.443
Selected time for report: 21/07/20 20:21:45—25/07/20 15:06:13.443
Number of changes in configuration: 950
Number of changes to accounts, groups, or roles: 0
Number of logins: 0
Number of failed logins: 0
Number of authentications: 8
Number of failed authentications: 3
Number of users: 4
Number of terminals: 8
Number of host names: 1
Number of executables: 15
Number of commands: 16
Number of files: 17
Number of AVC's: 0
Number of MAC events: 0
Number of failed syscalls: 0
Number of anomaly events: 20
Number of responses to anomaly events: 0
Number of crypto events: 0
Number of integrity events: 0
Number of virt events: 0
Number of keys: 13
Number of process IDs: 751
Number of events: 4643

aureport 的進階選項

  1. 驗證事件報告:使用 -au--auth 選項可生成驗證事件的詳細報告,顯示使用者登入、驗證成功或失敗的紀錄。

    $ aureport -au
    Authentication Report
    ============================================
    # date time acct host term exe success event
    ============================================
    1. 07/06/20 22:51:25 <USER> <IP ADDRESS> ftp /usr/sbin/ftpd yes 607217
    2. 08/06/20 01:37:08 <USER> <IP ADDRESS> ftp /usr/sbin/ftpd yes 609264
    
  2. 檔案事件報告:使用 -f--file 選項可查詢與檔案相關的操作,如檔案存取、修改等。

    $ aureport -f
    File Report
    ===============================================
    # date time file syscall success exe auid event
    ===============================================
    1. 25/07/20 12:38:03 /root/.bash_history 92 yes /bin/bash 1000 351
    
  3. 行程事件報告:使用 -p--process 選項可檢查系統中執行的行程,對於追蹤特定行程的行為非常有用。

    $ aureport -p
    Process ID Report
    ======================================
    # date time pid exe syscall auid event
    ======================================
    10. 06/07/20 17:11:34 27621 /usr/bin/dpkg 82 1000 2672
    

使用 ausearch 追蹤特定行程

當需要深入分析某個特定行程的行為時,可以使用 ausearch 命令,並結合 -p--pid 選項來查詢該行程的詳細活動。

$ ausearch -p 27621
time->Sun Jul 26 17:11:36 2020
type=PROCTITLE msg=audit(1595779896.548:27584): proctitle=2F7573722F62696E2F64706B67002D2D7374617475732D6664003733002D2D6E6F2D7472696767657273002D2D756E7061636B002D2D6175746F2D6465636F6E666967757265002D2D726563757273697665002F746D702F6170742D64706B672D696E7374616C6C2D343169796B7A
type=PATH msg=audit(1595779896.548:27584): item=1 name="/var/lib/dpkg/updates/0086" inode=1465005 dev=fd:01 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=DELETE cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0

時間範圍篩選報告

auditd 也支援按照時間範圍生成報告,例如使用 -ts(開始時間)和 -te(結束時間)選項來篩選特定時間內的稽核資料。

$ aureport -ts yesterday -te now --summary
Summary Report
======================
Range of time in logs: 24/07/20 11:40:52.741—25/07/20 15:42:34.837
Selected time for report: 24/07/20 00:00:00—25/07/20 15:42:39

auditd 的效能與規則最佳實踐

  1. 規則排序與最佳化:auditd 的規則是從上到下依序處理的,因此需要謹慎安排規則順序,避免不必要的效能開銷。

  2. 避免過度稽核:過多的稽核規則會導致系統負擔加重,應根據實際需求選擇合適的稽核專案。

Kubernetes 安全:使用 kube-hunter 進行叢集安全檢測

隨著容器化應用的普及,Kubernetes 作為最流行的容器協調工具,其安全性也日益受到關注。本章將介紹如何使用 kube-hunter 工具對 Kubernetes 叢集進行安全檢測。

建立 Mini Kubernetes 叢集

首先,我們需要建立一個 Kubernetes 叢集進行測試。k3s 是一個輕量級的 Kubernetes 發行版,非常適合用於測試環境。安裝 k3s 的過程非常簡單,只需執行以下命令:

$ curl -sfL https://get.k3s.io | sh -

內容解密:

  1. curl 命令用於下載安裝指令碼。
  2. -sfL 引數確保指令碼下載過程中出現錯誤時能夠正確處理。
  3. https://get.k3s.io 是 k3s 的官方安裝指令碼網址。
  4. | sh - 將下載的指令碼直接傳送到 shell 執行。

在執行安裝命令之前,建議先檢查指令碼內容,以確保安全。k3s 的二進位制檔案大小約為 100MB,安裝過程會建立必要的符號連結。

k3s 安裝輸出

安裝過程中,系統會輸出相關資訊,如 Listing 5.1 所示:

[INFO] Finding release for channel stable
[INFO] Using v1.18.6+k3s1 as release
[INFO] Downloading hash https://github.com/rancher/k3s/releases/download/v1.18.6+k3s1/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/rancher/k3s/releases/download/v1.18.6+k3s1/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Skipping /usr/local/bin/ctr symlink to k3s, command exists in PATH at /usr/bin/ctr
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh

內容解密:

  1. 系統會自動查詢 stable 版本的 k3s 並下載相關的二進位制檔案。
  2. 下載過程中會進行雜湊驗證,以確保檔案的完整性。
  3. 安裝程式會將 k3s 二進位制檔案安裝到 /usr/local/bin/k3s
  4. 同時建立 kubectlcrictl 的符號連結到 k3s,以便於使用。
  5. 如果系統中已存在 ctr 命令,則跳過建立對應的符號連結。

使用 kube-hunter 進行安全檢測

kube-hunter 是由 Aqua Security 開發的一款開源工具,用於檢測 Kubernetes 叢集的安全漏洞。該工具可以提供有價值的安全建議和修復提示。

kube-hunter 的優勢

  • 能夠檢測 Kubernetes 叢集中的安全漏洞和組態問題。
  • 提供詳細的檢測報告和修復建議。

Kubernetes 安全檢測流程

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Kubernetes 叢集安全稽核與弱點掃描

package "Kubernetes Cluster" {
    package "Control Plane" {
        component [API Server] as api
        component [Controller Manager] as cm
        component [Scheduler] as sched
        database [etcd] as etcd
    }

    package "Worker Nodes" {
        component [Kubelet] as kubelet
        component [Kube-proxy] as proxy
        package "Pods" {
            component [Container 1] as c1
            component [Container 2] as c2
        }
    }
}

api --> etcd : 儲存狀態
api --> cm : 控制迴圈
api --> sched : 調度決策
api --> kubelet : 指令下達
kubelet --> c1
kubelet --> c2
proxy --> c1 : 網路代理
proxy --> c2

note right of api
  核心 API 入口
  所有操作經由此處
end note

@enduml

此圖示展示了使用 kube-hunter 對 Kubernetes 叢集進行安全檢測的基本流程。透過這個流程,可以有效地提升叢集的安全性。

圖表內容解密:

  1. 首先需要建立一個 Kubernetes 叢集。
  2. 安裝 kube-hunter 工具。
  3. 使用 kube-hunter 對叢集進行安全檢測。
  4. 分析檢測報告,瞭解叢集的安全狀況。
  5. 根據報告修復發現的安全漏洞。

Kubernetes 漏洞掃描與防護:深入探索 kube-hunter 的應用

Kubernetes 作為現代容器協調的長官者,其安全性備受關注。為了有效識別和修復 Kubernetes 叢集中的安全漏洞,工具如 kube-hunter 應運而生。本文將探討 Kubernetes 的安裝、kube-hunter 的佈署方法、掃描選項及運作模式,以幫助讀者更好地理解和提升叢集的安全性。

安裝 Kubernetes:以 k3s 為例

首先,讓我們來安裝一個輕量級的 Kubernetes 發行版——k3s。k3s 是一個完全符合 Kubernetes 標準的發行版,但它針對邊緣計算和物聯網裝置進行了最佳化,具有更小的記憶體佔用和更快的啟動速度。

在 Ubuntu 18.04 上安裝 k3s 的過程非常簡單,只需執行以下命令:

$ curl -sfL https://get.k3s.io | sh -

安裝過程解析:

  • 安裝指令碼會下載必要的二進位制檔案並組態 systemd 服務。
  • 安裝完成後,k3s 服務會自動啟動,並組態好 Kubernetes 叢集。
  • 可以透過 kubectl version 命令檢查叢集是否正常運作。
$ kubectl version

如果遇到任何問題,可以檢查 iptables 規則或停用 firewalld:

$ systemctl stop firewalld
$ iptables -t nat -F; iptables -t mangle -F; iptables -F; iptables -X

確認叢集執行正常後,可以透過以下命令檢視所有 Pod 的狀態:

$ kubectl get pods --all-namespaces

Pod 狀態解讀:

此命令會列出所有名稱空間中的 Pod,包括系統元件如 corednstraefik 等。確保所有 Pod 處於 RunningCompleted 狀態。

使用 kube-hunter 進行安全掃描

kube-hunter 是一款專門為 Kubernetes 設計的安全掃描工具,可以幫助識別叢集中的潛在安全漏洞。它支援多種佈署方式和掃描模式,能夠對叢集進行全面檢測。

佈署方法

kube-hunter 提供三種主要的佈署方式:

  1. Host 佈署:直接在主機上執行 kube-hunter,需要 Python v3 和 pip 環境。
  2. Container 佈署:使用 Docker 將 kube-hunter 佈署為容器,可以利用 host networking 掃描主機網路介面。
  3. Pod 佈署:在 Kubernetes 叢集中以 Pod 的形式執行 kube-hunter,能夠從內部視角檢測叢集安全性。

掃描選項

kube-hunter 提供多種掃描選項,以滿足不同的安全需求:

  1. 遠端掃描:掃描遠端 Kubernetes 叢集,模擬外部攻擊者的行為。
  2. 介面掃描:掃描主機的所有網路介面,檢測開放的 Kubernetes 元件。
  3. 網路掃描:針對特定網路 CIDR(如 10.10.10.0/24)進行掃描。

狩獵模式

kube-hunter 提供兩種主要的工作模式:

  1. 主動模式(Active Mode):在發現漏洞後嘗試利用它們來驗證漏洞的真實性。需謹慎使用,並僅在自己的測試叢集上執行。
  2. 被動模式(Passive Mode):僅檢測漏洞,不進行利用,適合用於生產環境的初步檢測。

Kubernetes 弱點掃描工具:kube-hunter 的應用與解析

前言

在 Kubernetes 叢集的安全性評估中,kube-hunter 是一款強大的弱點掃描工具。本文將介紹如何使用 kube-hunter 進行 Kubernetes 叢集的安全掃描,並解析掃描結果。

安裝與執行 kube-hunter

kube-hunter 可以透過容器安裝,以下是使用 Docker 安裝的步驟:

  1. 使用 Docker 提取 aquasec/kube-hunter 映像檔。
  2. 執行 docker run -it --rm --network host aquasec/kube-hunter 命令啟動 kube-hunter。

內容解密:

  • 使用 -it 選項可以進入互動式模式。
  • --rm 選項會在容器停止後自動刪除容器。
  • --network host 選項允許容器使用主機的網路介面。

執行後,kube-hunter 會提供一個互動式選單,讓使用者選擇掃描模式。選擇「Interface scanning」可以掃描本機所有網路介面的子網路。

kube-hunter 掃描結果解析

掃描結果顯示了多個弱點,包括:

  • 「Read access to pod’s service account token」
  • 「CAP_NET_RAW Enabled」
  • 「Access to pod’s secrets」
  • 「K8s Version Disclosure」

內容解密:

  • 「Read access to pod’s service account token」表示 pod 可以存取其服務帳號的 token,這可能導致安全風險。
  • 「CAP_NET_RAW Enabled」表示 pod 可以使用 CAP_NET_RAW 功能,這允許 pod 偽造封包、繫結任意 IP 位址等。
  • 「Access to pod’s secrets」表示 pod 可以存取其 secrets,這可能導致敏感資訊外洩。
  • 「K8s Version Disclosure」表示 Kubernetes 版本資訊被洩露,這可能導致攻擊者利用已知弱點進行攻擊。

在叢集內執行 kube-hunter

除了在容器中執行 kube-hunter 外,也可以將 kube-hunter 佈署為 Kubernetes Job。以下是一個範例 YAML 檔案:

apiVersion: batch/v1
kind: Job
metadata:
  name: kube-hunter
spec:
  template:
    spec:
      containers:
      - name: kube-hunter
        image: aquasec/kube-hunter
        command: ["python", "kube-hunter.py"]
        args: ["--pod"]
      restartPolicy: Never
      backoffLimit: 4

內容解密:

  • apiVersionkind 指定了 Kubernetes 資源的型別和版本。
  • metadataspec 定義了 Job 的屬性和規格。
  • containers 定義了 Job 中執行的容器,包括映像檔、命令和引數。

佈署 Job 後,可以使用 kubectl logs 命令檢視 kube-hunter 的輸出結果。

圖表說明:

此圖示清晰地展示了 kube-hunter 的掃描流程和發現的弱點,使用者可以根據此圖示瞭解掃描結果並採取相應的安全措施。