randomart etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
randomart etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

7 Mayıs 2017 Pazar

SSH sunucusuna nasıl güveniyoruz?

SSH ve HTTPS bir çok yönden benzeyen protokoller. Daha önce HTTPS hakkında yazdığım için benzer şeyleri tekrar etmek yerine SSH'ın temel bir farkından bahsetmek istiyorum.

Bir SSH bağlantısı için istemci ve sunucu önce selamlaşıyor, ardından sunucu sertifikasını gönderiyor, istemci sertifikayı onayladıktan sonra sertifika içindeki açık anahtarla bir oturum anahtarı oluşturuluyor ve iletişim bu anahtarla şifrelenerek yapılıyor. HTTPS ile olan bu benzerliğin en önemli farkı sertifikayı onaylama kısmı oluyor. HTTPS için kullanılan sertifikalar çoğunlukla güvenilen Sertifika Otoriteleri (CAs) aracılığı ile üretildiğinden tarayıcılarımız sertifikaları onaylamak için onları kolaylıkla kullanabiliyor. SSH için kullanılan sertifikalar ise hemen hemen her zaman sunucu tarafında kendinden imzalı bir şekilde üretiliyor. SSH bağlantısının bütün güvenliği bu sertifikanın güvenilir olması üzerine kurulu olduğundan istemcinin bu sertifikayı bir şekilde onaylaması gerekiyor. SSH istemcilerinin sertifikaları onaylamak için farklı seçenekleri var:

Sunucu anahtarının parmak izinin kontrolü

Bir SSH sunucusuna bağlanmak için ilk isteği yaptığımızda aşağıdaki gibi bir durumla karşılaşıyoruz.


Bu aşamada eğer sunucu anahtarının parmak izini bilmiyorsak onaylayabileceğimiz bir şey de yok demektir. İlk aşamada "8iz5L6iZxKJ6YONmad4oMbC+m/+vI9vx5C5f+qTTGDc" gibi bir ifadenin ezberlenmesi imkansız gibi görünse de yapılamaz değil ama oldukça zor olduğunu kabul edelim.

Randomart kullanmak

Sunucunun anahtarının parmak izi yerine ondan üretilmiş bir konsol görselini akılda tutmak daha kolay bir seçenek. Eğer ssh'ı "-o VisualHostKey=yes" parametresiyle kullanırsak aşağıdaki gibi bir görsel görüp onu onaylayabiliriz:


Hem sunucu anahtarının parmak izi hem de ondan oluşturulan bu görsel tek yönlü fonksiyonlar kullanılarak üretildiklerinden tamamen aynısı değil de çok küçük (mesela tek karakterlik) bir farkla üretilemezler. Yani tamamını hatırlamasak bile genel olarak aklımızda tutarak bile sertifikayı onaylayabiliriz aslında.

DNS kullanarak

Sunucu anahtarının parmak izinin doğruluğunu bizim yerimize onaylayabilecek bir mekanizma olması işimizi çok kolaylaşmaz mıydı? Sertifikaları kendimiz oluşturduğumuz için bir CA'dan yardım alamıyoruz ama SSH bağlantısını makine adıyla yapıyorsak mecburen kullanmak zorunda olduğumuz DNS sunucuları burada imdadımıza yetişiyor. Makine adına karşılık gelen IP adresini nasıl DNS sunucusuna sorabiliyorsak aynı şekilde sunucu anahtarının parmak izini de sorabiliriz. Bu işlemi de "-o VerifyHostKeyDNS=yes" parametresiyle yapıyoruz. Eğer sunucumuzla ilgili böyle bir DNS kaydı girilmişse aşağıdaki gibi bir cevap alırız sunucudan:


DNS sunucusuna eklenecek tek satırlık bir girdi ile kullanıcılarımıza bu imkanı sunabilecekken neden kullanılmıyor bilemiyorum doğrusu. Belki bu yazıyı okuduktan sonra siz kullanırsınız ;)

Bu yöntemi kullanırken DNS sorgularının güvenilir bir yöntemle gönderilip alınmadığını aklımızdan çıkarmamamız gerekir. DNSSEC ve DNSCrypt çok daha yaygın kullanılması gereken protokoller ama maalesef neredeyse hiç kullanılmıyorlar. 

27 Mart 2013 Çarşamba

randomart akılda kolay mı tutuluyor?

Uzaktaki bilgisayarlarımızda oturum açmak için ssh'ı neredeyse tek alternatif olarak kullanıyoruz. Verileri şifreleyip gönderip almak hepimiz için çok önemli olduğundan ilk bağlantının ardından bağlanacağımız tarafı güvenilen bilgisayarlar arasına ekleyerek her sefer aynı makineye bağlandığımızdan da emin oluyoruz. Hedef bilgisayarın kimliğinde bir değişiklik olması durumunda istemcimiz bizi uyarıyor.

Peki ilk bağlantıyı nasıl yapıyoruz? Yani hedef makinenin gerçekten ulaşmak istediğimiz makine olduğuna nasıl emin oluyoruz? Bunun için hedef makinenin imzasının parmak izini bilmemiz gerekiyor. Aşağıda bir örneği olan bu imzalar çok uzun olduklarından akılda tutulur şeyler değiller. Bağlantıyı hep aynı bilgisayardan yapsak bir sefer imzanın parmak izini kontrol etmek kafi ama arada bir farklı makinelerden de bağlantı yapacaksak bunların çıktısını alıp yanımızda taşımamız gerekiyor genelikle.

Bu parmak izlerini aklımızda tutmak yerine 10 yıldan daha eski bir yöntem olan randomart da kullanmak mümkün. Randomart ile aynen parmakizinde olduğu gibi açık anahtarın benzersiz bir özeti çıkartıyor. Sonuç bir karakter dizisi değil de bir şekil olduğu için akılda tutması daha kolay. Açık anahtardaki en küçük bir değişiklik hem parmakizinde hem de bir görsel olan randomart'ta büyük bir değişikliğe yol açacağından şekilde bir ='in değiştirilip - olması ve bunu farkedilmemesi gibi bir durum da mümkün değil.

OpenSSH ile varsayılan olarak açık gelmeyen bu özelliği kullanmak için ssh komutunu -o VisualHostKey=yes parametresiyle kullanabilirsiniz.

Ayaktakımı Arasında Kurosawa

Sorsalar Dostoyevski, Tolstoy, Gorki gibi Rus edebiyatçılarını okuduğumu söylerim ama acaba okuduklarımın ne kadarı bu yazarların yazdıkları...