SSH Enumeration
دروازهها رو قبل از هکر بشناس!
خب رفقا، امروز میخوایم بریم سراغ یکی از حیاتیترین پروتکلهای دنیای شبکه و سرور، یعنی SSH.
همونطور که میدونید، SSH (Secure Shell) یه پروتکل استاندارد برای مدیریت امن سرورهاست که معمولاً روی پورت TCP 22 کار میکنه و وظیفهاش رمزنگاری ارتباطات برای جلوگیری از شنود و حملات (Man-in-the-Middle) هست.
🔖اما داستان ما امروز در مورد خود SSH نیست، در مورد SSH Enumeration هست. یعنی چی؟ یعنی چطور میتونیم اطلاعات حیاتی مثل نسخه سرویس، نوع احراز هویت و باگهای احتمالی رو از این سرویس بیرون بکشیم. هکرها این کار رو میکنن تا راه نفوذ پیدا کنن، و ما این کار رو یاد میگیریم تا جلوی اونها رو بگیریم.
اگه آمادهاید که یاد بگیرید چطور میشه این سرویس امن رو به چالش کشید، بریم سراغ اصل مطلب.
👽چرا SSH Enumeration انجام میدیم؟ (اهداف ماجرا)
قبل از اینکه دست به کیبورد بشیم، باید بدونیم دنبال چی هستیم. هدف از جمعآوری اطلاعات (Enumeration) روی SSH معمولاً این موارد هست:
- شناسایی نسخه SSH: اول از همه باید بفهمیم طرف مقابل داره از چه نسخهای استفاده میکنه. اگه نسخه قدیمی باشه، یعنی احتمالا حفره امنیتی داره.
- پیدا کردن روشهای ورود: سرور با چی باز میشه؟ رمز عبور؟ کلید عمومی (Public Key)؟ یا تایید دو مرحلهای؟
- شکار رمزهای ضعیف: تست کردن حسابهای کاربری با پسوردهای ساده (مثل
admin/adminیاroot/123456) برای حملات Brute Force. - بررسی تنظیمات امنیتی: آیا ورود با کاربر
rootبازه؟ آیا الگوریتمهای رمزنگاری ضعیف فعاله؟ - تست آسیبپذیریهای خاص: گاهی اوقات پیادهسازیهای خاص 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
اگه بخوایم منظم کار کنیم، باید این مراحل رو طی کنیم:
- شناسایی پورت: اول ببینیم 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 که دیگه امن نیستن.
👽سپر دفاعی: چطور امن بمانیم؟ (اقدامات دفاعی)
خب حالا که دیدیم چقدر راحت میشه اطلاعات جمع کرد، چطور جلوی نفوذ رو بگیریم؟
- همیشه بهروز باشید: نسخه SSH رو همیشه آپدیت نگه دارید تا باگهای امنیتی رفع بشن.
- خداحافظی با پسورد: کلاً بیخیال پسورد بشید و از Public Key Authentication (احراز هویت با کلید) استفاده کنید. اینطوری عملاً Brute Force غیرممکن میشه.
- Root ممنوع: توی فایل کانفیگ SSH، قابلیت لاگین مستقیم با یوزر
rootرو ببندید. (ازsudoاستفاده کنید). - فیلتر کردن IP: دسترسی به پورت SSH رو فقط برای IPهای خودتون باز بذارید، نه کل دنیا!
- احراز هویت دو مرحلهای (2FA): حتی اگه کلیدتون هم لو بره، بدون کد دوم کسی نمیتونه وارد بشه.
- مانیتورینگ: لاگهای SSH رو چک کنید. اگه دیدید یکی داره تند تند تلاش میکنه لاگین کنه، بلاکش کنید (با ابزارهایی مثل Fail2Ban).