Sunucuyu Kimlik Doğrulama (Authenticating the Server)
Eğer daha önce bir SSH istemcisi kullandıysanız, terminal çıktısında aşağıdaki gibi bir onay istemiyle karşılaşmışsınızdır:
Bu uyarı, SSH istemcisinin sunucunun gizli anahtar parmak izini tanımadığını ve bu nedenle bağlantıyı onaylamadan önce kullanıcının sunucunun kimliğini doğrulamasını istediğini gösteriyor.
-
Gizli anahtar parmak izi (fingerprint): Sunucunun kamusal anahtarından hesaplanan bir değer olup, sunucunun kimliğini doğrulamak için kullanılır. Eğer istemci bu parmak izini daha önce görmemişse, kullanıcıya bunu kontrol etmesi ve bağlantıyı onaylaması istenir.
-
Bu uyarı, Man-in-the-Middle (MITM) saldırısı olasılığına karşı bir uyarıdır. MITM saldırısında kötü niyetli bir kişi, bağlantıyı kesip kendi sunucusunu gerçek sunucu gibi gösterebilir.
Eğer doğru sunucuya bağlandığınızdan emin değilseniz, bağlantıya devam etmemeniz gerekir. Ancak, evet diyerek devam ettiğinizde, SSH istemcisi bu parmak izini kaydeder ve bir sonraki bağlantılarda bu doğrulama işlemi yapılmaz.
Sunucuya Kimlik Doğrulama Uyarısı
Bu tip bir uyarı normalde güvenli bir bağlantıyı sağlamak için gereklidir. SSH istemcisi, bir sunucunun kimliğini doğrulamak için önceki bağlantılarda kaydedilen anahtar parmak izlerini kullanır. Bu sayede bağlantı güvenli bir şekilde yapılır. Eğer parmak izi değişirse, SSH istemcisi tekrar uyarı verir, çünkü bu, bir saldırıyı işaret ediyor olabilir.
İstemciyi Kimlik Doğrulama (Authenticating the Client)
Sunucuya güvenli bir şekilde bağlandıktan sonra, istemcinin kimliği doğrulanmalıdır. Genellikle SSH, kullanıcı adı ve şifreyle kimlik doğrulaması yapar. Ancak, şifrelerin güvenlik riskleri taşıması nedeniyle, bu yöntem çoğu zaman önerilmez.
Şifrelerin zayıf olması, açık olması veya yeniden kullanılabilir olması gibi çeşitli güvenlik problemleri vardır. Bu yüzden daha güvenli bir yöntem olarak anahtar tabanlı kimlik doğrulaması tercih edilir.
Bu tür kimlik doğrulaması, istemcinin özel anahtarı ile sunucuyu doğrulamasını sağlar. Anahtar tabanlı kimlik doğrulamasının avantajı şudur: Bir kişinin özel anahtarını ele geçirmesi durumunda bile, bu anahtar şifresizse, kişinin o sunucuya erişim sağlaması mümkün olur. Bu yüzden anahtarların şifreli olması çok önemlidir.
Anahtar Çifti Üretme (Generating the Key Pair)
Anahtar tabanlı kimlik doğrulaması için bir anahtar çifti oluşturulur. ssh-keygen komutu bu işlemi gerçekleştirmek için yaygın olarak kullanılır. Bu komut, kullanılan anahtar algoritmalarına bağlı olarak farklı türde anahtarlar oluşturabilir. En yaygın anahtar türleri şunlardır:
-
RSA: Yaygın olarak kullanılan bir şifreleme algoritmasıdır.
-
ED25519: Daha güvenli ve verimli bir algoritmadır.
-
ECDSA: Eliptik eğri şifrelemesi kullanan bir algoritmadır.
Örneğin, ed25519 türünde bir anahtar çifti oluşturmak için şu komutu kullanabilirsiniz:
Bu komutla ed25519 türünde bir anahtar çifti üretirsiniz. Komut çalıştırıldığında, aşağıdaki gibi bir çıktı elde edersiniz:
-
Bu komutla, özel anahtar
/home/strategos/.ssh/id_ed25519dosyasına, kamusal anahtar ise/home/strategos/.ssh/id_ed25519.pubdosyasına kaydedilir. -
Passphrase: Bu, özel anahtarın şifreli olarak saklanmasını sağlar. Eğer bir passphrase girilirse, özel anahtara erişmek için bu şifre gerekecektir.
Anahtarları Görüntülemek
Anahtar çiftlerini oluşturduktan sonra, aşağıdaki gibi her iki anahtarı da görüntüleyebilirsiniz.
Kamusal anahtar (id_ed25519.pub):
Bu kamusal anahtar, sunucuda authorized_keys dosyasına eklenmelidir. Bu dosya, sunucuya kimlik doğrulaması yapılacak anahtarların listesini tutar.
Özel anahtar (id_ed25519):
Özel anahtar, sadece özel bir bilgisayarda tutulmalı ve asla paylaşılmamalıdır. Eğer bu anahtar paylaşılırsa, diğer kişilerin sunucuya erişim sağlamasına izin vermiş olursunuz. Bu nedenle, özel anahtarlarınızı sadece gizli tutmak önemlidir.
SSH Anahtarlarının Güvenliği
Özel anahtarınızı şifrelemeden paylaşmayın. Bu, bir şifre gibi işlev görür ve sunuculara giriş yapmanıza olanak tanır. Bir SSH anahtarını paylaşmak, bu anahtarın başkaları tarafından kullanılmasına yol açabilir.
Eğer özel anahtar şifreliyse, anahtara yalnızca şifreyi bilerek erişilebilir. Şifre, sunucuya gönderilmez; sadece anahtarın şifrelenmiş kısmını açmak için kullanılır.
Anahtarın şifresini kırmak, örneğin John the Ripper gibi araçlarla mümkündür. Bu yüzden, karmaşık bir şifre seçmek ve özel anahtarı gizli tutmak çok önemlidir.
Anahtarların Yetkilendirilmesi ve Kullanımı
-
SSH anahtarlarını
authorized_keysdosyasına eklemek gerekir. Bu dosya, sunucuda hangi anahtarların güvenli bir şekilde bağlanmasına izin verildiğini gösterir. Anahtarınız bu dosyada yer almazsa, sunucuya bağlanamazsınız. -
Anahtarları doğru bir şekilde paylaşmak için
ssh-copy-idkomutunu kullanabilirsiniz. Bu komut, kamusal anahtarı sunucuya otomatik olarak kopyalar.
Örnek kullanım:
Bu komut, kamusal anahtarınızı uzaktaki ~/.ssh/authorized_keys dosyasına ekler ve anahtar tabanlı kimlik doğrulamasını sağlar.
SSH Anahtarlarıyla “Daha İyi Bir Shell” Almak
CTF'lerde veya penetrasyon testlerinde, SSH anahtarları, ters bağlantılar (reverse shell) gibi durumlarda çok kullanışlı olabilir. Anahtarları sunucuda bırakmak, sizi geri erişim sağlamada rahatlatabilir. Bu durum, ters shell'den (reverse shell) farklı olarak, daha güvenli ve kararlı bir bağlantı sağlar.
Sonuç olarak:
-
Sunucuyu kimlik doğrulama: Sunucunun parmak izini doğrulamak, güvenli bağlantı için gereklidir.
-
İstemci kimlik doğrulama: Anahtar tabanlı kimlik doğrulaması, şifrelerin güvenlik risklerini ortadan kaldırır.
-
Anahtarları güvenli tutma: Özel anahtarınızı paylaşmayın ve şifreli tutun.