
कर्नेल-रनटाइम रक्षा ढांचा AF_ALG कमजोरियों के लिए, जिसमें eBPF सॉकेट ट्रेसिंग, Ansible हार्डनिंग, और ड्रिफ्ट डिटेक्शन के लिए एक क्रिप्टो ऑडिटर शामिल है।
Linux AF_ALG (एड्रेस फैमिली एल्गोरिदम, फैमिली 38) सबसिस्टम के लिए एक कर्नेल-रनटाइम रक्षा ढांचा। यह सुरक्षा संचालन केंद्रों (SOCs) के लिए बनाया गया है जो एंटरप्राइज़ Linux फ्लीट चलाते हैं, जहाँ ज़ीरो ट्रस्ट को कर्नेल के अंदर तक विस्तारित होना चाहिए, न कि केवल नेटवर्क किनारे पर रुकना चाहिए।
AF_ALG कर्नेल क्रिप्टो API को सॉकेट इंटरफ़ेस (socket(AF_ALG, SOCK_SEQPACKET, 0)) के माध्यम से यूज़रस्पेस तक उजागर करता है। इसे मूल रूप से उन एम्बेडेड सिस्टमों के लिए जोड़ा गया था जिनमें /dev/crypto नहीं था, और तब से इसने कर्नेल CVEs का असमान हिस्सा जमा किया है क्योंकि यह कर्नेल-मोड क्रिप्टो कोड को अनप्रिविलेज्ड कॉलर्स के सामने प्रस्तुत करता है — एक क्लासिक सतह-क्षेत्र बेमेल।
एक विशिष्ट एंटरप्राइज़ बिल्ड में:
connect(), bind(), या DNS को हुक करते हैं, कुछ भी नहीं देखते — AF_ALG ट्रैफ़िक कभी भी कर्नेल से बाहर नहीं जाता।यह ढांचा प्रत्येक AF_ALG सॉकेट निर्माण को एक उच्च-संकेत घटना के रूप में मानता है और उस सतह को कम करता है जो उन घटनाओं को शोषण योग्य बनाती है।
| ज़ीरो ट्रस्ट सिद्धांत | इस ढांचे में नियंत्रण |
|---|---|
| कभी भरोसा न करें, हमेशा सत्यापित करें | eBPF ट्रेसर हर AF_ALG सॉकेट-निर्माण प्रयास को pid/uid/comm के साथ लॉग करता है |
| उल्लंघन मान लें | क्रिप्टो ऑडिटर कर्नेल स्थिति की तुलना हस्ताक्षरित बेसलाइन से करता है |
| न्यूनतम विशेषाधिकार | systemd RestrictAddressFamilies + प्रबंधित इकाइयों पर क्षमता सीमा |
| माइक्रोसेगमेंटेशन (कर्नेल-पक्ष) | unprivileged_userns_clone=0 शोषणों द्वारा उपयोग किए जाने वाले userns पिवट को हटाता है |
| निरंतर सत्यापन | CI हर बदलाव पर संस्करणित स्कीमा के विरुद्ध ऑडिट रिपोर्ट सत्यापित करता है |
.
├── ebpf/ रनटाइम अवलोकन (BCC ट्रेसर + अनुमतिसूची)
├── ansible/ कॉन्फ़िगरेशन-एज़-कोड (sysctl + systemd ड्रॉप-इन)
├── systemd/ गैर-Ansible होस्टों के लिए स्टैंडअलोन systemd ड्रॉप-इन
├── auditor/ कर्नेल स्थिति ऑडिटर (Python)
├── schemas/ ऑडिट-रिपोर्ट अंतर्ग्रहण के लिए JSON स्कीमा
├── scripts/ सहायक शेल स्क्रिप्ट (CI द्वारा लिंटेड)
├── tests/ यूनिट परीक्षण + रिपोर्ट फिक्स्चर
└── .github/workflows/ CI: shellcheck + JSON स्कीमा सत्यापन + लिंट
ebpf/af_alg_tracer.py security_socket_create पर एक kprobe जोड़ता है। प्रोब BPF प्रोग्राम स्तर पर family == 38 पर फ़िल्टर करता है ताकि वेरिफायर असंबंधित सॉकेट निर्माणों को काट दे और प्रति-घटना ओवरहेड नैनोसेकंड में रहे। यह प्रति प्रयास एक JSON रिकॉर्ड उत्सर्जित करता है:
{
"@timestamp": "2026-05-02T09:14:11.412041+00:00",
"event": {"category": "kernel", "action": "af_alg_socket_create", "severity": "high"},
"process": {"pid": 1394, "tgid": 1394, "comm": "suspicious_bin"},
"user": {"uid": 1000, "gid": 1000},
"socket": {"family": 38, "family_name": "AF_ALG", "type": 5, "protocol": 0},
"host": {"name": "web-prod-04"}
}
stdout को Vector, Fluent Bit, या journald (via systemd-cat) में पाइप करें। एक comm-नाम अनुमतिसूची (/etc/af-alg-defense/allow.list) ज्ञात-अच्छे उपभोक्ताओं को दबाती है बिना विचलन का पता लगाने की क्षमता खोए।
kprobe लक्ष्य LSM हुक है, इसलिए घटनाएँ इरादे पर सक्रिय होती हैं — यहाँ तक कि वे प्रयास भी जो seccomp या RestrictAddressFamilies द्वारा अस्वीकार किए जाएँगे, फिर भी एक रिकॉर्ड उत्पन्न करते हैं। व्यवहारिक बेसलाइनिंग के लिए SOC को ठीक यही चाहिए।
ansible/roles/af_alg_hardening/ दो सख्तीकरण परतें लागू करता है:
Sysctl ड्रॉप-इन (/etc/sysctl.d/90-af-alg-defense.conf):
kernel.unprivileged_userns_clone=0 — अधिकांश AF_ALG वृद्धि श्रृंखलाओं द्वारा उपयोग किए जाने वाले userns पिवट को हटाता है।user.max_user_namespaces=0 — डिस्ट्रो-पोर्टेबल रक्षा-इन-गहराई।Systemd ड्रॉप-इन (/etc/systemd/system/<unit>.d/50-af-alg-restrict.conf):
RestrictAddressFamilies को अनुमतिसूची (निषेध-सूची नहीं) के रूप में उपयोग करता है। इकाई को AF_UNIX AF_INET AF_INET6 AF_NETLINK की अनुमति है; कोई भी अन्य फैमिली — AF_ALG सहित — EAFNOSUPPORT के साथ विफल होती है क्योंकि systemd इसे cgroup-संलग्न BPF के माध्यम से लागू करता है जिसे एप्लिकेशन अक्षम नहीं कर सकता। ड्रॉप-इन CAP_SYS_ADMIN को भी हटाता है और सबसे सामान्य वृद्धि पथों को बंद करने के लिए ProtectKernel* लागू करता है।
इसके साथ लागू करें:
ansible-playbook -i inventory ansible/site.yml --check --diff # पूर्वावलोकन
ansible-playbook -i inventory ansible/site.yml # लागू करें
Ansible के बिना होस्टों के लिए, स्टैंडअलोन फ़ाइल को जगह पर रखें:
sudo ./scripts/deploy_dropin.sh nginx.service
auditor/crypto_auditor.py निम्नलिखित का निरीक्षण करके एक JSON सुरक्षा-स्थिति रिपोर्ट उत्पन्न करता है:
/proc/crypto — प्रत्येक पंजीकृत साइफर / हैश / aead, FIPS फ़्लैग और सेल्फ-टेस्ट स्थिति के साथ।/sys/module/ — क्रिप्टो सबट्री में लोड किए गए मॉड्यूल, टेंट फ़्लैग और पैरामीटर स्नैपशॉट के साथ।/proc/sys/kernel/, /proc/sys/user/ — sysctls जो AF_ALG हमले के पथों को गेट करते हैं।/sys/kernel/security/lockdown — कर्नेल लॉकडाउन मोड।रिपोर्ट स्थिर खोज आईडी (FND-001 से FND-005 वर्तमान में) द्वारा कुंजीबद्ध है ताकि SIEM नियम पूरे दस्तावेज़ को गिराए बिना व्यक्तिगत खोजों को दबा सकें। ड्रिफ्ट डिटेक्शन स्थिति की तुलना बेसलाइन से करता है:
sudo ./auditor/crypto_auditor.py --output /var/log/af-alg-defense/today.json
sudo ./auditor/crypto_auditor.py \
--baseline /var/log/af-alg-defense/baseline.json \
--fail-on-drift
स्कीमा schemas/audit_report.schema.json (ड्राफ्ट 2020-12) में रहता है और हर पुश पर CI में सत्यापित होता है।
.github/workflows/ci.yml हर पुश और PR पर चार कार्य चलाता है:
*.sh और शीबैंग-युक्त स्क्रिप्ट।audit_report.schema.json की मेटास्कीमा-जाँच करता है, फिर GH रनर कर्नेल पर ऑडिटर लाइव चलाता है और परिणामी रिपोर्ट सत्यापित करता है। tests/fixtures/ में फिक्स्चर भी जाँचे जाते हैं।ruff check .)।एक विफल स्कीमा जाँच मर्ज को रोकती है, जो डाउनस्ट्रीम SIEM पार्सरों को चुपचाप-नाम-बदले गए फ़ील्ड पर टूटने से रोकती है।
af_alg_socket_create घटना — पहली घटना पर पेज करें, एकत्रित न करें।crypto_modules में नई प्रविष्टि जहाँ मॉड्यूल लोडिंग स्थिर होनी चाहिए।hardened=false के साथ — मैन्युअल छेड़छाड़ या समानांतर कॉन्फ़िगरेशन सिस्टम से ड्रिफ्ट का संकेत।lockdown फ़ील्ड integrity/confidentiality से none में संक्रमण — कर्नेल-स्थिति छेड़छाड़ का मजबूत संकेत।allow.list भरने के लिए परिणामी बेसलाइन का उपयोग करें।baseline.json के रूप में कैप्चर करें।af_alg_systemd_services के साथ एक कैनरी समूह पर लागू करें जो एक कम-जोखिम इकाई पर सेट हो। journald में EAFNOSUPPORT त्रुटियों के लिए देखें।systemd-analyze security <unit> को प्रतिबंध लागू होते दिखाना चाहिए।--fail-on-drift के साथ रात्रिकालीन cron में जोड़ें और गैर-शून्य निकास को ऑन-कॉल कतार में रूट करें।af_alg को अनलोड नहीं करता यदि यह पहले से उपयोग में है। मॉड्यूल अनलोडिंग दायरे से बाहर है क्योंकि वैध बूट-समय उपभोक्ता अभी भी चल रहे हो सकते हैं। यदि आपने पुष्टि की है कि होस्ट पर किसी को इसकी आवश्यकता नहीं है, तो कर्नेल कमांड लाइन पर modprobe.blacklist=af_alg का उपयोग करें।security_socket_create kprobe लक्ष्य के लिए)।uname -r से मेल खाने वाले कर्नेल हेडर।CAP_BPF (या रूट); ऑडिटर के लिए /proc/crypto तक पढ़ने की पहुँच (इसे पढ़ने के लिए कोई विशेषाधिकार आवश्यक नहीं)।Apache-2.0. देखें LICENSE।