SSH چیست؟
از پروتکل SSH (Secure Shell) برای ایجاد ارتباطی امن بین کاربر و سرور استفاده میشود. در این پروتکل با استفاده از کلید عمومی و رمزنگاری متقارن، تمام محتوای ارسال شده بین کاربر و سرور، رمزنگاری میشود و تنها دو طرفی که کلید توافق شدهی مشترک دارند میتوانند به محتوای اصلی دسترسی داشته باشند.
برقراری ارتباط SSH
برای ایجاد یک SSH Connection، لازم است کلید عمومی کاربر (به عنوان شروع کنندهی ارتباط) به عنوان یک کلید عمومی مجاز در سرور شناخته شود (برای تعریف کردن یک کلید عمومی به عنوان کلید قابل اعتماد، باید آن را در یک فایل مربوط به کلیدهای عمومی مجاز در سرور قرار داد).
بنابراین، زمانی که کاربر درخواست ایجاد SSH Connection را برای سرور ارسال میکند، ابتدا کلید عمومی کاربر و درست بودن کلید خصوصی مربوط به آن بررسی میشود و سپس Connection ایجاد میشود (در این صورت هر سیستمی که یک کپی از کلید عمومی و خصوصی داشته باشد، میتواند به عنوان کاربر مشابه به سرور وصل شود).
به جز این راه، روشهای دیگری هم برای برقراری ارتباط وجود دارد که یکی از آنها استفاده از پسورد است. زمانی که قرار است یک کاربر به یک سرور وصل شود، با نامکاربری و پسورد مخصوص به آن شناخته میشود. از این پسورد میتوان برای اتصال به سرور بدون مبادلهی کلیدعمومی از قبل، استفاده کرد. اگر از این روش استفاده شود، کلیدهای عمومی و خصوصی خودکاری تولید میشوند و برای رمزنگاری از آنها استفاده میشود (این روش امنیت کمتری نسبت به روش قبل دارد زیرا در آن مهاجم میتواند با استفاده از حملهی MITM، به پسورد دسترسی پیدا کند و از آن برای وصل شدن به سرور استفاده کند).
پروتکل SSH جایگزینی برای پروتکلهای ناامنی مانند telnet است که در آن تمام اطلاعات بهشکل یک متن رمز نشده ارسال و دریافت میشوند. اصلیترین و رایجترین استفادهی SSH، اتصال به یک سرور و اجرای دستور است اما چون با استفاده از SSH میتوان یک کانال امن ایجاد کرد، از آن برای کپی کردن یک فایل از یک سیستم به سیستم دیگر به طور امن (با استفاده از SCP) یا انتقال امن اطلاعات (SFTP) نیز استفاده میشود. همچنین، با استفاده از تونل ایجاد شده، میتوان بخشی از ترافیک را از سرور عبور داد و از آن به عنوان VPN server استفاده کرد.
چگونه استفاده از SSH باعث ایجاد امنیت میشود؟
همانطور که پیشتر توضیح داده شد، پروتکل SSH از رمزنگاری در ارسال اطلاعات استفاده میکند. ابتدا به کمک کلیدهای عمومی و خصوصی دو طرف و با استفاده از رمزنگاری نامتقارن، دوطرف دربارهی یک کلید یکتا و مشترک توافق میکنند و سپس به کمک این کلید و با استفاده از رمزنگاری متقارن، ارسال کننده پیامها را رمز میکند و دریافتکننده با همان کلید آنها را رمزگشایی میکند.
حال فرض کنید که یک مهاجم میخواهد در ارتباط بین یک کاربر و یک سرور که از SSH استفاده میکنند، اختلال ایجاد کند. طبیعتن با توجه به اینکه کلید مشترک فقط در اختیار کاربر و سرور است، نمیتواند به محتوای پیام آنها دسترسی داشته باشد. ولی اگر مهاجم بتواند در مسیر تبادل پیامها قرار بگیرد، میتواند پیام ارسال شده را دریافت کند و آن را با یک پیام رمز شدهی دیگر جایگزین کند و گیرنده محتوای اشتباهی را دریافت کند.
در پیادهسازی SSH برای جلوگیری از این اتفاق، از هش (hash) استفاده میشود. هش به معنای خلاصه یا نشانهای از هر پیام است. هش هر پیام، منحصر به فرد است (اگر پیام تغییر کند، مقدار هش نیز تغییر میکند) و از روی آن نمیتوان پیام را به دست آورد. مقدار هش، با استفاده از روشهای مختلفی میتواند محاسبه شود که کاربر و سرور در زمان برقراری ارتباط دربارهی روش محاسبهی آن توافق میکنند.
پس از ایجاد ارتباط، در کنار هر پیام ارسال شده (که رمزنگاری شده است)، مقدار هش مربوط به آن پیام که از روی متن پیام، کلید توافق شده و شمارهی پیام محاسبه میشود نیز، ارسال میشود. دریافتکننده پس از رمزگشایی و دسترسی به محتوای اصلی پیام، براساس روش توافق شده، هش مربوط به پیام را محاسبه میکند و اگر با هش دریافت شده مطابقت داشته باشد، پیام را به عنوان یک پیام معتبر میشناسد. با استفاده از این روش، مهاجم چون به کلید توافق شده دسترسی ندارد، نمیتواند هش درستی ایجاد کند و در نتیجه نمیتواند سبب ارسال پیام اشتباه شود.