SSH
Ssh nedir?
Ssh kelime olarak ‘Güvenli Kabuk’ anlamına gelen ‘Secure Shell’ kelimesinin kısaltmasıdır. Ağ üzerinde haberleşme sırasında güvenli bir ortam sağlamayı amacıyla telnet veya rlogin gibi ağ üzerinden başka bir sunucuya uzakta bulunan başka bir makineye bağlantı sağlayan bir protokol aynı zamanda bu işlevi gerçekleştiren programa verilen genel isimdir. Yani ssh ‘e bir nevi şifrelenmiş telnet de diyebiliriz. Ssh bu iletişimi güçlü bir kriptoloji kullanarak yaptığı için telnet gibi protokollerden çok daha güvenlidir. Çünkü herhangi bir saldırganın veri aktarımı esnasında ağ üzerinden dinleme (sniff) yoluyla bilgiyi elde etmesi durumunda bilgi şifrelenmiş olduğu için orijinal bilgiye ulaşamayacaktır. Kısacası bir iletişimde güvenlik için temel unsurlar olan authentication (Kimlik Denetimi), encryption (Şifreleme), Integrity (Bütünlük) sağlar.
Neden Ssh?
- SSH'da bazı güvenlik problemleri bulunmuş olsa da, henüz verileri şifrelemede iyi bir
güvenlik aracıdır.
- Rsh-rcp veya telnet-ftp ikililerini de kullanmak mümkündür, ancak bunlar İnternet ve
belkide iç ağlar gibi, kullanılması güvenli olmayan ortamlar için uygun
olmayabilirler.Çünkü herhangi bir korsanın ağı dinleyip gidip gelen verileri ele
geçirmesi o kadar da zor değildir. Ssh güvenli olmayan bir ağ'da iki bilgisayar
arasında kriptolanmış bir bağlantı sağlamaktadır.
- Harici uygulamalar arasında ve açıkça farklı işletim sistemleri arasında nakledilen
verileri şifrelemede kullanılabilir. Ayrıca bu verileri sıkıştırabilir. Sıkıştırmak veya
şifrelemek için sıklıkla pop, ftp, http protokolleri ile kullanılır. Bu, örneğin, siz bir
sistem yöneticisi iseniz ve evden işe veya işten eve bağlanmak istiyorsanız çok faydalı
olur.
SSH Hangi Saldırılara Karşı Koruma Sağlar?
SSH aşağıdaki saldırılara karşı koruma sağlar:
• IP gizleme yöntemiyle gerçekleşen saldırılar.
• IP yönlendirme yöntemiyle yapılan saldırılar.
• Saldırganın server isimlerinin bulunduğu kayıtları kullanarak gerçekleşen saldırılar.
• İki makine arasındaki veri trafiğinin aradaki başka bir makine tarafından önünün kesilerek
verilerin değiştirilmesi
• İletişimin gerçekleştiği iki makine arasındaki herhangi bir sunucuda bulunan kötü niyetli
kişilerin verileri değiştirmesiyle geçekleşen saldırılar
• X11 sunucusundaki iletişim dinlenerek ve X doğrulaması temel alınarak gerçekleşen
saldırılar.
Aslında SSH protokolunü gerçekleşen saldırılara karşı koruma sağlamasındaki uyguladığı temel politika net üzerinden gelen hiçbir iletişime güvenmemesi ve bu iletişimi şifrelemesidir. Net üzerinden gerekli izni olmayan biri ancak SSH bağlantısının kesilmesini neden olabilir. Fakat gerçekleşen iletişim sırasındaki şifrelenmiş veri trafiğini çözemez. Buda paketlerin güvenli bir şekilde yerine ulaşması anlamına gelir.
Tüm bu şifrelemeler karşın kötü niyetli biri sisteme root kullanıcı hesabıyla giriş hakkı elde ettiği anda SSH protokolünü rahatlıkla geçebilir. Yine bu kötü niyetli kullanıcı home dizinine girdiği takdirde güvenlik yok olmuş demektir. Bu durum eğer home dizini NFS (Network File System) ile oluşturulmuş ise sıkça karşılaşılır.
Ssh’ ın tarihçesi:
Ağ üzerinden iletişimin başlamasından itibaren bu bilgi aktarımının güvenliği de problem haline gelmiştir. Genel olarak ağ güvenliği için yapılması gerekenler:
1. Ağ üzerinden şifre göndermekten kaçınmak,
2. Bağlı sistemlerde güçlü asıllama kullanmak,
3. Uzak komutları tam güvenlik içinde çalıştırmak,
4. Dosya transferini korumak,
5. Güvenliği zayıf olan X11 oturumlarının güvenliğini artırmak.
Ssh dan önce sunulan bazı çözüm yolları:
R-komutları : Bu komutlar şifreyi açık şekilde göndermez ancak "rhosts" mekanizması
güvenlik sorunlarına sebep olur.
Tek kullanımlık Şifreler : Sadece asıllamayı kontrol eder, veri akışını değil. Bu yöntemin
çekici bir yönü olmasına rağmen kullanım kısıtları yüzünden her yerde kullanılamaz.
Ş i frelenmiş (encrypted) telnet : Bu sadece telnet ile işe yarar. Bunun dışındakileri (X11 gibi)
kapsamaz.
Bu sunulan çözüm yolları tam güvenli iletişimi sağlamamaktadır.Tüm bunlara alternatif çözüm olarak SSH geliştirilmiştir. SSH-1 protokolü ve SSH1, ilk olarak 1995 yılında Helsinki teknoloji üniversitesinde araştırma görevlisi olan “Tatu Ylönen” tarafından geliştirilmiştir. Aynı yılın Haziran ayında SSH1 kaynak kodları ile birlikte özgür olarak dağıtılmaya başlamıştır.
SSH protokolünün özgür bir uyarlaması olan OpenSSH ,OpenBSD projesi çerçevesinde yürütülen SSH1 ve SSH2 protokollerini içeren yazılım takımıdır.,,
OpenSSH son özgür SSH versiyonu olan ssh1.2.12 den türetilmistir. Markus Friedl (Aaron
Campbell, Bob Beck, Niels Provos, Theo de Raadt, Dug Song) önderliğinde geliştirilen
OpenSSH projesi dünya üzerinde birçok yazılımcının katılımı ile iyi bir yol katetmiştir.
Göreceli olarak özgür yazılım projeleri arasında en fazla kullanılan yazılımlardan biridir.
Ssh ‘ın İşleyişi:
Ssh ın işleyişi bir sunucunun kontrolünde bir istemcinin şifreli olarak haberleşmesi mantığına dayanır. Örneğin kullanılan bilgisayardan belirlenecek dosyaları bazı sunuculara veya iş istasyonlarına kopyalamak ve daha sonra da onlara bağlanıp rpm ile program yükleme gibi bazı sistem ayarlarını değiştirici komutlar çalıştırmak ve bazen öncelikle çeşitli komutlar çalıştırıp daha sonra da bir takım dosyaları, ki bunlar çalıştırdığımız komutların sonucu oluşmuş dosyalar da olabilir, kendi bilgisayarımıza kopyalamak vb işlemleri ssh ile yapabiliriz. Bu yüzden ssh ı kullanabilmek için öncelikle istemcinin sunucu makinede bir kullanıcı hesabının ve kullanıcı şifresinin olması gerekir. İletişimin güvenli olması açısından istemcinin bağlanmak istediği sunucuya kimliğini ispatlayabilmesi gerekir. Bu ispatlama işlemi kullanılan ssh çeşidine göre farklılık gösterir. Bunun dışında bir de istemci programlarının birini kullanmaya ihtiyacımız olacaktır.

