ssh - crypto

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:

bash
root@TryHackMe# ssh 10.10.244.173 The authenticity of host '10.10.244.173 (10.10.244.173)' can't be established. ED25519 key fingerprint is SHA256:lLzhZc7YzRBDchm02qTX0qsLqeeiTCJg5ipOT0E/YM8. This key is not known by any other name. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '10.10.244.173' (ED25519) to the list of known hosts.

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:

bash
root@TryHackMe# ssh-keygen -t ed25519

Bu komutla ed25519 türünde bir anahtar çifti üretirsiniz. Komut çalıştırıldığında, aşağıdaki gibi bir çıktı elde edersiniz:

bash
Generating public/private ed25519 key pair. Enter file in which to save the key (/home/strategos/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/strategos/.ssh/id_ed25519 Your public key has been saved in /home/strategos/.ssh/id_ed25519.pub The key fingerprint is: SHA256:4S4DQvRfp52UuNwg++nTcWlnITEJTbMcCU0N8UYC1do strategos@g5000
  • Bu komutla, özel anahtar /home/strategos/.ssh/id_ed25519 dosyasına, kamusal anahtar ise /home/strategos/.ssh/id_ed25519.pub dosyası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):

bash
strategos@g5000:~/.ssh$ cat id_ed25519.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINqNMqNhpXZGt6T8Q8bOplyTeldfWq3T3RyNJTmTMJq9 strategos@g5000

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):

bash
strategos@g5000:~/.ssh$ cat id_ed25519 -----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW QyNTUxOQAAACDajTKjYaV2Rrek/EPGzqZck3pXX1qt090cjSU5kzCavQAAAJA+E+ajPhPm owAAAAtzc2gtZWQyNTUxOQAAACDajTKjYaV2Rrek/EPGzqZck3pXX1qt090cjSU5kzCavQ AAAEB981T2ngdoNm8gEzRU35bGHofqRMjfo5egxl0/9fap/NqNMqNhpXZGt6T8Q8bOplyT eldfWq3T3RyNJTmTMJq9AAAACm9xYWJAZzUwMDABAgM= -----END OPENSSH PRIVATE KEY-----

Ö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_keys dosyası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-id komutunu kullanabilirsiniz. Bu komut, kamusal anahtarı sunucuya otomatik olarak kopyalar.

Örnek kullanım:

bash
ssh-copy-id user@remote_host

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.