محافظت از کلیدهای SSH با MacOS Secure Enclave
آدرس مقاله: https://gatezh.com/posts/macos-secure-enclave-ssh-keys/ آدرس نظرات: https://news.ycombinator.com/item?id=50449748 امتیاز: 331 # نظرات: 121
مدتی است که در مورد کلیدهای SSH خود پارانوئید هستم. آنها فقط در ~/.ssh/ می نشینند و با هیچ چیز جز مجوزهای فایل محافظت نمی شوند. هر اسکریپت مخربی که به سیستم فایل من دسترسی پیدا می کند می تواند آنها را کپی کرده و وارد تمام سرورهای من شود. همچنین، داستانهای زیادی در اینترنت در مورد تکالیف مصاحبه جعلی منتشر شده است که از آنها خواسته شده است یک مخزن را شبیهسازی کنید و آن را روی دستگاه محلی خود اجرا کنید. این یکی از دلایلی است که من به طور کامل به استفاده از کانتینرهای devcontainer روی آوردم، اما حتی آن هم واقعا برای من کافی نبود (و واقعا برای شما یا هیچ کس دیگری نباید کافی باشد).
بنابراین در نهایت تصمیم گرفتم برای آن کاری انجام دهم.
من تصمیم گرفتم از رویکرد بومی macOS Secure Enclave استفاده نکنم (فقط با استفاده از ابزارهای خارج از جعبه) زیرا در نهایت زشت بود و من نمی توانم با آن زندگی کنم. با این حال، این یک راه حل کاملا کاربردی و کارآمد است که در غیر این صورت قطعا از آن استفاده خواهم کرد.
پس از کمی تحقیق، چندین راه برای محافظت از کلیدهای SSH پیدا کردم:
من قبلا از 1Password استفاده می کنم، اما ممکن است در آینده به چیز دیگری تغییر دهم. Bitwarden اخیرا پشتیبانی از کلید SSH را اضافه کرده است (حتی در لایه آزاد!)، اما هنوز هم یک راه حل نرم افزاری است – کلیدها در حالت استراحت رمزگذاری می شوند اما هنگام استفاده در حافظه رمزگشایی می شوند.
چیزی که من واقعا می خواستم امنیت سخت افزاری بود. استخراج کلید خصوصی به معنای واقعی کلمه غیرممکن است، حتی اگر مک من به طور کامل در خطر باشد.
که من را با YubiKey یا Secure Enclave باقی گذاشت. من یک YubiKey 5C دارم، اما میخواستم ابتدا رویکرد بومی را امتحان کنم – بدون سختافزار اضافی برای حمل، بدون برنامههای شخص ثالث برای نگهداری.
از زمان macOS Sequoia (و Tahoe)، macOS از کلیدهای SSH پشتیبانی می کند که توسط Secure Enclave، یک زیرسیستم امنیتی در تراشه Mac که از پردازنده اصلی جدا شده است، پشتیبانی می کند. کلید خصوصی در داخل آن ایجاد می شود و هرگز خارج نمی شود.
وقتی جایی SSH می کنید، مک شما از Secure Enclave می خواهد که چالش احراز هویت را امضا کند. اگر Touch ID را فعال کنید، باید هر عملیات امضا را تأیید کنید. کلید خصوصی واقعی هرگز در حافظه یا روی دیسک وجود ندارد.
گردش کار به طرز شگفت آوری شبیه کلیدهای SSH معمولی است:
macOS دستور sc_auth (Smart Card Authentication) را برای مدیریت هویت های CryptoTokenKit ارائه می دهد. با وجود نام، با Secure Enclave نیز کار می کند.
برای ایجاد کلید از شما درخواست Touch ID میشود.
وقتی برای اولین بار این دستور را اجرا کردم، یک خطای ترسناک دریافت کردم:
معلوم شد ثبت نام Touch ID من به نحوی بازنشانی شده است. پس از ثبت مجدد اثر انگشتم در تنظیمات سیستم → شناسه لمسی و رمز عبور، دستور به خوبی کار کرد.
اکنون باید یک فایل “key handle” ایجاد کنیم که SSH بتواند از آن استفاده کند. این کلید خصوصی نیست - فقط یک مرجع است که به SSH میگوید «برو از Secure Enclave بخواه این را امضا کند».
وقتی پین از شما خواسته شد، فقط Enter را فشار دهید (برای کلیدهای بیومتریک استفاده نمی شود). شناسه لمسی ظاهر می شود. این id_ecdsa_sk_rk و id_ecdsa_sk_rk.pub را در فهرست فعلی شما ایجاد می کند.
اگر به صورت آنلاین «macOS Secure Enclave SSH» را جستجو کنید، راهنماهای زیادی پیدا خواهید کرد که به شما میگویند ssh-add -K را اجرا کنید. نکن منسوخ شده است:
و حتی پرچمهای جدید برای کلیدهای Secure Enclave کار نمیکنند – آنها برای MacOS Keychain سنتی هستند، نه CryptoTokenKit. متغیر محیطی SSH_SK_PROVIDER رویکرد صحیحی است.
آن ssh: در انتها شناسه برنامه FIDO2 است - بخشی از کلید است، نه یک نظر. هنگام کپی کردن در authorized_keys می توانید نظر خود را بعد از آن اضافه کنید:
یا به صورت دستی کلید عمومی (همراه با نظر خود) را در ~/.ssh/authorized_keys روی سرور قرار دهید.
پس از تنظیم همه چیز، سعی کردم SSH… و رمز عبور من را خواست.
خروجی پرمخاطب (ssh -vvv) نشان داد که SSH فقط کلید RSA قدیمی من را امتحان می کند:
مشکل: SSH به طور خودکار به دنبال فایل هایی با نام id_ecdsa_sk_rk نمی گردد. فقط نامهای استاندارد مانند id_rsa، id_ed25519، id_ecdsa را بهطور خودکار کشف میکند.
راه حل این است که به صراحت آن را به ~/.ssh/config خود اضافه کنید:
SSH فایلهای هویت را به ترتیب امتحان میکند، بنابراین اگر میخواهید پیشفرض باشد، ابتدا کلید Secure Enclave را قرار دهید.
⚠️ توجه: اگر از عامل SSH 1Password (IdentityAgent) استفاده می کنید، ممکن است با این تنظیمات تضاد داشته باشد. در حین تست مجبور شدم نظر بدهم.
شما باید یک درخواست Touch ID دریافت کنید، سپس متصل شوید.
یک چیز که من از آن هیجان زده نیستم: گفتگوی Touch ID می گوید "ctccardtoken برای ادامه باید احراز هویت شود" به جای چیزی دوستانه مانند "SSH می خواهد از کلید شما استفاده کند."
این به این دلیل است که درخواست از CryptoTokenKit می آید - یک چارچوب سطح پایین که اپل برای SSH کاربر نهایی آن را صیقل نداده است. اگر این موضوع شما را آزار می دهد، Secretive در حالی که هنوز از Secure Enclave در زیر هود استفاده می کند، رابط کاربری بسیار بهتری ارائه می دهد.
من در ابتدا به ایجاد دو کلید فکر کردم - یکی با Touch ID برای سرورهای "مهم"، یکی بدون برای راحتی (مانند عملیات Git).
اما بعد متوجه شدم: بدون -t bio، بدافزار میتواند از کلید من بیصدا استفاده کند. با -t bio، من همیشه می دانم زمانی که چیزی از کلید SSH من استفاده می کند. چند ضربه اضافی در روز قیمت کمی برای این دید است.
بنابراین توصیه من اگر قصد دارید کلیدهای SSH خود را به این شکل ذخیره کنید: فقط از -t bio برای همه چیز استفاده کنید. اگر زمانی آزاردهنده شد، همیشه می توانید بعدا یک کلید دوم ایجاد کنید.
کلیدهای امن Enclave به Mac خاص شما گره خورده اند. اگر مک شما بمیرد، کلیدها با آن می میرند.
این بر اساس طراحی است: کلید را نمی توان صادر کرد، بنابراین نمی توان از آن نیز نسخه پشتیبان تهیه کرد. در عوض بیش از یک کلید را نگه دارید. کلید Secure Enclave و یک کلید پشتیبان (از YubiKey یا Mac دیگر) را به authorized_keyهای سرورهای خود اضافه کنید. اگر یک دستگاه گم شود، همچنان از طریق دستگاه دیگر دسترسی دارید.
به نظر می رسد که این یک راه مناسب برای ذخیره ایمن کلیدهای SSH شما است و بسیار بهتر از ذخیره آنها بر روی هارد دیسک شما است.
با این حال، من تا حدودی از زشتی رابط کاربری شگفت زده شده ام. مطمئن نیستم چرا اپل چنین چیزی صیقلنشده را منتشر کرد. در هر ارائه، آنها بخشی در مورد امنیت دارند (جایی که لوگوی اپل آنها به یک قفل اپل تبدیل می شود)، بنابراین من انتظار یک ظاهر جذاب از نظر زیبایی شناختی برای ویژگی های امنیتی آنها را داشتم. قطعا اینطور نیست. حس زیبایی من با این زشتی سازگار نیست، بنابراین به دنبال راه حل های دیگری برای ذخیره کلیدهای SSH خود در Secure Enclave مانند Secretive خواهم بود.
همچنین در صورتی که برای مک من اتفاقی بیفتد، همچنان به یک گزینه پشتیبان نیاز دارم.
متن اصلی (انگلیسی)
Protecting SSH Keys with macOS Secure Enclave
Article URL: https://gatezh.com/posts/macos-secure-enclave-ssh-keys/ Comments URL: https://news.ycombinator.com/item?id=50449748 Points: 331 # Comments: 121