Bu ispatlama işlemi her ne kadar kullanılan ssh çeşidine de bağlı olsa da temel olarak aşağıdaki adımlarla yapılır:
- İlk önce istemci sunucuya ssh komutu ile sunucuya bağlantı isteği yollar.
- Sunucu, istemciye eğer hiç bağlanmadıysa bağlanmak istediğine emin olup olmadığını
sorar. Eğer istemci evet cevabı verirse sunucu ona daha sonra bağlandığınızda
bilgisayarınızı teşhis etmek amacıyla kullanılacak olan sunucunun adresi ve bir
anahtar verir.
- Eğer istemci makine anahtarını kabul ederse oturum anahtarı olarak kullanılmak üzere
256 bitlik rastgele bir sayı üretir ve bu sayıyı açık makine ve sunucu anahtarlarıyla 2
defa şifreleyerek sunucuya gönderir.
- Sunucu bu mesajı açar ve oturum anahtarını elde eder. Sunucu istemciye şifreli olarak
bir onay mesajı gönderir.

Ssh tarafından kullanılan anahtar türleri
Ssh protokolünün temeli şifrelemeye dayanır. Şifrelemenin temeli de anahtar kullanımına dayanır. Bu yüzden Ssh da kullanılan anahtar çeşitlerini görürsek ssh ın çalışma mekanizması daha iyi anlaşılır. Ssh da kullanılan (dört çeşit) anahtar türlerine bakalım:
· Oturum anahtarı : Simetrik şifrelemede tek anahtar kullanıldığı için içeriği bir tane
anahtardan oluşur. Bu anahtar, iletişim kanalının güvenliğini sağlamak için simetrik
şifreleme algoritması kullanılarak oluşturulur. Modern şifreleme ürünlerinde olduğu
gibi, bu anahtar rastlantısal ve kısa ömürlüdür. SSH 1.0' da, her oturum için bir anahtar
vardır ve her iki tarafta da bulunur. SSH 2.0' da, her iki tarafta farklı olan iki anahtar
bulunur.
· Kullanıcı anahtarı : Açık anahtar yöntemi kullanıldığı takdirde kullanıcı asıllaması
için kullanılır.Kullanıcı üretir ve sabit kayıt yeri olan diskte tutulur ve bu yüzdende
kalıcıdır.Genel ve özel anahtarın birleşmesinden oluşur.Haliyle asimetrik kriptolamada
kullanılır.Açık anahtarın ve gizli anahtarın (her ikisi de asimetriktir) derlemesinden
oluşur.
· Makina anahtarı : Sistemler arası asıllamada kullanılır. Kullanıcı anahtarının sunucu
tarafıında kullanılan versiyonudur Sunucu yöneticisi tarafından kurulum veya
ayarlanma esnasında üretilir ve sabit kayıt yeri olan diskte tutulur ve bu yüzdende
kalıcıdır.Genel ve özel anahtarın birleşmesinden oluşur.Haliyle asimetrik kriptolamada
kullanılır.
· Sunucu anahtarı : Ssh sürüm 1 de oturum anahtarının değişiminin güvenliği için
hafızada saklanır. Ssh sürüm 2de kullanılmaz çünkü bu güvenliği zaten Diffle-
Hellman protokolü tarafından sağlanır. Bir deamon tarafından oluşturulur ve her
çalıştırılmada ve düzenli olarak değişir. Genel ve özel anahtarın birleşmesinden
oluşur. Haliyle asimetrik kriptolamada kullanılır.

