İki Faktörlü Kimlik Doğrulama (2FA) ile SSH Güvenliği

Bir önceki yazımda OpenSSH hardening yapılandırması ile SSH oturumlarını nasıl güvence altına alacağımızdan bahsetmiştim. Bu yazımda ise Google Authenticator uygulaması ile iki faktörlü kimlik doğrulamasını (2FA) da yapıya dahil ederek SSH oturumlarının güvenliğini daha da yüksek seviyeye çekiyor olacağız.

Normal şartlarda SSH (22/TCP) portundan yapmış olduğumuz erişimlerde, SSH yapabilme yetkisine sahip kullanıcı ve bu kullanıcıya ait şifre ile hedef sistem üzerinde oturum açabiliyoruz. Lakin şifrenin bir şekilde ele geçirilmiş olması durumunda başımıza neler geleceğini tahmin bile edemeyiz. Bu noktada ikinci bir doğrulama sistemi olarak Google Authenticator uygulmasının mobil cihazımızda üretmiş olduğu OTP’yi (One Time Password) kullanarak şifremiz bir şekilde ele geçirilmiş olsa dahi kötü niyetli kişileri sistemimizden uzak tutacağız.

 

Örnek Senaryo

Aşağıda görüleceği üzere root hesabımla hedef sisteme SSH yaparken, root kullanıcısının şifresni giriyorum. Ardından sistem benden  Verification  kodunu girmemi istiyor. Cep telefonumdaki Google Authenticator uygulamasını kullanarak üretmiş olduğum OTP’yi girdikten sonra diğer resimde görüleceği üzere sistemde başarılı bir şekilde oturum açabiliyorum.

SSH İki Faktörlü Kimlik Doğrulama 1

SSH İki Faktörlü Kimlik Doğrulama 1

 

SSH İki Faktörlü Kimlik Doğrulama 2

SSH İki Faktörlü Kimlik Doğrulama 2

 

 

Başlamadan Önce

Aşağıdaki adımlar Ubuntu 20.04 üzerinde yapılmıştır büyük bir ihtimal ile Debian’da da sorun çıkarmayacaktır.

  • SSH bağlantısı yapılacak Ubuntu 20.04 işletim sistemi ve
  • Google Authenticator veya Authy gibi kimlik doğrulama uygulaması olan bir akıllı telefona veya başka bir istemci cihazına ihtiyacınız olacak.
  • İşletim sisteminin güncel ve sistem saatinin doğru olması gerekmektedir.
sudo apt-get update && sudo apt-get upgrade

 

 

Google Authenticator’ı Yükleyin

Bu bölümde, hem Ubuntu 20.04 varsayılan deposunda bulunan Google Authenticator paketini yükleyeceğiz. Bu yazılım, belirli bir süre sonra geçerliliğini kaybeden tek kullanımlık şifreler oluşturmak için sunucunuzda anahtarlar oluşturacak ve bu anahtarlar daha sonra bir istemci cihazındaki bir uygulama ile eşleştirilecektir (genellikle akıllı telefon)

Google Authenticator’ı yüklemek için:

sudo apt-get install libpam-google-authenticator

 

Her ne kadar Google Authenticator paketini kullanıyor olsak da, ürettiği anahtarlar diğer kimlik doğrulama uygulamalarıyla da uyumludur.

 

Uyarı!
Kimlik doğrulayıcı uygulamanıza şifreyi ekleyeceğiniz yer burası olduğundan, telefonunuzun veya mobil cihazınızın hazır olduğundan emin olun. Bir kimlik doğrulayıcı uygulaması indirmediyseniz, devam etmeden akıllı cihazınıza Google Authenticator uygulamasını kurunuz.

 

Google Authenticator’ı Çalıştırın

1. Aşağıdaki komut ile Google Authenticator’ı çalıştırıyoruz. Tavsiyem SSH pencerenizin boyutunu büyütünüz birazdan QR kod geldiğinde problem oluşmasın.

google-authenticator

 

2. Zamana dayalı kimlik doğrulaması kullanmak isteyip istemediğinizi (sayaç tabanlı yerine) belirtmenizi isteyen bir istem görünecektir. Komut istemine y girerek “evet” i seçin.

 

3. Seçim yaptıktan sonra terminalinizde aşağıdaki gibi bir QR kodu görmelisiniz. Telefonunuzda veya mobil cihazınızda Google Authenticator uygulamasını kullanarak QR kodu taratın. Kimlik doğrulayıcı uygulamanıza [email protected] biçiminde yeni bir giriş eklenmelidir.

Google Authenticator 1

Google Authenticator 1

 

Ayrıca QR kodunun altında “secret key” göreceksiniz. Hesabınızı eklemek için QR kodunu taratmak yerine bunu uygulamaya manuel olarak da girebilirsiniz.

