فهرست مطالب
Toggleاحتمالا قبلا در مورد SSH شنیده اید، زیرا SSH یک اصطلاح رایج در مورد هر چیزی است که به امنیت سایبری مربوط میشود. با این حال، ممکن است زمانی که بدانید SSH دقیقا چیست و اصلا چگونه کار میکند، غافلگیر شوید. در این آموزش، ما اصول SSH را به همراه مکانیسمهای اساسی مورد استفاده توسط پروتکل برای ارائه یک روش ایمن دسترسی از راه دور پوشش خواهیم داد. در مورد لایههای مختلف و انواع رمزگذاری مورد استفاده به همراه هدف هر لایه نیز توضیح خواهیم داد.
SSH چیست؟
SSH یا Secure Shell Protocol یک پروتکل مدیریت از راه دور است که به کاربران امکان دسترسی، کنترل و اصلاح سرورهای راه دور خود را از طریق اینترنت میدهد. سرویس SSH به عنوان جایگزینی امن برای Telnet که رمزگذاری نشده است، ایجاد شده و از تکنیکهای رمزنگاری استفاده میکند تا اطمینان حاصل کند که تمام ارتباطات به و از سرور راه دور به صورت رمزگذاری شده انجام میشود. SSH مکانیزمی برای احراز هویت یک کاربر راه دور، انتقال ورودیها از مشتری به میزبان و بازگرداندن خروجی به مشتری ارائه میدهد.
مثال زیر یک اعلان SSH معمولی را نشان میدهد. هر کاربر لینوکس یا macOS میتواند مستقیما از پنجره ترمینال به سرور راه دور خود SSH کند. کاربران ویندوز میتوانند از سرویس گیرندگان SSH مانند Putty استفاده کنند. شما میتوانید دستورات shell را به همان روشی اجرا کنید که انگار به طور فیزیکی با کامپیوتر راه دور کار میکنید.
SSH چگونه کار میکند؟
اگر از لینوکس یا مک استفاده میکنید، استفاده از SSH بسیار ساده است. اگر از ویندوز استفاده میکنید، باید از یک کلاینت SSH برای باز کردن اتصالات SSH استفاده کنید. محبوبترین کلاینت SSH PuTTY است. برای کاربران مک و لینوکس، به برنامه ترمینال خود بروید و سپس مراحل زیر را دنبال کنید:
دستور SSH از ۳ بخش مجزا تشکیل شده است:
ssh {user}@{host}
دستور کلید SSH به سیستم شما دستور میدهد که میخواهید یک Secure Shell Connection رمزگذاری شده را باز کنید. {user} نمایانگر حسابی است که میخواهید به آن دسترسی داشته باشید. به عنوان مثال، ممکن است بخواهید به کاربر root دسترسی داشته باشید، که اساسا مترادف با مدیر سیستم بوده که دارای دسترسی کامل برای تغییر هر چیزی در سیستم است. {host} به رایانهای که میخواهید به آن دسترسی داشته باشید اشاره دارد. این میتواند یک آدرس IP به عنوان مثال یا یک نام دامنه باشد.
هنگامی که Enter را فشار میدهید، از شما خواسته میشود رمز عبور حساب درخواستی را وارد کنید. وقتی آن را تایپ میکنید، چیزی روی صفحه ظاهر نمیشود، اما رمز عبور شما در واقع در حال انتقال است. پس از اتمام تایپ، یک بار دیگر Enter را بزنید. اگر رمز عبور شما صحیح باشد، با یک پنجره ترمینال از راه دور به شما خوش آمد میگوید.
درک تکنیکهای مختلف رمزگذاری
مزیت قابل توجه ارائه شده توسط SSH نسبت به پیشینیان خود، استفاده از رمزگذاری برای اطمینان از انتقال امن اطلاعات بین میزبان و مشتری است. Host به سرور راه دوری که میخواهید به آن دسترسی داشته باشید اشاره دارد، در حالی که کلاینت رایانهای است که برای دسترسی به میزبان استفاده میکنید. سه فناوری رمزگذاری مختلف توسط SSH استفاده میشود:
- رمزگذاری متقارن
- رمزگذاری نامتقارن
- هش کردن
رمزگذاری متقارن
رمزگذاری متقارن شکلی از رمزگذاری است که در آن یک کلید مخفی هم برای رمزگذاری و هم برای رمزگشایی یک پیام توسط مشتری و میزبان استفاده میشود. در واقع، هر کسی که کلید را در اختیار دارد میتواند پیامی را که منتقل میشود رمزگشایی کند.
رمزگذاری متقارن اغلب کلید مشترک یا رمزگذاری مخفی مشترک نامیده میشود. معمولا فقط یک کلید یا گاهی اوقات یک جفت کلید وجود دارد که با استفاده از کلید دیگر میتوان یک کلید را به راحتی محاسبه کرد.
کلیدهای متقارن برای رمزگذاری کل ارتباطات در طول یک جلسه SSH استفاده میشوند. هم کلاینت و هم سرور، کلید مخفی را با استفاده از یک روش توافق شده استخراج میکنند و کلید حاصل هرگز برای هیچ شخص ثالثی فاش نمیشود. فرآیند ایجاد یک کلید متقارن توسط یک الگوریتم تبادل کلید انجام میشود. چیزی که این الگوریتم را به ویژه ایمن میکند این واقعیت است که کلید هرگز بین مشتری و میزبان منتقل نمیشود.
درعوض، دو کامپیوتر دادههای عمومی را به اشتراک میگذارند و سپس آن را دستکاری میکنند تا به طور مستقل کلید مخفی را محاسبه کنند. حتی اگر دستگاه دیگری دادههای به اشتراک گذاشته شده عمومی را ضبط کند، نمیتواند کلید را محاسبه کند زیرا الگوریتم تبادل کلید مشخص نیست.
البته باید توجه داشت که رمز مخفی مخصوص هر جلسه SSH است و قبل از احراز هویت مشتری ایجاد میشود. هنگامی که کلید تولید شد، تمام بستههای در حال حرکت بین دو ماشین باید توسط کلید خصوصی رمزگذاری شوند. این شامل رمز عبوری است که توسط کاربر در کنسول تایپ شده است، بنابراین اعتبارنامهها همیشه در برابر اسنیفرهای بسته (Packet Sniffer) شبکه محافظت میشوند.
انواع رمزگذاری متقارن وجود دارد، از جمله AES (استاندارد رمزگذاری پیشرفته)، CAST128، Blowfish و غیره، اما رمزگذاری محدود به این استانداردها نیست. قبل از ایجاد یک اتصال ایمن، با انتشار فهرستی از رمزهای پشتیبانی شده به ترتیب اولویت، مشتری و میزبان تصمیم میگیرند که از کدام رمز استفاده کنند. ترجیح داده شدهترین رمز – از رمزهای پشتیبانی شده توسط مشتری – که در لیست میزبان وجود دارد به عنوان رمز دو طرفه استفاده میشود. به عنوان مثال، اگر دو ماشین Ubuntu 14.04 LTS از طریق SSH با یکدیگر ارتباط برقرار کنند، از aes128-ctr به عنوان رمز پیش فرض خود استفاده خواهند کرد.
رمزگذاری نامتقارن
بر خلاف رمزگذاری متقارن، رمزگذاری نامتقارن از دو کلید مجزا برای رمزگذاری و رمزگشایی استفاده میکند. این دو کلید با نامهای کلید عمومی و کلید خصوصی شناخته میشوند. هر دو این کلیدها با هم یک جفت کلید عمومی-خصوصی را تشکیل میدهند. یک کلید عمومی میتواند توسط هر فردی برای رمزگذاری یک پیام استفاده شود و تنها توسط گیرندهای که کلید خصوصی خاص خود را دارد میتواند رمزگشایی شود و بالعکس. اینها از ترکیبات گسترده و به ظاهر تصادفی اعداد و نمادها تشکیل شدهاند، با این حال، کلیدهای عمومی و خصوصی هر دو با استفاده از الگوریتمهای پیچیده ریاضی جفت میشوند.
به عنوان مثال، برای احراز هویت فرستنده، یک پیام با استفاده از کلید خصوصی خودش رمزگذاری میشود. بنابراین، پیام فقط با استفاده از کلید عمومی فرستنده خاص قابل رمزگشایی است. توجه داشته باشید که هر دو مکانیسم رمزگذاری و رمزگشایی فرآیندهای خودکار هستند – شما نیازی به انجام هیچ کاری به صورت دستی ندارید.
برخلاف تصور عمومی، رمزگذاری نامتقارن برای رمزگذاری کل جلسه SSH استفاده نمیشود. در عوض، در طول الگوریتم تبادل کلید رمزگذاری متقارن استفاده میشود. قبل از شروع یک اتصال ایمن، هر دو طرف جفتهای کلید عمومی-خصوصی موقت تولید میکنند و کلیدهای خصوصی مربوطه خود را برای تولید کلید مخفی مشترک به اشتراک میگذارند.
هنگامی که یک ارتباط متقارن ایمن برقرار شد، سرور از کلید عمومی کلاینت برای تولید، چالش و انتقال آن به مشتری برای احراز هویت استفاده میکند. اگر سرویس گیرنده بتواند پیام را با موفقیت رمزگشایی کند، به این معنی است که کلید خصوصی مورد نیاز برای اتصال را در خود نگه میدارد – سپس جلسه SSH آغاز میشود.
هش کردن
هش یک طرفه شکل دیگری از رمزنگاری است که در Secure Shell Connections استفاده میشود. توابع هش یک طرفه با دو شکل رمزگذاری فوق تفاوت دارند به این معنا که هرگز قرار نیست رمزگشایی شوند. آنها یک مقدار منحصر به فرد از طول ثابت برای هر ورودی ایجاد میکنند که هیچ روند واضحی را نشان نمیدهد که بتوان از آن بهره برداری کرد. این باعث میشود که برگرداندن آنها عملا غیرممکن شوند.
تولید هش رمزنگاری از یک ورودی داده شده آسان است، اما تولید ورودی از هش غیرممکن است. این بدان معناست که اگر یک کلاینت ورودی صحیح را داشته باشد، میتواند هش رمزنگاری را ایجاد کند و مقدار آن را برای بررسی اینکه آیا ورودی صحیح را دارد یا خیر مقایسه کند.
SSH از هش برای تأیید صحت پیامها استفاده میکند. این کار با استفاده از HMACها یا کدهای احراز هویت پیام مبتنی بر هش انجام میشود. این تضمین میکند که دستور دریافت شده به هیچ وجه دستکاری نمیشود. در حالی که الگوریتم رمزگذاری متقارن انتخاب میشود، یک الگوریتم احراز هویت پیام مناسب نیز انتخاب شده است. همانطور که در بخش رمزگذاری متقارن توضیح داده شد، این کار به روشی مشابه نحوه انتخاب رمز کار میکند. هر پیامی که ارسال میشود باید حاوی یک MAC باشد که با استفاده از کلید متقارن، شماره توالی بسته و محتوای پیام محاسبه میشود. این پیام خارج از دادههای رمزگذاری شده متقارن به عنوان بخش پایانی بسته ارتباطی ارسال میشود.
چگونه SSH با این تکنیکهای رمزگذاری کار میکند؟
روش کار SSH با استفاده از مدل مشتری-سرور برای تأیید اعتبار دو سیستم راه دور و رمزگذاری دادههایی است که بین آنها ارسال میشود. SSH به طور پیش فرض بر روی پورت TCP 22 کار میکند (اگرچه پورت SSH را میتوان در صورت نیاز تغییر داد). میزبان (سرور) به پورت ۲۲ (یا هر درگاه اختصاص داده شده برای SSH) برای اتصالات ورودی گوش میدهد. در صورت موفقیت آمیز بودن تأیید، اتصال امن را با تأیید اعتبار مشتری و باز کردن محیط Shell صحیح سازماندهی میکند.
کلاینت باید اتصال SSH را با شروع TCP Handshake با سرور، اطمینان از اتصال متقارن ایمن، بررسی اینکه آیا هویت نمایش داده شده توسط سرور با رکوردهای قبلی (معمولا در یک فایل ذخیره کلید RSA ثبت شده) مطابقت دارد و ارائه اطلاعات کاربری مورد نیاز کاربر برای احراز هویت اتصال، شروع کند.
برای برقراری ارتباط دو مرحله وجود دارد – اول، هر دو سیستم باید بر روی استانداردهای رمزگذاری برای محافظت از ارتباطات آینده توافق کنند و دوم، کاربر باید خود را احراز هویت کند. اگر اعتبارنامهها مطابقت داشته باشند، به کاربر اجازه دسترسی SSH داده میشود.
مذاکره رمزگذاری جلسه
هنگامی که یک کلاینت سعی میکند از طریق TCP به سرور متصل شود، سرور پروتکلهای رمزگذاری و نسخههای مربوطه را که پشتیبانی میکند ارائه میدهد. اگر مشتری دارای یک جفت تطبیق مشابه از یک پروتکل و نسخه باشد، توافق حاصل میشود و اتصال با پروتکل پذیرفته شده آغاز میشود. سرور همچنین از یک کلید عمومی نامتقارن استفاده میکند که مشتری میتواند از آن برای تأیید صحت میزبان استفاده کند.
هنگامی که این مورد مشخص شد، دو طرف از چیزی که به عنوان الگوریتم تبادل کلید دیفی-هلمن شناخته میشود برای ایجاد یک کلید متقارن استفاده میکنند. این الگوریتم به مشتری و سرور اجازه میدهد تا به یک کلید رمزگذاری مشترک برسند که از این پس برای رمزگذاری کل جلسه ارتباط استفاده میشود.
اینجا نحوه عملکرد الگوریتم در سطح بسیار ابتدایی آمده است:
- هم کلاینت و هم سرور روی یک عدد اول بسیار بزرگ توافق دارند که البته هیچ عامل مشترکی با هم ندارند. این مقدار عدد اول به عنوان مقدار بذر نیز شناخته میشود.
- در مرحله بعد، دو طرف بر روی یک مکانیسم رمزگذاری مشترک برای تولید مجموعه دیگری از مقادیر با دستکاری مقادیر بذر به شیوهای الگوریتمی خاص توافق میکنند. این مکانیسمها که به نام مولدهای رمزگذاری نیز شناخته میشوند، عملیات بزرگی را روی بذر انجام میدهند. نمونهای از چنین مولدهایی AES (استاندارد رمزگذاری پیشرفته) است.
- هر دو طرف به طور مستقل عدد اول دیگری را تولید میکنند. این به عنوان یک کلید خصوصی مخفی برای تعامل استفاده میشود.
- این کلید خصوصی تازه تولید شده، با شماره مشترک و الگوریتم رمزگذاری (به عنوان مثال AES)، برای محاسبه کلید عمومی که در رایانه دیگر توزیع میشود، استفاده میشود.
- سپس طرفین از کلید خصوصی شخصی خود، کلید عمومی مشترک دستگاه دیگر و عدد اول اصلی برای ایجاد یک کلید مشترک نهایی استفاده میکنند. این کلید به طور مستقل توسط هر دو رایانه محاسبه میشود اما کلید رمزگذاری یکسانی را در هر دو طرف ایجاد میکند.
- اکنون که هر دو طرف یک کلید مشترک دارند، میتوانند به طور متقارن کل جلسه SSH را رمزگذاری کنند. از همین کلید میتوان برای رمزگذاری و رمزگشایی پیامها استفاده کرد.
اکنون که جلسه رمزگذاری متقارن ایمن برقرار شده است، کاربر باید احراز هویت شود.
احراز هویت کاربر
آخرین مرحله قبل از اینکه به کاربر اجازه دسترسی SSH به سرور داده شود، احراز هویت اعتبار اوست. برای این کار، اکثر کاربران SSH از رمز عبور استفاده میکنند. از کاربر خواسته میشود نام کاربری و پس از آن رمز عبور را وارد کند. این اعتبارنامهها به طور ایمن از طریق تونل رمزگذاری شده متقارن عبور میکنند، بنابراین هیچ شانسی برای ردیابی آنها توسط شخص ثالث وجود ندارد.
اگرچه رمزهای عبور رمزگذاری شدهاند، اما استفاده از رمزهای عبور برای اتصالات امن توصیه نمیشود. این به این دلیل است که بسیاری از رباتها میتوانند به سادگی رمزهای عبور آسان یا پیشفرض را به روش brute force اعمال کنند و به حساب شما دسترسی پیدا کنند. در عوض، جایگزین پیشنهادی SSH Key Pairs است. اینها مجموعه ای از کلیدهای نامتقارن هستند که برای احراز هویت کاربر بدون نیاز به وارد کردن رمز عبور استفاده میشوند.
نتیجهگیری
به دست آوردن درک عمیق از نحوه عملکرد SSH میتواند به کاربران کمک کند تا جنبههای امنیتی این فناوری را درک کنند. اکثر مردم این فرآیند را بسیار پیچیده و غیرقابل درک میدانند، اما بسیار سادهتر از آن چیزی است که اکثر مردم فکر میکنند. اگر میپرسید چقدر طول میکشد تا کامپیوتر یک هش را محاسبه کند و یک کاربر را احراز هویت کند، خوب، در کمتر از یک ثانیه اتفاق میافتد. در واقع حداکثر زمان صرف انتقال دادهها از طریق اینترنت میشود.
امیدواریم این آموزش SSH به شما کمک کرده باشد که ببینید چگونه فناوریهای مختلف میتوانند با هم ترکیب شوند تا یک سیستم قوی ایجاد کنند که در آن هر مکانیزم نقش بسیار مهمی دارد. همچنین، اکنون میدانید که چرا به محض ظهور SSH، Telnet به یک چیز از رده خارج تبدیل شد.