
eBPF-संचालित मूक पर्यवेक्षक कंटेनरीकृत रनटाइम के लिए, मैलवेयर विश्लेषण सैंडबॉक्स और एजेंटिक AI मॉनिटरिंग के लिए निर्मित।

एक हल्का eBPF-आधारित रनटाइम सुरक्षा ट्रेसर, विशेष रूप से मैलवेयर विश्लेषण सैंडबॉक्स के लिए बनाया गया है। एक नमूना एक अलग कंटेनर में डालें, और Azazel हर सिस्टम कॉल, फ़ाइल टच, नेटवर्क कनेक्शन और संदिग्ध व्यवहार को कैप्चर करता है, फिर आपको हर चीज़ का एक साफ JSON स्ट्रीम देता है।
चाहे आप एक स्वचालित मैलवेयर विश्लेषण सैंडबॉक्स बना रहे हों या स्वायत्त AI एजेंटों के लिए 24/7 रनटाइम मॉनिटरिंग की आवश्यकता हो, Azazel सर्जिकल, अदृश्य और AI-तैयार JSON टेलीमेट्री प्रदान करता है।
उपयोग:
azazel [फ़्लैग्स]
azazel [कमांड]
कमांड:
run-sandbox एक अलग डॉकर सैंडबॉक्स में मैलवेयर नमूना चलाएं और उसे ट्रेस करें
list-containers चल रहे कंटेनरों की सूची दिखाएं
version संस्करण प्रिंट करें
वैश्विक फ़्लैग्स:
-c, --container strings फ़िल्टर करने के लिए कंटेनर ID(एँ) (एकाधिक निर्दिष्ट कर सकते हैं)
-o, --output string आउटपुट फ़ाइल पथ (डिफ़ॉल्ट: stdout)
--pretty JSON आउटपुट को सुंदर-प्रिंट करें
--stdout जब --output सेट हो तब भी stdout पर प्रिंट करें
-v, --verbose वर्बोज़ लॉगिंग
--no-summary बाहर निकलने पर सारांश अक्षम करें
-h, --help सहायता

कुल 19 हुक पॉइंट — सिस्कॉल एंट्री पर ट्रेसपॉइंट + DNS डिटेक्शन के लिए एक kprobe।
vmlinux.h के माध्यम से, पुनर्संकलन के बिना कर्नेल संस्करणों में काम करता हैjq, Elasticsearch, Splunk, या आपकी अपनी पाइपलाइन के लिए तैयार/tmp से निष्पादन, संवेदनशील फ़ाइल एक्सेस (/etc/shadow, /proc/self/mem), ptrace, W+X mmap और कर्नेल मॉड्यूल लोडिंग के लिए स्वचालित अलर्टCONFIG_DEBUG_INFO_BTF=y के साथअपने कर्नेल को सत्यापित करें:
# BTF समर्थन (आवश्यक)
ls /sys/kernel/btf/vmlinux
# कर्नेल संस्करण
uname -r
# क्लोन करें
git clone https://github.com/beelzebub-labs/azazel.git
cd azazel
# डेव कंटेनर बनाएं
make docker-dev
# इसमें प्रवेश करें (विशेषाधिकार प्राप्त, होस्ट PID/cgroup नेमस्पेस के साथ)
make docker-dev-run
# कंटेनर के अंदर:
make vmlinux # कर्नेल प्रकार परिभाषाएँ उत्पन्न करें
make generate # BPF C → Go बाइंडिंग संकलित करें
make build # बाइनरी बनाएं
# सब कुछ ट्रेस करें, stdout पर आउटपुट
sudo ./bin/azazel
# सब कुछ ट्रेस करें, सुंदर JSON के साथ फ़ाइल में सहेजें
sudo ./bin/azazel --output events.json --pretty
# केवल एक विशिष्ट कंटेनर को ट्रेस करें
sudo ./bin/azazel --container <container_id> --output events.json
# चल रहे कंटेनरों की सूची दिखाएं
sudo ./bin/azazel list-containers
# डेव कंटेनर के अंदर
make test
यह बाइनरी बनाता है, ट्रेसर शुरू करता है, एक मैलवेयर व्यवहार सिम्युलेटर चलाता है, फिर मान्य करता है कि सभी अपेक्षित घटना प्रकार कैप्चर किए गए थे।
हर घटना एक एकल JSON पंक्ति (NDJSON) है:
{
"timestamp": "2025-01-15T14:30:22.123456789Z",
"event_type": "process_exec",
"pid": 12345,
"tgid": 12345,
"ppid": 12300,
"uid": 0,
"gid": 0,
"comm": "bash",
"cgroup_id": 6789,
"container_id": "a1b2c3d4e5f6",
"filename": "/tmp/suspicious_binary",
"args": "/tmp/suspicious_binary"
}
{
"timestamp": "2025-01-15T14:30:22.234567890Z",
"event_type": "net_connect",
"pid": 12345,
"tgid": 12345,
"ppid": 12300,
"uid": 0,
"gid": 0,
"comm": "curl",
"cgroup_id": 6789,
"container_id": "a1b2c3d4e5f6",
"sa_family": "AF_INET",
"dst_addr": "93.184.216.34",
"dst_port": 443
}
जब ट्रेसर बंद होता है (Ctrl+C या SIGTERM), यह stderr पर एक सारांश प्रिंट करता है:
========================================
Azazel सारांश
========================================
कुल घटनाएँ: 1847
घटना गणना:
file_open 892
file_write 312
process_exec 47
net_connect 23
...
सुरक्षा अलर्ट (3):
[मध्यम] संदिग्ध पथ से निष्पादन: /tmp/suspicious_binary (pid=12345 comm=bash)
[मध्यम] संवेदनशील फ़ाइल एक्सेस: /etc/shadow (pid=12346 comm=cat)
[गंभीर] मेमोरी को WRITE+EXEC के रूप में मैप किया गया (संभावित कोड इंजेक्शन/अनपैकिंग) (pid=12347 comm=malware)
========================================
शामिल docker-compose.yml एक पूर्ण विश्लेषण वातावरण स्थापित करता है:

