Günümüzde, şirketlerin siber güvenlik konusunda dikkatli olması ve güvenlik önlemlerini artırması giderek daha önemli hale gelmiştir. Şirketler, hassas verilere erişimi olan kullanıcıların kimlik doğrulama süreçlerini güçlendirmek için farklı yöntemlere başvurmaktadır. YubiKey gibi güvenlik anahtarları ve CyberArk gibi kimlik ve erişim yönetimi çözümleri, şirketlerin güvenlik düzeyini daha da artırmak için bir araya gelebilir. Bu blog yazısında, YubiKey ve CyberArk arasındaki entegrasyonun, şirketlerin SSH erişim güvenliğini artırmada nasıl yardımcı olabileceğini inceleyeceğiz.
SSH (Güvenli Kabuk) protokolü, ağdaki güvenli erişimi sağlamak için yaygın olarak kullanılan bir protokoldür. Birçok şirket, sunuculara SSH üzerinden erişen kullanıcıların kimlik doğrulama süreçlerini güçlendirmek istemektedir. YubiKey, USB portuna takılan bir güvenlik anahtarıdır ve çok faktörlü kimlik doğrulamanın bir formunu sağlar. CyberArk ise kimlik ve erişim yönetimi alanında lider bir çözümdür ve güçlü kimlik doğrulama, erişim denetimi ve şifre yönetimi özelliklerine sahiptir.
YubiKey ve CyberArk arasındaki entegrasyon, şirketlerin SSH erişim güvenliğini artırabilir. İşte bu entegrasyonun bazı faydaları:
Faydaları
- Çok faktörlü kimlik doğrulama: YubiKey, kullanıcıların sadece bir şifre yerine bir şifre ve fiziksel bir güvenlik anahtarı kullanarak kimliklerini doğrulamalarına olanak tanır. CyberArk, YubiKey’i kimlik doğrulama sürecine dahil ederek, kullanıcıların SSH erişimi için birden fazla faktörü kullanmasını sağlar. Bu, kötü niyetli kullanıcıların yetkisiz erişimi engeller ve şirketin güvenliğini artırır.
- Şifre yönetimi: CyberArk, güçlü şifre yönetimi özellikleri sunar. Şirketler, CyberArk ile güvenli bir şekilde şifreleri yönetebilir ve güçlü şifre politikaları uygulayabilir. YubiKey, kullanıcıların şifrelerini güvende tutmak için bir güvenlik anahtarı olarak kullanılabilir ve şirketlerin hassas şifreleri korumak için ek bir güvenlik katmanı ekler.
- Erişim denetimi: Denetim konusunda güçlü bir kontrol mekanizması sağlar. Kullanıcılar, CyberArk ile SSH erişimine yetkilendirilmeden önce belirli izinlere tabi tutulabilir ve ayrıcalık düzeyleri kontrol edilebilir. YubiKey entegrasyonu ile, YubiKey kullanıcıların erişim izinlerini doğrulamak için kullanılabilir ve güçlü bir erişim denetimi politikası uygulanabilir.
- Kullanım kolaylığı: YubiKey, kullanımı kolay ve taşınabilir bir güvenlik anahtarıdır. Kullanıcılar, USB portuna takarak veya kablosuz olarak YubiKey’i kullanabilir ve kimlik doğrulama süreçlerini hızlı ve basit bir şekilde tamamlayabilir. CyberArk entegrasyonu ile, YubiKey kullanıcıların kimlik doğrulama süreçlerine doğal bir şekilde dahil edilir ve kullanıcı deneyimini artırır.
Kurulum & Kullanım
Aşağıdaki talimatlar macOS ve Linux işletim sistemleri için geçerlidir.
Ön koşullar
- PIV uygulaması olan bir YubiKey
- yubico-piv-tool yazılımı
macOS – “brew install yubico-piv-tool” komutu ile kurulum yapılabilir. Nasıl? - OpenSSH
- macOS işletim sistemi için en az 10.13 versiyonu ya da üst sürümü
Prosedürler
Öncelikle YubiKey 9a yuvasında key oluşturmamız gerekiyor.
yubico-piv-tool -s 9a -a generate -o public.pem
Oluşturmuş olduğumuz bu key için self-signed bir sertifika oluşturuyoruz. Aşağıdaki komutu çalıştırdığımızda bizden PIN isteyecektir. Daha önceden PIN set edilmediyse varsayılan olarak “123456” dır.
yubico-piv-tool -a verify-pin -a selfsign-certificate -s 9a -S "/CN=SSH key/" -i public.pem -o cert.pem
Oluşturmuş olduğumuz sertifikayı da YubiKey’de sertifikalar kısmına import ediyoruz.
yubico-piv-tool -a import-certificate -s 9a -i cert.pem
Oluşturulan Public Key’in içeriğini görmek ve kopyalamak için aşağıdaki komutu kullanıyoruz. Burada macOS ve Linux’larda çalıştırılmak üzere 2 farklı komut var.
macOS:
ssh-keygen -D /usr/local/lib/libykcs11.dylib -e
Linux:
ssh-keygen -D /usr/local/lib/libykcs11.so -e
Karşımıza gelen çıktıdan aşağıdaki örnekteki gibi Public key for PIV Authentication ibaresinin sonuna kadar kopyalıyoruz.
ssh-rsaAAAAB3NzaC1 yc2EAAAADAQABAAABAQD f6kf0/5PBxJzY+lCrV6SLbAPybsLBTL9z7KYyyGOFWvEpXYIrtLJyn+VbyTAySOfU1UNE4G
CUPQBhl+ykmSEsqRCBsPHkE8J0Xq0LnkAHC1v1H5nkb5pm1L4ztm/atD7I+6FPD/ltPdElidaYMFYSCHV0gpyJdFz98EL5PBTR×0IuCqC]t7 hihdIqt5iwmdI3grcI9bS+3xY9W+oMYPd4AHA1TLdof3j9zI+JsXN+AJAeSQ1YHLwFo1iktt5UcI88C6DbJHMWed2RXSWwWcLCpC2NnF9Z08a
NBMfSopMQr9ngio0zLo+xiALmY3SVOg3iZ17mTub3h8JlIBoZ Public key for PIV Authentication
Almış olduğumuz Public Key içeriğini CyberArk’ta ilgili kullanıcıya REST API (AuthorizedKey) ile atayabilmekteyiz. Aşağıdaki Powershell scripti veya Python gibi dilleri kullanarak bu işlemi yapabiliriz. Bu sayede YubiKey içindeki Private Key ile CyberArk Vault’ta bulunan kullanıcı Public Key doğrulaması olacak ve kullanıcının PSMP ile hedef sunucuya bağlantısı gerçekleşecektir.
# CyberArk kullanıcısına Public Key'i atayacak yetkili bir kullanıcı Örn: Administrator
$CAUserName = "Administrator"
$SecureString = Read-Host -AsSecureString -Prompt "Sifre"
$Password = ConvertFrom-SecureString $SecureString -AsPlainText
# CyberArk PVWA URL'iniz
$PVWAAddress = "https://CyberArkPVWAUrl.local"
# Public Key hangi CyberArk kullanıcısına atanacak ise $SSHKeyUserName değişkenine yazıyoruz.
$SSHKeyUserName = "serdar.kurt"
# Kopyalamış olduğumuz Public Key içeriğini $SSHKeyValue değişkenine yazıyoruz.
$SSHKeyValue = "ssh-rsaAAAAB3NzaC1 yc2EAAAADAQABAAABAQD f6kf0/5PBxJzY+lCrV6SLbAPybsLBTL9z7KYyyGOFWvEpXYIrtLJyn+VbyTAySOfU1UNE4G CUPQBhl+ykmSEsqRCBsPHkE8J0Xq0LnkAHC1v1H5nkb5pm1L4ztm/atD7I+6FPD/ltPdElidaYMFYSCHV0gpyJdFz98EL5PBTR×0IuCqC]t7 hihdIqt5iwmdI3grcI9bS+3xY9W+oMYPd4AHA1TLdof3j9zI+JsXN+AJAeSQ1YHLwFo1iktt5UcI88C6DbJHMWed2RXSWwWcLCpC2NnF9Z08a NBMfSopMQr9ngio0zLo+xiALmY3SVOg3iZ17mTub3h8JlIBoZ Public key for PIV Authentication"
################################################################################################
# CyberArk Authentication
# Baglanti esnasinda SSL hatasini yoksaymak icin:
################################################################################################
[System.Net.ServicePointManager]::CheckCertificateRevocationList = $false;
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true; };
Add-Type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
[System.Net.ServicePointManager]::CheckCertificateRevocationList = $false;
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true; };
# ----------------- Giris -----------------
$Logon_Body = @"
{
"username":"$CAUserName",
"password":"$Password"
}
"@
$Logon_URI = "$PVWAAddress/PasswordVault/WebServices/auth/Cyberark/CyberArkAuthenticationService.svc/Logon"
$SessionToken = Invoke-RestMethod -Uri $Logon_URI -Body $Logon_Body -Method POST -ContentType "application/json"
$SessionToken = $SessionToken.CyberArkLogonResult
# Belirlenen kullanici icin SSH Key eklenmesi
$AddSSHKeyBody = @"
{
"PublicSSHKey":"$SSHKeyValue"
}
"@
Write-Host $AddSSHKeyBody
$URIAddSSHKey = "$PVWAAddress/PasswordVault/WebServices/PIMServices.svc/Users/$SSHKeyUserName/AuthenticationMethods/SSHKeyAuthentication/AuthorizedKeys"
$AddSSHKeyInvoke = Invoke-RestMethod -Uri $URIAddSSHKey -Body $AddSSHKeyBody -Method POST -ContentType "application/json" -Headers @{Authorization=($SessionToken)}
Write-Host "Chiave Caricata" $AddSSHKeyInvoke.AddUserAuthorizedKeyResult.PublicSSHKey -NoNewline
# ----------------- Cikis -----------------
$Logoff_URI = "$PVWAAddress/PasswordVault/WebServices/auth/Cyberark/CyberArkAuthenticationService.svc/Logoff"
$toNull = Invoke-RestMethod -Uri $Logoff_URI -Method POST -ContentType "application/json" -Headers @{Authorization=($SessionToken)}
CyberArk REST API dokümanı için buraya tıklayabilirsiniz. Bu işlemi postman ile yapmak isterseniz de buraya tıklayabilirsiniz.
Bu işlemi de gerçekleştirdikten sonra geriye CyberArk PSMP proxy sunucusu üzerinden hedef sisteme SSH bağlantı isteği yapmak kalıyor.
# macOS için varsayılan kütüphane yolu "/usr/local/lib/libykcs11.dylib"
ssh -I /usr/local/lib/libykcs11.dylib CyberArkUser@KasadakiAyrıcalıklıHesap@HedefSunucu@PSMPSunucusu
# linux için varsayılan kütüphane yolu "/usr/local/lib/libykcs11.so"
ssh -I /usr/local/lib/libykcs11.so CyberArkUser@KasadakiAyrıcalıklıHesap@HedefSunucu@PSMPSunucusu
# Bağlantı dizisini uzun uzun yazmamak için alias tanımlayabilir bu işlemi daha da kolaylaştırabilirsiniz.
Yapılan işlemlerin özeti aşağıdaki gibidir.