Güvenli kabuk, (İngilizce: Secure Shell (SSH)), ağ hizmetlerinin güvenli olmayan bir ağ üzerinde güvenli şekilde çalıştırılması için kullanılan bir kriptografikağ protokolüdür.[1] En iyi bilinen örnek uygulaması bilgisayar sistemlerine uzaktan oturum açmak için olandır.
SSH, bir SSH istemcisini bir SSH sunucusuna bağlayarak istemci-sunucu mimarisi çerçevesinde güvenli olmayan bir ağ üzerinde güvenli kanal sağlar.[2] Yaygın uygulamalar arasında uzaktan komut satırıgirişi ve uzaktan komut çalıştırma bulunur, ama herhangi bir ağ hizmeti de SSH ile güvenceye alınabilir. Protokol belirtimi SSH-1 ve SSH-2 olarak adlandırılan iki ana sürüm arasında ayrım yapar.
Protokolün en görünür uygulaması, Unix benzeri işletim sistemlerinde kabuk hesaplarına erişim içindir, ancak Windows'ta da sınırlı bir kullanım alanı görür. 2015 yılında Microsoft, gelecekteki bir sürümde SSH'ye yerel destek vereceğini duyurdu.[3]
SSH, Telnet ve güvenli olmayan uzak kabuk protokolleri olan Berkeley rlogin, rsh ve rexec gibi protokollerin yerini almak için tasarlanmıştır. Bu protokoller, özellikle parolaları, düz metin olarak göndererek, paket analizine karşı savunmasız bırakıyor.[4] SSH tarafından kullanılan şifreleme, Internet gibi güvenli olmayan bir ağ üzerinden verilerin gizliliğini ve bütünlüğünü sağlamaya yöneliktir, ancak Edward Snowden tarafından sızdırılan dosyalar, Ulusal Güvenlik Ajansı'nın bazen SSH şifresini çözerek SSH oturumlarının içeriğini okuyabildiğini gösterir.[5]
6 Temmuz 2017'de, hükûmet şeffaflık organizasyonu WikiLeaks ABD Merkezi İstihbarat Teşkilatının, SSH kullanıcıları tarafından güvenli olmayan sistemler üzerinde başlatılan SSH bağlantılarını yakalamak için MicrosoftWindows veya GNU/Linux işletim sistemlerini çalıştıran bilgisayarlara kurulabilecek araçlar geliştirdiğini doğruladı.[6]
Tanımı
SSH, uzak bilgisayarın kimliğini doğrulamak ve gerektiğinde kullanıcının kimliğini doğrulamasına izin vermek için açık anahtarlı şifreleme kullanır. SSH'yi kullanmanın birkaç yolu vardır; bir tanesi, bir ağ bağlantısını basitçe şifrelemek için otomatik olarak oluşturulan özel-genel anahtar çiftlerini kullanmak ve sonra oturum açmak için parola kimlik doğrulaması kullanmaktır.
Bir diğeri, kimlik doğrulama işlemini gerçekleştirmek için, kullanıcı veya programların bir parola belirtmek zorunda kalmadan oturum açmasına izin veren, el ile oluşturulmuş bir ortak-özel anahtar çifti kullanmaktır. Bu senaryoda, herkes farklı bir anahtar (açık ve gizli) çifti oluşturabilir. Açık anahtar, eşleşen gizli anahtarın sahibine erişmesi gereken tüm bilgisayarlara yerleştirilir (sahip gizli anahtarını saklı tutar). Kimlik doğrulama özel anahtara dayalıyken, kimlik doğrulama sırasında anahtarın kendisi ağ üzerinden aktarılmaz. SSH, yalnızca ortak anahtarı sunan kişinin eşleşen özel anahtara sahip olup olmadığını doğrular. SSH'nin tüm sürümlerinde, bilinmeyen açık anahtarların doğrulanması önemlidir, yani açık anahtarları geçerli olarak kabul etmeden önce kimlikle ilişkilendirmek gerekir. Bir saldırganın açık anahtarını doğrulama olmadan kabul etmek, yetkisiz bir saldırganı geçerli bir kullanıcı olarak yetkilendirir.
Anahtar yönetimi
Unix benzeri sistemlerde, yetkilendirilmiş açık anahtarların listesi genellikle ~/.ssh/authorized_keys dosyasında, uzaktan oturum açmasına izin verilen kullanıcının giriş dizininde saklanır.[7] Bu dosya, sahibi ve tüm yetkili kullanıcıdan başka bir şey tarafından yazılabilir değil ise sadece SSH tarafından değiştirilebilir. Uzak uçta açık anahtar varsa ve yerel uçta eşleşen gizli anahtar varsa, parolayı yazmanız artık gerekmemektedir (Message-Passing Interface (MPI) yığını gibi bazı yazılımların düzgün çalışması için bu parolasız erişim gerekebilir). Ancak, ek güvenlik için gizli anahtarın kendisi bir şifre ile kilitlenebilir.
Gizli anahtar standart yerlerde de aranabilir ve tam yolu bir komut satırı ayarı olarak belirlenebilir (ssh için -i seçeneği). Ssh-keygen yardımcı programı, her zaman çiftler halinde açık ve gizli anahtarlar üretir.
SSH, ayrıca otomatik olarak oluşturulan anahtarlar tarafından şifrelenen parola tabanlı kimlik doğrulamayı da destekler. Bu durumda, saldırgan meşru sunucu tarafını taklit edebilir, parola isteyebilir ve parolayı elde edebilir (man-in-the-middle saldırısı). Ancak, bu durum sadece, iki tarafın daha önce hiç birbirlerinin kimliklerini doğrulamadığında SSH'nin daha önce kullanılan sunucu tarafının anahtarını hatırladığı için mümkündür. SSH istemcisi, önceden bilinmeyen yeni bir sunucunun anahtarını kabul etmeden önce bir uyarı verir. Parola kimlik doğrulaması kapatılabilir.
Kullanımı
SSH genellikle uzak makineye giriş yapmak ve komutları çalıştırmak için kullanılır, ayrıca tünel açma, TCP portlarını ve X11 bağlantılarını iletmeyi de destekler; SSH dosya transferi (SFTP) veya güvenli kopyalama (SCP) protokolleri kullanarak dosyaları aktarabilir.[2] SSH istemci-sunucu modelini kullanır.
SSH istemci programı, genellikle uzak bağlantıları kabul eden SSH arka plan uygulamasına bağlantı kurmak için kullanılır.
Her ikisi de MacOS, Linux'un çoğu dağıtımı, OpenBSD, FreeBSD, NetBSD, Solaris ve OpenVMS gibi çoğu modern işletim sistemlerinde yaygın olarak bulunur. Özellikle, Windows varsayılan olarak SSH içermeyen birkaç modern masaüstü / sunucu işletim sistemlerinden biridir. özel mülk, ücretsiz ve açık kaynaklı (örneğin PuTTY,[9] ve Cygwin'in bir parçası olan OpenSSH sürümü[10]) çeşitli karmaşıklıkta ve bütünlükte sürümleri mevcuttur. Yerli Linux dosya yöneticileri (örneğin Konqueror) sürükle-bırak özelliğine sahip bölmeli bir grafik arayüzü sağlamak için FISH protokolünü kullanabilir. Açık kaynak kodlu bir Windows programı WinSCP[11] arka plan olarak PuTTY kullanarak benzer dosya yönetimi (senkronizasyon, kopyalama, uzaktan silme) özelliği sağlar. Hem WinSCP[12] hem de PuTTY,[13] istemci makineye kurulum gerektirmeksizin, doğrudan bir USB sürücüsünden çalışacak şekilde paketlenmiştir. Windows'ta bir SSH sunucusu çalıştırabilmek için genellikle kurulum yapmak gerekir (örneğin Cygwin[14] üzerinden). Windows 10 sürüm 1709'da, OpenSSH'nin resmi bir Win32 bağlantı noktası bulunur.
SSH, bulut bilişimde bağlantı sorunlarını çözmek, bulut tabanlı sanal bir makineyi doğrudan internette göstermenin güvenlik sorunlarından kaçınmak için önemlidir.
Bir SSH tüneli, bir güvenlik duvarından sanal bir makineye Internet üzerinden güvenli bir yol sağlayabilir.[15]
Tarihçesi ve gelişimi
Sürüm 1.x
1995 yılında Finlandiya Helsinki Teknoloji Üniversitesi'nden araştırmacı Tatu Ylönen, kampüs ağında bir parola koklama saldırısı nedeniyle protokölün (şimdiki adı SSH-1) ilk versiyonunu tasarladı.[16] SSH'nin amacı, güçlü kimlik doğrulaması sağlamayan ve gizliliği garanti etmeyen, rlogin, TELNET, ftp[17] ve rsh protokollerinin yerini almaktı. Ylönen, uygulamasını Temmuz 1995'te ücretsiz olarak yayınladı ve araç hızla popülerlik kazandı. 1995'in sonuna doğru SSH kullanıcı tabanı elli ülkede 20.000 kullanıcıya ulaştı.
Aralık 1995'te Ylönen, SSH'ı pazarlamak ve geliştirmek için SSH Communications Security şirketini kurdu. SSH yazılımının orijinal sürümü, GNU libgmp gibi çeşitli ücretsiz yazılımlar kullandı, fakat daha sonra SSH Communications Security tarafından yayınlanan sürümlerle birlikte Özel mülk yazılım halini aldı.
2000 yılına kadar kullanıcı sayısının 2 milyona ulaştığı tahmin edilmektedir.[18]
Sürüm 2.x
2006 yılında, protokolün SSH-2 olarak adlandırılan gözden geçirilmiş bir sürümü yeni standart olarak kabul edildi. Bu sürüm SSH-1 ile uyumlu değildir, ancak SSH-1'e göre hem gelişmiş güvenlik hem de yeni özelliklere sahiptir. Örneğin, yeni anahtar değişim mekanizmaları sunar ve protokolün ISO/OSI protokolüne benzer şekilde ayrı katmanlara bölündüğü gelişmiş bir protokol yapısına sahiptir.[19] SSH-2'de SSH-1'e göre hem güvenlik ham de yeni özellik iyileştirmeleri mevcuttur. Daha iyi güvenlik, örneğin, Diffie–Hellman anahtar değişimi ve mesaj doğrulama kodları üzerinden güçlü bütünlük denetimi ile sağlanır.
SSH-2'nin yeni özellikleri arasında, tek bir SSH bağlantısı üzerinden herhangi bir sayıda kabuk oturumunu çalıştırma yeteneğini sayılabilir.[20] SSH-2'nin üstünlüğü ve popülerliği nedeniyle, Lsh[21] ve Dropbear[22] gibi uygulamalar sadece SSH-2'ye destek vermektedirler.
1.99 sürüm
Ocak 2006'da, 2.1 sürümü oluşturulduktan sonra, RFC 4253, hem 2.0 hem de daha önceki versiyonları destekleyen SSH sunucularının versiyon 1.99 olarak adlandırılması gerektiğini belirtmiştir.[23] Bu gerçek bir sürüm değildir, fakat geriye dönük uyumluluk tanımlayan bir yöntemdir.
OpenSSH ve OSSH
1999 yılında, ücretsiz bir yazılım sürümü sunmak isteyen geliştiriciler, açık kaynak lisansı ile yayınlanmış en son sürüm olan 1.2.12 sürümüne geri döndüler. Björn Grönvall'ın OSSH'si daha sonra bu kod tabanından geliştirildi. Kısa bir süre sonra, OpenBSD geliştiricileri Grönvall'ın kodunu çatalladılar ve OpenBSD'nin 2.6 sürümü ile birlikte gelen OpenSSH'yi yaratarak kapsamlı bir çalışma yaptılar. Bu versiyondan, OpenSSH'yi diğer işletim sistemlerine bağlamak için bir "taşınabilirlik" dalı oluşturuldu.[24]
2005 itibarıyla, OpenSSH, çok sayıda işletim sisteminde varsayılan olarak gelen en popüler SSH uygulamasıydı. OSSH bu arada demode oldu.[25] 7.6 sürümüyle birlikte SSH-1 desteğini çeken OpenSSH, SSH-2 protokolünü geliştirmeye ve desteklemeye devam ediyor.
Kullanım alanları
SSH, çoğu Unix varyantı (Linux, Apple'ın macOS ve Solaris dahil BSD'leri) ve Microsoft Windows gibi pek çok platformda kullanılabilen bir protokoldür. Aşağıdaki uygulamalardan bazıları yalnızca belirli SSH istemcileri veya sunucuları ile kullanılabilen ya da uyumlu olan özellikler gerektirebilir. Örneğin, VPN yazmak için SSH protokolü kullanmak mümkündür, ama sadece OpenSSH sunucu ve istemci uygulamasıyla.
Uzak bilgisayardaki bir kabukta oturum açmak için (Telnet ve rlogin yerine)
Uzak bilgisayarda tek bir komut yürütmek için (rsh yerine)
Uzak bir sunucuya otomatik (parolasız) oturum açmak için (örneğin, OpenSSH[26] kullanarak)
Güvenli dosya aktarımı
rsync ile kombine olarak, dosyaları verimli bir şekilde yedeklemek, kopyalamak ve yansıtmak
Tam teşekküllü şifreli bir VPN olarak kullanmak için. Bu özelliği sadece OpenSSH sunucu ve istemci destekler.
Uzak bir ana bilgisayardan X iletmek için (birden çok ara ana bilgisayar aracılığıyla)
Web'i SOCKS protokolünü destekleyen SSH istemcileriyle şifrelenmiş bir proxy bağlantısı aracılığıyla taramak için.
SSHFS kullanarak uzak bir sunucudaki bir dizini yerel bir bilgisayarda dosya sistemi olarak güvenli bir şekilde kullanabilmek için.
Yukarıda açıklanan mekanizmalardan bir veya daha fazlası aracılığıyla sunucuların otomatik olarak uzaktan izlenmesi ve yönetimi için.
SSH'yi destekleyen bir mobil veya gömülü cihaz üzerinde geliştirme yapabilmek için
Güvenli kabuk özellikleri
1.com.ibm.cdb.platform.SshVersionSessionSkipLİSt
Oluşturulamayan oturumların SSH sunucularını sürümlerini gösterir. Bunun gibi sunucular var olduğunda, oturum algılayıcısı sıkıntısız bir şekilde sonlanmaktadır.
2.com.collation.SshLogInput
kabul edilen değer false olarak alınır.
Kullanılan değerler ise şöyledir: true veya false.
Değeri true olarak aldıysanız, SSH girişi günlüğe eklenir.
3.com.collation.SshWeirdReauthErrorList
Böyle bir özellik, eskiden keşif çalışmaları esnasında çalışan kullanıcı ismi ve parola ikililerinin yeniden kullanılmasına imkan sunmaktadır.
Windows sistemleri, kullanıma açık oturum açma denemeleri gelişigüzel kabul etmediğinden dolayı, bu özelliğe gerek vardır. Özelliğin Permission denied ayarları olması gerekir. Bu özellik bu şekilde kalması gerekir.[27]
Dosya aktarım protokolleri
Secure Shell protokolleri birçok dosya aktarım mekanizmasında kullanılır.
1998'de çıkan, SSH üzerinden Unix kabuk komutlarından evrimleşen FISH protokolü
Kontrol için SSH ve veri aktarımı için UDP portları kullanan FASP (ya da Aspera)
Mimarisi
SSH-2 protokolü iyi ayrılmış katmanlara sahip bir iç mimariye (tanımlanan RFC 4251'de tanımlanmıştır) sahiptir:
Taşıma katmanı (RFC 4253). Bu katman, ilk anahtar değişiminin yanı sıra sunucu kimlik doğrulamasını halleder ve şifreleme, sıkıştırma ve bütünlük doğrulaması yapar. Üst katmana, her biri 32.768 bayta kadar olan düz metin paketlerini göndermek ve almak için bir arayüz (daha fazlasına izin verilebilir) sunar. Aktarım katmanı ayrıca, genellikle 1 GB'lik veri aktarıldıktan sonra veya 1 saat geçtikten sonra, hangisi daha önce gerçekleşirse, anahtar yeniden değişimini düzenler.
Kullanıcı kimlik doğrulama katmanı ([rfc:4252 RFC 1310]). Bu katman, istemci kimlik doğrulamasını halleder ve bir dizi kimlik doğrulama yöntemi sunar. Kimlik doğrulaması istemci-güdümlüdür: bir parola sorulduğunda istek, sunucudan değil, SSH istemcisinden istenmiştir. Sunucu, yalnızca istemcinin kimlik doğrulama isteklerine cevap verir. Yaygın olarak kullanılan kullanıcı kimlik doğrulama yöntemleri şunlardır:
parola: parola değiştirilmesine de izin veren, doğrudan parola kimlik doğrulaması yapan yöntem. Tüm programlar bu yöntemi uygulamaz.
klavye-etkileşimli (RFC 4256): sunucunun bilgi girmek için bir veya daha fazla istek gönderdiği çok yönlü bir yöntemdir ve istemci bunları görüntüler ve kullanıcı tarafından girilen yanıtları geri gönderir. S/Key ve SecurID gibi tek kullanımlık şifre kimlik doğrulaması sağlamak için kullanılır. PAM, etkin bir şekilde parola doğrulaması sağlamak için temel ana bilgisayar kimlik doğrulama sağlayıcısı olduğunda bazı OpenSSH yapılandırmaları tarafından kullanılır, bazen yalnızca düz parola kimlik doğrulama yöntemini destekleyen bir istemciyle oturum açılamamasına neden olur.
SSH oturumlarına tek oturum açma yeteneği sağlayan Kerberos 5 veya NTLM gibi harici mekanizmaları kullanarak SSH kimlik doğrulaması gerçekleştirmek için genişletilebilir bir şema sağlayan GSSAPI kimlik doğrulama yöntemleri. Bu yöntemler genellikle OpenSSH'nin çalışan bir GSSAPI uygulamasına sahip olmasına rağmen, kuruluşlarda kullanılmak üzere ticari SSH uygulamaları tarafından uygulanır.
Bağlantı katmanı (RFC 4254). Bu katman, hangi SSH hizmetlerinin sağlandığı bilgisine göre kanal kavramı, kanal talepleri ve global talepleri tanımlar. Tek bir SSH bağlantısı, her biri her iki yönde de veri aktarımı yapan, aynı anda birden çok kanala ev sahipliği yapabilir. Kanal istekleri, terminal penceresindeki boyut değişikliği veya sunucu tarafındaki işlemin çıkış kodu gibi bant dışı kanala özgü verileri aktarmak için kullanılır. SSH istemcisi, bir genel istek kullanarak yönlendirilecek bir sunucu portu ister. Standart kanal türleri şunları içerir:
terminal kabukları için kabuk, SFTP ve exec istekleri (SCP transferleri dahil)
istemciden sunucuya aktarılan bağlantılar için direkt-tcpip
sunucudan istemciye aktarılan bağlantılar için yönlendirilmiş-tcpip
SSHFP DNS kaydı ([rfc:4255 RFC] 4255) ana makinenin kimliğini doğrulamaya yardımcı olmak için açık ana bilgisayar anahtar parmak izlerini sağlar.
Bu açık mimari, SSH'nin güvenli bir kabuğun ötesinde çeşitli amaçlarla kullanılmasına izin veren önemli bir esneklik sağlar. Taşıma katmanının işlevselliği tek başına Taşıma Katmanı Güvenliği (TLS) ile karşılaştırılabilir; kullanıcı kimlik doğrulama katmanı özel kimlik doğrulama yöntemleri ile büyük ölçüde genişletilebilir; ve BEEP'te olan ve TLS'de geçerli olmayan bir özellik olarak bağlantı katmanı, birçok ikincil oturumu tek bir SSH bağlantısına çoğaltabilir.
Geliştirmeler
Bunlar SSH ürünlerinin performans geliştirmeleri için tasarlanmıştır:
SCTP üzerinden SSH: bağlantı yönelimli taşıma katmanı protokolü olarak TCP yerine SCTP desteği.[28]
ECDSA: İmza için RSA veya DSA yerine elliptic curve DSA desteği.[29]
ECDH: Anahtar değişimi için düz Diffie–Hellman yerine elliptic curve Diffie–Hellman desteği.
1998'de, SSH 1.5 sürümünde, protokolün bu sürümünde kullanılan CRC-32'den kaynaklı yetersiz veri bütünlüğü koruması nedeniyle, şifrelenmiş bir SSH akışına yetkisiz olarak içerik sokulmasına izin veren bir güvenlik açığı tarif edilmiştir.[31][32] Çoğu uygulamada SSH Compensation Attack Detector[33] olarak bilinen bir düzeltme tanıtıldı. Bu güncellenmiş uygulamaların birçoğu, saldırganın root izni ile herhangi kodu çalıştırabilmesine izin veren yeni bir tamsayı taşması zafiyeti[34] içeriyordu.
Ocak 2001'de, saldırganların IDEA şifreli bir oturumun son bloğunu değiştirmesine izin veren bir güvenlik açığı keşfedildi.[35] Aynı ay, kötü amaçlı bir sunucunun bir istemci kimlik doğrulamasını başka bir sunucuya iletmesine izin veren başka bir güvenlik açığı keşfedildi.[36]
SSH-1, onu savunmasız hale getiren içsel tasarım kusurlarına sahip olduğundan, genel olarak geçersiz sayılır. SSH-1'e geri dönüş açıkça devre dışı bırakılmalıdır. Çoğu modern sunucu ve istemci SSH-2'yi desteklemektedir.
CBC düz metin kurtarma
Kasım 2008'de, tüm SSH sürümleri için, standart varsayılan şifreleme modu olan CBC kullanılarak şifrelenmiş bir şifreli metin bloğunun 32 bitlik düz metninin kurtarılmasına izin veren teorik bir güvenlik açığı keşfedilmiştir.[37] En basit çözüm, SSH'a saldırıya karşı direnç kazandırdığından CBC modu yerine CTR modu kullanmaktır.
Açıklanmamış güvenlik açıkları
28 Aralık 2014'te Der Spiegel, Ulusal Güvenlik Ajansı'nın SSH trafiğinin bazılarının şifresini çözebileceğini söyleyen muhbir Edward Snowden'in sızdırdığı gizli bilgileri yayınladı. Böyle bir süreçle ilgili teknik detaylar açıklanmadı.
ABD Hükümeti'nin SSH protokollerini heklediği doğrulandı
6 Temmuz 2017'de, hükûmet şeffaflığı aktivist örgütü WikiLeaks, CIA'nin Bilgi İşlem Merkezi'nin hem Windows hem de Linux işletim sistemlerinde SSH protokolünü kullanan “güvenli” iletişimlere nasıl girdiğini açıklayan ABD Merkezi İstihbarat Kurumu belgelerini yayınladı. WikiLeaks, CIA'nin BothanSpy ve Gyrfalcon programlarının (SSH kimlik bilgilerini engellemek ve genişletmek için tasarlanmış, ancak farklı saldırı sistemlerine sahip farklı işletim sistemlerinde çalışacan) resmi kullanım kılavuzlarını da ekledi.
BothanSpy, Microsoft Windows platformunda SSH istemci programı Xshell'i hedefleyen ve tüm etkin SSH oturumları için kullanıcı kimlik bilgilerini çalan bir implanttır.
Bu kimlik bilgileri, parola tabanlı kimlik doğrulaması yapılmış ise kullanıcı adı ve parola, açık anahtar kimlik doğrulaması kullanılıyor ise dosya adı ve gizli SSH anahtarıdır. BothanSpy çalınan kimlik bilgilerini CIA tarafından kontrol edilen bir sunucuya gönderebilir (böylece implant, hedef sistemdeki diske asla dokunmaz) ya da başka yollarla daha sonra exfiltrasyon için şifreli bir dosyaya kaydedebilir. BothanSpy, hedef makinede bir Shellterm 3.x uzantısı olarak kurulmuştur.
Gyrfalcon, Linux platformlarında OpenSSH istemcisini hedefleyen bir implanttır (centos, debian, rhel, suse, ubuntu). İmplant sadece aktif SSH oturumlarının kullanıcı bilgilerini çalmakla kalmaz, aynı zamanda tam veya kısmi OpenSSH oturum trafiğini de toplayabilir.
Toplanan tüm bilgiler, daha sonra exfiltrasyon için şifrelenmiş bir dosyada saklanır.
Hedef makinede CIA tarafından geliştirilen bir kök kiti (JQC/KitV) kullanılarak kurulur ve yapılandırılır.[38] Avantajları
SSH (Secure Shell) güvenli veri iletimi için kriptografik ağ protokolüdür. Ssh ile ağa bağlı olan iki bilgisayar arasında veri aktarımı güvenlik kanalı üzerinden güvensiz bir ağda yapılır. Bu durumda ağda Ssh ile haberleşen makinelerden biri ssh sunucusu diğeri ssh istemcisi olur. Bu protokol şartları SSH-1 ve SSH-2 olmak üzere iki önemli sürüm üzerinden birbirinden ayrılır.
Ssh kabuk hesabına erişim için Unix ve benzeri işletim sistemlerinde protokolün en iyi uygulaması olarak bilinir, ama aynı zamanda Windows üzerindeki hesaplara erişim için de kullanılabilir. Ssh Telnet ve diğer uzaktan kabuğa erişim yapan güvensiz protokollerin (Berkeley rsh ve rexec protokolü gibi) yerine güvenli veri iletimini sağlaması için tasarlanmıştır.
Tanımlama
SSH uzaktaki makineye bağlanıp kimlik kanıtlaması yapmak için açık anahtarlı şifrelemeyi kullanır ve bu sayede kullanıcıya sistemi kullanmasına izin vermiş olur. SSH kullanmanın birçok farklı yolu vardır. Birincisi otomatik olarak açık-gizli anahtar çifti üretme ve parolayı kullanarak yetki sahibi olmak.
Diğeri ise kimlik kanıtlaması için açık ve gizli anahtar çiftini manuel olarak üretmek, bu durum kullanıcılara ya da programlara özel bir parola kullanmadan sistemde kimlik kanıtlaması yapmayı sağlar. Bu durumda açık ve gizli anahtarı üreten kişi birbiriyle eşleşen bir anahtar çifti (gizli ve açık) üretmiş olur ve ürettiği gizli anahtarı kendinde muhafaza eder. Kimlik kanıtlaması yapılması gizli anahtara göredir ve gizli anahtar hiçbir şekilde ağ üzerinden başka bir yerdeki makineye gönderilmemelidir. SSH sadece makine üzerinde aynı kişiye ait gizli anahtara karşılık gelen açık anahtar olup olmadığını kontrol eder. SSH'ın tüm sürümlerinde açık anahtar geçerli sayılmadan önce bilinmeyen açık anahtarın doğrulanması önemlidir (açık anahtar sahibinin bilgisiyle ilişkilendirilmiştir).
Anahtar yönetimi
Unix benzeri sistemlerde, kullanıcıların ev dizininlerinde uzaktaki makineye bağlanamaya izin veren yetkili açık anahtarlar depolanır. Ev dizininde depolandığı yer ise ~/.ssh/authorized_keys dosyasıdır. Açık anahtar uzaktaki makine üzerinde mevcut olduğunda ve yereldeki makinenin gizli anahtarıyla eşleşdiğinde, istemci gizli anahtarını açmak için olan anahtarı doğru girerse uzaktaki makinede kimlik kanıtlaması yapılmış olur.
Aynı zamandan gizli anahtar standart olarak belirli bir yerde bulunur. Eğer bu anahtarın makine üzerindeki yeri değiştirildiyse anahtarın tam yolu komut satırından belirtilmelidir. (ssh komutu için -i parametresi kullanılarak). ssh-keygen kullanıldığında ise her zaman bir açık ve gizli anahtar çifti üretilmiş olunur.
SSH aynı zamandan parola tabanlı kimlik kanıtlamayı destekler. Bu durumda saldırganlar parola sorulduğu için parolayı araya girerek bulmaya çalışabilirlerdi. Ancak bu sadece uzaktaki makinede daha önce hiç kimlik kanıtlaması yapılmadıysa geçerli olur. Sadece bir kez bile uzaktaki makinede kimlik kanıtlaması yapıldığında SSH bu parolayı hatırlar ve parola ile kimlik kanıtlaması geçersiz olur.
Anahtar yönetimi için bazı komutlar
-A : Ana bilgisayar anahtarları, varsayılan anahtar dosyası yolu, boş bir parola, anahtar türü için varsayılan bitler ve varsayılan yorum ile oluşturulur.
-B : Belirtilen özel veya genel anahtar dosyasının özetini gösterir.
-C : Yorum sağlar.
-e : Bu komut, özel veya genel bir OpenSSH anahtar dosyasını okur ve seçenek tarafından belirtilen biçimlerden birinde bir genel anahtarı stdout'a yazar.
-g : Kayıtları yazarken genel DNS biçimini kullanır.
-i : Bu komut, şifrelenmemiş bir özel (veya genel) anahtar dosyasını seçenek tarafından belirtilen biçimde okuyacak OpenSSH uyumlu bir özel (veya genel) anahtarı yazdıracaktır.[40]
Kullanımı
SSH genellikle uzaktaki makinede oturum açma ve komut çalıştırma için kullanılır, fakat aynı zamanda tünellemeyi de destekler, TCP portları üzerinden taşınır ve X11 bağlantısı sağlar. SSH dosya gönderme işlemini SSH dosya transfer protokolü (SFTP) ya da güvenli kopyalama protokolüyle (SCP) yapar. SSH istemci-sunucu modelini kullanır.
Standart TCPportu olan 22 SSH bağlantısı için atanmıştır.
SSH istemci programı genenllikle bağlantının kurulması için SSH'ı arka planda (daemon olarak) çalıştırır. SSH iki yayıgın işletim sistemi olan Mac OS X ve pek çok GNU/Linux dağıtımında, OpenBSD, FreeBSD, NetBSD, Solaris ve OpenVMS mevcuttur. Özellikle, Windows az modern olan masaüstü/sunucu işletim sistemlerinden biri olarak varsayılan olarak SSH içermez.
SSH, bulut bilgisayarların bağlanma problemini çözdüğü için önemlidir, bulut tabanlı sanal makinenin internette güvenlik konularında açığa çıkabilecek problemlerini de önler. SSH tüneli internet üzerinde sanal makinelere güvenlik duvarı (firewall) sayesinde güveli bir yol sağlayabilir.
Tarihçesi ve gelişimi
Sürüm 1.x
Tatu Ylönen Finlandiya'daki Helsinki Üniversitesi'nde 1995'te araştırmacı olarak görev yapmıştır. Şimdi SSH-1 olarak bilinen protokolün ilk versiyonunu tasarlamıştır. SSH'ın amacı daha önceki rlogin, TELNET ve rsh protokollerinin (bu protokoller güçlü bir kimlik kanıtlama kuralı ya da gizliliği garantilemezler) yerine geçme olmuştur. Ylönen yaptığı çalışmayı ücretsiz olarak Temmuz 1995'te çıkardı ve bu yaptığı çalışma hızlıca popülerlik kazandı. İlerleyen zamanlarda 1995 sonlarına doğru, SSH kullanıcı sayısı 50 farklı ülkede 20000'lere ulaştı.
Aralık 1995'te ise, Ylönen SSH Communications Security'yi pazarladı ve böylece SSH geliştirdi. SSH yazılımının orijinal sürümü özgür yazılımların çeşitli parçalarında kullanıldı, örnek olarak GNU libgmp gibi, fakat sonraki sürümlerinde SSH Secure Communications'ı gittikçe artan patentli bir yazılım olarak geliştirdi.
2000'lere yaklaşıldığında 2 millyona yakın SSH kullanıcısı oldu.
Dikkate değer güvenlik açıkları
1998'de SSH 1.5'te güvenlik açığı olduğu tanımlandı. Protokolün bu versiyonunda CRC-32 kullanıldı. Bu güvenlik açığı şifrelenmiş SSH akışına veri bütünlüğü korumasının yetersizliği nedeniyle yetkisiz girişler yapılabilmesiydi. SSH Compensation Attack Detector tarafından yapılan birçok düzeltmeler sunuldu. Bu işlem güncellemelerinin pek çoğu tam sayı taşma zayıflığı içerir, bu durum ise saldırganlara arka planda çalışan SSH'ın haklarıyla (genellikle yönetici olarak) isteklerine göre kod çalıştırmaya izin verir.
Ocak 2001'de başka bir güvenlik açığı saptandı, bu ise saldırganların Uluslararası Veri Şifreleme Algoritması (IDEA) ile yapılan şifrelemede son bloğu değiştirmeye izin veren bir güvenlik açığıydı. Aynı ayda belirlenen başka bir güvenlik açığı ise kötü amaçlı sunuculara istemci yetkilendirmesini başka bir sunucunun yapmasına izin veren bir açıktı.
OpenSSH ve OSSH
1999'da, geliştiriciler SSH'ın özgür yazılım olan halini istediler ve bu yüzden orijinal SSH programının 1.2.12 olan sürümüne (bu sürümü özgür yazılım olarak çıkmıştı) geri döndüler. Björn Grönvall daha sonra OSSH'ı bu kod tabanıyla geliştirdi. Kısaca bundan sonra, OpenBSD geliştiricileri Grönvall'ın kodunu çatalladı ve geniş ölçüde bunun üzerinde çalıştılar, OpenSSH oluşturuldu ve OpenSD'nin 2.6 sürümüyle birlikte çıktı. Bu sürümde, OpenSSH'ı diğer işletim sistemlerine taşımak için alan oluşturulmuş oldu. 2005 itibarıyla, OpenSSH diğer işletim sistemlerinin büyük bir kısmıyla varsayılan olarak kurulu gelerek ve çok popüler olan SSH ile birleşerek tek uygulama oldu. Aynı zamanda OSSH ise artık kullanılmadı. OpenSSH'ın bakımı devam ediyor ve şimdi 1.x ve 2.0 sürümlerinin ikisini de destekliyor.
Sürüm 2.x
2006'da protokolün gözden geçirilmiş bir sürümü olan SSH-2 bir standart olarak kabul edildi. Bu sürüm SSH-1 ile bağdaşmayan bir sürümdü. SSH-2 güvenliği ve gelişmiş özellikleri SSH-1'in üzerindeydi. Artık daha iyi bir güvenliğe sahipti, örneğin Diffie-Helman anahtar değişimi ve mesaj üzerinden yetkilendirme kodları ile güçlü bir bütünlük kontrolü sağladı. SSH-2'nin yeni özelliği tek bir SSH bağlantısının üzerinde bir grup kabuk oturumu çalıştırmadır. SSH-2'nin üstünlüğü ve SSH-1'den fazla olan popülerliği nedeniyle bazı uygulamalar (Lsh ve Dropbear) sadece SSH-2 protokolünü destekler.
Zayıflıkları
Kasım 2008'de, SSH'ın tüm sürümlerinde teorik bir güvenlik açığı fark edildi. Bu şifrelenmiş metnin bir bloğundan düz metnin 32 bit üzerinde bir düz metin dönüşümüne izin veren bir güvenlik açığıydı.
OpenSSH
Bu durumda Standart OpenSSH yapılandırmasını kullanarak, saldırganların başarı olasılığı düz metnin 32 bitlik dönüşümü içindi. OpenSSH 5.2 ise bu tür güvenlik açıklarına karşı davranışları değiştirilmiş bir şekilde çıkarıldı.
Kullanıldığı yerler
SSH birçok platform için kullanılabilen bir protokoldür, bu platformlardan pek çoğu Unix türevleridir, bunun yanı sıra MicrosoftWindows tarafından da kullanılır. Bazı uygulamalar SSH sunucu ya da istemcileri ile uyumlu ya da sadece SSH'da mevcut olan özelliklere ihtiyaç duyabilirler. Örneğin SSH VPN'i uygulamak için kullanılabilir ama şu an sadece OpenSSH sunucu ve istemcisinin uygulaması mevcuttur.
Uzaktaki bir makine üzerindeki kabuğa giriş yapmak için
Uzaktaki bir makine üzerinde tek bir komut çalıştırmak için
Güvenli dosya iletimi için
rsync ile birleşiminden yedekleme yapma, dosyaların kopyalarını ya da yansılarını güvenli ve verimli bir şekilde almak için
Bir portu tünellemek ya da sevk etmek için (bu VPN ile karıştırılmamalı, SSH paketleri farklı ağlar arasında yönlendirir ya da iki broadcast alanını birine köprüler)
Tam teşekküllü şifrelenmiş VPN'i kullanmak için. Bu özelliği sadece OpenSSH sunucu ya da istemcilerinin desteklediğine dikkat edin.
Uzak makineden X'i ilerletmek için (birçok ara host sayesinde sağlanabilir)
SSH istemcilerinin desteklediği SOCKS protokolü ile şifrelenmiş vekil bağlantısı sayesinde webi taramak için
Uzak bir makine üzerinde dizinleri güvenli bir şekilde bağlamak için, yerel bilgisayarda kullanılan SSHFS gibi
Yukarıda tartışılan bir ya da birkaç mekanizma sayesinde, uzaktaki makineyi izlemeyi ve sunucu yönetimini otomatikleştirmek için
SSH'ı destekleyen taşınabilir ya da gömülü cihazların üzerinde geliştirme yapmak için
SSH kullanarak dosya iletim protokolleri
SSH protokollünü kullanarak dosya iletimi için birçok yöntem mevcuttur.
Güvenli kopyalama (SCP), bu protokol SSH üzerinde RCP'den geliştirilmiş
^Amies, A; Wu, C F; Wang, G C; Criveti, M (2012). "Networking on the cloud". IBM developerWorks. 14 Haziran 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Nisan 2018.
^Sobell, Mark (2012). A Practical Guide to Linux Commands, Editors, and Shell Programming (3rd Edition). Upper Saddle River, NJ: Prentice Hall. ss. 702-704. ISBN978-0133085044.
^Seggelmann, R.; Tuxen, M.; Rathgeb, E.P. (18–20 Temmuz 2012). "SSH over SCTP — Optimizing a multi-channel protocol by adapting it to SCTP". Communication Systems, Networks & Digital Signal Processing (CSNDSP), 2012 8th International Symposium on. ss. 1-6. doi:10.1109/CSNDSP.2012.6292659. ISBN978-1-4577-1473-3.
Daniel J. Barrett, Richard E. Silverman, and Robert G. Byrnes, SSH: The Secure Shell (The Definitive Guide), O'Reilly 2005 (2nd edition). 0-596-00895-3
Michael Stahnke, Pro OpenSSH, Apress 2005 1-59059-476-2
This article is based on material taken from the Free On-line Dictionary of Computing prior to 1 November 2008 and incorporated under the "relicensing" terms of the GFDL, version 1.3 or later.Şablon:FOLDOC