لینک کوتاه مطلب : https://hsgar.com/?p=6223

سخت شدن SSH

در سال 2019، نت کرافت 74.2 درصد از ماشین‌های تحت وب لینوکس را اجرا می‌کنند. در طی یک سرشماری سراسری IPv4 در سال 2016، یک بنر OpenSSH در 75٪ موارد زمانی که در پورت TCP 22 پاسخ داده می شد، شناسایی شد. به جرات می توان گفت که OpenSSH احتمالاً محبوب ترین نرم افزار جهان برای اتصال از راه دور به سرورها است. همچنین یکی از ارزشمندترین بردارهای حمله با توجه به عملکرد ارائه شده به هر کسی که قادر به اتصال است.

سخت‌تر کردن جنبه‌های امنیتی یک پیکربندی OpenSSH بسیار چالش برانگیز است. برای تیم هایی که روی امنیت شبکه متمرکز نیستند و نمی توانند بودجه مشاورانی را که سیستم های سفارشی راه اندازی می کنند توجیه کنند، بدتر است.

حتی برای تیم هایی که به امنیت فکر می کنند، مشکلات زیر ممکن است پیش بیاید:

  1. گوش دادن OpenSSH به شماره پورت های فرد را می توان با اسکن پورت شکست داد.
  2. اگر کارمندی بتواند از طریق تلفن همراه یا لپ تاپ خود متصل شود و دستگاه مذکور فروخته، دزدیده یا توقیف شود، هر گونه پیکربندی پورت کوبنده و همچنین هر کلید خصوصی به خطر می افتد.
  3. برخی از شرکت‌ها از فیلتر IPv4 استفاده می‌کنند تا فقط اجازه اتصال از دفتر خود را بدهند، اما سپس به امنیت وای‌فای دفتر خود نادرست ادامه می‌دهند. انقلاب کار از خانه به این تنظیمات پیچیدگی می‌افزاید.
  4. ~/.ssh/authorized_keys فایل ها به ندرت بررسی می شوند. کارکنان یک کسب و کار را ترک می کنند اما اعتبار آنها می تواند ادامه یابد.
  5. اگر کلیدهای SSH لپ‌تاپ شما خراب شده و از آن‌ها نسخه پشتیبان تهیه نشده است، قفل خواهید شد.
  6. کسب‌وکارها ممکن است دسترسی به سیستم‌های راه دور را از دست بدهند، زیرا کارکنانی که دسترسی داشتند، کسب‌وکار را ترک کردند و کلیدهای مخصوص کارفرمای خود را از بین بردند.
  7. من دیده‌ام که کسب‌وکارها نمونه‌های EC2 خود را بررسی می‌کنند، ماشین‌هایی را می‌بینند که آنها را نمی‌شناسند و سپس برای یافتن هر کسی که دسترسی داشته باشد تلاش می‌کنند. آن‌ها نمی‌توانند یک کلید SSH جدید را در آن رها کنند ~/.ssh/authorized_keys فایل کنید و به دستگاه متصل شوید تا ببینید در حال اجرا است.

کلیدهای SSH به طور موثر رادیواکتیو هستند. آنها بسیار مفید هستند اما راه های بسیار مطمئن تر و مطمئن تری برای اتصال از طریق SSH وجود دارد.

در این پست، اتصال به یک نمونه EC2 با استفاده از حساب Google خود را با احراز هویت دو مرحله ای کامل می کنم. من استفاده خواهم کرد BastionZero، سرویسی که توسط استارت آپی به همین نام مستقر در بوستون ساخته شده است. BastionZero توسط اتان هیلمن و همکار کانادایی شارون گلدبرگ.

BastionZero به شما امکان می دهد با استفاده از انواع خدمات احراز هویت دو مرحله ای به سرورهای خود متصل شوید. شما می توانید از هر جایی بدون نیاز به راه اندازی VPN یا جعبه های پرش متصل شوید. ممیزی اتصال و ثبت دستورات SSH به طور پیش فرض فعال هستند.

راه اندازی یک نمونه EC2

برای این تمرین، من 3.80 دلار در ماه راه اندازی خواهم کرد t3.nano نمونه در AWS’ eu-west-1 منطقه ای در ایرلند که Ubuntu 22.04 LTS را اجرا می کند. دارای 512 مگابایت رم، 2 vCPU، اتصال به شبکه 5 گیگابیت بر ثانیه و 8 گیگابایت حافظه gp2 ظرفیت ذخیره سازی برای پارتیشن روت اختصاص داده شده است.

من یک کلید SSH از طریق EC2 Web UI ایجاد کردم و آن را در آن ذخیره کردم ~/.ssh/my.pem. زیر من است ~/.ssh/config فایل.

ServerAliveInterval 50

Host testbz
    HostName 3.252.38.36
    User ubuntu
    IdentityFile ~/.ssh/my.pem

مطمئن می‌شوم که مجوزهای روی کلیدم به اندازه کافی محکم هستند و سپس اجرا می‌کنم زمان کار در نمونه EC2 برای اطمینان از اینکه می توانم بدون مشکل وصل شوم.

