İ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.
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.
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 kullaniciadi@hostname biçiminde yeni bir giriş eklenmelidir.
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.
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