Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
SSHintel — مستودع SSH وهمي مستقل لالتقاط تفاعلات المهاجمين وتحويلها إلى استخبارات أمنية منظمة. | Kitploit
أدوات/GitHubGitHub/sonitbahl/sshintel
أمن الشبكاتاستخبارات التهديداتكشف التسللالاستجابة للحوادثتحليل السجلات
GitHubsonitbahl/sshintel

SSHintel

مستودع SSH وهمي مستقل لالتقاط تفاعلات المهاجمين وتحويلها إلى استخبارات أمنية منظمة.

عرض المستودع
13منذ يوم واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

SSHintel — مصيدة SSH خفيفة الوزن

License: MIT Python Last Commit Repo Size

SSHintel هي مصيدة SSH خفيفة الوزن مبنية باستخدام Python وParamiko. تحاكي قشرة Linux زائفة لتسجيل محاولات الوصول غير المصرح بها، والتقاط بيانات الاعتماد، وتحليل سلوك المهاجم في بيئة خاضعة للتحكم.


🔧 الميزات

  • تسجيل محاولات تسجيل الدخول عبر SSH مع عنوان IP واسم المستخدم وكلمة المرور
  • توفر قشرة Linux محاكاة (بيئة زائفة في الذاكرة)
  • تدعم مجموعة واسعة من أوامر الاستطلاع والتنقل (ls, cd, pwd, cat, echo, grep, find, tree, head, tail, wc, stat, ps, df, free, env, id, whoami, وغيرها)
  • وضع --tarpit اختياري لإبطاء المهاجمين عبر تأخير المخرجات
  • نظام ملفات زائف معزول لكل جلسة مع دعم إنشاء وقراءة الملفات
  • لوحة تحكم ويب محلية لتصور بيانات الأمان الملتقطة (الجلسات، الأوامر، محاولات المصادقة، أفضل المهاجمين)
  • عرض التحقيق في الجلسة — حدد أي جلسة وأعد بناء الخط الزمني الكامل للهجوم ترتيبًا زمنيًا، بما في ذلك عنوان IP المصدر، ونتيجة المصادقة، وكل أمر تم تنفيذه مع دليل العمل الخاص به، ومدة الجلسة
  • كل شيء محاكى — الأوامر لا تُنفذ أبدًا على المضيف، ولا تصل أبدًا إلى نظام الملفات الحقيقي، ولا تقوم بأي طلبات شبكة.

SSHintel ليست قشرة Bash/Linux كاملة. إنها تحاكي مجموعة فرعية معقولة من الأوامر الشائعة لجمع بيانات المهاجم. يتم توزيع الأوامر عبر سجل خفيف الوزن؛ إضافة أمر تعني إضافة دالة معالج صغيرة.


🛠️ الإعداد

1. 📦 تثبيت التبعيات

root@kitploit:~
pip install -r requirements.txt

ملاحظة: يتم إنشاء مفتاح مضيف SSH تلقائيًا عند أول تشغيل. لا حاجة لتوليد مفتاح يدوي.


🚀 تشغيل المصيدة

شغّل المصيدة بمنفذ واسم مستخدم وكلمة مرور محددة:

root@kitploit:~
python3 run.py serve --port 2222 --username user1 --password pass123

المنفذ الافتراضي هو 2222 والمضيف هو 0.0.0.0.

تقوم المصيدة بتوليد تلقائي لمفتاح مضيف SSH في static/server.key عند أول تشغيل إذا لم يكن موجودًا. لا حاجة لتوليد مفتاح يدوي.

لتفعيل وضع tarpit:

root@kitploit:~
python3 run.py serve --port 2222 --username user1 --password pass123 --tarpit

لتعطيل تخزين SQLite (JSONL فقط):

root@kitploit:~
python3 run.py serve --port 2222 --username user1 --password pass123 --no-db

🛡️ حدود الاتصال والمهلات الزمنية

تحمي SSHintel من استنزاف الموارد بسبب العديد من الاتصالات المتزامنة أو الاتصالات التي تبقى نشطة إلى أجل غير مسمى. هذه قابلة للتكوين عبر واجهة سطر الأوامر:

مثال:

root@kitploit:~
python3 run.py serve --port 2222 --username user1 --password pass123 \
  --max-connections 25 --auth-timeout 30 --session-idle-timeout 300

عندما يكون هناك عدد كبير جدًا من الاتصالات المفتوحة، يتم إغلاق الاتصال الإضافي فورًا ويتم كتابة حدث أمان connection_rejected (مع reason: connection_limit) في سجل JSONL. يتم تسجيل المصادقة المتعطلة كفصل مع reason: auth_timeout؛ تنتهي القشرة الخاملة مع reason: idle_timeout.

وضع Tarpit يرسل المخرجات ببطء عمدًا لإبقاء المهاجم منشغلًا، لذا فإن حلقة لافتة tarpit لا تخضع لمهلة عدم النشاط — لكن جلسات tarpit تُحتسب ضمن حد الاتصال.


