3 Ağustos 2010 Salı

İlk SSH Oturumu Açılışında Fingerprint Kontrolü

SSH, ağ üzerindeki iki bilgisayarın güvenli bir şekilde iletişim kurmasını sağlayan bir iletişim protokolüdür. Aşağıdaki bilgi güvenliğine yönelik hususlar, SSH protokolü tarafından ele alınmaktadır:
  • Oturum açılması esnasında
    • İki tarafın da birbirinin kimliğinden emin olması (birbirlerinin açık anahtarları vasıtasıyla).
    • Oturum açılışında şifre kullanılıyorsa, şifrenin üçüncü taraflar tarafından edinilmesinin önlenmesi.
  • Oturum açıldıktan sonra
    • Transfer edilen verinin üçüncü taraflar tarafından edinilmesinin önlenmesi.
SSH protokolünün sağladığı bu güvenliği boşa çıkarabilecek bir husus, karşı tarafa ilk oturum açma esnasında gerekli güvenlik kontrollerinin yapılmasının ihmal edilmesidir. Bu durum DNS yönlendirmesi veya IP spoofing saldırısı yapılması durumunda bağlanmak istediğimiz sunucu yerine başka bir sunucuya yönlenmemize ve oturum açma bilgilerimizi (kullanıcı adı ve şifre) saldırgan makinaya vermemize yol açabilir.
İlk kez bir SSH oturumu açmaya kalktığımızda SSH istemcimiz bize şu uyarıyı yapar:
user1@host1.x.y:~$ ssh host2.x.y
The authenticity of host 'host2.x.y (10.0.0.1)' can't be established.
RSA key fingerprint is 12:45:1a:b3:81:0d:23:93:35:6a:21:91:ca:24:0b:20.
Are you sure you want to continue connecting (yes/no)?
Burada host1.x.y makinasındaki user1 kullanıcısı host2.x.y makinasına dogru ilk kez bir SSH oturumu açmak istemektedir. Oturum açma isteği aldığında SSH sunucusu, istemci tarafa kendi açık anahtarını ve yine bu açık anahtarın özetinin (fingerprint) kendi gizli anahtarı ile şifrelenmiş halini gönderir. İstemci bu şifrelenmiş özeti sunucunun açık anahtarını kullanarak açar. İstemcinin kendisi de sunucunun açık anahtarını aynı özet alma metoduna (hash algorithm) sokarak özet (fingerprint) üretir. Bu özet ile kendisine ağ üzerinden şifreli olarak gelen özeti karşılaştırır ve eşit olduğu taktirde, bu açık anahtarın karşı tarafa ait olduğundan ve karşı tarafın bu açık anahtara karşılık gelen bir gizli anahtara sahip olduğundan emin olur. Ancak emin olamadığı bir şey vardır: bu açık anahtar gerçekten bağlanmak istediği sunucuya mı ait?
Bu noktada bağlanmaya çalıştığımız kanalın dışında bir kanaldan doğrulama yapmamız gerekmektedir. host2.x.y makinasının konsolundan "root" olarak oturum açarak şu komutu çalıştıralım:
root@host2.x.y:~$ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
2048 12:45:1a:b3:81:0d:23:93:35:6a:21:91:ca:24:0b:20 /etc/ssh/ssh_host_rsa_key.pub (RSA)
Burada gördüğümüz özet (fingerprint) değeri SSH istemcisinin bize sorduğu ile aynı ise, gelen açık anahtarın bağlanmak istediğimiz sunucudan geldiğinden emin olabiliriz. SSH oturumu açarken sorulan soruya "yes" diyerek devam edilirse bu açık anahtar ssh tarafından kaydedilir ve sonraki oturum açma isteklerimizde artık bu soru sorulmaz.

1 yorum:

Devrim Baris Acar dedi ki...

coshtun hocam....