iT邦幫忙

2025 iThome 鐵人賽

DAY 23
0
Cloud Native

我在 CKS 考完只拿 47% 後痛定思痛決定好好準備內容系列 第 23

[Day23] 6-1. Perform behavioral analytics to detect malicious activities

  • 分享至 

  • xImage
  •  

該章主要是討論透過分析系統和使用者的「正常行為模式」,找出異常或可疑的活動,這邊主要都是透過 falco 進行偵測,
今天會先著重於Falco 安裝和基本設定、Falco 架構和運作原理、以及行為分析的概念和方法。

Falco 介紹

Falco 是一個雲原生的服務主要是由 sysdig 構成,主要提供在 host, containers, kubernetes 以及各式雲端環境中 runtime security 的偵測。主要提供 Linux kernel 事件,若要偵測其他行為可以透過plugins,透過取得這些 metadata 進行及時的分析 並透過制定好的規則即時提出告警。

Plugins 可以支援 Kubernetes Audit Events, AWS CloudTrail, 以及 Okta

可以監控的內容:

  • 提權行為 (sudo)
  • namespace 透過 setns 進行修改
  • 在 /etc, /usr/bin, /usr/sbin 等讀寫行為
  • 建立 symlinks
  • 使用 chown, chmod 進行權限修改
  • 透過 execve建立的spawned processes (如 /usr/bin/python3 script.py)
  • 執行 shell binaries (如 sh, bash, csh, zsh, etc)
  • 執行 SSH (如 ssh, scp, sftp)
  • 篡改(Mutating) Linux 核心工具程式(coreutils executables) (如cp malicious_ls /bin/ls # 替換成惡意版本)
  • 篡改(Mutating) login binaries
  • 篡改(Mutating) shadowutil 或 passwd 執行檔
    • shadowutil: shadowconfig:設定 shadow 密碼系統, pwck:檢查密碼檔案完整性, chpasswd:批次修改使用者密碼
    • passwd: getpasswd:取得密碼資訊, change:修改帳號到期資訊, useradd:新增使用者帳號, userdel:刪除使用者帳號, usermod:修改使用者帳號, passwd:修改密碼

規則及 Output 會在之後陸續介紹。

Falco 安裝

install as docker

透過以下指令安裝

sudo docker run --rm -i -t --name falco --privileged  \
    -v /var/run/docker.sock:/host/var/run/docker.sock \
    -v /dev:/host/dev -v /proc:/host/proc:ro -v /boot:/host/boot:ro \
    -v /lib/modules:/host/lib/modules:ro -v /usr:/host/usr:ro -v /etc:/host/etc:ro \
    falcosecurity/falco:0.41.3

安裝後 Falco 會有一些預設的 rule ,當安裝完後可以另外開啟一個 terminal 並嘗試開啟檔案sudo cat /etc/shadow

執行後回到 Falco 可以看到相關告警

2024-06-21T08:54:23.812791015+0000: Warning Sensitive file opened for reading by non-trusted program (file=/etc/shadow gparent=sudo ggparent=bash gggparent=tmux: evt_type=openat user=root user_uid=0 user_loginuid=1000 process=cat proc_exepath=/usr/bin/cat parent=sudo command=cat /etc/shadow terminal=34826 container_id=host container_name=host)

install in Kubernetes

透過 helm 安裝

  1. 安裝 helm
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm repo update
  1. 透過 helm 安裝 Falco
helm install --replace falco --namespace falco --create-namespace --set tty=true falcosecurity/falco
  1. 透過 helm 安裝後會在 namespace falco 中
kubectl get pods -n falco
  1. 查看 log
kubectl logs -l app.kubernetes.io/name=falco -n falco -c falco | grep Warning
  1. 啟用 Falcosidekick-UI,啟用後可以透過 port-forward 進到 UI 介面
helm upgrade --namespace falco falco falcosecurity/falco -f falco_custom_rules_cm.yaml --set falcosidekick.enabled=true --set falcosidekick.webui.enabled=true
  1. 啟用 Slack 通知
helm upgrade --namespace falco falco falcosecurity/falco \
  --set falcosidekick.enabled=true \
  --set falcosidekick.config.slack.webhookurl=YOUR_WEBHOOK_URL_HERE \
  --set falcosidekick.config.slack.minimumpriority=notice
  1. 刪除
helm -n falco uninstall falco

install in Ubuntu

  1. 加上 Falco repository key
curl -fsSL https://falco.org/repo/falcosecurity-packages.asc | \
sudo gpg --dearmor -o /usr/share/keyrings/falco-archive-keyring.gpg
  1. 加上 Falco repository
sudo bash -c 'cat << EOF > /etc/apt/sources.list.d/falcosecurity.list
deb [signed-by=/usr/share/keyrings/falco-archive-keyring.gpg] https://download.falco.org/packages/deb stable main
EOF'
  1. 讀取 repository contents
sudo apt-get update -y
  1. 安裝 Falco install 需要的 dialog
sudo apt-get install -y dialog
  1. 安裝 Falco,安裝時選擇 Modern eBPF
sudo apt-get install -y falco
  1. 安裝後可以查看狀態
sudo systemctl status falco-modern-bpf.service

Falco 架構和運作原理

Event Source 方面可以透過 Configure 檔配置設定要使用 Engine (drivers, gVisor) 還是 Plugins

Falco 在偵測 syscall 的時候有以下三種模式

  • Kernel module (default)
  • Modern eBPF probe
  • Legacy eBPF probe (舊版 eBPF 實作,不會介紹)

Kernel module

當透過 debian/rpm 安裝時會安裝 falcoctl driver 的工具,同時會需要 full privileges 的權限無法透過 Linux capabilities 限制。

當請求發生時會是以下途徑:

execve() → Falco 核心模組攔截(tracepoints) → ring buffer → 送到 userspace

Modern eBPF probe

eBPF 則是不需要額外安裝 driver,已內建在 Falco 執行檔中,可以直接載入 eBPF 程式來監控 syscall。

  • eBPF (extended Berkeley Packet Filter): 最初用於網路封包過濾,現在進一步擴展到系統呼叫監控等核心功能。eBPF 讓我們能夠安全且高效地在執行時期擴展核心功能,無需修改核心原始碼或載入核心模組,安全性由核心內建的驗證器保障。

當請求發生時:

execve() → eBPF 程式攔截 → ring buffer → 送到 Falco userspace

參考資料
https://falco.org/
https://en.wikipedia.org/wiki/EBPF


上一篇
[Day22] 5-4. Perform static analysis of user workloads and container images
系列文
我在 CKS 考完只拿 47% 後痛定思痛決定好好準備內容23
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言