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 的進階選項
驗證事件報告:使用
-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檔案事件報告:使用
-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行程事件報告:使用
-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 的效能與規則最佳實踐
規則排序與最佳化:auditd 的規則是從上到下依序處理的,因此需要謹慎安排規則順序,避免不必要的效能開銷。
避免過度稽核:過多的稽核規則會導致系統負擔加重,應根據實際需求選擇合適的稽核專案。
Kubernetes 安全:使用 kube-hunter 進行叢集安全檢測
隨著容器化應用的普及,Kubernetes 作為最流行的容器協調工具,其安全性也日益受到關注。本章將介紹如何使用 kube-hunter 工具對 Kubernetes 叢集進行安全檢測。
建立 Mini Kubernetes 叢集
首先,我們需要建立一個 Kubernetes 叢集進行測試。k3s 是一個輕量級的 Kubernetes 發行版,非常適合用於測試環境。安裝 k3s 的過程非常簡單,只需執行以下命令:
$ curl -sfL https://get.k3s.io | sh -
內容解密:
curl命令用於下載安裝指令碼。-sfL引數確保指令碼下載過程中出現錯誤時能夠正確處理。https://get.k3s.io是 k3s 的官方安裝指令碼網址。| 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
內容解密:
- 系統會自動查詢 stable 版本的 k3s 並下載相關的二進位制檔案。
- 下載過程中會進行雜湊驗證,以確保檔案的完整性。
- 安裝程式會將 k3s 二進位制檔案安裝到
/usr/local/bin/k3s。 - 同時建立
kubectl和crictl的符號連結到 k3s,以便於使用。 - 如果系統中已存在
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 叢集進行安全檢測的基本流程。透過這個流程,可以有效地提升叢集的安全性。
圖表內容解密:
- 首先需要建立一個 Kubernetes 叢集。
- 安裝 kube-hunter 工具。
- 使用 kube-hunter 對叢集進行安全檢測。
- 分析檢測報告,瞭解叢集的安全狀況。
- 根據報告修復發現的安全漏洞。
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,包括系統元件如 coredns、traefik 等。確保所有 Pod 處於 Running 或 Completed 狀態。
使用 kube-hunter 進行安全掃描
kube-hunter 是一款專門為 Kubernetes 設計的安全掃描工具,可以幫助識別叢集中的潛在安全漏洞。它支援多種佈署方式和掃描模式,能夠對叢集進行全面檢測。
佈署方法
kube-hunter 提供三種主要的佈署方式:
- Host 佈署:直接在主機上執行 kube-hunter,需要 Python v3 和 pip 環境。
- Container 佈署:使用 Docker 將 kube-hunter 佈署為容器,可以利用 host networking 掃描主機網路介面。
- Pod 佈署:在 Kubernetes 叢集中以 Pod 的形式執行 kube-hunter,能夠從內部視角檢測叢集安全性。
掃描選項
kube-hunter 提供多種掃描選項,以滿足不同的安全需求:
- 遠端掃描:掃描遠端 Kubernetes 叢集,模擬外部攻擊者的行為。
- 介面掃描:掃描主機的所有網路介面,檢測開放的 Kubernetes 元件。
- 網路掃描:針對特定網路 CIDR(如
10.10.10.0/24)進行掃描。
狩獵模式
kube-hunter 提供兩種主要的工作模式:
- 主動模式(Active Mode):在發現漏洞後嘗試利用它們來驗證漏洞的真實性。需謹慎使用,並僅在自己的測試叢集上執行。
- 被動模式(Passive Mode):僅檢測漏洞,不進行利用,適合用於生產環境的初步檢測。
Kubernetes 弱點掃描工具:kube-hunter 的應用與解析
前言
在 Kubernetes 叢集的安全性評估中,kube-hunter 是一款強大的弱點掃描工具。本文將介紹如何使用 kube-hunter 進行 Kubernetes 叢集的安全掃描,並解析掃描結果。
安裝與執行 kube-hunter
kube-hunter 可以透過容器安裝,以下是使用 Docker 安裝的步驟:
- 使用 Docker 提取
aquasec/kube-hunter映像檔。 - 執行
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
內容解密:
apiVersion和kind指定了 Kubernetes 資源的型別和版本。metadata和spec定義了 Job 的屬性和規格。containers定義了 Job 中執行的容器,包括映像檔、命令和引數。
佈署 Job 後,可以使用 kubectl logs 命令檢視 kube-hunter 的輸出結果。
圖表說明:
此圖示清晰地展示了 kube-hunter 的掃描流程和發現的弱點,使用者可以根據此圖示瞭解掃描結果並採取相應的安全措施。