$ sudo chmod 600 ~/.ssh/my.pem
$ ssh testbz uptime
10:10:22 up 4 min,  0 users,  load average: 0.11, 0.15, 0.08

راه اندازی مامور BastionZero

من با حساب Google خود وارد رابط کاربری وب BastionZero شده ام. در داشبورد اصلی، روی دکمه زرد رنگ “ایجاد” در بالا سمت راست کلیک کرده و “API Key” را از منوی کشویی انتخاب کرده ام. نام کلید را روی “testbz” تنظیم می کنم و کادر کلید ثبت را علامت می زنم. سپس یک Client ID و Client Secret به من ارائه می شود.

من SSH را به نمونه EC2 وارد می کنم و BastionZero’s Agent را نصب می کنم. را کد منبع برای این عامل، که از 13 هزار خط GoLang تشکیل شده است، در GitHub در دسترس است.

$ sudo apt-key adv 
    --keyserver keyserver.ubuntu.com 
    --recv-keys E5C358E613982017
$ sudo add-apt-repository 
    'deb https://download-apt.bastionzero.com/production/apt-repo stable main'
$ sudo apt update
$ sudo apt install bzero
$ sudo bzero -registrationKey *registration API key secret*

اکنون می توانم ببینم که عامل به هیچ پورتی گوش نمی دهد، بلکه به سرور فرمان و کنترل BastionZero متصل می شود.

$ sudo lsof -OnP | grep LISTEN
systemd-r  392                systemd-resolve   14u     IPv4              16546      0t0        TCP 127.0.0.53:53 (LISTEN)
sshd       683                           root    3u     IPv4              18270      0t0        TCP *:22 (LISTEN)
sshd       683                           root    4u     IPv6              18281      0t0        TCP *:22 (LISTEN)
$ sudo lsof -OnP | grep bzero | grep TCP
bzero     2408                           root    7u     IPv4              28283      0t0        TCP 172.30.2.242:36892->13.224.68.18:443 (ESTABLISHED)
bzero     2408 2409 bzero                root    7u     IPv4              28283      0t0        TCP 172.30.2.242:36892->13.224.68.18:443 (ESTABLISHED)
bzero     2408 2410 bzero                root    7u     IPv4              28283      0t0        TCP 172.30.2.242:36892->13.224.68.18:443 (ESTABLISHED)
bzero     2408 2411 bzero                root    7u     IPv4              28283      0t0        TCP 172.30.2.242:36892->13.224.68.18:443 (ESTABLISHED)
bzero     2408 2536 bzero                root    7u     IPv4              28283      0t0        TCP 172.30.2.242:36892->13.224.68.18:443 (ESTABLISHED)
bzero     2408 2537 bzero                root    7u     IPv4              28283      0t0        TCP 172.30.2.242:36892->13.224.68.18:443 (ESTABLISHED)

سرور آنها نیز در همان منطقه AWS به عنوان نمونه EC2 من قرار دارد.

$ curl ipinfo.io/13.224.68.18
{
  "ip": "13.224.68.18",
  "hostname": "server-13-224-68-18.dub2.r.cloudfront.net",
  "city": "Dublin",
  "region": "Leinster",
  "country": "IE",
  "loc": "53.3331,-6.2489",
  "org": "AS16509 Amazon.com, Inc.",
  "postal": "D02",
  "timezone": "Europe/Dublin",
  "readme": "https://ipinfo.io/missingauth"
}

اتصال از طریق BastionZero’s Client

اکنون قابلیت اتصال از طریق SSH به نمونه EC2 از طریق رابط کاربری وب گروه امنیتی EC2 AWS را حذف کرده ام.

کلاینت macOS BastionZero را می توان از طریق نصب کرد هومبرو. از 14595 خط TypeScript تشکیل شده است و روی آن نگهداری می شود GitHub.

$ brew install bastionzero/tap/zli

من دستور ورود به سیستم را اجرا می کنم که مرورگر من را باز می کند و به من امکان می دهد از طریق حساب Google خود احراز هویت کنم.

پس از ورود به سیستم، موارد زیر در CLI چاپ می شود.

Login required, opening browser
Login successful
Logged in as: ..., bzero-id: ..., session-id: ...

من اهدافی را که به آنها دسترسی دارم فهرست می کنم. در زیر می‌توانم نمونه EC2 را که تنظیم کرده‌ام را مشاهده کنم.

┌───────┬─────────────────┬────────────────┐
│ Type  │ Name            │ Environment    │
├───────┼─────────────────┼────────────────┤
│ Bzero │ ip-172-30-2-242 │ Default        │
└───────┴─────────────────┴────────────────┘

اکنون می توانم از طریق BastionZero’s Client متصل شوم.

$ zli connect ip-172-30-2-242
10:29:23 up 23 min,  1 user,  load average: 0.00, 0.00, 0.00

از اینکه برای خواندن این پست وقت گذاشتید متشکرم. من خدمات مشاوره و توسعه عملی را به مشتریان در آمریکای شمالی و اروپا ارائه می دهم. اگر می خواهید در مورد اینکه چگونه پیشنهادات من می تواند به کسب و کار شما کمک کند، با من تماس بگیرید لینکدین.

لینک منبع

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.