SSH Enumeration

SSH Enumeration

دروازه‌ها رو قبل از هکر بشناس!

ssh enum

🕵️‍♀️ خب رفقا، امروز می‌خوایم بریم سراغ یکی از حیاتی‌ترین پروتکل‌های دنیای شبکه و سرور، یعنی SSH.

همونطور که می‌دونید، SSH (Secure Shell) یه پروتکل استاندارد برای مدیریت امن سرورهاست که معمولاً روی پورت TCP 22 کار می‌کنه و وظیفه‌اش رمزنگاری ارتباطات برای جلوگیری از شنود و حملات (Man-in-the-Middle) هست.

🔖اما داستان ما امروز در مورد خود SSH نیست، در مورد SSH Enumeration هست. یعنی چی؟ یعنی چطور می‌تونیم اطلاعات حیاتی مثل نسخه سرویس، نوع احراز هویت و باگ‌های احتمالی رو از این سرویس بیرون بکشیم. هکرها این کار رو می‌کنن تا راه نفوذ پیدا کنن، و ما این کار رو یاد می‌گیریم تا جلوی اون‌ها رو بگیریم.

اگه آماده‌اید که یاد بگیرید چطور میشه این سرویس امن رو به چالش کشید، بریم سراغ اصل مطلب.


👽چرا SSH Enumeration انجام میدیم؟ (اهداف ماجرا)

قبل از اینکه دست به کیبورد بشیم، باید بدونیم دنبال چی هستیم. هدف از جمع‌آوری اطلاعات (Enumeration) روی SSH معمولاً این موارد هست:

  1. شناسایی نسخه SSH: اول از همه باید بفهمیم طرف مقابل داره از چه نسخه‌ای استفاده می‌کنه. اگه نسخه قدیمی باشه، یعنی احتمالا حفره امنیتی داره.
  2. پیدا کردن روش‌های ورود: سرور با چی باز میشه؟ رمز عبور؟ کلید عمومی (Public Key)؟ یا تایید دو مرحله‌ای؟
  3. شکار رمزهای ضعیف: تست کردن حساب‌های کاربری با پسوردهای ساده (مثل admin/admin یا root/123456) برای حملات Brute Force.
  4. بررسی تنظیمات امنیتی: آیا ورود با کاربر root بازه؟ آیا الگوریتم‌های رمزنگاری ضعیف فعاله؟
  5. تست آسیب‌پذیری‌های خاص: گاهی اوقات پیاده‌سازی‌های خاص SSH باگ‌های شناخته شده‌ای دارن که منتظر اکسپلویت شدن هستن.

👽جعبه ابزار هکرها: ابزارهای رایج برای SSH Enumeration

اینجا لیستی از ابزارهای خفن و دستوراتشون رو براتون آوردم که توی این مسیر به کارتون میاد.

۱. Nmap: آچار فرانسه همیشگی

Nmap اولین و مهم‌ترین ابزار ماست. هم پورت رو پیدا می‌کنه، هم نسخه رو میگه و هم کلی اسکریپت باحال داره.

الف) شناسایی نسخه دقیق سرویس:

با این دستور می‌فهمیم دقیقا چه ورژنی از SSH روی پورت ۲۲ در حال اجراست:

nmap -p 22 -sV target-IP

ب) استخراج کلیدهای رمزنگاری (Host Keys):

این اسکریپت کلیدهای عمومی سرور رو میکشه بیرون که می‌تونه سرنخ‌هایی از پیکربندی سرور بهمون بده:

nmap –script ssh-hostkey -p 22 target-IP

ج) شناسایی روش‌های احراز هویت:

خیلی مهمه که بدونیم سرور پسورد قبول می‌کنه یا فقط کلید؟ این دستور جواب رو میده:

nmap –script ssh-auth-methods -p 22 target-IP

نکته: همچنین اسکریپت ssh-brute هم برای تست پسورد وجود داره.

۲. Hydra: هیولای Brute Force

وقتی می‌خوایم لیست بزرگی از یوزر و پسوردها رو روی SSH تست کنیم، Hydra بهترین گزینه‌ست.

دستور حمله Brute Force:

hydra -l <username> -P <password-list> ssh://target-IP

  • l-: نام کاربری هدف (مثلا root).
  • P-: مسیر فایل متنی که شامل لیست پسوردهاست.
  • ssh://...: پروتکل و آدرس هدف.

۳. Metasploit Framework: پلتفرم حرفه‌ای‌ها

متاسپلویت همه کار می‌کنه، از اسکن گرفته تا نفوذ. برای SSH ماژول‌های خیلی تمیزی داره.

الف) شناسایی نسخه SSH:

use auxiliary/scanner/ssh/ssh_version set RHOSTS <target-IP> run

