SSH: Güvenli Kabuk
SSH, Güvenli Kabuk anlamına gelir. Güvenli Soket Kabuğu olarak da bilinir. Güvenli olmayan ağlarda ağ hizmetlerini güvenli bir şekilde çalıştırmak için Secure Shell (SSH) adı verilen bir şifreleme ağ protokolü kullanılır. İstemci sunucu mimarisi, bir SSH istemci örneğini bir SSH sunucusuna bağlayan SSH uygulamalarının temelidir.
Telnet'in ve Berkeley Remote Shell (rsh) gibi güvenli olmayan uzak Unix kabuk protokollerinin ve bununla ilişkili rlogin ve rexec protokollerinin halefi olarak SSH, güvenli olmayan, düz metin kimlik doğrulama belirteç iletişimi kullanan Unix benzeri işletim sistemleri için oluşturuldu.
Tanım
SSH'yi birkaç farklı şekilde uygulayabiliriz. En basit uygulama, bir iletişim kanalının ve bir ağ bağlantısının her iki ucunda otomatik olarak oluşturulan genel-özel anahtar çiftlerini kullanarak verileri şifreler. Bundan sonra kullanıcının kimliğini bir parola kullanarak doğrular. Bir kullanıcı manuel olarak bir genel-özel anahtar çifti oluşturduğunda, anahtar çifti kurulduğunda kimlik doğrulama neredeyse tamamlanır ve bir oturumun parola sorulmadan anında başlatılmasına olanak sağlanır.
unix vs windows
Bu durumda, sahibi ilgili özel anahtarı gizli tutar ve genel anahtar, sahibine erişim vermesi gereken tüm makinelere yüklenir. Özel anahtar, kimlik doğrulamanın temelini oluştursa da, kimlik doğrulama işlemi sırasında anahtar hiçbir zaman ağ üzerinden gönderilmez. SSH, genel anahtarın sağlayıcısının aynı zamanda karşılık gelen özel anahtarı da elinde bulundurduğunu doğrular.
Bilinmeyen genel anahtarı, SSH'nin tüm sürümlerinde bilinen bir özel anahtara bağlamak, bunları kimlikleri olan meşru ortak anahtarlar olarak kabul etmeden önce çok önemlidir. Bir saldırgandan genel anahtarı doğrulamadan kabul etmek, güvenilmeyen bir saldırganın meşru kullanıcı olarak kabul edilmesine neden olur.
Yaratılış
Finlandiyalı bir bilgisayar bilimcisi olan Tatu Ylönen, SSH'yi ilk kez 1995 yılında yarattı. Protokol paketinin daha da geliştirilmesi birçok geliştirici grupta gerçekleşti ve bu da çeşitli uygulama yinelemelerine yol açtı. Gömülü sistemler de dahil olmak üzere tüm popüler işletim sistemleri için uygulamalar mevcuttur. OpenBSD'nin yaratıcılarının 1999 yılında açık kaynaklı yazılım olarak kullanıma sunduğu OpenSSH, en sık kullanılan yazılım yığınıdır.
Kimlik Doğrulama için OpenSSH Anahtarlarının Yönetimi
Onaylanan genel anahtar listesi genellikle Unix benzeri sistemlerde, uzaktan oturum açma ayrıcalıklarına sahip olan kullanıcının ana dizinindeki ~/.ssh/authorized tuşları dosyasında tutulur. SSH, bu dosyaya yalnızca sahibi ve kökü dışında herhangi biri tarafından değiştirilemediği takdirde saygı gösterir. Hem uzak ucun genel anahtarı hem de yerel ucun eşleşen özel anahtarı mevcut olduğunda parolaya artık gerek yoktur. Ancak daha fazla koruma sağlamak amacıyla özel anahtarı kilitlemek için bir parola kullanabiliriz. Gizli kodu ortak konumlarda da arayabilir ve tam yolunu sağlamak için bir komut satırı seçeneğini kullanabiliriz (ssh için -i seçeneği).
SSH ayrıca otomatik anahtar oluşturmayla şifrelenmiş parola tabanlı kimlik doğrulama sağlar. Bu senaryoda saldırgan, güvenilir sunucu tarafının kimliğine bürünebilir, parolayı isteyebilir ve parolayı elde edebilir (ortadaki adam saldırısı). Sunucu tarafında şifre doğrulamayı kapatabiliriz.
Kullanmak
SSH, istemci-sunucu paradigmasını kullanır. Günlük kaydı için genellikle SSH kullanılır. Ayrıca TCP bağlantı noktalarını tünelleyebilir, X11 bağlantılarını iletebilir ve uzak bir sistemde komutları yürütebilir. Tipik olarak, uzak bağlantılara izin veren bir SSH arka plan programına bağlantılar, bir SSH istemci uygulaması kullanılarak yapılır. Her ikisi de genellikle macOS, Linux dağıtımları, OpenBSD, FreeBSD, NetBSD, Solaris ve OpenVMS gibi çoğu çağdaş işletim sisteminde bulunur. Bazı sürümler tescilli, ücretsiz yazılımdır ve farklı derecelerde karmaşıklık ve kapsamlılığa sahip açık kaynaktır (PuTTY ve Cygwin ve OpenSSH'ye dahil olan OpenSSH sürümü gibi). Özellikle SSH, Windows 10 sürüm 1709'a kadar Windows sürümlerinde varsayılan olarak bulunmaz.
Benzer dosya yönetimi (senkronizasyon, kopyalama ve uzaktan silme) işlevselliği, PuTTY'yi arka uç olarak kullanan ücretsiz ve açık kaynaklı Windows uygulaması WinSCP tarafından sunulmaktadır. İstemci bilgisayara kurulmasına gerek kalmadan WinSCP ve PuTTY, doğrudan bir USB sürücüsünden çalışacak şekilde paketlenmiş olarak mevcuttur. Windows'ta bir SSH sunucusu kurmak için genellikle ayarlar uygulamasında bir özelliğin etkinleştirilmesi gerekir.
Bağlantı sorunlarını gidermek ve bulut tabanlı bir sanal makinenin doğrudan İnternet'e açılmasından kaynaklanan güvenlik risklerini önlemek için SSH, bulut bilişimde çok önemlidir. İnternet üzerinden güvenli bir bağlantı, bir güvenlik duvarı aracılığıyla SSH tüneli sanal bilgisayarı aracılığıyla mümkün kılınabilir. Bu protokol için IANA, TCP bağlantı noktası 22'yi, UDP bağlantı noktası 22'yi ve SCTP bağlantı noktası 22'yi belirlemiştir.
2001 gibi erken bir tarihte IANA, SSH sunucuları için varsayılan TCP bağlantı noktası 22'yi iyi bilinen bağlantı noktalarından biri olarak sınıflandırmıştı. Bağlantı yönelimli aktarım katmanı protokolü SCTP, TCP yerine SSH'yi çalıştırmak için kullanılabilir.
Tarihsel İlerleme
Yineleme 1
Kurumunun ağına yapılan şifre koklama saldırısı, Finlandiya'daki Helsinki Teknoloji Üniversitesi'nden araştırmacı Tatu Ylönen'e ilham kaynağı oldu ve 1995 yılında protokolün (bugün SSH-1 olarak biliniyor) ilk yinelemesini oluşturdu.
SSH, sağlam kimlik doğrulama ve gizlilik garantilerinden yoksun olan rlogin, TELNET, FTP ve rsh gibi önceki protokollerin rolünü üstlenecek şekilde tasarlandı. Ylönen, uygulamasını ücretsiz olarak kullanıma sundu. Temmuz 1995'te cihaz hızla sevilmeye başlandı. 1995 yılının sonuna gelindiğinde 50 farklı ülkeye yayılmış 20.000 SSH kullanıcısı vardı.
Ylönen, SSH'yi teşvik etmek ve ilerletmek için Aralık 1995'te SSH İletişim Güvenliği'ni kurdu. SSH programının ilk sürümünde GNU libgmp de dahil olmak üzere çeşitli ücretsiz yazılım bileşenleri kullanıldı, ancak SSH İletişim Güvenliği tarafından sağlanan daha sonraki yinelemeler giderek daha fazla özel mülkiyete sahip yazılıma dönüştü. Tahminlere göre 2000 yılı itibariyle 2 milyon kullanıcı vardı.
Yineleme 2
İnternet Mühendisliği Görev Gücü (IETF), resmi belgelerinde SSH protokolü sürüm 2'yi oluşturmaktan sorumlu çalışma grubunu 'Secsh' olarak belirledi.
Geliştirilmiş bir protokol yinelemesi olan SSH-2, 2006 yılında standart haline geldi. SSH-1 bu sürümle uyumlu değildir. SSH-2, SSH-1'e göre işlevsellik ve güvenlik yükseltmeleri sunar. Örneğin, Diffie-Hellman anahtar değişimi ve mesaj kimlik doğrulama kodları aracılığıyla sağlam bütünlük doğrulaması daha yüksek güvenlik sağlar. Tek bir SSH bağlantısı üzerinden sınırsız sayıda kabuk oturumunu çalıştırabilme yeteneği, SSH-2'nin yeni yeteneklerinden biridir. SSH-2, SSH-1'den daha gelişmiş olduğundan ve yaygın olarak kullanıldığından, libssh (v0.8.0+), Lsh ve Dropbear gibi belirli uygulamalar yalnızca SSH-2'yi destekler.
Yineleme 1.99
RFC 4253, 2.0'ı ve önceki sürümleri destekleyen bir SSH sunucusunun, sürüm 2.1 geliştirildikten çok sonra, Ocak 2006'da protokol sürümünü 1.99 olarak belirtmesini gerektiriyordu. Bu sürüm numarası, önceki bir yazılım revizyonunu temsil etmek yerine geriye dönük uyumluluğu belirtmek için kullanılır.
c dilinde r
OSSH ve OpenSSH
Orijinal SSH programının son sürümü olan 1.2.12 sürümü, 1999 yılında açık kaynak lisansı altında dağıtıldığından beri, geliştiriciler özgür bir yazılım sürümü üzerinde çalışıyorlar. Bu, Björn Grönvall'ın OSSH programının temeli olarak kullanıldı. Kısa bir süre sonra OpenBSD ekibi, OpenBSD Sürüm 2.6'ya dahil olan OpenSSH'yi üretmek için Grönvall'ın çalışmasını klonladı. OpenSSH'yi farklı işletim sistemlerine aktarmak için bu sürümden bir 'taşınabilirlik' şubesi oluşturdular.
2005 yılı itibarıyla en yaygın kullanılan SSH uygulaması, birçok işletim sistemi dağıtımında varsayılan sürüm olan OpenSSH'dir. OpenSSH 7.6 sürümünde kod tabanından SSH-1 desteği kaldırıldıktan sonra OpenSSH halen güncellenmektedir ve SSH-2 protokolünü desteklemektedir. Bu arada OSSH artık geçerli değil.
Kullanım Alanları
'Josh' kullanıcısı, SSH yoluyla bir X11 programında tünel açmanın bir örneği olarak, xeyes'i çalıştırmak için yerel bilgisayar 'foo Fighter'dan uzaktaki 'tengwar' makinesine 'SSH'ledi. İnsanlar OpenWrt'a erişmek için Windows SSH istemcisi PuTTY'yi kullanıyor.
SSH, Microsoft Windows ve çoğu Unix varyasyonu (Linux, BSD'ler, Apple'ın macOS'u ve Solaris dahil) dahil olmak üzere birçok sistemle çalışan bir protokoldür. Aşağıdaki uygulamalar, belirli SSH istemcileri veya sunucularına özel veya bunlarla uyumlu yeteneklere ihtiyaç duyabilir. Örneğin, şu anda bir VPN oluşturmak için yalnızca SSH protokolünün OpenSSH sunucusunu ve istemci uygulamasını kullanmak mümkündür.
- Uzak bir ana bilgisayardaki bir kabuğa erişmek için (Telnet ve rlogin'in yerine)
- Uzak bir ana bilgisayarda tek başına bir komut yürütmek için (rsh'nin yerine)
- Uzak bir sunucunun otomatik (şifresiz) oturum açmasını yapılandırmak için (örneğin, OpenSSH kullanarak)
- Tamamen işlevsel şifreli bir VPN olarak, yalnızca OpenSSH istemcisinin ve sunucusunun bu özelliği desteklediğini unutmayın.
- X'i uzak bir ana bilgisayardan iletmek için (birden fazla ara ana bilgisayar aracılığıyla mümkün)
- Şifreli bir proxy bağlantısı üzerinden İnternet'te gezinmek üzere SOCKS protokolünü destekleyen SSH istemcilerini kullanmak için.
- Uzak sunucunun dizinini SSHFS kullanan yerel bir makineye dosya sistemi olarak güvenli bir şekilde monte etmek için.
- Otomatik uzaktan sunucu izleme ve yönetimi için yukarıda belirtilen teknolojilerden biri veya birkaçı aracılığıyla.
- SSH uyumlu mobil veya gömülü cihaz geliştirme için.
- Dosya aktarım mekanizmalarını korumak için.
Dosyalar İçin Aktarım Yöntemleri
Birçok dosya aktarım sistemi, aşağıdakiler gibi Secure Shell protokollerini kullanır:
- SSH üzerinden Güvenli Kopyalama (SCP), RCP protokolünden geliştirilmiştir.
- SCP'den daha etkili olduğu varsayılan rsync genellikle SSH bağlantısı üzerinden çalıştırılır.
- Güvenli bir FTP alternatifi SSH Dosya Aktarım Protokolüdür (SFTP) (SSH veya FTPS üzerinden FTP ile karıştırılmamalıdır)
- FISH veya kabuk protokolü üzerinden aktarılan dosyalar, 1998 yılında tanıtıldı ve Unix kabuk talimatları üzerinden SSH'den geliştirildi.
- Hızlı ve Güvenli Protokol (FASP) olarak da bilinen Aspera, komut ve veri aktarımı için UDP bağlantı noktaları için SSH'yi kullanır.
Mimari
SSH protokolünün katmanlı mimarisini üç farklı bileşen oluşturur:
- TCP/IP'nin İletim Kontrol Protokolü (TCP), aktarım katmanı (RFC 4253) tarafından yaygın olarak kullanılır ve 22 numaralı bağlantı noktası, sunucu dinleme bağlantı noktası olarak ayrılır. Bu katman şifrelemeyi, sıkıştırmayı, bütünlük kontrolünü, ilk anahtar değişimini ve sunucu kimlik doğrulamasını uygular. Her uygulama daha fazlasına izin verebilse de, her biri 32.768 bayta kadar olan düz metin paketlerini iletmek ve almak için daha yüksek katmana bir arayüz sunar. Genellikle, 1 GB veri taşındıktan sonra veya bir saat geçtikten sonra (hangisi önce gelirse), taşıma katmanı anahtarın yeniden değişimini ayarlar.
- İstemci kimlik doğrulaması, çeşitli kimlik doğrulama teknikleri de sunan kullanıcı kimlik doğrulama katmanı (RFC 4252) aracılığıyla gerçekleştirilir. İstemci odaklı kimlik doğrulama, sunucunun değil SSH istemcisinin kullanıcıdan parola isteyebileceği anlamına gelir. Sunucudan yalnızca istemcinin kimlik doğrulama isteklerine yanıt alınır. Aşağıdaki kullanıcı kimlik doğrulama teknikleri sıklıkla kullanılır:
Şifre , parolayı değiştirme olanağını içeren basit bir parola kimlik doğrulama tekniğidir. Tüm yazılımlar bu tekniği kullanmaz. - Genellikle en azından DSA, ECDSA veya RSA anahtar çiftlerini destekleyen Genel anahtar genel anahtar tabanlı kimlik doğrulama tekniğidir. Diğer uygulamalar ayrıca X.509 sertifikalarını da kabul eder.
- SSH oturumları için tek oturum açma işlevi şu adresten sağlanır: GSSAPI Kerberos 5 veya NTLM gibi harici mekanizmaları kullanarak SSH kimlik doğrulamasını gerçekleştirmek için genişletilebilir bir sistem sunan kimlik doğrulama teknikleri. OpenSSH'nin işlevsel bir GSSAPI uygulaması olmasına rağmen, ticari SSH uygulamaları genellikle bu teknikleri şirketlerde kullanılmak üzere entegre eder.
- Sunulan SSH hizmetlerini tanımlayan kanallar fikri bağlantı katmanı (RFC 4254) tarafından tanımlanır. Tek bir bağlantıdan birden fazla SSH bağlantısını çoğaltabiliriz. Her ikisi de verileri her iki yönde iletir. Kanal istekleri, sunucu tarafı işleminin çıkış kodu veya terminal penceresinin boyut değişikliği gibi belirli bir kanala özel bant dışı verileri iletir. Ek olarak, alma penceresi boyutunu kullanarak her kanal kendi akışını kontrol eder. SSH istemcisi, sunucu tarafı bağlantı noktasını iletmek için genel bir istekte bulunur. Yaygın olan kanal türleri şunları içerir:
- SFTP, exec ve terminal kabukları için kabuk (SCP aktarımları dahil)
- İstemciden sunucuya iletilen bağlantılar için Doğrudan TCPIP.
- İletilen tcpip kullanılarak sunucudan istemciye iletilen bağlantılar
- Ana bilgisayarın meşruiyetini doğrulamak için SSHFP DNS kaydı (RFC 4255), genel ana bilgisayarın anahtar parmak izlerini sunar.
Açık tasarımı nedeniyle, SSH'yi kabukların güvenliğini sağlamanın yanı sıra çok çeşitli görevler için kullanabiliriz, bu da ona çok yönlülük kazandırır.
Güvenlik açıkları
SSH-1
Bu protokol sürümünde CRC-32 tarafından sağlanan yetersiz veri bütünlüğü koruması nedeniyle, 1998 yılında SSH 1.5'te, şifrelenmiş bir SSH akışına yetkisiz malzeme eklenmesine izin veren bir güvenlik açığı tespit edildi. Çoğu uygulamaya SSH Telafi Saldırısı Dedektörü olarak bilinen bir yama eklendi. Gözden geçirilen bu uygulamaların birçoğu, saldırganların kök veya SSH arka plan programının yetenekleriyle rastgele kod çalıştırmasına olanak tanıyan yeni bir tamsayı taşması kusuru içeriyordu.
Java toplama çerçevesi
Saldırganların IDEA ile şifrelenmiş bir oturumun son bloğunu değiştirmesine olanak tanıyan bir kusur Ocak 2001'de bulundu. Aynı ay, hileli bir sunucunun istemci oturum açma bilgilerini başka bir sunucuya iletmesine olanak tanıyan başka bir kusur bulundu.
İçerdiği güvenlik açıkları nedeniyle, SSH-1'in genellikle güncelliğini kaybetmiş olduğu kabul edilir ve SSH-1 geri dönüşü açıkça kaldırılarak bundan kaçınılmalıdır. Mevcut sunucuların ve istemcilerin çoğu SSH-2'yi desteklemektedir.
CBC için Düz Metin Kurtarma
Zamanın standart şifreleme yöntemi CBC kullanılarak şifrelenmiş bir şifreli metin bloğundan 32 bit'e kadar düz metin alınmasına izin veren teorik bir güvenlik açığı, Kasım 2008'de SSH'nin tüm sürümlerinde keşfedildi. En basit düzeltme, TO'ya geçmek, sayaç SSH'yi saldırıya karşı bağışık hale getiren CBC modu yerine mod.
NSA'nın Şifre Çözmesinden Şüpheleniliyor
Edward Snowden'ın hassas belgeleri 28 Aralık 2014'te Der Spiegel'de yayınlaması, Ulusal Güvenlik Ajansı'nın potansiyel olarak belirli SSH iletişimlerini çözebileceği anlamına geliyor.