
SSH-Snake هي أداة ذاتية الانتشار، ذاتية التكرار، بدون ملفات تقوم بأتمتة مهمة ما بعد الاستغلال لاكتشاف مفاتيح SSH الخاصة والمضيفين.
🐍 SSH-Snake هي أداة قوية مصممة لأداء التنقل التلقائي في الشبكة باستخدام مفاتيح SSH الخاصة المُكتشفة على الأنظمة، بهدف إنشاء خريطة شاملة للشبكة وتبعياتها، وتحديد مدى إمكانية اختراق الشبكة باستخدام SSH ومفاتيح SSH الخاصة بدءًا من نظام معين.
يمكن لـ SSH-Snake الكشف تلقائيًا عن العلاقة بين الأنظمة المتصلة عبر SSH، وهو الأمر الذي يتطلب عادةً قدرًا هائلاً من الوقت والجهد لإجرائه يدويًا.
بمعنى آخر، يقوم SSH-Snake بالمهام التالية تلقائيًا وبشكل متكرر:
user@host) التي قد تُقبل فيها المفاتيح الخاصة،إنه ذاتي التكاثر وذاتي الانتشار تمامًا - وبدون ملفات تمامًا. من نواحٍ كثيرة، SSH-Snake هي في الواقع دودة: فهي تنسخ نفسها وتنتشر من نظام إلى آخر بقدر ما تستطيع.
بدلاً من القفز يدويًا بين الأنظمة باستخدام مفاتيح SSH كما لو كانت لعبة سوبر ماريو، دع SSH-Snake تقوم بالعمل نيابة عنك.
على الرغم من أن هذه الأداة مخصصة لأغراض الاختراق، يمكن لمسؤولي الأنظمة أيضًا استخدامها لفهم بنيتهم التحتية وشبكتهم بشكل أفضل. إذا كنت ترغب في تعطيل طباعة المفاتيح الخاصة المُكتشفة، قم بتعليق هذا السطر من الكود.
للحصول على نظرة متعمقة حول كيفية عمل هذا السكريبت فعليًا، والتفاصيل التقنية، والاكتشافات المثيرة للاهتمام، وقرارات التصميم، والقياس، والدروس المستفادة، راجع هذا المنشور في المدونة. هذا البرنامج من كتابة Joshua Rogers.
لقطة شاشة مصغرة من مخرجات SSH-Snake في شبكة صغيرة جدًا. |
|---|
تشير العقد الزرقاء إلى أن الوجهة يمكنها الاتصال بنفسها (user@host<-->user@host). تشير الحواف الحمراء إلى أن الاتصال ثنائي الاتجاه (user1@host1<-->user2@host2). |
|---|
يمكن تنزيل SSH-Snake أو تمريره إلى bash:
wget https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh
bash ./Snake.nocomments.sh
أو
curl https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh | bash
يحاكي SSH-Snake بسلاسة ما سيفعله الخصم البشري لاكتشاف مفاتيح SSH الخاصة والوجهات التي يمكن استخدامها للاتصال بها. مكتوب بالكامل بلغة Bash، ويعمل مع مجموعة صغيرة من التبعيات المتوفرة بشكل شائع على أنظمة لينكس (وماك أو إس) الرئيسية: bash, ssh, coreutils, awk, uniq, sort, grep, tr, find, و cat. مطلوب getent أو dscacheutil. مطلوب sed فقط للنظام الأول جدًا. وبالمثل، يمكن أيضًا استخدام sudo, hostname, , , , , , و ، ولكنها ليست مطلوبة (ويتعامل السكريبت مع الحالات التي لا تكون فيها موجودة بشكل أنيق). إذا تم اكتشاف نظام بدون أي من الحزم المطلوبة، فإنه يفشل بلطف، ويحذر المستخدم من أن الفحص لا يمكن أن يستمر على هذا النظام المعين (ويتراجع، مستمرًا من النظام السابق).
SSH-Snake هي بلا ملفات تمامًا: بعد أن يقوم المستخدم بتشغيل السكريبت، يتم تمريره إلى bash الوجهات عبر stdin ووسائط bash (عبر SSH). لا يوجد دليل مادي على وجود السكريبت على أي من الأنظمة الممسوحة ضوئيًا: الدليل الوحيد على تشغيل السكريبت هو في شجرة العمليات، والكمية الكبيرة من محاولات SSH غير الصالحة التي ستحدث حتمًا.
يتبع SSH-Snake نهج البحث في العمق أولاً في الاكتشاف: بمجرد الاتصال بنظام واحد، يحاول الاتصال بشكل أبعد من ذلك النظام قبل التراجع.
يأتي اسم SSH-Snake من حقيقة أن مخرجات السكريبت تشبه ثعبانًا يتلوى صعودًا وهبوطًا في الشبكة. ولكن على عكس لعبة الثعبان، لن يموت SSH-Snake عندما يعض ذيله (يتصل بنظام قام بفحصه بالفعل أو يقوم بفحصه حاليًا): سيقوم ببساطة بطباعة كيفية اتصاله هناك كالمعتاد، ولكنه سيعود ولن يعيد فحص الوجهة (لتجنب التكرار اللانهائي).
تم اختبار SSH-Snake على إصدارات مختلفة من لينكس، وماك أو إس (مع تثبيت Homebrew Bash). إذا واجهت نظام تشغيل قائم على لينكس غير متوافق معه، فيرجى تقديم تقرير.
.bash_history،يأتي SSH-Snake مع بعض الإعدادات العامة التي يمكن تكوينها. هذه الإعدادات موثقة في SETTINGS.md#general-settings.
يأتي SSH-Snake أيضًا مع مجموعة متنوعة من الاستراتيجيات القابلة للتكوين/التوصيل والتشغيل (وظائف) والتي يمكن استخدامها لاكتشاف مفاتيح SSH الخاصة على النظام واكتشاف المضيفات والوجهات لمحاولة الاتصال بها. تم توفير إعدادات افتراضية معقولة، ومع ذلك إذا كنت ترغب في إجراء فحص بأكبر قدر ممكن من الدقة، فإن تمكين المزيد من تقنيات الاكتشاف يمكن أن يساعد. إذا كان الفحص يستغرق وقتًا طويلاً، فإن تعطيل بعض تقنيات الاكتشاف يمكن أن يساعد. باستثناء استراتيجية واحدة (find_ssh_keys)، يمكن تشغيل/إيقاف كل استراتيجية. هذه موثقة في SETTINGS.md#configurable-discovery-strategies.
تحتوي المخرجات الخام لـ SSH-Snake على مزيج من المعلومات حول المفاتيح الخاصة المُكتشفة والوجهات ورسائل الخطأ.
يمكن العثور على شرح مفصل للمخرجات الكاملة لـ SSH-Snake في OUTPUT.md.
يمكن العثور على مثال للمخرجات في example-output.log.
يمكن استخدام مخرجات SSH-Snake لإنشاء رسوم بيانية/تصورات للشبكة التي يجتازها السكريبت.
يمكن العثور على شرح مفصل حول كيفية إنشاء وتفسير الصور/التصورات من مخرجات SSH-Snake في GRAPHICS.md.
بالإضافة إلى القدرة على إنشاء تصورات للشبكة التي يجتازها SSH-Snake، يتم توفير ثلاث أدوات أخرى. وهي:
forward-lookup-host.py: بالنظر إلى مضيف مصدر أو وجهة، حدد جميع الأنظمة التي يمكن الوصول إليها بشكل مباشر أو غير مباشر (أي من خلال نظام ثالث).reverse-lookup-host.py: بالنظر إلى مضيف وجهة أو وجهة، حدد جميع الأنظمة التي يمكنها الوصول إليه بشكل مباشر أو غير مباشر.shortest-path-create-chain.py: بالنظر إلى المضيف أو الوجهة A و B، حدد أقصر مسار يربط بينهما.تقوم الأداة الثالثة أيضًا بإنشاء أمر يمكن استخدامه للاتصال من الوجهة A إلى الوجهة B. على سبيل المثال:
$ python3 tools/shortest-path-create-chain.py --file output.log --src '[email protected]' --dest '[email protected]'
Shortest path from [email protected] to [email protected]: [email protected]>[email protected]>[email protected]>[email protected]
[..]
ssh -i "/home/jrogers/.ssh/key" [email protected] 'sudo ssh -i "/root/.ssh/id_rsa" [email protected] 'ssh -i "/tmp/key" [email protected]''
نظرًا لأن السكريبت كبير جدًا، فإن تحميله في here-document (وهو ما يفعله تلقائيًا لأن السكريبت هو في الواقع كواين) يتسبب في كتابة bash لملف مؤقت (لأنه أكبر من 65535 بايت).
لتقليل الحجم بحيث يظل بدون ملفات بنسبة 100%، يحتوي Snake.nocomments.sh على إصدار تمت فيه إزالة جميع التعليقات والمسافات البيضاء غير الضرورية والأسطر الفارغة. هذا يقلل من حجم الملف بحيث لا يتم إنشاء الملف المؤقت بواسطة bash.
إذا واجهت أي أخطاء أو مشكلات متعلقة بالسكريبت، فيرجى الإبلاغ عنها كمشكلة في GitHub. يرجى تضمين إعدادات التكوين الخاصة بك.
أنا مهتم بشكل خاص بأي مخرجات [line] مثيرة للاهتمام مرتبطة بأخطاء لم يتم التقاطها بواسطة السكريبت.
iptimeoutarpifconfigipconfigxargs