Emergency scratch kodlarınızı güvenli bir yere kaydedin. Cihazınızı kaybederseniz bu kodlar kimlik doğrulama için kullanılabilir, ancak her kodun yalnızca bir kez geçerli olduğunu unutmayın.

 

4.  Aşağıdaki soruya “Y” ile onay veriyoruz bu işlemi hangi kullanıcı ile yapıyorsanız ilgili kullanıcının home dizininde kimlik doğrulama için yapılandırma dosyası oluşturacaktır. Ben root kullanıcısını kullandığım için ilgili dosyayı /root dizini altında gizli dosya olarak oluşturdu.

Do you want me to update your "/root/.google_authenticator" file (y/n)

 

 

5. Bu, token’nınızı gerçek bir tek kullanımlık şifre yapar ve aynı şifrenin iki kez kullanılmasını engeller. Örneğin, bunu “hayır” olarak ayarlarsanız ve oturum açarken parolanız ele geçirilirse, birileri süre dolmadan sunucunuza giriş yapabilir. “Y” yanıtını şiddetle tavsiye ediyorum.

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n)

 

6. Bu ayar, cihazlar arasında zaman senkronizasyonu sorunlarını hesaba katar. Telefonunuzun veya cihazınızın düzgün bir şekilde senkronize olacağına inanıyorsanız, “N” olarak seçim yapabilirsiniz:

By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n)

 

7. Bu ayar, saldırganların token’ınızı tahmin etmek için brute force atağını engeller. Zaman sınırı çoğu saldırıyı önlemek için yeterli olsa da, bu bir saldırganın parolanızı tahmin etmek için 30 saniyede yalnızca üç şansı olmasını sağlar. “Y” yanıtını vermenizi öneririm.

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n)

 

Anahtarınızı oluşturmayı ve istemcinize eklemeyi bitirdiniz, ancak bu ayarların yürürlüğe girmesi için bazı ek yapılandırmalar gerekiyor. Tüm SSH oturum açma denemeleri için iki faktörlü kimlik doğrulamanın aktif edilmesi için bazı yapılandırmalar yapmamız gerekmektedir.

 

Kimlik Doğrulama Ayarlarını Yapılandırın

TOTP kimlik doğrulama yöntemleri PAM modülünü kullanır. PAM, düşük seviyeli kimlik doğrulama mekanizmalarını farklı uygulamalar ve servisler için yapılandırılabilen modüllere entegre eder. Ek yazılım (yani, Linux dağıtımında yerleşik olmayan programlar) kullandığınız için, kullanıcıların kimliğini doğru şekilde doğrulamak için PAM’ı yapılandırmanız gerekecektir.

 

Uyarı!
Kimlik doğrulama ayarlarınızı yapılandırırken başka bir terminal oturumunun her ihtimale karşın açık olmasını şiddetle tavsiye ediyorum. Bu şekilde, kimlik doğrulamayı test etmek için bağlantınız kesilirse ve bir şey doğru şekilde yapılandırılmazsa diğer pencereden devam edebilirsiniz.

 

1.  /etc/pam.d/sshd  dosyasını sudo ayrıcalıkları ile açın ve aşağıdaki iki satırı dosyanın en sonuna yapıştırın.

auth    required      pam_unix.so     no_warn try_first_pass
auth    required      pam_google_authenticator.so

İlk satır, PAM’a diğer yöntemlerden önce normal bir Unix kullanıcı parolası ile kimlik doğrulaması yapmasını söyler. İkinci satır ise daha önce kurduğumuz TOTP yazılımı olan ek bir kimlik doğrulama yöntemini belirtir.

 

2.  /etc/ssh/sshd_config  dosyasını aşağıdaki satırları içerecek şekilde düzenleyin ve iki faktörlü kimlik doğrulamayı etkinleştirmek istediğiniz herhangi bir sistem kullanıcısını yazın. Ben root kullanıcımı yazıyorum.

# Bu iki satır dosyada zaten mevcuttur ilgili parametre karşılığı aşağıdaki gibi olmalıdır.
UsePAM yes
ChallengeResponseAuthentication yes

# Bu satırlar dosyanın sonuna eklenmelidir.
Match User root
    AuthenticationMethods keyboard-interactive

 

Birden fazla kullanıcı için TOTP’ler oluşturduysanız ve hepsinin iki faktörlü kimlik doğrulamasını kullanmasını istiyorsanız, yukarıda gösterilen komut biçimini çoğaltarak her kullanıcı yukarıdaki gibi kod blokları oluşturmalısınız.

 

3. Bu değişiklikleri uygulamak için SSH servisini yeniden başlatmamız gerekmektedir.

sudo systemctl restart ssh

 

Google Authenticator


Abone ol
Bildir
guest
0 Yorum
Satır İçi Geri Bildirimler
Tüm yorumları görüntüle