SSH İle Telnet Arasındaki Farklar
1)SSH bağlantının tüm içeriğini, ağ üzerinden gerçekleştirilebilecek tüm saldırılara karşı
güçlü bir kripto yöntemiyle şifrelerken Telnet protokolünde şifreleme yoktur ve iletişim açık
bir şekilde gerçekleştirilir.
2)Telnet protokolü sunucu üzerindeki bazı ortamsal değişkenler üzerindeki ayarların
değiştirilebilmesine olanak sağlar. Telnet’ de sunucu üzerindeki ayarları sunucuya komut
gönderilerek değiştirilebilir. SSH ve bazı modern Telnet sunucuları bunu desteklemez. Bu
durumun en önemli nedeni ise sunucu üzerindeki bazı ayarların değiştirilmesinin güvenlik
problemlerine neden olabilmesidir.
3)SSH ile ilgili bir diğer önemli özellik ise bağlanılmak istenen sunucuya şifre girme
zorunluluğu olmamasıdır. SSH buna imkan sağlar. rlogin protokolü de şifresiz bağlantıya
izin verir fakat bu işlemi güvensiz bir şekilde gerçekleştirir. SSH bunu daha güvenli bir
şekilde yapar.
4)Son olarak SSH sunucuya bağlanmanızı ve otomatik olarak komut göndermenizi sağlar. Bu
şekilde gönderilen komut sunucu tarafında işletildikten sonra bağlantı kesilir.
Ssh Sürümleri
Genel olarak ssh protokolünün kimlik doğrulama işleminin basamaklarını ve kullanılan anahtar çeşitlerini gördükten sonra ssh ın iki ayrı sürümünü görelim.Bu iki protokol birbirlerinden tamamen denilebilecek kadar farklıdır:Bunlar:
1)SSH Sürüm 1
2)SSH Sürüm 2
Bu sürümleri ayrı ayrı ele alalım:
1)SSH Sürüm1
SSH Sürüm 1 in kullandığı yöntemleri üç ana başlık altında toplayabiliriz:
1)Birinci yönteminde, iki birbirine benzer mantıkla çalışan iki ana türü vardır .Bunların ilki bağlanmak isteyen makinenin ismi sunucunun /etc/hosts.equiv veya /etc/ssh/shosts.equiv dosyalarından birinde olup olmadığına bakılması ve istemci makinede çalışan kullanıcı adı ile bağlanmak isteyen kullanıcı adı aynıysa, kullanıcının sisteme girmesine izin verilmesi ilkesine dayanır.İkinci olarak Kullanıcının ev dizinine bakılır.Eğer .rhosts veya .shosts dosyaları burada mevcut ise ve istemci makinenin adı ve bu makinedeki kullanıcı adı bu dosyalardan birinde var ise, yine kullanıcının sisteme girmesine izin verilir. Genelde bu tür bir kimlik doğrulamaya sunucu tarafından izin verilmez çünkü güvenli değildir.
2) İkinci yönteme baktığımızda bu yöntemin birinci yönteme RSA algoritmasını kullanarak kimlik denetimi eklenmiş versiyonu olduğunu görürüz. Sunucuya ilk bağlantı gerçekleştirildikten sonra $HOME/.rhosts, $HOME/.shosts, /etc/hosts.equiv veya /etc/ssh/shosts.equiv dosyalarına bakılır.Eğer eğer erişime $HOME/.rhosts, $HOME/.shosts, / etc/hosts.equiv veya /etc/ssh/shosts.equiv tarafından izin verilir ve sunucu tarafından kullanıcıya atanan anahtar (istemcinin anahtarı) tekrardan sunucu tarafından doğrulanabiliyorsa bu kullanıcının oturum açarak sisteme girmesine izin verilir. Bu yöntem daha garantili ve kontrollü bir yöntem olduğu için IP kandırmaca, DNS kandırmaca ve yönlendirme kandırmacanın sebep olduğu güvenlik açıkları engellenmiş olur.
3) Üçüncü yöntemde ise kimlik denetiminde tam bir açık anahtarlı kriptolamaya ve haliyle RSA ya dayalı bir kimlik denetimi kullanılır. Şimdi açık anahtarlı sistemlerden kısaca bahsedelim:
Açık Anahtarlı Kriptolama ve Çalışması
Asimetrik kriptografi, yada açık anahtar kriptografi, biri kriptolama diğeri de dekriptolamada kullanılmak üzere iki farklı anahtar kullanır. Bunun sebebi ise simetrik şifrelemede tek bir anahtarın kullanılması nedeniyle tek bir anahtarın güvenliğini sağlama zorluğudur.
Bilgiyi kriptolamada kullanılan anahtara açık anahtar (public key) adı verilir. Açık anahtar sahibi tarafından herkese yayımlanabilir. Bilgiyi dekriptolamada kullanılan anahtara özel anahtar (private key) ve gizli tutulur. Anahtar çiftlerini üreten algoritmaların matematiksel özelliklerinden dolayı açık-gizli anahtar çiftleri her kişi için farklıdır, diğer bir deyişle her kullanıcının açık-gizli anahtar çifti yalnızca o kullanıcıya özeldir. Ayrıca şifre çözüm anahtarı (en azından makul bir zaman dilimi içerisinde)şifre anahtarından hesaplanamaz. İşlem adımları şöyledir:
1. Her ağdaki her son sistem, mesaj alındığında şifreleme ve de şifreleme için kullanacak
olduğu anahtar parçasını yaratır.
2. Her sistem, şifreleme anahtarını herkesçe erişilebilecek bir dosya ya da yazmaç
içerisine kaydederek paylaştırır. Bu anahtarın, açık olan kısmıdır (public key). Özel
anahtar saklı tutulur.
3. Eğer, A, B`ye bir mesaj yollamak isterse, mesajı B`nin açık anahtarını kullanarak
şifreler.
4. B, mesajı aldığında, bu mesajı kendi özel anahtarını kullanarak de şifre eder. Diğer hiçbir
alıcı mesajı de şifreleyemez, çünkü mesajı de şife edecek olan özel anahtarı sadece B bilir.
5. Benzer olarak, açık anahtarda eğer bilgi sadece eğer kendisine ait özel anahtar ile
kriptolanmışsa açabilir. Bilgiyi göndermeden önce kendi özel anahtarınız ile
kriptolayabilirsiniz. Sizin açık anahtarınızın bu mesajın açılıp okunmasında kullanılabileceği
bilindiğinden mesajı gizli tutmak için yeterli değildir. Fakat mesajı alan sizin açık anahtarınız
ile açarsa onun sizin özel anahtarınız ile kriptolandığına emin olabilir.
Açık anahtarlı kriptolamadan kısaca bahsettikten sonra üçüncü yöntemimizi anlatmaya devam edelim. Sunucu genel anahtara sahip iken, özel anahtar sadece kullanıcının kendisinde bulunur. $HOME/.ssh/authorized_keys dosyası ve her satırı bir anahtar içermekle beraber sisteme bağlı olan bütün kullanıcıların genel anahtarlarını listeler ve $HOME/.rhosts dosyasına karşılık gelir. Kullanıcı oturum açmak istediği zaman, ssh kimlik denetimi için hangi anahtar çiftini kullanmak istediğini sunucuya bildirir. Sunucu bu anahtarın geçerli olup olmadığına bakar, şayet geçerli ise kullanıcıya (aslında kullanıcı adına çalışan ssh'a) kullanıcının genel anahtarı ile şifrelenmiş bir kimlik sorgusu, rasgele bir sayı gönderir. Şifreli kimlik sorgusu sadece uygun özel anahtar ile çözülebilir. Kullanıcının istemcisi bu kimlik sorgusunu kullanıcının özel anahtarı ile çözer, böylece uygun özel anahtarın varlığını özel anahtarı sunucuya yollamadan veya göstermeden ispatlar. Böylece kendi özel anahtarını iletişim ortamına sokmayarak özel anahtarını daha güvenli olmasını sağlar.
Ssh RSA ile kimlik denetimini otomatik olarak destekler. Kullanıcı kendi anahtar çiftini sshkeygen komutu ile yaratır. Bu işlemin ardından özel anahtar $HOME/.ssh/identity dosyası içine, genel anahtar ise $HOME/.ssh/identity.pub dosyası içine kaydedilir. Sonra kullanıcının genel anahtarını sunucunun genel anahtarlar dosyası olan $HOME/.ssh/authorized_keys dosyasına kaydedebilmesi için kullanıcının yapması gereken, $HOME/.ssh/identity.pub dosyasını bağlanmak istediği makinede bu dosyanın içine kopyalamaktır. Bundan sonra kullanıcı şifre girmeden karşı makineye bağlanabilir. RSA yöntemi diğer iki yönteme göre çok daha güvenilirdir.
Eğer bu denetimin herhangi bir aşamasında bir problem veya hata verirse sistem kullanıcıya parola sorar. Kontrol için ana makineye gönderilir. Zaten sistemde a’dan z’ye bütün gönderilen ve alınan mesajlar şifrelendiği için ağı dinleyen herhangi bir üçüncü kişi parola şifrelenmiş olduğu için orjinaline ulaşamaz.
2)SSH Sürüm2
SSH sürüm 2 nin üç katmandan oluştuğunu görürüz . Bunlar:
1) SSH Ulaşım Katmanı Protokolü (SSH-TRANS) Ulaşım katmanı, bütünlüğü, şifrelemeyi,
sıkıştırmayı ve sistemin yetkilendirmesini sağlar.
2) SSH Yetki Protokolü (SSH-AUTH) Yetkilendirme katmanı yetkilendirmeyi sağlar
( şifreler,açık anahtarlar )
3) SSH (Bağlantı Protokolü (SSH_CONN) Bağlantı katmanı, tüneli (kabuk, SHH-agent,port
yönlendirme, akış kontrolü) yönetir.
SSH Sürüm 2 nin Kullandığı Asıllama Yöntemleri
Ssh Sürüm 2 de ssh sürüm 1 e benzer kimlik denetimi yöntemleri kullanmaktadır. Bunlar:
1)İstemci ilk olarak konak tabanlı kimlik denetimi ile uzaktaki makineye erişmeye çalışır. Erişemezse ikinci yönteme geçer.
2)İkinci yöntem birinci sürümde kullanılan üçüncü yöntemin hemen hemen aynısıdır. O yöntemden tek farkı şifrelemede RSA ya alternatif olarak DSA algoritmasının da kullanılabilmesidir. İstemci oturum tanıtıcısını $HOME/.ssh/id_dsa veya $HOME/.ssh/id_rsa dosyalarında bulunan özel anahtarı ile imzalar ve şifreli metin sunucuya gönderir. Sunucu, bu imza ile eşleşen genel anahtarın $HOME/.ssh/authorized_keys dosyasında olup olmadığına bakar. Sunucunun istemciye izin verebilmesi için Hem anahtarın listede bulunması hem de imzanın doğru olması gerekir. Oturum tanıtıcı sadece sunucu ve istemci tarafından bilinen ortak Diffie-Hellman değerinden türetilir. Bazı MacOS tm ya da Windows tm istemcileri bu anahtarları üretecek programlara sahip değildir. Bunun için önce bir Unix istemcide bunları üretip sonra diğer istemcilere kopyalanmalıdır. Ama sistem bu yöntemi desteklemiyorsa veya kimlik denetimi başarısız olursa üçüncü yönteme geçilir.
3)Üçüncü yöntem birinci sürümde de başvurulan bir yöntemdir. İstemciden şifre istenir ve istemciden alınan şifre şifrelenip sunucuya gönderilir. Eğer doğruysa istemci sisteme girebilir eğer bunda da bir problem çıkarsa istemci sisteme giremez.
Asıllamaya Yardımcı Öğeler:
ssh-agent
Sistemin güvenliği asimetrik şifrelemeyi göz önüne alırsak % 90 oranında özel anahtarın güvenliğinden geçiyor. Şifreli sistem olduğu halde herhangi bir nedenden dolayı gizli anahtarın başkalarının eline geçmesi imkansız değildir. Bir kişinin gizli anahtarını koruyamamasının bir nedeni örneğin her bağlantı kurulduğunda anahtarın tekrar girilmesi olabilir. Bağlantı arka planda çalışan scriptlerle kurulduğunda, anahtar kullanılamaz.Çaresi SSH ajanı(ssh-agent)'dır.Bu servis, sizin tarafınızdan çalıştırılır ve sizin kimlik bilgilerinizi (kullanıcı ismi/makina ismi/geçiş deyimi) saklar, bağlantı gerektiğinde bu bilgileri sizin için gönderir.İstemci tarafında, şifre sadece bir defa sorulur.
"ayrıntı" modu
Bazen bağlantı kullanıcının bilmediği bir sebepten dolayı kopar. Bu durumlarda -v (verbose/ayrıntı modu) seçeneğini ssh komutuna ekleyin. Bu durumda birçok ayrıntılı ileti alacaksınız. Birçok durumda giriş yapamamanız ve bağlantı kopmasının sebebini bulabilirsiniz.
Ssh Sürüm 2 nin Kullandığı Şifreleme Algoritmaları
(Sistem kendisinin gizlilik ilkesini bu algoritmaları kullanarak sağlar) Asimetrik şifreleme için, sürüm 2 için RSA'yı veya DSA'yı seçebiliriz ve sürüm 1 için sadece RSA'yı seçebiliriz. Tarihsel olarak, bazı ülkelerde RSA patentli olduğundan DSA kullanılacaktı.2000 yılının yazı sonunda RSA'nın kullanımı serbestleştiren kısıt ortadan kalkmış oldu.
Simetrik şifreleme için ise birçok seçenek vardır. Protokol, tek bir ortak algoritma kullanmaya zorlar :
Üç anahtarlı üçlü-DES.
Eğer sunucu ve iştemci bağlantı kuramazlarsa bu yöntemi kullanırlar. 3DES, en az performanslı algoritma olduğundan, önce daha iyi bir algoritma kullanmayı denerler. Bazı gereksiz ve eski (arc4,DES,RC4...) algoritmaları bir kenara koyarsak SSH 2.0 tarafından desteklenen şifreleme algoritmaları aşağıdadır :
· IDEA – cbc : 3DES'den daha performanslıdır.Lisans için bazı şartları vardır (Unix
versiyonlarında neredeyse default algoritmadır.)
· Arcfour : RC4 ile uyumludur.
· Blowfish – cbc : Çok hızlı ve güvenlidir.
· AES: yeni standart (DES yerine gelmiştir).Eğer her iki tarafta da varsa bunu kullanın.
Bu iş için yapılmıştır.
· Twofish
· Cast128
Ssh Sürüm 2 nin Kullandığı Mesaj Asıllama Algoritmaları
(Sistem kendisinin bütünlük ilkesini sıkıştırma algoritmalarını kullanarak yapmıştır.)
Mesaj asıllama iki yönde birbirinden bağımsız yapılır ve farklı algoritmalar kullanılabilir. Anahtar değiş-tokuşu esnasında kullanılacak mesaj asıllama algoritmaları da karara bağlanır. SSH 2.0 tarafından desteklenen mesaj asıllama algoritmaları aşağıdadır :
· None : No MAC
· Hmac-md5 : HMAC-MD5
· Hmac-sha : HMAC-SHA
· Md5-8 : MD5 anahtarının ilk 8 sekizlisi + veri + anahtar
· Sha-8 : SHA anahtarının ilk 8 sekizlisi + veri + anahtar
· Sha : Anahtarın SHA’ sı + veri + anahtar
MAC : Mesajın kendisi, 32 bit’ lik bir sıra numarası, gizli ve ortak bir bilgi kullanılarak hesaplanır.
Ssh Sürüm 2 nin Kullandığı Sıkıştırma Algoritmaları
Sıkıştırma iki yönde birbirinden bağımsız yapılır ve farklı sıkıştırma algoritmaları kullanılabilir. Anahtar değiş-tokuşu esnasında kullanılacak sıkıştırma algoritmaları da karara bağlanır. SSH 2.0 tarafından desteklenen sıkıştırma algoritmaları aşağıdadır :
· None : Sıkıştırma yok.
· Zlib : GNU ZLIB sıkıştırma algoritması
SSH Sürüm 1 ve 2 Arasındaki Teknik Farklar:
| SSH sürüm 1 | SSH sürüm 2 |
| Monolitik ( bütünleşik ) dizayn | Yetkilendirmeyi, ulaşımı ve bağlantıyı katmanlara ayırma |
| CRC32 aracılığı ile bütünleşme (güvenli değil) | HMAC (hash şifrelemesi) ile şifreleme |
| Her oturum için yalnız bir oturum | Her oturum için sınırsız oturum sayısı |
| Sadece simetrik gizli sistem ile anlaşma, her iki tarafta yalnız bir anahtar ile tanımlama | Daha ayrıntılı anlaşma ( simetrik gizli sistem, açık anahtar, sıkıştırma, ...) ve ayrı oturum anahtarları, her iki tarafta sıkıştırma ve bütünleşme |
| Açık anahtar için sadece RSA algoritması | Açık anahtar için RSA ve DSA algoritmaları |
| İstemci tarafından gönderilen oturum anahtarı | Oturum anahtarı için Diffle-Hellman protokolü aracılığıyla anlaşma |
| Oturum anahtarı bütün oturum boyunca geçerli | Yenilenebilir oturum anahtarı |
Ssh ile sisteme girmeyi mekanizma olarak gördükten sonra şimdide bazı kodlarını görelim:
Ssh ile İlgili Temel Uygulamalar:
ssh ile uzaktan erişim
rlogin veya telnet yerine daha güvenli olan ssh kullanılabilir:
Yapılandırmanıza göre geçişsözcüğü veya geçişcümlesi girmeniz gerekecektir. Eğer, giridiğiniz bilgiler doğru ise, helvetica.fonts.de bilgisayarına erdal kullanıcısı ile bağlanmış olacaksınız. ssh komutunun gereksinimlerinize göre çeşitli seçenekleri vardır. Bunun için ssh'nın man sayfasına bakabilirsiniz.
Ssh kullanarak komut çalıştırmak:
Uzaktaki bir bilgisayarda ssh kullanarak komut çalıştırmak da mümkündür:
ssh
erdal@helvetica.fonts.de df -H
Komutun kullanımı uaktaki bilgisayara erişim ile öok benzeşmektedir. Tek fark, bilgisayara adından sonra çalıştırılacak komutun (Örneğimizde 'df -H') yazılmasıdır. Komutun çıktısı yerel bilgisayarda görüntülenecektir
Uzakataki bilgisayara geçiş sözcüğü kullanmaksızın bağlanmak
Geçişsöcüğü kullanmak yerine genel/özel (public/private) anahtar çifti kullanılabilir. Bunun için öncelikle anahtarlarınızı yaratmanız gerekmektedir. ssh-keygen programı ile anahtarlarınızı yartmanız mümkündür:
ssh-keygen -b 1024 -t dsa
ssh-agent, arka planda çalışan ve özel anahtarları saklayarak sizin yerinize otomatik olarak
kullanan bir araçtır. Programı aşağıdaki gibi çalıştırmak mümkündür:
ssh-agent $BASH
Özel anhtarlarınızı eklemek için
ssh-add .ssh/id_dsa
veya
ssh-add .ssh/identity
komutları kullanılabilir. id_dsa DSA tipli özel anahtar, identity ise RSA1 tipli özel anahtardır. Bunlar, ssh-keygen programını kullanırken benimsenmiş değer olarak yaratılan dosya isimleridir. ssh-add anahtarları ssh-agent'a eklemeden önce geçiş cümlenizin girilmesini isteyecektir.
Eklenmiş anahtarlarların listesini aşağıdaki komutla alabilirsiniz:
ssh-add –l
Eğer, anahtarınızı yüklediğiniz bilgisayara tekrar bağlanırsanız, hiçbir şey girmeden bağlantı sağlanmış olur! ssh-agent kimliklendirme işlemini yerine getirmiş olacaktır.
Port Yönlendirme, Tüneller
SSH, SSH oturumunda her TCP veri akışının yönlendirmesini "tünel" aracılığıyla yapabilir. Veri akışını, istemci ve sunucu portlarını yönetmek yerine, bağlantı sırasında oluşturulan tünel ile yapar (takip eden diyagrama bakınız). X11 protokolü için fazladan güç harcamadan yapılır. Diğer akışlar için, her ikli tarafta komut satırı seçenekleri vardır:
· Sunucu ve istemci arasında doğrudan bağlantı