📊 لوحة التحكم

تتضمن SSHintel لوحة تحكم ويب محلية تصور بيانات الأمان المخزنة في SQLite.

بدء لوحة التحكم

root@kitploit:~
python3 run.py dashboard

ثم افتح http://localhost:5000 في متصفحك.

تقرأ لوحة التحكم من قاعدة بيانات SQLite في data/sshintel.db افتراضيًا. ابدأ المصيدة أولاً حتى يتم التقاط البيانات، ثم شغّل لوحة التحكم لمشاهدتها تمتلئ.

ما تعرضه

  • بطاقات KPI — إجمالي الجلسات، عناوين IP المصدر الفريدة، محاولات المصادقة، المصادقات الناجحة/الفاشلة، والأوامر المنفذة
  • مخطط النشاط — الاتصالات عبر الزمن، مجمعة بالساعة
  • أفضل الأوامر — أوامر المهاجم الأكثر تنفيذًا
  • أسماء المستخدمين المستهدفة — أسماء المستخدمين التي يحاول المهاجمون استخدامها
  • الجلسات الأخيرة — انقر على أي معرف جلسة للتحقيق فيها
  • النشاط الأخير — أحدث أحداث البيانات في جدول قابل للبحث

التحقيق في الجلسة

انقر على معرف جلسة (أو انتقل إلى /session/<session_id>) لفتح عرض التحقيق في الجلسة، الذي يعيد بناء هجوم واحد ترتيبًا زمنيًا:

  • ملخص الجلسة — عنوان IP المصدر، اسم المستخدم، أوقات البدء/الانتهاء، المدة، نتيجة المصادقة، سبب الفصل
  • الخط الزمني للهجوم — كل حدث (اتصال، محاولات مصادقة، أوامر، فصل) بترتيب زمني
  • تسلسل الأوامر — عرض مضغوط $ command لكل ما كتبه المهاجم، مع أدلة العمل

سير عمل مثال

root@kitploit:~
# الطرفية 1: ابدأ المصيدة
python3 run.py serve --port 2222 --username user1 --password pass123

# الطرفية 2: ابدأ لوحة التحكم
python3 run.py dashboard

# الطرفية 3: محاكاة مهاجم
ssh user1@localhost -p 2222
# (نفّذ بعض الأوامر، ثم اخرج)

ثم افتح http://localhost:5000 لفحص النشاط الملتقط.

تدعم لوحة التحكم البيانات المباشرة — تستقصي المصيدة كل ثانيتين وتتحدث تلقائيًا. تظهر الجلسات والأوامر والأحداث الجديدة في الوقت الفعلي دون تحديث الصفحة. مؤشر مباشر (● Live) يظهر حالة الاتصال.


🔐 الاختبار من طرفية أخرى

افتح طرفية ثانية وحاول الاتصال:

root@kitploit:~
ssh user1@localhost -p 2222

إذا تطابقت بيانات الاعتماد، ستُسقط في القشرة المحاكاة.


🚑 اختياري: مسح المضيفين المعروفين (عند إعادة الاتصال)

لإزالة بصمات SSH القديمة:

root@kitploit:~
notepad "%USERPROFILE%\.ssh\known_hosts"

احذف السطر ذي الصلة الذي يحتوي على localhost أو عنوان IP الخاص بالمصيدة.


📝 المعلومات المسجلة

  • يتم تسجيل بيانات الاعتماد في creds_logger
  • يتم تسجيل أوامر القشرة عبر funnel_logger
  • تُكتب أحداث الأمان المنظمة في log_files/events.jsonl كـ JSON Lines (JSONL) — كائن JSON صالح واحد لكل سطر

يتضمن كل حدث JSONL طابعًا زمنيًا timestamp بصيغة UTC ISO-8601، وevent_type، وsession_id فريدًا، وsource_ip. يتم تسجيل الاتصال ومحاولات/نتائج المصادقة وتنفيذ الأوامر وتفعيل tarpit والفصل كأحداث منظمة.

يتم تتبع كل اتصال SSH وارد كـ جلسة مستقلة مع session_id خاص بها. تسجل الجلسة عنوان IP المصدر، وأوقات الاتصال/الفصل، ونتيجة المصادقة، ومدة الاتصال، وكل حدث يُنشأ داخل ذلك الاتصال يحمل نفس session_id (بحيث يمكن ربط محاولات المصادقة والأوامر والفصل باتصال واحد). الجلسات معزولة لكل اتصال — لا تتم مشاركة أي حالة بين العملاء المتزامنين.

تتلقى كل جلسة أيضًا نظام ملفات زائفًا معزولًا خاصًا بها في الذاكرة — يتم إنشاء نظام الملفات المحاكى من جديد لكل اتصال وتنظيفه عند انتهاء الاتصال. الملفات والدلائل ودليل العمل التي ينشئها أو يغيرها مهاجم واحد لا تكون مرئية أبدًا لمهاجم آخر متصل في نفس الوقت. نظام الملفات بأكمله محاكى في ذاكرة Python ولا يلمس أبدًا نظام ملفات المضيف الحقيقي.

