ๅบไบ Rust + eBPF ็ OpenEuler ็ณป็ปๅ ณ้ฎๆๅก็ๆงไธไธปๅจ้ฒๅพกๅทฅๅ ท
็ฎไป ยท ็นๆง ยท ๅฟซ้ๅผๅง ยท ๆถๆ ยท ๆจกๅ่ฏดๆ ยท ้ ็ฝฎ ยท ๅผๅๆๅ ยท ่ทฏ็บฟๅพ ยท ่ดก็ฎ ยท ่ฎธๅฏ่ฏ
openeuler-service-monitor ๆฏไธๆฌพไธไธบ OpenEuler ๆไฝ็ณป็ป้่บซๅฎๅถ็่ฝป้็บงใ้ซๅฎๅ
จใไฝๅผ้็็ณป็ปๅ
ณ้ฎๆๅก็ๆงไธไธปๅจ้ฒๅพกๅทฅๅ
ทใ
ๆฌ้กน็ฎไปฅ Rust ่ฏญ่จๅ eBPF ๆๆฏไธบๆ ธๅฟ๏ผ้่ฟ Aya ๆกๆถ ๅฎ็ฐๅ ๆ ธๆไธ็จๆทๆ็ๅ จๆ Rust ๅผๅ๏ผๅฏน่ฟ่กๅจ OpenEuler ไธ็ๅ ณ้ฎๆๅก๏ผๅฆ systemd ๆ็ฎกๆๅกใๆฐๆฎๅบใWeb ๆๅกๅจ็ญ๏ผ่ฟ่ก็ป็ฒๅบฆ็่กไธบ็ๆงใๅผๅธธๆฃๆตไธ่ฟ่กๆถ็ญ่กฅไธไฟฎๅค๏ผๅจไธไฟฎๆนๅ ๆ ธๆบ็ ใไธ้ๅฏ็ณป็ป็ๅๆไธ๏ผๅฎ็ฐ"่งๆตๅณ้ฒๅพก"็ไธไฝๅๅฎๅ จ่ฝๅใ
| ไผ ็ป็ๆง็็น | ๆฌๅทฅๅ ท่งฃๅณๆนๆก |
|---|---|
strace/ptrace ๆง่ฝๅผ้ๆ้ซ๏ผๆ
ข 10x+๏ผ |
eBPF ๅ ๆ ธๆ็ดๆฅ่ฟๆปค๏ผ่ฟไน้ถๅผ้ |
| ้็จๅทฅๅ ทๆ ๆณๆทฑๅบฆ้้ OpenEuler ็นๆง | ๆทฑๅบฆ้ๆ systemdใBTF/CO-REใBPF LSM |
| ็ๆงๅทฅๅ ท่ช่บซๅญๅจๅ ๅญๅฎๅ จ้ฃ้ฉ | ๅ จๆ Rust ๅฎ็ฐ๏ผ็ผ่ฏๆไฟ่ฏๅ ๅญๅฎๅ จ |
| ๆผๆดไฟฎๅคๅฟ ้กป้ๅฏๆๅก/็ณป็ป | ๅบไบ eBPF ็่ฟ่กๆถ็ญ่กฅไธ๏ผ้ถๅๆบไฟฎๅค |
| ้จ็ฝฒไพ่ตๅคๆ๏ผPythonใLLVM ็ญ๏ผ | ๅไธ้ๆไบ่ฟๅถ๏ผ้ถๅค้จไพ่ต |
- ๆไปถ็ณป็ป่ฎฟ้ฎ็ๆง๏ผๅฎๆถๆ่ทๅฏน
/etc/shadowใSSL ่ฏไนฆใ้ ็ฝฎๆไปถ็ญๆๆ่ทฏๅพ็่ฏปๅๆไฝ - ่ฟ็จ็ๅฝๅจๆ็ๆง๏ผ่ฟฝ่ธชๆๅก่ฟ็จ็ๅๅปบ๏ผ
execve๏ผใ้ๅบใ็นๆๆๅ๏ผsetuid/setgid๏ผ - ็ฝ็ปๆดปๅจ็ๆง๏ผๆฃๆต้้ขๆ็ๅค่ฟ่กไธบใๅๅ Shellใๅผๅธธ C2 ้ไฟก
- ็ณป็ป่ฐ็จๅผๅธธๆฃๆต๏ผๅบไบ่กไธบๅบ็บฟ็็ณป็ป่ฐ็จๅบๅๅๆ๏ผ่ฏๅซๅ็ฆปๆญฃๅธธๆจกๅผ็ๅผๅธธๆง่ก
- ๅ
ๆ ธๆๅฝๆฐ็ญ่กฅไธ๏ผ้่ฟ
kprobe+bpf_override_returnๅฏน้ซๅฑๅ ๆ ธๅฝๆฐ่ฟ่กๅๆฐๆ ก้ชๅ่ฟๅๅผๅนฒ้ข - ็จๆทๆๅฝๆฐ็ญ่กฅไธ๏ผ้่ฟ
uprobeๅฏน NginxใOpenSSHใRedis ็ญๅ ณ้ฎๆๅก็้ซๅฑๅฝๆฐ่ฟ่ก่ฟ่กๆถ็ผ่งฃ - ่กฅไธ็ญ็ฎก็๏ผๆฏๆ่กฅไธ็ๅจๆๅฏ็จ/็ฆ็จใ็ๆฌ็ฎก็ไธไธ้ฎๅๆป
- eBPF JIT ็ผ่ฏๆง่ก๏ผๅ ๆ ธๆ็ดๆฅ่ฟๆปค๏ผ็จๆทๆไป ๅค็ๅ ณ้ฎไบไปถ
- Per-CPU ๆฐๆฎ็ปๆ๏ผๆถ้คๅคๆ ธ็ซไบ
- BPF Ring Buffer ้ซๅๅไผ ่พ๏ผๆฏๆ่ๅๅ้ฆ่ๆต
- ๅผๆญฅ Tokio ่ฟ่กๆถ๏ผ้้ปๅกๆน้ไบไปถๆถ่ดน
- ๅบไบ BPF CO-RE๏ผไธๆฌก็ผ่ฏ๏ผๅฐๅค่ฟ่ก๏ผ๏ผๆ ้ๅ ๆ ธๅคดๆไปถ
- ๆทฑๅบฆ้ๆ systemd DBus ๆฅๅฃ๏ผ่ชๅจๅ็ฐๆๅก่ฟ็จ๏ผๆ ้ๆๅจ้ ็ฝฎ PID
- ๆฏๆ BPF LSM ๅผบๅถ่ฎฟ้ฎๆงๅถ็ญ็ฅๅจๆๆณจๅ ฅ
- ๅทฒ้ช่ฏ x86_64 ไธ ้ฒฒ้น/้ฃ่ พ ARM64 ๅๆถๆๅ ผๅฎนๆง
- ๅ ๆ ธๆ eBPF ็จๅบไธ็จๆทๆๆงๅถ็จๅบๅไฝฟ็จ Rust ็ผๅ
- ่ทจๅฑๅ ฑไบซๆฐๆฎ็ปๆๅฎไน๏ผ็ฑปๅๅฎๅ จ๏ผๆ ABI ไธไธ่ด้ฃ้ฉ
- ็ผ่ฏไธบๅไธ้ๆ้พๆฅไบ่ฟๅถๆไปถ๏ผ้จ็ฝฒๆ็ฎ
| ไพ่ต้กน | ๆไฝ็ๆฌ | ่ฏดๆ |
|---|---|---|
| OpenEuler | 22.03 LTS (ๅ ๆ ธ 5.10+) | ้ๅผๅฏ CONFIG_DEBUG_INFO_BTF=y |
| Rust ๅทฅๅ ท้พ | 1.75.0 (stable) | ๅซ rustup |
| Rust nightly | nightly-2024-01-01+ | ็จไบ็ผ่ฏ eBPF ๅ ๆ ธ็จๅบ |
| pnpm | 9+ | ็จไบๆๅปบ gaia-webui๏ผๅทฒ้ๆๅฐ cargo build |
| bpftool | 5.10+ | ็จไบ BTF ๅฏน่ฑก็ๆ๏ผๅฏ้๏ผ |
| Linux ๅ ๆ ธๅคดๆไปถ | ไธ่ฟ่กๅ ๆ ธไธ่ด | ไป ๅผๅ็ฏๅข้่ฆ |
ๆณจๆ๏ผ่ฟ่กๆถๆ ้ PythonใLLVMใๅ ๆ ธๅคดๆไปถ็ญ้ขๅคไพ่ตใ
# ๅฎ่ฃ
rustup
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# ๆทปๅ nightly ๅทฅๅ
ท้พ๏ผ็จไบ eBPF ๅ
ๆ ธ็จๅบ็ผ่ฏ๏ผ
rustup toolchain install nightly
# ๅฎ่ฃ
cargo-generate๏ผ็จไบ้กน็ฎๆจกๆฟ๏ผๅฏ้๏ผ
cargo install cargo-generate
# ๅฎ่ฃ
bpf-linker๏ผeBPF ็จๅบ้พๆฅๅจ๏ผ
cargo install bpf-linker
# ๅฎ่ฃ
pnpm๏ผๅ็ซฏๆๅปบๅทฅๅ
ท๏ผcargo build ไผ่ชๅจ่ฐ็จ๏ผ
npm install -g pnpm
# ๅจ้กน็ฎๆ น็ฎๅฝๆง่ก๏ผไผ่ชๅจ่งฆๅ gaia-webui ็ pnpm build
cargo buildๆๅปบๅ่ฏท็กฎ่ฎค็ณป็ปไธญๅทฒๅฎ่ฃ
pnpm๏ผๅนถไธgaia-webuiไพ่ตๅทฒ็ปๅๅคๅฅฝใ
sudo RUST_LOG=info ./target/debug/gaia-xdp --config gaia.toml
ๅ็ซฏๅจgaia-webui/ไธใ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ ็จๆทไบคไบๅฑ (CLI / Dashboard) โ โ monitor CLI โ Terminal TUI โ HTTP API โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ ็จๆทๆๅค็ๅฑ (Rust / Tokio) โ โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโโโโโโโโโโโ โ โ โ ไบไปถ่งฃๆๅจ โ โ ๅผๅธธๆฃๆตๅผๆ โ โ ็ญ่กฅไธ็ฎก็ๅจ โ โ ๅ่ญฆๆจกๅ โ โ โ โ (Deserialize)โ โ(Rule/Baseline)โ โ(Patch Mgr) โ โ(Alert Mgr)โ โ โ โโโโโโโโฌโโโโโโโ โโโโโโโโฌโโโโโโโโ โโโโโโโฌโโโโโโโ โโโโโโโฌโโโโโโ โ โ โโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโ โ โ โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ ไบไปถไผ ่พๅฑ (BPF Ring Buffer / Perf Buffer) โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ (ๅ ๆ ธๆ โ ็จๆทๆ่พน็) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ ๅ ๆ ธๆ eBPF ๆข้ๅฑ (Rust / Aya) โ โ โ โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโโโโโโโโโโโ โ โ โ ๆไปถ่ฎฟ้ฎๆข้ โ โ ่ฟ็จ็ๅฝๅจๆ โ โ ็ฝ็ปๆดปๅจ โ โ ็ญ่กฅไธ โ โ โ โ (tracepoint/ โ โ ๆข้ โ โ ๆข้ โ โ ๆข้ โ โ โ โ kprobe) โ โ (execve/ โ โ(connect/ โ โ(kprobe/ โ โ โ โ โ โ setuid) โ โ bind) โ โ uprobe) โ โ โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโโโโโโโโโโโ โ โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ BPF LSM ๅผบๅถ่ฎฟ้ฎๆงๅถๅฑ โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ OpenEuler ๅ ๆ ธ (5.10+) โ โ BTF/CO-RE โ BPF LSM โ systemd DBus โ ARM64 ๆฏๆ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