(örnek: user@alice%telnetbob.org)
· Yerel port yönlendirme(istemciden sunucuya)

örnek:user@alice% ssh -L 1234:bob.org:143 bob.org
Bu sistem, aliceçoeg'dan IMAP sunucusu olan bob.org'a ulaşımı sağlar.Dışarıdan yapılacak bağlantılar engellenecektir.Bağlantılar sadece alice.org üzerinde çalıştırılan IMAP istemcisinden yerel makinelerin 1234. portuna yapılabilir.
o (1) alice.org üzerindeki kullanıcı, SSH tünelini (bağlantısını) açar.
o (2) alice.org üzerindeki kullanıcı, istemcinin yerel IMAP'ini yerel makinenin
1234. portuna erişecek şekilde ayarlar.
· Uzaktaki portu yerel porta yönlendirme

örnek: root@alice% ssh -R 1234:bob.org:143 bob.org
Bu örnek de yukarıdakiyle aynıdır ancak uzak makinedeki port yönlendirilmiştir. Sadece root kullanıcı bu komutu kullanabilir ancak bütün kullanıcılar oluşturulan tüneli kullanabilir.
SSH'in bu özelliği bazen "zavallılar için tünel" diye adlandırılır. Buradaki zavallılığın anlamı, istemci tarafında yönetim yapamaktır. Sadece belirli durumlarda yerel portlar (port > 1024) çok az haklarla yönlendirilebilir.Diğer yönden, bazı haklar verilmiş prot yönlendirme yapmak için root hesabına ya da root haklarına sahip bir kullanıcı olmak gerekir. IP ile olduğu gibi, herşeyi herşeyin içine koymak mümkündür. Sadece TCP akışını değil, PPP bağlantısını da yönlendirebilirsiniz. Bu IP içinde "gerçek" IP tüneli yapmamıza izin verir (şifrelenmiş olduğundan güvenlidir)
İlk akılda tutulacak şey telnet akışını yönlendirmek: Bu gereksiz görünebilir, SSH zaten telnet yerine bir bağlantı sunuyor. Bu yöntemle istenilen istemciye ulaşılabilir çünkü SSH, Windowstm ve MacOS tm gibi ortamlarda çalışmıyor olabilir. Örneğin,"Mindterm"'ün "terminal emülasyonu" (Java'nın SSH istemcisi, bütün modern sistemlerde çalışır) Java'nın performans düşüklüğünden yakınır:Bu istemciyi sadece SSH tüneli oluşturmak için kullanabilirsiniz. Aynı şekilde, "xterm" gibi ( örneğin SSH'in otomatik X11 yönlendirmesi kullanarak) uzak bir istemci başlatarak, SSH'i Xterminallerde kullanabilirsiniz.
Tünel, veri akışı -veriyi tüneli başlatan kişi göndermiyor olsa bile- olduğu sürece açık kalır. Bu yüzden "sleep" komutu yeni TCP bağlantısını yönlendiren SSH tüneli açarken yararlı olur.
% ssh -n -f -L 2323:serveur.org:23 serveur.org sleep 60
% telnet localhost 2323
... welcome to serveur.org ...
İlk komut bir tünel açar, sunucuda sleep 60 komutunu çalıştırır ve yerel 2323. portu uzaktaki 23. porta (telnet) yönlendirir. İkinci komut, yerel 2323. portta telnet istemcisi çalıştırır ve sunucuya bağlanırken şifrelenmiş tüneli kullanır. Sleep komutu bir dakika sonra duracaktır. Telnet komutunu çalıştırabilmek için sadece bir dakikanız var.Ama tünel son istemci işini bitirene kadar açık kalacaktır.
Ssh Güvenliğini Artıracak Önlemler:
Son zamanlarda SSH protokolüne karşı yapılan saldırılar artmıştır. Eğer bir SSH sunucu çalıştırıyorsanız sistem loglarında sunucunuzdaki SSH servisine yapılan atakları görebilirsiniz. Bu ataklar genellikle SSH sunucudaki zayıf parolalarla korunmuş sistem hesaplarını ele geçirmek için yapılır. Bu tip ataklara birçok farklı şekilde önlem alınabilir. Kompleks çözümlere kaçmadan yapılacak birkaç basit ayarlar bu tip saldırıların %90’na karşı doğal koruma sağlanmış olur. Bu doğal korumalar;
· Bazı tür ataklardan korunmak için Denyhost, Fail2ban, Sshban, Blokhosts, Blocksshd,
Breakinguard isimli uygulamalar kullanmak.
· Kullandığınız OpenSSH sürümünün güncel olmasına özen göstermek.
· Çok özel bir gereksinimiz yoksa SSH sunucunun portunu 22 den farklı bir porta
almak.
· Sisteme erişim yetkisi vermek istediğiniz kullanıcıları yapılandırma dosyasında
belirtmek.
· Sisteme root olarak erişim izni vermemek
· Mümkünse sisteme parola ile girişi yasaklayıp erişimleri anahtarlara aracılığı ile
yapmaya çalışmak.
· SSH erişimini tüm internete açmayın. Varsa sabit bağlantınız sadece belirli IPlere
erişim açın. Herhangi bir firewall kullanarak ya da hosts.allow/hosts.deny dosyaları
kullanarak yapmak gibi önlemler alınabilir.
KAYNAKLAR
1)http://www.olympos.org/article/articleview/2047/1/2/hedef_ssh
2)http://www.linuxfocus.org/Turkce/May2001/article202.shtml
3) http://www.linuxfocus.org/Turkce/March2003/article273.shtml
4) http://www.belgeler.org/man/man1/man1-ssh.html
5)http://guvenlik.metu.edu.tr/belge/SSH/
6) http://www.ulakbim.gov.tr/dokumanlar/webtasarim/webcgiguvenlik.uhtml?webcore_pf=1
7) http://www.cs.itu.edu.tr/~orencik/UlasimKatmaniGuvenlikIletisimKurallari.doc
8) http://tr.wikipedia.org/wiki/SSH
9) http://www.linuxfocus.org/Turkce/January2003/article278.shtml
10) http://www.bim.iku.edu.tr/bilgi/guvenlik.asp?mid=6
Hazırlayan : Kübra Adalı
- Yorum yazmak için giriş yapın veya kayıt olun