# सैंडबॉक्स शुरू करें
docker compose up -d
# एक नमूना सैंडबॉक्स में कॉपी करें
docker cp ./samples/malware.elf sandbox:/tmp/sample
# इसे निष्पादित करें
docker exec sandbox /tmp/sample
# घटनाएँ ./output/events.json में लिखी जाती हैं
cat output/events.json | jq .
# एक नमूने का एंड-टू-एंड विश्लेषण: हैश → ट्रेस → रिपोर्ट
sudo ./analyze.sh ./samples/malware.elf 30
यह उत्पन्न करता है:
output/events_<timestamp>.json — कच्ची घटना स्ट्रीमoutput/report_<timestamp>.md — हैश, घटना सारांश, नेटवर्क कनेक्शन और सुरक्षा अलर्ट के साथ मार्कडाउन रिपोर्टउपयोग:
azazel [फ़्लैग्स]
azazel [कमांड]
कमांड:
list-containers चल रहे कंटेनरों की सूची दिखाएं
version संस्करण प्रिंट करें
फ़्लैग्स:
-c, --container strings फ़िल्टर करने के लिए कंटेनर ID(एँ) (एकाधिक निर्दिष्ट कर सकते हैं)
-o, --output string आउटपुट फ़ाइल पथ (डिफ़ॉल्ट: stdout)
--pretty JSON आउटपुट को सुंदर-प्रिंट करें
--stdout जब --output सेट हो तब भी stdout पर प्रिंट करें
-v, --verbose वर्बोज़ लॉगिंग
--no-summary बाहर निकलने पर सारांश अक्षम करें
-h, --help सहायता
azazel/
├── main.go # प्रवेश बिंदु
├── cmd/root.go # CLI (cobra)
├── bpf/tracer.bpf.c # सभी eBPF प्रोग्राम (एक फ़ाइल)
├── internal/
│ ├── tracer/
│ │ ├── tracer.go # कोर: लोड करें, संलग्न करें, रिंग बफ़र पढ़ें
│ │ └── events.go # घटना प्रकार, स्ट्रक्ट्स, पार्सिंग
│ ├── container/
│ │ └── resolver.go # cgroup → कंटेनर ID समाधान
│ └── output/
│ └── writer.go # JSON आउटपुट + अनुमानी अलर्ट
├── test/
│ ├── simulate_malware.sh # मैलवेयर व्यवहार सिम्युलेटर
│ └── run_tests.sh # स्वचालित परीक्षण सूट
├── Dockerfile # उत्पादन मल्टी-स्टेज बिल्ड
├── Dockerfile.dev # डेव कंटेनर बिल्ड डिप्स के साथ
├── docker-compose.yml # पूर्ण सैंडबॉक्स वातावरण
├── analyze.sh # स्वचालित विश्लेषण स्क्रिप्ट
└── Makefile # बिल्ड सिस्टम
Azazel स्वचालित रूप से संदिग्ध व्यवहार को फ़्लैग करता है:
सब कुछ एक ही डॉकर कंटेनर के अंदर बनता और चलता है जिसमें Go, clang, libbpf और bpftool हैं:
make docker-dev # डेव इमेज बनाएं
make docker-dev-run # इसमें प्रवेश करें (विशेषाधिकार प्राप्त + होस्ट नेमस्पेस)
# डेव कंटेनर के अंदर:
make vmlinux # होस्ट कर्नेल BTF से vmlinux.h उत्पन्न करें
make generate # bpf2go: BPF C → Go बाइंडिंग संकलित करें
make build # Go बाइनरी बनाएं
make test # पूर्ण परीक्षण चक्र
make check-kernel
योगदान का स्वागत है। कृपया पहले जो आप बदलना चाहते हैं उस पर चर्चा करने के लिए एक मुद्दा खोलें।
# फ़ोर्क करें, क्लोन करें, फिर:
make docker-dev
make docker-dev-run
# hack hack hack
make test
GPL-2.0 — विवरण के लिए LICENSE देखें।
BPF प्रोग्राम GPL-2.0 के तहत लाइसेंस प्राप्त हैं (eBPF हेल्पर एक्सेस के लिए आवश्यक)। उपयोगकर्ता स्पेस Go कोड भी GPL-2.0 है।
| श्रेणी | घटनाएँ | विवरण |
|---|
| प्रक्रिया | process_exec, process_exit, process_clone | पूर्ण प्रक्रिया वृक्ष: फ़ाइलनाम, argv, निकास कोड, क्लोन फ़्लैग्स, पैरेंट PID |
| फ़ाइल | file_open, file_write, file_read, file_unlink, file_rename | पथनाम, फ़्लैग्स, बाइट गणना |
| नेटवर्क | net_connect, net_bind, net_listen, net_accept, net_sendto, net_dns | IPv4/IPv6 पते, पोर्ट, udp_sendmsg पर kprobe के माध्यम से DNS पता लगाना |
| सुरक्षा | mmap_exec, ptrace, module_load | W+X मेमोरी मैपिंग, प्रक्रिया इंजेक्शन प्रयास, कर्नेल मॉड्यूल लोडिंग |
| अलर्ट | गंभीरता | ट्रिगर |
|---|
| संदिग्ध निष्पादन पथ | मध्यम | /tmp/, /dev/shm/, /var/tmp/ से निष्पादन |
| संदिग्ध उपकरण | मध्यम | wget, curl, nc, python, base64, memfd: |
| संवेदनशील फ़ाइल एक्सेस | मध्यम | /etc/passwd, /etc/shadow, /etc/sudoers, /etc/ssh/, /proc/self/maps, /proc/self/mem, /etc/ld.so.preload |
| Ptrace | उच्च | कोई भी ptrace सिस्कॉल (प्रक्रिया इंजेक्शन / डीबगिंग) |
| कर्नेल मॉड्यूल लोड | उच्च | कोई भी finit_module सिस्कॉल |
| W+X mmap | गंभीर | मेमोरी को एक साथ WRITE+EXEC के रूप में मैप किया गया (कोड इंजेक्शन, अनपैकिंग) |
| समस्या | समाधान |
|---|
BPF लोड करते समय operation not permitted | कंटेनर को --privileged --pid=host --cgroupns=host के साथ चलाना चाहिए |
vmlinux.h: No such file | make vmlinux चलाएं (/sys/kernel/btf/vmlinux आवश्यक) |
kernel doesn't support BTF | होस्ट कर्नेल में CONFIG_DEBUG_INFO_BTF=y होना चाहिए — ls /sys/kernel/btf/vmlinux से जांचें |
| रिंग बफ़र मैप निर्माण विफल | कर्नेल 5.8+ होना चाहिए, uname -r से जांचें |
failed to attach tracepoint | कुछ ट्रेसपॉइंट सभी कर्नेल पर मौजूद नहीं होते — ट्रेसर एक चेतावनी लॉग करता है और जारी रखता है |
| कोई घटना कैप्चर नहीं हुई | सत्यापित करें कि ट्रेसर चल रहा है (ps aux | grep azazel), जांचें कि ट्रेसर शुरू होने के बाद ही परीक्षण गतिविधि होती है |
| घटक | प्रौद्योगिकी |
|---|
| भाषा | Go 1.24+ |
| eBPF लाइब्रेरी | cilium/ebpf v0.17+ |
| BPF कोड जनरेशन | bpf2go (CO-RE, BTF-आधारित) |
| BPF प्रोग्राम | C, clang के साथ संकलित, vmlinux.h का उपयोग करते हुए |
| CLI | cobra |
| आउटपुट | NDJSON (प्रति पंक्ति एक JSON ऑब्जेक्ट) |
| कंटेनर | डॉकर, सैंडबॉक्स ऑर्केस्ट्रेशन के लिए docker-compose के साथ |