قيم event_type الحالية: connect, auth_attempt, auth_success, auth_failure, command, disconnect, connection_rejected, tarpit.


📂 هيكل الملفات

root@kitploit:~
SSHintel/
├── honeypot/                  # منطق المصيدة الأساسي
│   ├── __init__.py
│   ├── main.py                # حلقة القبول + تحديد الاتصال
│   ├── handlers.py            # إعداد نقل SSH + القشرة المحاكاة
│   ├── server.py              # واجهة خادم Paramiko (المصادقة)
│   ├── session.py             # تتبع الجلسة لكل اتصال
│   ├── fs.py                  # نظام ملفات زائف في الذاكرة (معزول لكل جلسة)
│   ├── shell.py               # القشرة الزائفة: سجل الأوامر + الموزع
│   ├── limits.py              # تحديد الاتصالات المتزامنة الآمن للخيوط
│   ├── logger.py              # تسجيل أحداث JSONL + جسر SQLite
│   └── telemetry_store.py     # مخزن بيانات SQLite + طبقة الاستعلام
│
├── dashboard/                 # لوحة التحكم الويب المحلية
│   ├── app.py                 # تطبيق Flask + مسارات API
│   ├── templates/
│   │   ├── index.html         # قالب لوحة التحكم الرئيسي
│   │   └── session.html       # قالب التحقيق في الجلسة
│   └── static/
│       ├── style.css          # أنماط لوحة التحكم
│       ├── dashboard.js       # جافاسكريبت لوحة التحكم الرئيسية (تحديثات مباشرة)
│       └── session.js         # جافاسكريبت التحقيق في الجلسة
│
├── log_files/                 # سجلات التشغيل (مستثناة من git)
│   ├── creds_audits.log       # محاولات بيانات الاعتماد
│   ├── cmd_audits.log         # سجل تدقيق الأوامر
│   └── events.jsonl           # أحداث أمان JSONL منظمة
│
├── data/                      # قاعدة بيانات SQLite (مستثناة من git)
│   └── sshintel.db
│
├── static/                    # مفتاح مضيف SSH (مولّد تلقائيًا)
│   └── server.key
│
├── .github/workflows/         # إعداد CI
│   └── tests.yml
│
├── Dockerfile
├── README.md
├── requirements.txt           # تبعيات التشغيل (paramiko, flask)
├── requirements-dev.txt       # تبعيات الاختبار (pytest, pytest-cov)
└── run.py                     # نقطة دخول CLI

💪 التشغيل مع Docker (طريقة بديلة)

إذا كنت تفضل تشغيل المصيدة في بيئة حاويات، يمكنك استخدام Dockerfile المرفق.

🔨 بناء صورة Docker

root@kitploit:~
docker build -t sshintel .

هذا ينشئ صورة Docker باسم sshintel.


🚀 تشغيل الحاوية

root@kitploit:~
docker run -p 2222:2222 sshintel

سيؤدي هذا إلى:

  • توليد مفتاح SSH الخاص تلقائيًا في static/server.key (إذا لم يكن موجودًا بالفعل)
  • تشغيل المصيدة على المنفذ 2222 ببيانات اعتماد افتراضية:
    username: user1, password: pass123

🔮 اختبار المصيدة

افتح طرفية ثانية واتصل عبر SSH:

root@kitploit:~
ssh user1@localhost -p 2222

ستُسقط في القشرة المحاكاة إذا تطابقت بيانات الاعتماد.


🧼 الإيقاف والتنظيف

لإيقاف الحاوية:

root@kitploit:~
docker ps  # ابحث عن معرف الحاوية
docker stop <container_id>

لإزالة الصورة:

root@kitploit:~
docker rmi sshintel

يمكنك أيضًا تصدير الصورة باستخدام docker save -o sshintel.tar sshintel وتحميلها لاحقًا باستخدام docker load -i sshintel.tar.


📄 الترخيص

هذا المشروع مرخص بموجب رخصة MIT.


👤 المؤلف

Sonit Bahl
🔗 LinkedIn
🔗 Portfolio

تنزيل الأداة
FlagDefaultPurpose
--max-connections50الحد الأقصى للاتصالات النشطة المتزامنة؛ يتم رفض الاتصالات الإضافية وتسجيلها كحدث connection_rejected
--auth-timeout60 (ثانية)الوقت المسموح لإكمال مصافحة SSH/المصادقة؛ يتم فصل العملاء المتعطلين
--session-idle-timeout300 (ثانية)مهلة عدم النشاط لقشرة مصادق عليها؛ تنتهي الجلسة الخاملة، لكن المهاجم الذي يكتب بنشاط لا يُقتل أبدًا