
प्रतिबंधित eBPF TC इनग्रेस गार्ड, CO-RE डिटेक्टर, सत्यापित लोडर, और CVE-2026-99999 के लिए C11 VMM लॉन्च सुपरवाइज़र
CVE-2026-99999 के लिए एक अंतरिम पैकेट-प्रवेश गार्ड और पर्यवेक्षित लॉन्चर।
यह VM के TAP इंटरफ़ेस पर खतरनाक अतिथि ट्रैफ़िक को तब गिरा देता है, इससे पहले कि होस्ट कर्नेल skb_checksum_help तक पहुँच सके। शुद्ध C11 और eBPF में लिखा गया, बिना किसी इंटरप्रेटेड स्क्रिप्ट के।
सुरक्षा स्थिति: GAL 1 · CVE नियंत्रण असत्यापित · प्रोन्नति रोकी गई। सभी ऑफ़लाइन पॉलिसी, डिटेक्टर, लॉन्चर और सैनिटाइज़र सूट पास होते हैं। हालाँकि, TC इनग्रेस फ़िल्टर पैकेट पेलोड बाइट्स को मान्य करते हैं, virtio चेकसम मेटाडेटा (
csum_start) को नहीं। fentry डिटेक्टर संदिग्ध मेटाडेटा का अवलोकन करता है लेकिन निष्पादन को अवरुद्ध नहीं कर सकता।आधिकारिक उपचार: विक्रेता का पैच किया गया होस्ट कर्नेल इंस्टॉल करें जिसमें अपस्ट्रीम कमिट
6785011f8b16शामिल हो और रीबूट करें।csumguardअतिथि ट्रैफ़िक हार्डनिंग और रनटाइम पर्यवेक्षण प्रदान करता है, सत्यापित CVE न्यूट्रलाइज़ेशन नहीं। देखें VALIDATION.md।
flowchart LR
subgraph Guest["Untrusted Guest VM"]
VMM["VMM Process<br/>QEMU or Cloud-Hypervisor"]
end
subgraph Interface["Host TAP Device tap0"]
TAP["tap0 clsact"]
TC["csumguard_in<br/>eBPF TC Ingress"]
end
subgraph Host["Host Linux Kernel"]
STACK["Host Network Stack"]
SINK["skb_checksum_help<br/>Vulnerable Sink"]
end
subgraph Supervisor["csumguard_launch Supervisor"]
MON["Identity Poller<br/>6D Vector State"]
QUAR["Quarantine Engine<br/>SIGSTOP, DOWN, SIGKILL"]
RING["Receipt Ledger<br/>64-slot Ring Buffer"]
end
VMM -->|TX Frames| TAP
TAP --> TC
TC -->|Admitted TCP, UDP, ARP| STACK
TC -.->|Dropped: Frag, GSO, VLAN, Options| DROP["Dropped + Counter"]
STACK -.-> SINK
MON -->|Polls Status| TAP
MON -->|Attachment Drift or Loss| QUAR
QUAR -->|Pauses & Terminates| VMM
QUAR -->|Flushes Receipts| RING
flowchart TD
PKT["Ingress Frame"] --> ETH{"EtherType"}
ETH -->|ARP 0x0806| ARP{"Request or Reply"}
ARP -->|Valid 42B or 60B pad| PASS["PASS: Admitted"]
ARP -->|Invalid| D_ARP["DROP: Malformed ARP"]
ETH -->|IPv4 0x0800| IP{"IPv4 Header Checks"}
ETH -->|Other or VLAN| D_ETH["DROP: Non-IPv4 or VLAN"]
IP -->|Options, Frag, or GSO| D_IP["DROP: Frag, Option, GSO, or Csum"]
IP -->|Valid IHL 5, MF 0, Offset 0| L4{"Transport Protocol"}
L4 -->|TCP proto 6| TCP{"TCP Checks"}
L4 -->|UDP proto 17| UDP{"UDP Checks"}
L4 -->|Other| D_PROTO["DROP: Unsupported Protocol"]
TCP -->|Valid ports and length| PASS
TCP -->|Port 0 or invalid length| D_TCP["DROP: Bad TCP"]
UDP -->|Valid dst port and length| PASS
UDP -->|Port 0 or invalid length| D_UDP["DROP: Bad UDP"]
flowchart TD
S0["1. Preflight<br/>Validate admission.json"] --> S1["2. Attachment<br/>Verify Hash & Attach clsact"]
S1 --> S2["3. Privilege Drop<br/>Non-root UID/GID & no_new_privs"]
S2 --> S3["4. Running<br/>Poll 4-Tuple ID Every 200ms"]
S3 -->|Poll Matches ID| S3
S3 -->|Filter Loss or ID Mismatch| Q0["5. Quarantine: SIGSTOP<br/>Pause VMM Process Group"]
Q0 --> Q1["6. Quarantine: LINK DOWN<br/>Set TAP Interface Down"]
Q1 --> Q2["7. Quarantine: SIGKILL<br/>Terminate Process Group"]
Q2 --> Q3["8. Exit<br/>Flush Hash-Chained Receipts"]
S3 -->|Normal VM Exit| Q3
| घटक | फ़ाइलें | भूमिका |
|---|---|---|
| पैकेट फ़िल्टर | policy.h, csumguard_tc.bpf.c | TC ingress पर हेडर-ओनली क्लासिफायर। मानक TCP, UDP, और ARP की अनुमति देता है। फ़्रैगमेंट, विकल्प, GSO, और VLAN को ड्रॉप करता है। 26 प्रति-CPU काउंटर कारणों को ट्रैक करते हैं। |
| चेकसम डिटेक्टर | detect_policy.h, csumguard_detect.bpf.c | कर्नेल में CHECKSUM_PARTIAL पैकेट्स को ट्रैक करने वाला वैकल्पिक fentry प्रोब। संदिग्ध ऑफ़सेट पर काउंटर बढ़ाता है। कभी ब्लॉक नहीं करता। |
| लोडर | loader.c | सिमलिंक हमलों को रोकने के लिए / से फ़ाइल पथों को सत्यापित करता है। SHA-256 डाइजेस्ट सत्यापित करता है, सुनिश्चित करता है कि इंटरफ़ेस DOWN है, और clsact को अटैच करता है। |
| VMM लॉन्चर | launch.c, launch_policy.h | ऑपरेटर साक्ष्य को सत्यापित करता है, विशेषाधिकारों को गैर-रूट UID/GID तक घटाता है, VMM शुरू करता है, और अटैचमेंट की निगरानी करता है। यदि फ़िल्टर ड्रॉप हो जाता है तो VM को रोकता और मार देता है। |
| रसीद लेजर | launch.c | FIPS 180-4 SHA-256 हैश-चेन्ड JSONL रिकॉर्ड लिखने वाला एसिंक्रोनस थ्रेड। 64-स्लॉट रिंग बफ़र डिस्क स्टॉल को रोकता है। |
make EGRESS_MTU=1500 all
make test
ऑब्जेक्ट को रूट-स्वामित्व वाली निर्देशिका (/opt/csumguard) में स्टेज करें, सुनिश्चित करें कि TAP इंटरफ़ेस DOWN है, और संलग्न करें:
/opt/csumguard/csumguard_loader attach tap0 /opt/csumguard/csumguard_tc.bpf.o <EXPECTED_SHA256>
/opt/csumguard/csumguard_loader status tap0 <IFINDEX> <NETNS_INODE> <PROG_ID>
/etc/csumguard/admission.json भरें और csumguard_launch के अंतर्गत VMM प्रारंभ करें:
/opt/csumguard/csumguard_launch \
--interface tap0 \
--loader /opt/csumguard/csumguard_loader \
--object /opt/csumguard/csumguard_tc.bpf.o \
--evidence /etc/csumguard/admission.json \
--receipt /var/log/csumguard/tap0.jsonl \
--uid 65534 \
--gid 65534 \
--interval 0.2 \
-- /usr/bin/qemu-system-x86_64 -netdev tap,id=n0,ifname=tap0,script=no,downscript=no
csumguard को OCI v1.1 Artifact (application/vnd.csumguard.ebpf.v1) के रूप में पैकेज और वितरित किया गया है, जिसके साथ संलग्न क्रिप्टोग्राफ़िक प्रमाण संदर्भ (SLSA v1.0 provenance, CycloneDX v1.6 SBOM, और सत्यापन मैट्रिक्स) हैं:
# Package local OCI layout and attach all referrers
./oci/package.sh --layout-dir build/oci-layout --tag v0.2.0
# Discover attached referrers graph
oras discover --oci-layout build/oci-layout:v0.2.0
# Pull directly on hypervisor hosts without container daemon
oras pull ghcr.io/mchorfa/csumguard:v0.2.0
पूर्ण OCI मीडिया प्रकार, डिस्क्रिप्टर और Cosign सत्यापन वर्कफ़्लो के लिए oci/README.md देखें।
# Verify all source and evidence hashes
shasum -a 256 -c SHA256SUMS
# Run offline test suite
make test
# Run AddressSanitizer and UndefinedBehaviorSanitizer
clang -std=c11 -O1 -g -fsanitize=address,undefined -DEGRESS_MTU=1500 -I. tests/test_policy.c -o /tmp/p_asan && /tmp/p_asan
clang -std=c11 -O1 -g -fsanitize=address,undefined -I. tests/test_launch.c -lpthread -o /tmp/l_asan && /tmp/l_asan
clang -std=c11 -O1 -g -fsanitize=address,undefined tests/send_frame.c -o /tmp/f_asan && /tmp/f_asan --self-test