Özet
Kullanıcıların kendi SSH keypairs sağlamak için kimlik doğrulaması sağlamanın yanı sıra, SSH keypairs sanal makinesi (VM) dağıtım sırasında eklenen bazı özelliklerini etkinleştirmek için Microsoft Azure platformu dayanır. Sınırlı bazı senaryolarda, bu Azure platformu Sertifikalar'dan ortak anahtarlar beklenmedik biçimde .ssh/authorized_keys dosyasına eklenemedi, son buldu. Bu senaryolar bulut init kullanarak VM hazırlandı ve kullanıcının seçtiği gibi bir sistem tarafından yönetilen hizmet kimliği sertifikaları kullanan ek Azure özellikleri yalnızca bir durum kapsamına eklenir.
Bu beklenmeyen davranış hazırlama mantığı, belirli işletim sistemlerinin bir değişiklik nedeniyle oluşur. Bunlar, farkında olmadan ortak anahtar. VM oluşturma sırasında ssh yetkili anahtarları dosyaya VM için kullanılabilir olan tüm sertifikaları yükleyin ve bulut init kullanan sistemler
Daha fazla bilgi edinmek için CVE 2019 0816gidin.
Daha fazla bilgi
Senaryo ayrıntıları
"Özet" bölümünde açıklanan bulut init mantığı şu anda Azure görüntüleri için Ubuntu 18.04 ortak Önizleme RHEL 7.4/7.5/7.6 ve CentOS 7.4 bulut init görüntülerin yanı sıra mevcut olduğu bilinmektedir. Ayrıca bu işletim sistemlerini kullanan özel görüntüleri var olabilir. Linux görüntülerden birini sağlama sırasında aşağıdaki özelliklerden birini etkinleştirirseniz, aşağıdakilerden herhangi birini gibi bir .ssh/authorized_keys dosyasında beklenmeyen, ek tuşları görebilirsiniz:
-
Yönetilen kimlik
-
Korumalı ayarlarla uzantıları
-
VM anahtar Vault tuşlarıyla VM dağıtma
Tanımlamak ve varolan VMs sunuculardır.
Belirle
Ek anahtar olup olmadığını denetlemek için eklenecek paylaşmamış herhangi bir ek anahtar eklenip eklenmediğini belirlemek için yetkili tuşları dosyası (VI .ssh/authorized_keys) gözden geçirin.
Bunu el ile kaldırma ssh ortak, tuşları diğer eklenmemiş olabilir için güvenlidir. Bu değil , VM ile birlikte dağıtılan özellikleri etkiler. Ayrıca, kimlik doğrulaması için belirtilen, SSH anahtar çifti etkilemez.
Bilmiyorsanız veya .ssh/authorized_keys dosyasında belirtilen kimlik doğrulama için hangi ortak anahtarlar ayırt edemez, şu adımları izleyin:
-
Şablonlarını dağıtma gözden geçirin:
-
SSH ortak anahtarlar
-
SSH bulut init yapılandırmasında tuşları
-
-
Sudo/root erişimi varsa Al dağıtılan ssh VM içinde oluşturma zamanında anahtarları. Bunu yapmak için şu adımları izleyin:
-
CustomData içinde geçirilen bulut başlangıç yapılandırmasını denetleyin: sudo cat /var/lib/waagent/ovf-env.xml | grep "<ns1:CustomData>"CustomData değeri kullanın ve sonra kullanım base64 kod çözme, dağıtılan ortak anahtarları almak için: echo "<customData value>" | base64 -D
-
Alternatif olarak, kontrol görmek için örnek Meta Veri Hizmeti'nı (IMDS) ssh geçirildi ortak anahtar ssh VM oluşturma, ortak anahtar özelliği: curl -H Metadata:true "http://169.254.169.254/metadata/instance/compute/publicKeys?api-version=2018-04-02&format=json"
-
Yeniden yap
Değil VM dağıtmak istediniz ek sertifikalar belirlediyseniz, bu dosyadan authorized_keys karşılık gelen bir satır silme tarafından kaldırabilirsiniz.
Düzeltme VM bağlanarak etkileşimli olarak çalıştırmak veya özel komut dosyası uzantısı veya KomutÇalıştır arasında birden fazla VMs kullanın.
Ayarları veya yönetilen bir kimlik korunan uzantıları kullanılarak dağıtılan VM'ler
Ortak anahtarlar VM uzantıları ile dağıtılan veya kimlik yönetilen sertifikalarını kaldırmak için aşağıdaki komut dosyasını kullanın. Bu VM dağıtıldığında veya VM anahtar Vault tuşları ile dağıttıysanız belirtilmiş Kaldır tuşları değil olur.
Önemli
Bu komut dosyasını çalıştırmadan önce authorized_keys dosyayı yedeklemenizi öneririz.
#!/bin/bash
set -e
# /var/lib/waagent has *.crt files that include the crt files corresponding to
# the user provided public keys and one additional .crt file from MSI.
# This script converts the content of the .crt file into the ssh public key and
# remove it from the authorized_keys file
readarray -t CRT_FILES < <(grep -l -E "(Microsoft.ManagedIdentity|Windows Azure)" /var/lib/waagent/*.crt)
for ((i=0; i < ${#CRT_FILES[@]}; i++))
do
PUBKEY=$(openssl x509 -in "${CRT_FILES[$i]}" -pubkey -noout | ssh-keygen -f /dev/stdin -i -m PKCS8)
sed -i -e "\@$PUBKEY@d" $HOME/.ssh/authorized_keys
Done
Komut çalıştırıldıktan sonra yalnızca bilinen ortak anahtarlar var emin olmak için ssh/authorized_keys dosyasını denetleyin.
Anahtar Vault sırlarını ile dağıtılan VM'ler
Anahtar Vault tuşları ile dağıtıldığında anahtarı eklenmiştir olup olmadığını belirlemek için şu adımları izleyin:
-
VM kullanarak dağıtılan Vault anahtar sertifikasının adını almak, dağıtım kodu Az CLI veya ARM şablonlarını gözden geçirin veya bu Az CLI çalıştırın: az vm show --resource-group <resourceGroupName> --name <vmName> | grep certificateUrlSertifika adı yanıt gösterir: "certificateUrl": "https://<keyVaultname>.vault.azure.net/secrets/<certName>/xxxxxxxxxxxxx"
-
Sertifika yükleyin: az keyvault certificate download --vault-name <keyVaultName> --name <certName> --encoding PEM --file public.pem
-
Genel anahtar ayıklamak: openssl x509 -in public.pm -pubkey -noout | ssh-keygen -f /dev/stdin -i -m PKCS8
-
Ssh/authorized_keys dosyasındaki kalan sertifikalar için önceki adımı çıktısı karşılaştırın. vi .ssh/authorized_keys file
Çözüm
Azure Market görüntüleri
Düzeltmeler için tanımlanan Azure görüntülerde bulut init uygulandı:
-
Canonical:UbuntuServer:18.04-LTS:18.04.201902190
-
Canonical:UbuntuServer:18.10-DAILY:18.10.201903200
-
RedHat:RHEL:7-RAW-CI:7.6.2019030421
-
OpenLogic:CentOS-CI:7-CI:7.6.20190306
Özel görüntüleri
Bulut-init bilinen işletim sistemleri tarafından sağlanan özel görüntüleri kullanıyorsanız, kaynak özel görüntünüzü güncelleştirmeniz gerekecektir.
Ubuntu 18.04 görüntüleri
Kaynak özel görüntüyü güncelleştirmek için aşağıdaki değişiklikleri yapmanız gerekir:
-
Aşağıdaki dosyasını düzenleyin: /etc/cloud/cloud.cfg.d/90-Azure.cfg
-
Dosyanın sonuna aşağıdaki kodu ekleyin.
Önemli
Kod, boşluklar dahil gösterildiği gibi tam olarak eklenmelidir.
datasource:
Azure:
agent_command: [service, walinuxagent, start]
RHEL 7.4/7.5/7.6 ve CentOS 7.6 görüntüleri
RHEL/CentOS görüntüleri aşağıdaki adımları kullanarak (veya benzer bir yöntem) önceden oluşturduysanız, VMs oluşturduğunuz kaynak görüntü güncelleştirmeniz gerekir. Varolan kaynak VM görüntü yapılandırmanıza eklemek için gereken ek adımlar şunlardır:
Adım 1
Aşağıdaki dosyasını düzenleyin:
/etc/cloud/cloud.cfg.d/91-azure_datasource.cfg
Önemli
Kod, boşluklar dahil gösterildiği gibi tam olarak eklenmelidir.
Dosyanın sonuna aşağıdaki satırları ekleyin:
datasource:
Azure:
agent_command: [systemctl, start, waagent, --no-block]
Adım 2
Aracısı yapılandırmasını aşağıdaki şekilde güncelleştirin:
cp /lib/systemd/system/waagent.service /etc/systemd/system/waagent.service
sed -i 's/After=network-online.target/WantedBy=cloud-init.service\\nAfter=network.service systemd-networkd-wait-online.service/g' /etc/systemd/system/waagent.service
systemctl daemon-reload
Bulut init paketleri
Bir düzeltme içeren tüm bulut init güncelleştirilmesi sürecinde paketlerdir. Microsoft bu sorunu araştırmaktadır ve daha fazla bilgi kullanıma hazır olduğunda bu makalede yayımlayacaktır.
Sık sorulan sorular
S1: Microsoft access benim VM kazanmıştır?
A1: Kimlikleri yönetmek için kullanılan şifreleme anahtarları ve uzantıları Microsoft çalışanları tarafından erişim için tasarlanmamıştır. İşlemleri izlemek için oturum ve bu tür erişimi engellemek için bir yerde sahibiz. Güvenlik önlemi olarak, biz müşteri anahtar açamayacağı erişilen emin olmak için tüm günlükleri gözden geçiriyorsunuz. VM veya VMSS bir dağıtım içinde başvurulan anahtar Vault içinde depolanan sertifikaları için Microsoft çalışanları için sırlarını herhangi erişim hakkınız yok.
S2: tüm bulut init dağıtılan OSs ve etkilenen sürümleri var?
A2: No Biz bu yabancı anahtar sorun yalnızca tanımlanan işletim sistemlerinde ortaya gördünüz. Biz Ubuntu eski sürümlerini oluşturabiliyor görmemiş. Bu sistemlerin ortak anahtarlarını ayarlamak için farklı bir mekanizma kullanın çünkü.
Q3: düzeltme Linux dağıtımları için etkilenen bulut init paketleri dahil mi?
A3: Düzeltmeler etkilenen sürümleri için paketler ekleme çalışıyoruz ve bu iş tamamlandığında, biz Bu makale güncelleştirilecektir.
S4: Microsoft etkilenen tüm VMs otomatik olarak güncelleştirecek mi?
A4: No Microsoft önceden hazırlanan VMs içeriğini değiştirmez.
S5: Bizim güvenlik ilkeleri bana authorized_keys gereksiz içerikle Linux VM çalışmasını engeller. Bu konuda bugün ne yapabilirim?
A5: Soruna neden olan satırı dosyadan authorized_keys güvenle kaldırabilirsiniz. Bu, oluşturduğunuz SSH anahtar ve denetim veya yönetilen kimlik etkilemez. Bunu el ile veya etkilenen tüm Donanma arasında özel bir komut dosyası veya özel komut çalıştırarak yapabilirsiniz.