ب) حمله Brute Force با متاسپلویت:

این ماژول سعی می‌کنه با لیست یوزر و پسوردی که بهش میدید وارد سیستم بشه:

use auxiliary/scanner/ssh/ssh_login set RHOSTS <target-IP> set USER_FILE <username-list> set PASS_FILE <password-list> run

۴. SSHScan: متخصص ارزیابی

این ابزار مخصوص اینه که ببینه کانفیگ SSH چقدر امنه. الگوریتم‌های رمزنگاری رو چک می‌کنه و بهتون گزارش میده.

دستور استفاده:

sshscan target-IP

خروجی این دستور اطلاعاتی مثل نوع نسخه، الگوریتم‌های ضعیف و تنظیمات رو نشون میده.

۵. Medusa: رقیب هایدرا

مدوسا هم یه ابزار قدرتمند دیگه برای Brute Force هست که عملکرد سریعی داره.

دستور حمله:

medusa -h <target-IP> -u <username> -P <password-list> -M ssh

۶. ابزارهای پایه (Telnet و Netcat)

گاهی اوقات SSH روی پورت ۲۲ نیست و ما می‌خوایم فقط مطمئن شیم پورت بازه و بنر (Banner) سرویس رو ببینیم.

استفاده از Telnet:

telnet <target-IP> port

(تلنت اینجا فقط برای چک کردن اتصال استفاده میشه نه لاگین کردن).

استفاده از Netcat (nc):

nc -v <target-IP> 22

این دستور هم نشون میده پورت بازه یا نه و معمولا ورژن SSH رو چاپ می‌کنه.


👽نقشه راه: مراحل گام‌به‌گام Enumerate SSH

اگه بخوایم منظم کار کنیم، باید این مراحل رو طی کنیم:

  1. شناسایی پورت: اول ببینیم SSH روی پورت ۲۲ (یا پورت دیگه) بازه؟

nmap -p 22 target-IP

شناسایی نسخه: نسخه دقیق رو درمیاریم تا ببینیم قدیمیه یا جدید.

nmap -p 22 -sV target-IP

بررسی متد احراز هویت: ببینیم با چی میشه وارد شد (پسورد، کلید و…).

nmap –script ssh-auth-methods -p 22 target-IP

  • تست نفوذ (Brute Force): اگه فهمیدیم پسورد قبول می‌کنه، با Hydra یا Metasploit شانس خودمون رو امتحان می‌کنیم.
  • بررسی آسیب‌پذیری: اگه نسخه قدیمی بود، توی دیتابیس‌هایی مثل CVE دنبال اکسپلویت براش می‌گردیم.

👽خطرات و حملات رایج

حالا که اطلاعات رو درآوردیم، هکرها ممکنه چه کارهایی بکنن؟

  • Brute Force Attack: همون تست کردن هزاران پسورد برای پیدا کردن رمز درست.
  • SSH Credential Harvesting: دزدیدن اطلاعات ورود از طریق حملات مرد میانی (MITM) یا دزدیدن کلیدهای خصوصی.
  • بهره‌برداری از نسخه‌های قدیمی: اگه ادمین سرور SSH رو آپدیت نکرده باشه، هکر می‌تونه کد مخرب اجرا کنه.
  • استفاده از الگوریتم‌های ضعیف: شکستن رمزنگاری‌هایی مثل DES یا MD5 که دیگه امن نیستن.

👽سپر دفاعی: چطور امن بمانیم؟ (اقدامات دفاعی)

خب حالا که دیدیم چقدر راحت میشه اطلاعات جمع کرد، چطور جلوی نفوذ رو بگیریم؟

  1. همیشه به‌روز باشید: نسخه SSH رو همیشه آپدیت نگه دارید تا باگ‌های امنیتی رفع بشن.
  2. خداحافظی با پسورد: کلاً بیخیال پسورد بشید و از Public Key Authentication (احراز هویت با کلید) استفاده کنید. اینطوری عملاً Brute Force غیرممکن میشه.
  3. Root ممنوع: توی فایل کانفیگ SSH، قابلیت لاگین مستقیم با یوزر root رو ببندید. (از sudo استفاده کنید).
  4. فیلتر کردن IP: دسترسی به پورت SSH رو فقط برای IPهای خودتون باز بذارید، نه کل دنیا!
  5. احراز هویت دو مرحله‌ای (2FA): حتی اگه کلیدتون هم لو بره، بدون کد دوم کسی نمیتونه وارد بشه.
  6. مانیتورینگ: لاگ‌های SSH رو چک کنید. اگه دیدید یکی داره تند تند تلاش می‌کنه لاگین کنه، بلاکش کنید (با ابزارهایی مثل Fail2Ban).

دیدگاه‌ خود را بنویسید

پیمایش به بالا